权重初始化的理解和一些参考资料

参考资料:

  1. 神经网络权重初始化问题
  2. 深度学习之参数初始化(一)——Xavier初始化
  3. 深度学习中Xavier初始化

4种权重 W W 的初始化方法

1. 全部 W W 初始化为0: 不可行

如果全部权重初始化为0, 神经网络计算出来的输出值都一样,那么反向传播算法计算出来的梯度值也一样,参数更新值也一样 ( w = w α d w ) (w=w−\alpha ∗ dw) 。更一般地说,如果权重初始化为同一个值,网络就是对称的。

那么每一层的所有神经元参数都相等, 它们学的东西是一样的. 等同于每一层只有一个神经元.

2. 初始化为小的随机数

W = n p . r a n d o m . r a n d n ( D , W ) 0.01 W=np.random.randn(D,W) * 0.01
D D H H W W 的维度. 这打破了对称性, 每一层的神经元可以学到不同的东西, 可行, 但还不够好.

注意: 并不是数字越小就会表现的越好。比如,如果一个神经网络层的权重非常小,那么在反向传播算法就会计算出很小的梯度(因为正向传播的时候每一层activations的均值和方差都会接近0, 导致梯度也约为0), 这会导致梯度消失的问题.

权重太大也会有问题, 那就是所有activations都接近-1或者1, 陷入激活函数的饱和区, 梯度消失.

3. 用1/sqrt(n)校准方差
随机初始化神经元的输出的分布有一个随输入量增加而增加的方差。结果证明,我们可以通过将其权重向量按其输入的平方根(即输入的数量)进行缩放,从而将每个神经元的输出的方差大致相同.
w = n p . r a n d o m . r a n d n ( n ) 1 n w=np.random.randn(n) * \frac{1}{\sqrt{n}} 注: 这里只是初始化某一层的n个 W W

4. Xavier初始化
Xavier同时考虑了前向传播和反向传播时不同层之间 Z Z 和梯度的方差的变化, 保证了两个方向的方差都尽量一致, 解得 W W 应该保持下面范围内的均匀分布: [ 6 n k + n k + 1 , 6 n k + n k + 1 ] [-\sqrt{\frac{6}{n^k+n^{k+1}}}, \sqrt{\frac{6}{n^k+n^{k+1}}}]

猜你喜欢

转载自blog.csdn.net/weixin_42561002/article/details/88185415