文章

10 梯度消失与梯度爆炸问题(Vanishing / Exploding Gradients)

10 梯度消失与梯度爆炸问题(Vanishing / Exploding Gradients)

🔍 1. 问题背景

  在训练非常深的神经网络(如 L = 100+ 层)时,会出现以下现象:

  • 梯度爆炸(Exploding Gradients) :梯度值变得极大(甚至趋于无穷),导致参数更新剧烈、训练不稳定。
  • 梯度消失(Vanishing Gradients) :梯度值变得极小(接近 0),导致参数几乎不更新,训练停滞。

这两类问题统称为 “梯度不稳定” ,是早期阻碍深度学习发展的关键瓶颈之一。


📐 2. 直观理解:从线性激活函数出发

  为简化分析,假设:

  • 激活函数为 线性函数:$g(z) = z$
  • 偏置项为零:$b^{[l]} = 0$

  则第 $l$ 层的前向传播可表示为:

\[a^{[l]} = W^{[l]} a^{[l-1]}\]

  递归展开后,最终输出为:

\[\hat{y} = W^{[L]} W^{[L-1]} \cdots W^{[2]} W^{[1]} x\]

  即:

\[\hat{y} = \left( \prod_{l=1}^{L} W^{[l]} \right) x\]

⚡ 3. 梯度爆炸的示例

  假设每一层权重矩阵都略大于单位矩阵,例如:

\[W^{[l]} = \begin{bmatrix} 1.5 & 0 \\ 0 & 1.5 \end{bmatrix} = 1.5 \cdot I\]

  那么:

\[\hat{y} = (1.5)^{L-1} \cdot x\]

  当 $L$ 很大时(如 100 层),$(1.5)^{99}$ 是一个指数级增长的巨大数 → 激活值爆炸

  由于反向传播中梯度也涉及这些权重矩阵的连乘,梯度也会爆炸


📉 4. 梯度消失的示例

  若权重略小于 1,例如:

\[W^{[l]} = 0.5 \cdot I\]

  则:

\[\hat{y} = (0.5)^{L-1} \cdot x\]

  当 $L$ 很大时,$(0.5)^{99} \approx 0$ → 激活值趋近于 0

  同样地,反向传播中的梯度也会指数级衰减至 0梯度消失

即使权重只是略小于 1(如 0.9),经过多层累积后仍会严重衰减。


🔁 5. 对训练的影响

  • 梯度爆炸:参数更新幅度过大,损失函数震荡甚至发散。
  • 梯度消失:靠近输入层的参数几乎无法更新(因为梯度 ≈ 0),模型学不到有效特征。

尤其在 $L = 150$ 这样的超深网络中(如 ResNet),若不处理此问题,训练将极其困难。


✅ 6. 初步解决方案:合适的权重初始化

  虽然不能完全消除梯度消失/爆炸,但通过精心设计的权重初始化策略,可以显著缓解该问题。

后续课程将介绍具体方法,如 Xavier 初始化、He 初始化等。

  核心思想:
让每层的激活值和梯度在前向/反向传播中保持合理的尺度(既不爆炸也不消失)


📌 总结要点

问题原因后果缓解思路
梯度爆炸权重 > 1,连乘后指数增长参数更新过大,训练发散权重初始化 + 梯度裁剪
梯度消失权重 < 1,连乘后指数衰减靠前层几乎不学习权重初始化 + 使用 ReLU 等非饱和激活函数

💡 关键洞察:深度网络的稳定性高度依赖于初始权重的尺度选择


📘 补充说明(后续方向)

  • Xavier 初始化(Glorot Initialization):适用于 tanh、sigmoid 等激活函数

    \[W \sim \mathcal{N}\left(0, \frac{2}{n_{\text{in}} + n_{\text{out}}}\right)\]
  • He 初始化:适用于 ReLU 激活函数

    \[W \sim \mathcal{N}\left(0, \frac{2}{n_{\text{in}}}\right)\]

  这些方法通过控制权重的方差,使得信号在深度网络中能稳定传递。

本文由作者按照 CC BY 4.0 进行授权