
视频元信息
- 所属课程:吴恩达深度学习专项课程 —— 序列模型(Sequence Models)
- 章节:1.8 RNNs 的梯度消失(Vanishing Gradients with RNNs)
- 时长:约 6 分 25 秒
内容摘要(TL;DR)
本节讲解基础 RNN 算法面临的核心问题——梯度消失。通过"The cat, which already ate..., was..."这一长距离依赖的语言例子,说明基础 RNN 难以捕捉长程依赖。类比深层神经网络的梯度消失与梯度爆炸问题,指出 RNN 处理长序列本质上等价于极深的神经网络。梯度爆炸可用梯度裁剪解决,而梯度消失更难处理,将在后续视频用 GRU 解决。
一、回顾与引入 [00:00]
前面已经学习了 RNN 的工作原理、如何应用于命名实体识别(named entity definition)问题以及语言建模(language modeling),也了解了如何用反向传播(back propagation)来训练 RNN。
但基础 RNN 算法存在一个核心问题:它会遇到梯度消失(vanishing gradient)问题。
接下来的几节视频将讨论一些解决方案来应对这个问题。
理解:本节是序列模型章节的"承上启下"节点,先指出问题,再在后续视频中给出 GRU、LSTM 等解决方案。
二、长距离依赖的语言例子 [00:27]
例句演示
考虑这样一个英文句子:
"The cat, which already ate a bunch of food, that was delicious and apples and pears and so on, was full."
- 主语是 cat(单数),所以后面的动词应该用 was(单数形式)。
- 如果主语是复数(如 cats),则应该用 were。
长距离依赖(Long-Term Dependencies)
考点:语言中常常存在"很早期的词影响很后面内容"的现象,这就是长距离依赖。
- 在这个句子中,"cat" 出现得非常早,而决定用 "was" 还是 "were" 的位置在句子末尾。
- 中间可以插入任意长的内容("which already ate a bunch of food..."),前后相隔可能非常远。
结论:基础 RNN 到目前为止,并不擅长捕捉这种非常长距离的依赖。
三、为什么 RNN 会遇到梯度消失 [01:33]
类比深层神经网络
推导:回顾之前训练非常深的神经网络(比如 100 层甚至更深)时讨论过的问题——
- 前向传播:从右往左(此处视频描述为从左到右的 forward prop)。
- 反向传播:梯度从输出 Y 往回传,很难影响到前面层(earlier layers)的权重。
在这种极深的网络中,输出层的梯度很难传播回去影响早期层的计算。
RNN 的类似问题
RNN 具有结构上相似的问题:
- 前向传播:从左到右(forward prop going from left to right)。
- 反向传播:从右到左(back prop going from right to left)。
- 由于同样的梯度消失问题,后面时间步(later time steps)的误差输出,很难影响到前面时间步(earlier time steps)的计算。
实际影响
易错点:在实践中,这意味着神经网络很难学会"记住"它看到的是单数名词还是复数名词,从而在序列后面正确生成 "was" 或 "were"。
- 在英语中,中间插入的内容长度可以是任意的(arbitrarily long)。
- 所以神经网络可能需要非常长时间地记住单复数信息,才能最终用上这个信息。
四、基础 RNN 的"局部影响"特性 [03:06]
考点:基础 RNN 模型具有很多"局部影响"(many local influences)。
具体含义:
- 输出 y⟨3⟩ 主要受靠近 y⟨3⟩ 的值影响。
- 某个值主要受相对靠近的输入影响。
- 一个很早出现在序列中的输入,很难强烈影响很后面的输出。
理解:无论输出是对是错,误差都很难反向传播到序列的最开始处,因此也就难以修改神经网络在序列早期所做的计算。
这是基础 RNN 算法的一个根本弱点,将在后续视频中着手解决。
核心结论:RNN 往往不擅长捕捉长距离依赖(long range dependencies)。
五、梯度爆炸问题与梯度裁剪 [04:06]
虽然本节讨论聚焦于梯度消失,但回顾深层神经网络时也提到过梯度爆炸(exploding gradients)。
梯度爆炸的本质
- 反向传播时,梯度不仅可能指数级减小,也可能随层数指数级增大。
消失 vs 爆炸:哪个更严重?
考点:在训练 RNN 时,梯度消失往往是更大的问题;但梯度爆炸一旦发生可能是灾难性的(catastrophic)。
- 指数级巨大的梯度会导致参数变得极大,使神经网络参数被"搞乱"(messed up)。
梯度爆炸更容易被发现
梯度爆炸更容易被察觉,因为:
- 参数会直接"爆炸"(blow up)。
- 你经常会看到 NaN(非数值)或数值溢出(numerical overflow)的结果。
解决方案:梯度裁剪(Gradient Clipping)
重要提醒:如果看到梯度爆炸,一个解决办法就是应用梯度裁剪。
梯度裁剪的含义:
- 查看你的梯度向量(gradient vectors)。
- 如果它大于某个阈值(threshold)。
- 就对梯度向量进行缩放(scale),使其不至于太大。
- 即按照某个最大值进行"裁剪"(clip)。
这是一个相对稳健(robust)的解决方案,能有效处理梯度爆炸。
易错点:梯度裁剪只能解决梯度爆炸,对梯度消失无效。 梯度消失要难解决得多,需要后续视频中的 GRU 等方法。
六、总结与展望 [05:33]
核心总结
考点:在早前的课程中已经看到,训练非常深的神经网络会遇到梯度消失或梯度爆炸问题——导数随层数呈指数级减小或指数级增大。
RNN 本质上就是极深的网络
推导:一个 RNN 处理数据超过 1000 次、甚至 10000 次时,本质上就相当于一个 1000 层或 10000 层的神经网络。
因此 RNN 也会遇到同样类型的问题:
- 梯度爆炸:可以用梯度裁剪解决。
- 梯度消失:需要更多工作来处理。
下一步
下一节视频将介绍 GRU(Gated Recurrent Unit,门控循环单元),这是一个非常有效的解决方案,用于应对梯度消失问题,并能让神经网络捕捉长得多的依赖关系。
拓展补充【拓展】
1. 为什么 RNN 的梯度消失特别严重?
理解:RNN 的权重矩阵 W 在每个时间步被反复复用(参数共享)。反向传播时,梯度需要连续乘以多个雅可比矩阵。若这些矩阵的特征值小于 1,多次相乘后梯度就会指数级衰减到接近 0;若大于 1,则会指数级爆炸。
2. 梯度裁剪的常见实现方式
- 按值裁剪(clip by value):将每个梯度分量限制在 [-c, c]。
- 按范数裁剪(clip by norm):若梯度向量的 L2 范数超过阈值,则整体按比例缩放。这是更常用的方式。
3. 后续解决方案概览
- GRU:通过更新门和重置门控制信息流动,缓解梯度消失。
- LSTM:更复杂的门控结构,同样有效。
- 梯度消失的替代思路:残差连接、更优的初始化、Batch Normalization 等。
4. 容易踩坑的点
- 不要混淆梯度消失与梯度爆炸的解决手段:裁剪解决爆炸,门控结构解决消失。
- 长距离依赖并非完全无法学习:基础 RNN 只是"不擅长",并非绝对学不会,短距离依赖仍能较好处理。
- 看到 NaN 不一定是梯度爆炸:也可能是学习率过大、除零等其他数值问题,需综合排查。
关键标签 / 关键词
RNN 梯度消失 Vanishing Gradient 梯度爆炸 Exploding Gradient 梯度裁剪 Gradient Clipping 长距离依赖 Long-Term Dependencies 深层神经网络 反向传播 Backpropagation GRU 序列模型 语言建模 NaN 数值溢出 吴恩达深度学习
生成时间:2026-10-11 00:30:28 生成平台:VideoNote www.xygy.top