Module 01 · Recurrent Neural Networks
Vanishing Gradients with RNNsRNN 的梯度消失
在之前的学习中,我们已经了解了 RNN(循环神经网络) 的基本原理以及它在 命名实体识别(NER) 和 语言建模 中的应用。你也看到了如何通过 反向传播(Backpropagation) 来训练一个 RNN。然而,基本的 RNN 算法存在一个重要问题:梯度消失(Vanishing Gradient) 问题。今天,我们将讨论这个问题,并在接下来的几个视频中介绍一些解决方案。
1.长距离依赖问题

1.1语言建模中的长距离依赖
假设我们有这样一个句子:
"The cat, which already ate and maybe already ate a bunch of food that was delicious, ... was full."
为了保证语法的一致性,在这个句子中:
- 由于“the cat”是单数,后面应该使用 "was"。
- 如果是复数形式的“cats”,则应使用 "were"。
这就是 长距离依赖(Long-Term Dependencies) 的一个例子,意思是句子早期的词语可能会影响句子后面的部分。在这个句子中,“the cat” 是单数,后面的动词形式(was/were)依赖于它。
但 基本 RNN 并不擅长处理这样的长距离依赖问题。
1.2梯度消失的原因
我们可以通过比较 深度神经网络 和 RNN 来理解梯度消失的问题。
深度神经网络中的梯度消失:
在训练一个非常深的神经网络时(例如 100 层或更多),我们在 前向传播 和 反向传播 过程中,梯度往往会迅速消失,特别是当层数很多时。这样,最后输出的梯度难以传递回去,更新早期层的权重变得非常困难。
RNN 中的梯度消失:
对于 RNN,我们同样会遇到类似的情况。虽然我们有前向传播(从左到右),和反向传播(从右到左),但是由于 梯度消失问题,后期的错误输出难以影响到前期的计算,尤其是当序列很长时,模型很难记住序列最开始的信息。
2.梯度消失的影响
2.1难以记住信息
由于 梯度消失,RNN 在处理长序列时会遇到困难。例如,模型需要记住单数或复数的名词,以便在后续生成 "was" 或 "were",但由于梯度无法有效地传递到序列的起始部分,模型往往无法学习到这些重要的上下文信息。
2.2局部影响
在基本的 RNN 模型中,某个时刻的输出(例如 )主要受到其前一个时刻的影响。换句话说,输出 y₃ 很难受到序列较早部分的强烈影响。这是因为,梯度从错误输出 y₃ 反向传播时,无法有效地影响到序列开头的计算。
引用:在基本的 RNN 中,误差和梯度传播的困难使得模型无法捕捉长时间跨度的信息。
3.梯度爆炸与梯度消失
除了梯度消失问题,我们还需要注意 梯度爆炸(Exploding Gradient) 问题。梯度爆炸问题指的是,当反向传播过程中,梯度随着网络层数增加呈指数级增长,可能导致参数过大,网络计算结果会出现 NaN(非数字) 错误,甚至出现数值溢出。
梯度爆炸的解决方案
当梯度爆炸发生时,可以使用 梯度裁剪(Gradient Clipping) 来限制梯度的最大值。如果某个梯度的值超过设定阈值,就会将其缩放到该阈值,以避免梯度过大。梯度裁剪是一个 鲁棒的解决方案,可以有效解决梯度爆炸问题。
4.RNN 长时间序列问题总结
| 问题 | 梯度消失(Vanishing Gradient) | 梯度爆炸(Exploding Gradient) |
|---|---|---|
| 描述 | 梯度随着时间步数增加逐渐消失,导致早期时刻的计算难以影响后期输出。 | 梯度随着时间步数增加呈指数级增长,可能导致网络参数过大。 |
| 解决方法 | 需要更复杂的解决方案,如 GRU 或 LSTM。 | 可以通过 梯度裁剪(Gradient Clipping)来限制梯度。 |
| 影响 | 导致无法捕捉 长距离依赖,如语言模型中的时态一致性。 | 导致网络参数数值爆炸,计算中出现 NaN 错误。 |
5.解决梯度消失问题的解决方案:GRU 和 LSTM
5.1GRU(门控循环单元)
在接下来的几个视频中,我们将详细探讨 GRU(门控循环单元) 和 LSTM(长短期记忆网络),这两种模型是为了解决 梯度消失问题 而设计的,它们能帮助神经网络捕捉 更长范围的依赖。
通过引入 门控机制(Gating Mechanisms),这些模型可以控制哪些信息需要被记住,哪些信息可以被遗忘,从而克服传统 RNN 在处理长时间序列时的困难。
小结
总结一下,训练 深度神经网络 时,我们会遇到 梯度消失 和 梯度爆炸 两个主要问题。对于 RNN 来说,尤其是处理长时间步的序列时,它也会遭遇类似的问题:
- 梯度消失:使得 RNN 难以捕捉长距离依赖。
- 梯度爆炸:导致参数过大,计算出现溢出。
虽然 梯度爆炸 可以通过 梯度裁剪 来解决,但 梯度消失问题 更为棘手,需要采用 GRU 或 LSTM 等模型来解决。
在接下来的内容中,我们将详细讲解 GRU 和 LSTM,这将是我们解决 梯度消失问题 的关键一步。让我们继续学习吧! 🚀