循环神经网络(RNN)是一类用于处理有序序列的人工神经网络。其核心特征是循环连接:某一步处理得到的信息通过内部状态影响后续步骤。网络反复应用同一套学习得到的更新规则,因此能够处理长度可变的输入,而不必为每个位置单独设置参数。在机器学习中,RNN 用于处理涉及文本、语音和时间序列的任务。序列位置不一定代表实际时间,也可以对应单词、字符或其他有序元素。(deeplearningbook.org)
结构与计算
在简单 RNN 中,输入向量 和前一隐藏状态 共同决定新的隐藏状态:
其中,每个 都是学习得到的权重矩阵, 是偏置向量, 是激活函数,通常采用双曲正切函数。初始状态提供起始条件,通常设为零向量。独立的输出层可以将隐藏状态转换为预测结果。由于每个位置都复用相同的循环参数,增加序列长度会增加计算量,但不会增加循环层的参数数量。(docs.pytorch.org)
隐藏状态是通过学习获得的、通常有信息损失的先前输入表示,而非对这些输入的精确记录。它保留哪些信息取决于训练目标。将循环计算“展开”,就是把连续多次应用更新规则的过程表示为展开的计算图,各步骤之间共享参数。这使循环计算有别于仅将固定窗口内的观测值输入前馈网络的做法。(deeplearningbook.org)
循环层也可以堆叠。在堆叠网络中,一层产生的隐藏状态序列成为下一层的输入,从而在跨序列位置反复计算的基础上,增加表示的深度。(docs.pytorch.org)
训练与梯度难题
RNN 的训练通常采用随时间反向传播(BPTT),即对展开后的网络应用反向传播。损失函数衡量选定位置或整个序列上的预测误差。共享参数在各次使用中产生的梯度贡献会被累加,再通过随机梯度下降等优化方法更新参数。截断 BPTT 将梯度传播限制在有限的跨度内,降低计算和内存需求,同时也限制了学习信号的传播距离。(deeplearningbook.org)
长序列会带来重大的优化难题。梯度在反复与雅可比矩阵相乘的过程中,可能变得极小或极大。梯度消失问题使网络难以学习相距很远的输入之间的关系;梯度爆炸问题则可能导致参数更新不稳定。梯度裁剪在更新前限制梯度的大小,能够应对梯度爆炸,但其本身无法解决梯度消失。门控架构通过改变循环计算方式,为信息和误差信号提供更有效的传播路径。(arxiv.org)
门控循环架构
长短期记忆网络(LSTM)由塞普·霍赫赖特(Sepp Hochreiter)和于尔根·施密德胡伯(Jürgen Schmidhuber)于 1997 年提出,旨在解决学习长期依赖关系时遇到的困难。它引入记忆单元和乘法门来调节信息流。后来常用的形式将单元状态与对外输出的隐藏状态区分开来,并使用输入门、遗忘门和输出门控制信息的写入、保留与读取。以加法更新的单元状态通路能够保留信息,并促进梯度跨多个步骤传播,但并不保证能成功学习所有长程依赖关系。(bioinf.jku.at)
2014 年提出的门控循环单元(GRU)使用更新门和重置门。更新门控制保留前一状态与引入候选状态之间的平衡;重置门则调节先前信息对候选状态的贡献。与标准 LSTM 不同,GRU 不维护独立的单元状态。这些差异通常使 GRU 的参数数量少于输入维度和隐藏维度相同的 LSTM,但不能据此认定某一种架构在所有情况下都更优。(arxiv.org)
序列配置与应用
RNN 可以在每个位置返回输出,也可以在处理完整个序列后返回一个表示。这两种配置分别支持序列标注和序列分类。相关软件库还区分循环单元与循环层:前者执行单个步骤的计算,后者将该计算应用于整个序列。状态可以在连续的输入片段之间传递,使处理得以继续,而无须重新开始循环计算。(tensorflow.org)
双向循环神经网络从两个方向处理序列,并合并两个方向的表示。因此,每个位置都可以结合前文和后文的上下文信息。这要求网络能够访问相关的后续输入,不同于仅沿正向处理输入流、只依赖当前及先前输入的网络。(deeplearningbook.org)
在自然语言处理中,循环语言模型根据先前的上下文预测后续符号。RNN 也被用于语音识别和手写内容处理。编码器—解码器架构使用一个网络表示输入序列,再使用另一个网络生成输出序列,输出序列的长度可以与输入不同。2014 年的 RNN 编码器—解码器研究展示了这一方法如何学习用于机器翻译的短语表示。(deeplearningbook.org)
历史发展与计算权衡
杰弗里·埃尔曼(Jeffrey Elman)于 1990 年提出的简单循环网络,成为学习时间结构的一种重要模型。后续发展包括 LSTM 和 GRU 架构,以及循环编码器—解码器与注意力机制的结合。注意力使解码器能够访问不同的输入表示,而不必完全依赖单个固定长度的摘要表示。(crl.ucsd.edu)
2017 年提出的Transformer架构不再采用循环连接,而是基于注意力处理序列。传统 RNN 的状态必须按顺序计算,限制了不同位置之间的并行计算。Transformer 在训练时能够实现更高程度的并行化,并为相距较远的位置提供更短的计算路径。相比之下,正向 RNN 在处理新的观测值时始终维护一个固定大小的状态;这种紧凑表示也限制了它能够保留多少先前信息。(arxiv.org)