Module 01 · Recurrent Neural Networks
Bidirectional RNN双向 RNN
在之前的学习中,我们已经了解了构建 RNN(循环神经网络) 的大部分关键组件。现在,我们将介绍两个概念,这将帮助我们构建更强大的模型:
- 双向RNN(Bidirectional RNN):允许我们在同一时刻获取序列中来自前后信息。
- 深度RNN(Deep RNN):将在下一个视频中介绍。
本视频将重点讲解 双向RNN。让我们一起来了解一下!
双向RNN的动机与应用
问题的引入:命名实体识别(NER)
假设我们在处理 命名实体识别(Named Entity Recognition,NER)任务时,需要判断某个词是否属于一个人的名字。举个例子:
- Teddy 可能是泰迪熊(Teddy Bear)或美国前总统 Teddy Roosevelt 的名字。
如果只看句子前面的词汇,无法明确判断 Teddy 是指 泰迪熊 还是 Teddy Roosevelt。这就意味着我们不能仅依赖于句子的前半部分来做出判断。因此,传统的单向RNN 是无法满足这种需求的。

单向RNN的问题
单向RNN的局限性
- 在 单向RNN 中,信息的传递只能从左到右(或者从右到左)。
- 例如,在识别 "Teddy" 是人名的任务中,前面的单词并不能给出完整的上下文信息。因此,不能仅依赖于 当前及之前的词 来做出准确的预测。
双向RNN的解决方案
双向RNN的基本结构
双向RNN 通过同时考虑序列中前后两个方向的信息来解决上述问题。它的工作原理如下:
- 正向RNN:正向传播计算,从 X₁ 到 X₄。
- 反向RNN:反向传播计算,从 X₄ 到 X₁。
简化的四输入例子
假设有一个包含四个输入的简化句子 X₁, X₂, X₃, X₄。
- 正向RNN 隐藏层:计算 a₁, a₂, a₃, a₄,这些信息被用于预测 ŷ₁, ŷ₂, ŷ₃, ŷ₄。
- 反向RNN 隐藏层:计算 a₄ (backward) 到 a₁ (backward),然后与正向RNN的计算结果结合,产生最终的预测。

双向传播示意图
输入序列:X₁ → X₂ → X₃ → X₄
正向传播:
a₁ → a₂ → a₃ → a₄
反向传播:
a₄ ← a₃ ← a₂ ← a₁
如何做出预测?
- 预测步骤:
- 例如,在时间 T = 3 时,双向RNN将同时考虑来自过去的信息(如 X₁, X₂, X₃)和来自未来的信息(如 X₄)。
- 输出:ŷ₃ 结合了正向和反向RNN的隐藏状态信息。
- 以Teddy为例:
- 在任务中,判断 Teddy 是否是一个人的名字时,模型不仅需要查看当前词汇,还需要考虑上下文信息。
- 双向RNN 使得模型能够同时利用 过去 和 未来 的信息做出更加准确的预测。

双向RNN的优势
处理上下文信息
- 双向RNN 通过正向和反向传播的组合,能够充分利用整个序列的上下文信息,提升对复杂任务的预测能力。
- 对于像 命名实体识别(NER)这样的自然语言处理任务,双向RNN能够帮助模型准确判断一个词的含义。
典型应用场景
- 在 NLP(自然语言处理) 中,使用 双向LSTM(长短期记忆网络) 来处理文本是常见的做法。它能够在给定一个完整句子的情况下,对句子中的每个词进行标签预测。
双向RNN的局限性
需要整个输入序列
- 双向RNN 的一个缺点是它需要 整个序列 的数据才能进行预测。这意味着:
- 对于 语音识别 等实时任务,双向RNN可能需要等待完整的语音数据才能开始处理和做出预测。
- 在 实时语音识别 应用中,可能需要更复杂的模型,而不仅仅是传统的双向RNN。
总结:双向RNN的优缺点
| 优点 🏅 | 缺点 ⚠️ |
|---|---|
| 利用 前后信息,提高预测准确性 | 需要 整个输入序列 才能进行预测 |
| 适用于 NLP任务(如NER、情感分析等) | 在 实时应用 中不适用 |
| 结合 正向与反向 网络信息 | 可能导致 延迟(如语音识别) |
如何选择模型?
- NLP任务:对于大部分 NLP任务,特别是当你能够获取到完整句子时,双向RNN 是一个非常有效的选择。
- 实时任务:对于 语音识别 或其他需要实时处理的任务,可能需要更复杂的模型架构,而不仅仅是双向RNN。
下一步:深度RNN的构建
在下一个视频中,我们将探讨如何构建 深度RNN,并结合 双向RNN、LSTM、GRU 等模型,构建更强大的深度神经网络。
结束语 🎥
通过学习 双向RNN,我们可以让模型更好地理解序列中的前后文信息,从而在诸如 命名实体识别 和其他 自然语言处理 任务中获得更好的表现。