神经网络参数初始化方法

神经网络训练的过程就是对网络权重不断学习更新的过程,网络初始权重对网络的训练非常重要。不合适的初始化方法可能会导致网络参数传播过程中产生梯度消失、梯度爆炸等现象。

常用的初始化方法有随机初始化、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 w 1 ​,b 1 ​,w 2 ​,b 2 ​,w 3 ​,b 3 ​,w 4 ​,b 4 ​,激活函数为sigmoid,σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1+e^{-x}}σ(x )=1 +e −x 1 ​。

y i = σ ( z i ) y_i = \sigma(z_i)y i ​=σ(z i ​)

z i = w i y i − 1 + b i z_i = w_i y_{i-1} + b_i z i ​=w i ​y i −1 ​+b i ​

sigmoid函数求导数σ ′ = σ ( 1 − σ ) \sigma^{‘} = \sigma (1-\sigma)σ′=σ(1 −σ)后,峰值为0.25;损失函数C对b 1 b_1 b 1 ​的导数为

∂ 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 ∂b 1 ​∂C ​=∂y 4 ​∂C ​∂z 4 ​∂y 4 ​​∂y 3 ​∂z 4 ​​∂z 3 ​∂y 3 ​​∂y 2 ​∂z 3 ​​∂z 2 ​∂y 2 ​​∂y 1 ​∂z 2 ​​∂z 1 ​∂y 1 ​​∂b 1 ​∂z 1 ​​=∂y 4 ​∂C ​σ(z 4 ​)′w 4 ​σ(z 3 ​)′w 3 ​σ(z 2 ​)′w 2 ​σ(z 1 ​)′1

sigmoid 函数对于大到10的值,sigmoid的值几乎是1,对于小到-10的值,sigmoid的值几乎为0。意味着如果权值矩阵被初始化成过大的值,权重w i w_i w i ​连乘会出现梯度爆炸的现象,反之,当权值矩阵被初始化成太小的值,可能会出现梯度消失

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 [−n i n ​+n o u t ​​6 ​​,n i n ​+n o u t ​​6 ​​]

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 [m e a n =0 ,s t d =n i n ​+n o u t ​​2 ​​]

适用于激活函数为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 [−2 n i n ​+n o u t ​​6 ​​,2 n i n ​+n o u t ​​6 ​​]

He正态分布

$$w \sim N[mean=0, std=\frac{\sqrt{2}}{\sqrt{n_{in}}}]$$

参考

1、参数初始化

2、网络权重初始化方法总结

欢迎关注微信公众号(算法工程师面试那些事儿),本公众号聚焦于算法工程师面试,期待和大家一起刷leecode,刷机器学习、深度学习面试题等,共勉~

神经网络参数初始化方法

Original: https://blog.csdn.net/qq_40006058/article/details/122809231
Author: 十三吖
Title: 神经网络参数初始化方法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/690846/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球