什么样的初始化是好的?

 

权重初始化Pytorch 权重初始化标准差_权重

 


正向传播时,状态值的方差保持不变;反向传播时,关于激活值的梯度的方差保持不变的好处是什么?

防止出现极端值导致梯度消失或梯度爆炸

 

1. 把权重初始化为0

从DNN的反向传播推导中,可以看到,当前层参数的梯度有后面一层权重的乘子项,也就是说权重初始化为0,会使梯度为0,权重得不到更新

 

2. 把权重初始化为小的随机数

如从均值为0,标准差是1的高斯分布中采样样,这样,参数的每个维度来自一个多维的高斯分布。

需要注意的是参数初始值不能取得太小,因为小的参数在反向传播时会导致小的梯度,对于深度网络来说,也会产生梯度弥散问题,降低参数的收敛速度。

缺点:
一个神经元输出的方差会随着输入神经元数量的增多而变大。对于有n个输入单元的神经元来说,考虑χ2分布,每个输入的方差是1/n时,总的方差是1。

 

3. 标准初始化

权重参数初始化从区间均匀随机取值。即从(-1/√d,1/√d)均匀分布中生成当前神经元的权重,其中d为每个神经元的输入数量。

为什么要除以d?
这样可以确保神经元的输出有相同的分布,提高训练的收敛速度。

优点:
隐层的状态的均值为0,方差为常量1/3,和网络的层数无关,这意味着对于sigmoid函数来说,自变量落在有梯度的范围内。

 

4. Xavier初始化

如果前一层的节点数为n,则初始值使用如下均匀分布初始化:

权重初始化Pytorch 权重初始化标准差_初始化_02

 

Xavier初始值是以激活函数是线性函数为前提而推导出来的。因为sigmoid函数和 tanh函数左右对称,且中央附近可以视作线性函数,所以适合使用Xavier初始值。

权重初始化Pytorch 权重初始化标准差_权重初始化Pytorch_03

权重初始化Pytorch 权重初始化标准差_方差_04

 

 

5. He初始值

权重初始化Pytorch 权重初始化标准差_初始化_05

 

 

6. 偏置初始化

通常偏置项初始化为0,或比较小的数,如:0.01。

 

7. fan_in与fan_out

专门针对卷积神经网络的初始化方法