神经网络训练的过程就是对网络权重不断学习更新的过程,网络初始权重对网络的训练非常重要。不合适的初始化方法可能会导致网络参数传播过程中产生梯度消失、梯度爆炸等现象。
常用的初始化方法有随机初始化、Xavier初始化、he初始化等
1 零初始化
对于逻辑回归,网络权重是可以初始化为0的;对于深度神经网络,网络权重和偏置是不可以一起初始化为0的,不然会造成每层的网络所有节点输出是一致的,具体分析可以参考神经网络权重为什么不能初始化为0?。
2 随机初始化
随机初始化的时候常常采用高斯或均匀分布初始化网络权重。这种方法相对0初始化要好许多,但是在遇到激活函数为sigmoid / tanh的时候,可能会出现梯度消失和梯度爆炸现象。
以四层网络,参数为 w 1 , b 1 , w 2 , b 2 , w 3 , b 3 , w 4 , b 4 w_1, b_1, w_2, b_2, w_3, b_3, w_4, b_4 w1,b1,w2,b2,w3,b3,w4,b4,激活函数为sigmoid, σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1+e^{-x}} σ(x)=1+e−x1。
y i = σ ( z i ) y_i = \sigma(z_i) yi=σ(zi)
z i = w i y i − 1 + b i z_i = w_i y_{i-1} + b_i zi=wiyi−1+bi
sigmoid函数求导数 σ ′ = σ ( 1 − σ ) \sigma^{'} = \sigma (1-\sigma) σ′=σ(1−σ)后,峰值为0.25;损失函数C对 b 1 b_1 b1的导数为
∂ C ∂ b 1 = ∂ C ∂ y 4 ∂ y 4 ∂ z 4 ∂ z 4 ∂ y 3 ∂ y 3 ∂ z 3 ∂ z 3 ∂ y 2 ∂ y 2 ∂ z 2 ∂ z 2 ∂ y 1 ∂ y 1 ∂ z 1 ∂ z 1 ∂ b 1 = ∂ C ∂ y 4 σ ( z 4 ) ′ w 4 σ ( z 3 ) ′ w 3 σ ( z 2 ) ′ w 2 σ ( z 1 ) ′ 1 \frac{\partial C}{\partial b_1} = \frac{\partial C}{\partial y_4} \frac{\partial y_4}{\partial z_4} \frac{\partial z_4}{\partial y_3} \frac{\partial y_3}{\partial z_3} \frac{\partial z_3}{\partial y_2} \frac{\partial y_2}{\partial z_2} \frac{\partial z_2}{\partial y_1} \frac{\partial y_1}{\partial z_1} \frac{\partial z_1}{\partial b_1} = \frac{\partial C}{\partial y_4} \sigma(z_4)^{'} w_4 \sigma(z_3)^{'} w_3 \sigma(z_2)^{'} w_2 \sigma(z_1)^{'} 1 ∂b1∂C=∂y4∂C∂z4∂y4∂y3∂z4∂z3∂y3∂y2∂z3∂z2∂y2∂y1∂z2∂z1∂y1∂b1∂z1=∂y4∂Cσ(z4)′w4σ(z3)′w3σ(z2)′w2σ(z1)′1
sigmoid 函数对于大到10的值,sigmoid的值几乎是1,对于小到-10的值,sigmoid的值几乎为0。意味着如果权值矩阵被初始化成过大的值,权重 w i w_i wi连乘会出现梯度爆炸的现象,反之,当权值矩阵被初始化成太小的值,可能会出现梯度消失
3 Xavier初始化
Xavier初始化通过保持输入和输出的方差一致(服从相同的分布)避免梯度消失和梯度爆炸问题,使得信号在神经网络中可以传递得更深,在经过多层神经元后保持在合理的范围(不至于太小或太大)。
xavier均匀分布
w ∼ U [ − 6 n i n + n o u t , 6 n i n + n o u t ] w \sim U[-\frac{\sqrt{6}}{\sqrt{n_{in}+n_{out}}},\frac{\sqrt{6}}{\sqrt{n_{in}+n_{out}}}] w∼U[−nin+nout6,nin+nout6]
xavier正态分布
w ∼ N [ m e a n = 0 , s t d = 2 n i n + n o u t ] w \sim N[mean=0, std=\frac{\sqrt{2}}{\sqrt{n_{in}+n_{out}}}] w∼N[mean=0,std=nin+nout2]
适用于激活函数为tanh的深层网络,但不适用于RELU
4 He初始化
He初始化解决的问题:ReLU网络每一层有一半的神经元被激活,另一半为0(x负半轴中是不激活的),所以要保持variance不变,只需要在Xavier的基础上再除以2。
He均匀分布
w ∼ U [ − 6 2 n i n + n o u t , 6 2 n i n + n o u t ] w \sim U[-\frac{\sqrt{6}}{2\sqrt{n_{in}+n_{out}}},\frac{\sqrt{6}}{2\sqrt{n_{in}+n_{out}}}] w∼U[−2nin+nout6,2nin+nout6]
He正态分布
$$w \sim N[mean=0, std=\frac{\sqrt{2}}{\sqrt{n_{in}}}]$$
参考
1、参数初始化
欢迎关注微信公众号(算法工程师面试那些事儿),本公众号聚焦于算法工程师面试,期待和大家一起刷leecode,刷机器学习、深度学习面试题等,共勉~