递归神经网络(RNN)是一种神经网络架构,设计用于处理序列数据,通过维护一个内部隐藏状态,该状态在每一步更新并向前传递,以影响后续输入的处理方式。与前馈网络不同,前馈网络将固定输入映射到固定输出,且不记忆先前输入,RNN在序列的每一步共享相同的权重,原则上可以利用序列中任意远位置的信息来指导每个新预测。
历史
早期的递归架构包括约翰·霍普菲尔德于1982年提出的霍普菲尔德网络(一种联想记忆模型),以及杰弗里·埃尔曼于1990年提出的简单递归网络,该网络展示了网络无需显式规则即可学习表示词流中的语法结构。在整个1990年代和2000年代,RNN是自然语言处理和语音识别中序列任务的默认架构,但普通RNN在长序列上训练困难,因为通过反向传播随时间计算的梯度往往会随序列长度呈指数级缩小或爆炸,这一问题由塞普·霍赫赖特于1991年正式分析。这一梯度消失和爆炸问题促使了1997年的长短期记忆架构,以及后来更简单的门控循环单元,两者都添加了门控机制,使梯度能在多个步骤间更稳定地流动。
架构与训练
RNN一次处理序列中的一个元素,将当前输入与上一步传递来的隐藏状态结合,生成新的隐藏状态,并可选地在该步生成输出。训练使用随时间反向传播,该方法将递归计算展开到序列的所有步骤,并对由此产生的、实际上非常深的展开网络应用普通的梯度下降。这种展开也是RNN的主要计算缺陷:由于每一步依赖于前一步的输出,序列在很大程度上必须逐步处理而非并行处理,这使得RNN在2010年代成为标准的长时间序列和大规模数据集上训练缓慢。
巅峰与衰落
RNN,特别是堆叠的LSTM变体,通过Seq2seq等架构(于2014年引入)推动了第一代实用的机器翻译和语音系统,该架构将编码器RNN(将输入序列压缩为固定向量)与解码器RNN(从该向量生成输出序列)配对。约在2015年,注意力机制被添加到seq2seq模型中,使解码器能够回看所有编码器状态,而不是依赖单一的压缩向量,这不仅提高了翻译质量,也为2017年的Transformer架构奠定了基础,该架构完全摒弃了递归,转而采用自注意力,并且可以完全并行训练。由于Transformer在性能上达到或超过RNN,同时在当时可用的GPU硬件上训练速度快得多,它们在几年内取代了RNN,成为大型语言模型和大部分自然语言处理的主导序列架构。
遗产
RNN仍用于具有严格内存或延迟限制的场景,以及一些时间序列和控制应用中,其核心思想,,固定大小的隐藏状态可以概括无限长的历史,,在2020年代中期于状态空间模型(如Mamba)中重新浮现,这些模型旨在结合RNN类线性时间推理与接近Transformer的训练效率。