此页面介绍了D2L.ai代码库中实现的高级循环神经网络(RNN)架构。这些架构解决了基本RNN的局限性,例如梯度消失问题和捕获长期依赖关系的困难。有关基本RNN的信息,请参阅循环神经网络。
D2L.ai的实现包括几种高级RNN变体及其上构建的技术。
来源
门控循环单元引入了门控机制来控制信息在网络中的流动,并缓解了梯度消失问题。
重置门 (R_t):控制在计算候选隐状态时使用多少前一时刻的隐状态。
更新门 (Z_t):控制使用新的候选状态与前一状态的比例。
候选隐状态 (H̃_t):提出的新隐状态。
隐状态更新:
在实现中,GRU的计算方式如chapter_recurrent-modern/gru.md341-369所示。
来源
LSTM网络引入了具有三种不同类型门的记忆单元,以在长时间内维护信息。
输入门 (I_t):控制何时写入记忆单元。
遗忘门 (F_t):控制何时擦除记忆单元。
输出门 (O_t):控制何时从记忆单元读取。
候选记忆单元 (C̃_t):提出的新记忆单元内容。
记忆单元更新:
隐状态更新:
chapter_recurrent-modern/lstm.md322-356中的LSTM实现直接遵循了这些方程。
来源
深度RNN堆叠多个RNN层以增加模型容量,并捕获序列中的分层模式。
通过在初始化RNN时设置num_layers参数来实现深度RNN。
第 l 个隐层的数学公式为:
其中 H_t^(0) = X_t(时间 t 的输入)
来源
双向RNN同时处理序列的正向和反向,以捕获来自过去和未来的上下文。
通过设置bidirectional=True参数来创建双向RNN。
数学公式为:
来源
编码器-解码器架构通过将输入序列编码为固定表示,然后解码为输出序列,从而实现序列到序列的转换。
编码器-解码器架构通过三个主要类实现:
Encoder Interface:
Decoder Interface:
EncoderDecoder Class:
来源
序列到序列(Seq2Seq)学习使用RNN实现编码器-解码器架构,用于机器翻译等任务。
Seq2SeqEncoder:使用RNN对输入序列进行编码。
Seq2SeqDecoder:使用另一个RNN生成输出序列。
来源
Beam search 通过在解码过程中维护多个候选序列来改进序列生成。
Beam search 的实现可以在chapter_recurrent-modern/beam-search.md97-152中可以找到。
来源
本页面介绍了D2L.ai框架中实现的高级RNN架构。
| 架构 | 主要功能 | 主要用途 |
|---|---|---|
| GRU | 重置门和更新门 | 高效捕获长期依赖 |
| LSTM | 记忆单元和三个门(输入、遗忘、输出) | 序列中的长期记忆 |
| 深度RNN | 多个堆叠的RNN层 | 分层表示学习 |
| 双向RNN | 正反两个方向处理序列 | 需要过去和未来上下文的任务 |
| 编码器-解码器 | 转换可变长度序列 | 序列到序列任务 |
| Seq2Seq | 编码器-解码器的RNN实现 | 机器翻译、文本摘要 |
| 束搜索 | 维护多个候选序列 | 改进的序列生成质量 |
这些组件构成了序列处理中众多应用的基础,包括机器翻译、语音识别和文本生成。