深度神经网络中的梯度问题及解决策略
1. 梯度不稳定问题
在神经网络中,每层输出的方差往往远大于其输入的方差。随着网络的前向传播,方差在每一层不断增加,直到顶层的激活函数达到饱和。以逻辑激活函数为例,其均值为 0.5 而非 0,这使得饱和问题更加严重;而双曲正切函数均值为 0,在深度网络中的表现略好。
当输入值变得很大(正或负)时,逻辑激活函数会饱和于 0 或 1,其导数接近 0。在反向传播时,几乎没有梯度可以在网络中传播,而且仅有的少量梯度在经过顶层时会不断被稀释,导致底层几乎得不到梯度。
2. Glorot 和 He 初始化
为了缓解梯度不稳定问题,Glorot 和 Bengio 提出了一种方法。他们指出,信号需要在两个方向上都能正常流动:正向预测时和反向传播梯度时。为了实现这一点,每层输出的方差应等于其输入的方差,并且梯度在反向流经一层前后应具有相等的方差。
Glorot 和 Bengio 提出了一种折中的初始化策略,即 Xavier 初始化或 Glorot 初始化。每层的连接权重需随机初始化,公式如下:
- 正态分布:均值为 0,方差 $\sigma^2 = \frac{1}{fan_{avg}}$,其中 $fan_{avg} = \frac{fan_{in} + fan_{out}}{2}$。
- 均匀分布:在 $-r$ 和 $+r$ 之间,其中 $r = \sqrt{\frac{3}{fan_{avg}}}$。
如果将公式中的 $fan_{avg}$ 替换为 $fan_{in}$,则得到 Yann LeCun 在 20 世纪 90 年代提出的 LeCun 初始化。当 $fan_{in}
超级会员免费看
订阅专栏 解锁全文
9万+

被折叠的 条评论
为什么被折叠?



