参考资料:
4种权重 的初始化方法
1. 全部 初始化为0: 不可行
如果全部权重初始化为0, 神经网络计算出来的输出值都一样,那么反向传播算法计算出来的梯度值也一样,参数更新值也一样 。更一般地说,如果权重初始化为同一个值,网络就是对称的。
那么每一层的所有神经元参数都相等, 它们学的东西是一样的. 等同于每一层只有一个神经元.
2. 初始化为小的随机数
和
为
的维度. 这打破了对称性, 每一层的神经元可以学到不同的东西, 可行, 但还不够好.
注意: 并不是数字越小就会表现的越好。比如,如果一个神经网络层的权重非常小,那么在反向传播算法就会计算出很小的梯度(因为正向传播的时候每一层activations的均值和方差都会接近0, 导致梯度也约为0), 这会导致梯度消失的问题.
权重太大也会有问题, 那就是所有activations都接近-1或者1, 陷入激活函数的饱和区, 梯度消失.
3. 用1/sqrt(n)校准方差
随机初始化神经元的输出的分布有一个随输入量增加而增加的方差。结果证明,我们可以通过将其权重向量按其输入的平方根(即输入的数量)进行缩放,从而将每个神经元的输出的方差大致相同.
注: 这里只是初始化某一层的n个
4. Xavier初始化
Xavier同时考虑了前向传播和反向传播时不同层之间
和梯度的方差的变化, 保证了两个方向的方差都尽量一致, 解得
应该保持下面范围内的均匀分布: