【深度学习】初始化参数

TensorFlow的过程中初始化参数的时候要注意哪些?

感觉这道题就是问“神经网络参数初始化需要注意哪些问题”

观察sigmoid的函数

其输出值在0-1之间,而x过大时,激活函数会变得很平缓,也就是斜率很小,这样不利于学习新的权重。

观察上面计算更新权重值的表达式,权重的更新取决于激活函数的梯度,梯度太小限制神经网络的学习能力,也就是所谓的饱和神经网络。

因此我们不应该让输入值太大;而计算机处理太小的信号时,可能会丧失精度。因此也不能过小。

好的建议是调整输入值在0.0-1.0之间,而输入0会使输出也是0(oj),权重更新值也会变为0(上面那个复杂的式子),所以也要避开0;因此最好加上一个小的偏移。

因为我们的激活函数不能产生大于1的值,因此将训练目标值设的比较大是不合理的。而且逻辑函数的输出也无法达到1,只能是接近1;如果目标设置的过大,训练网络将会驱使更大的权重,以获得越来越大的输出,这将使得网络饱和。因此,我们应当调整输出值符合激活函数的输出范围,一般在0.0-1.0,由于0.0和1.0也不能,也可以使用0.01-0.99.

除了输入输出,同样的道理也适用于初始权重的设置。同样要避免大的权重使得网络饱和,可以用-1.0~1.0之间随机均匀的选择。另外,如果很多信号进入一个节点,并且这些信号已经表现的不错了,那么对这些信号进行组合并应用激活函数时,应保持这些表现良好的信号。可以在一个节点传入链接数量平方根倒数的大致范围内随机采样,初始化权重。

直观上理解,如果一个节点传入的链接越多,就有越多的信号被叠加在一起,因此如果链接越多,而减小链接的范围是有意义的。实际上就是从均值为0、保准方差等于节点传入链接数量的平方根倒数的正态分布中进行采样。

另外,不管你怎么做,禁止将权重设置为相同的恒定值,特别是不要设置为0。这样,网络中每个节点都将收到相同的信号值,输出也是一样的,反向传播误差时误差也是平均分的,这将导致同等量的权重更新,又会出现相同的权重。而0的话,输入信号归0,取决于输入信号的权重更新函数也因此为0,完全丧失更新权重的能力。

参考:

一篇读完make your own neuralnetwork

猜你喜欢

转载自blog.csdn.net/weixin_31866177/article/details/89020600
今日推荐