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 进行授权