Ch08 RNN序列模型修订于 二〇二六年七月二日
8.3 梯度消失与梯度爆炸:为什么深层 RNN 训练不好
这是 RNN 最核心的技术难题,也是理解 LSTM/GRU 为什么被发明的关键。
8.3.1 梯度是什么
训练神经网络 = 不断调整参数,让预测更准确。梯度就是”每个参数应该往哪个方向调、调多少”的信号。梯度大 = 这个参数需要大幅调整;梯度小 = 这个参数基本不用动。
8.3.2 梯度消失(Vanishing Gradient)
在 RNN 中,梯度要反向传播经过每一个时间步。每经过一步,梯度都要乘以一个系数(通常是小于 1 的数)。经过 100 个时间步,梯度 = 初始梯度 × 系数^100。
如果系数是 0.9,0.9^100 ≈ 0.000027 —— 梯度几乎消失了。这意味着第 100 个词对第 1 个词的参数更新几乎没有影响。模型无法学习长距离依赖关系。
比喻:你玩传话游戏。第一个人说”明天下午三点在图书馆门口见”。经过 100 个人传话后,最后一个人听到的可能是”明天有雨”。信息在传递过程中不断衰减和扭曲——这就是梯度消失。
8.3.3 梯度爆炸(Exploding Gradient)
反过来,如果系数大于 1(比如 1.1),1.1^100 ≈ 13780 —— 梯度爆炸了。参数更新幅度巨大,模型训练不稳定,损失函数上蹿下跳。
比喻:传话游戏里,每个人都在原话上加一句自己的理解。经过 100 个人后,一句话变成了一个故事。信息被不断放大和扭曲——这就是梯度爆炸。
8.3.4 怎么解决
| 问题 | 解决方案 |
|---|---|
| 梯度消失 | LSTM/GRU 的门控机制(让梯度有一条”高速公路”直通,不经过多次乘法);残差连接 |
| 梯度爆炸 | 梯度裁剪(gradient clipping)——设置一个最大值,超过就截断 |
8.3.5 为什么 LSTM 能缓解梯度消失
LSTM 的细胞状态 C_t 的更新是加法而不是乘法:C_t = f_t × C_{t-1} + i_t × C̃_t。如果遗忘门 f_t 接近 1,旧信息可以几乎无损地沿时间步传递。梯度在反向传播时不需要经过多次乘法衰减——这就是 LSTM 能处理长序列的根本原因。
← 上一节:8.2 LSTM:更长的记忆 | 下一节:8.4 双向 RNN:同时看过去和未来 →