为什么需要参数初始化策略
目的
为了让神经网络在训练过程中学习到有用的信息,需要参数更新时的梯度不为0。在一般的全连接网络中,参数更新的梯度和反向传播得到的状态梯度以及输入激活值有关。那么参数初始化应该满足以下两个条件:
- 初始化必要条件一:各层激活值不会出现饱和现象(对于sigmoid,tanh);
- 初始化必要条件二:各层激活值不为0。
全零初始化存在的问题
全零初始化方法在前向传播过程中会使得隐层神经元的激活值均未0,在反向过程中根据BP公式,不同维度的参数会得到相同的更新。
需要破坏这种“对称性”。
激活函数输入值的方差
从上述推导可以看出,神经元输出的方差会随着神经元数量的增大而变多。
标准初始化
标准初始化方法通过对方差乘以一个系数确保每层神经元的输出具有相同的方差,提高训练收敛速度。
标准均匀初始化方法保证了激活函数的输入值的均值为0,方差为常量 1 3 \frac{1}{3} 31,和网络的层数和神经元的数量无关。对于sigmoid激活函数来说,可以确保自变量处于有梯度的范围内。
但是注意对于 s i g m o i d sigmoid sigmoid函数,其输出是大于零的,这违反了上面推导中关于 E ( x i ) = 0 E(x_i)=0 E(xi)=0的假设。综上,标准初始化方法更适用于 t a n h tanh tanh激活函数。
标准正态初始化方法保证激活函数的输入均值为,方差为1。
对于含有 n i n n_{in} nin个输入和 n o u t n_{out} nout个输出的全连接层,
- standard_normal
W i , j ∼ N ( 0 , 1 n i n ) W_{i,j}\sim N(0,\frac{1}{\sqrt{n_{in}}}) Wi,j∼N(0,nin1) - standard_uniform
W i , j ∼ U ( − 1 n i n , 1 n i n ) W_{i,j}\sim U(-\frac{1}{\sqrt{n_{in}}},\frac{1}{\sqrt{n_{in}}}) Wi,j∼U(−nin