1. 梯度爆炸与梯度消失的定义
1.1 梯度爆炸
梯度爆炸是指在神经网络训练过程中,反向传播时计算的梯度值变得非常大(趋向于无穷大),导致模型参数更新过大,损失函数值剧烈震荡甚至发散,最终模型无法收敛。
直观理解:想象你在调整一个滑块来优化某个目标,但每次调整的幅度都过大,导致滑块完全偏离目标位置,甚至“飞出去”。
1.2 梯度消失
梯度消失是指在反向传播过程中,梯度值变得非常小(趋向于零),导致模型参数几乎不更新,训练过程停滞,模型无法有效学习。
直观理解:继续用滑块的比喻,这次你想调整滑块,但每次调整的幅度微乎其微,几乎不动,永远无法到达目标位置。
这两种现象都与深度神经网络(尤其是深层网络)的反向传播机制密切相关,通常在递归神经网络(RNN)、深层前馈网络或**卷积神经网络(CNN)**中更容易发生。
2. 梯度爆炸与梯度消失的原因
要理解这两个问题的原因,我们需要从反向传播的数学原理入手。反向传播通过链式法则计算梯度,梯度从输出层逐层向前传播到输入层。
2.1 梯度爆炸的原因
梯度爆炸的根本原因是梯度在反向传播过程中被指数放大。以下是主要原因:
-
权重初始化过大:
- 如果网络的权重初始化值过大(例如,随机初始化的权重方差较大),每一层的权重矩阵乘法会导致激活值和梯度在传播过程中快速放大。
- 例如,假设权重矩阵 W W W 的元素很大,梯度 ∂ L ∂ W l \frac{\partial L}{\partial W_l} ∂Wl∂L 会随着层数增加呈指数增长。
-
深层网络的累积效应:
- 在深层网络中,梯度通过多层传播,涉及多次矩阵乘法。如果每一层的权重矩阵的特征值大于1,梯度会呈指数增长。
- 数学上,梯度可以表示为: ∂ L ∂ W l ∝ ∏ k = l + 1 L W k ⋅ σ ′ ( z k ) \frac{\partial L}{\partial W_l} \propto \prod_{k=l+1}^L W_k \cdot \sigma'(z_k) ∂Wl∂L∝k=l+1∏LWk⋅σ′(zk) 如果 W k W_k Wk 的特征值大于1,多次乘法会导致梯度爆炸。
-
激活函数的选择:
- 某些激活函数(如 sigmoid 或 tanh)的导数较小,但如果权重过大,激活函数的输入可能进入饱和区,导致梯度被放大(尽管这更多与梯度消失相关)。
-
学习率过高:
- 如果学习率过大,即使梯度本身不算特别大,参数更新 Δ W = − η ⋅ ∇ L \Delta W = -\eta \cdot \nabla L ΔW=−η⋅∇L 也会过大,导致参数“跳跃”到不稳定的区域。
2.2 梯度消失的原因
梯度消失的原因与梯度爆炸相反,梯度在传播过程中被指数缩小。主要原因包括:
-
激活函数的饱和:
- 像 sigmoid 和 tanh 这样的激活函数在输入值较大或较小时,导数值接近于0(进入饱和区)。
- 例如,sigmoid 函数的导数为: σ ′ ( z ) = σ ( z )