外观
RNN 与序列建模
一句话定义:循环神经网络(Recurrent Neural Network, RNN)是在时间维度上共享权重的网络,通过"隐藏状态"把过去的输入逐步传递下去,从而显式建模序列的先后依赖——它是深度学习处理"带顺序的数据"的第一代主力架构(想先建立整体画面可读深度学习总体架构解剖)。
一、为什么序列需要专门的网络
语言、语音、视频、时间序列的共同点是:元素之间有顺序,且顺序携带信息。"我打你"和"你打我"是同样的三个字,语义完全不同;股票今天和昨天的价格有关联。用普通的神经网络基础处理序列有两种笨办法:
- 把整条序列拼成一个超长向量——长度不定没法对齐,还丢失位置结构;
- 滑窗取固定长度——窗口外的长程依赖永远看不到,窗口内也只是"特征拼接"而非"时间推理"。
RNN 的回答是循环:同一套权重(W)在每个时间步重复使用,把上一步的隐藏状态 $h_{t-1}$ 与当前输入 $x_t$ 一起算出新状态 $h_t$。这样网络就有了"记忆",而且不管序列多长,参数量恒定——这正是权值共享思想在时间维度的翻版(空间维度的翻版见CNN 与计算机视觉)。
二、RNN 原理与展开图
单个时间步的计算(以 tanh 版本为例):
$$ h_t = \tanh(W_{hh} h_{t-1} + W_{xh} x_t + b) $$
输出(若每步都要)为 $y_t = W_{hy} h_t + b_y$。把一个 RNN 按时间展开,就是一张"每个时刻复刻同一组参数"的前馈网络:
x1 → h1 → x2 → h2 → x3 → h3 → … → xt → ht → yt展开之后,RNN 退化成"非常深的共享权重网络",深度等于序列长度。这个视角非常关键——它解释了 RNN 的数学本质,也预告了它的命运(后文 BPTT 一节)。
RNN 的变体按输入输出关系分四类:many-to-one(整句情感分类)、one-to-many(图生文)、many-to-many 同步(逐帧标注)、many-to-many 异步(机器翻译的编码器-解码器)。
三、BPTT 与梯度消失
训练 RNN 用沿时间反向传播(Backpropagation Through Time, BPTT):先把序列展开成前馈图,再按反向传播与自动微分的链式法则求梯度,只是对共享权重 W 要累加所有时间步的贡献。
问题出在链式法则的连乘上。误差要穿过 $k$ 个时间步,梯度里就会出现 $k$ 个 $\tanh'$(≤1)和 $W$ 的连乘:
$$ \frac{\partial L}{\partial h_{t-k}} \propto \prod_{i=1}^{k} \text{diag}(\tanh'(h_{t-i})) , W_{hh} $$
当 $W_{hh}$ 的最大奇异值 < 1,连乘随 $k$ 指数衰减→梯度消失,网络记不住远距离的信息;> 1 则指数爆炸→梯度爆炸(好在可用梯度裁剪兜底)。于是经典 RNN 的实际有效记忆只有约 5~10 步。这解释了为什么 RNN 学不会"主语和几十个词后的谓语保持一致"这类长程依赖。
本质
梯度消失不是"bug",而是深度与共享权重结构下的数学必然:任何把深度网络误差信号经过大量非线性连乘的架构都会遇到它。RNN 的深度=序列长度,所以它首当其冲。缓解手段的一大部分见初始化与归一化,但结构级修复要交给 LSTM。
四、LSTM 三门结构与 GRU
LSTM(长短期记忆,1997)
LSTM 的核心是给网络加一条"细胞状态传送带" $C_t$:信息沿时间轴直通,误差可以无损耗地传很远。它的控制机关是三个门(都用 sigmoid 输出 0~1 的"开度",并用 tanh 生成候选值):
- 遗忘门 $f_t = \sigma(W_f [h_{t-1}, x_t] + b_f)$:决定旧细胞状态留多少;
- 输入门 $i_t = \sigma(W_i [h_{t-1}, x_t] + b_i)$:决定新信息写多少;
- 输出门 $o_t = \sigma(W_o [h_{t-1}, x_t] + b_o)$:决定当前状态对外暴露多少。
细胞状态更新 $C_t = f_t \odot C_{t-1} + i_t \odot \tilde C_t$,隐藏状态 $h_t = o_t \odot \tanh(C_t)$。关键看 $C_t$ 那条线:它只有一次逐元素乘加,误差可以近乎恒等地穿回去,从而把有效记忆窗口从 5~10 步拉到数百步。
GRU(门控循环单元,2014)
GRU 是 LSTM 的"精简版":把三个门合并成更新门和重置门两个,不单独保留细胞状态,参数比 LSTM 少约 1/3。实践中 GRU 与 LSTM 效果相当、训练更快,在小数据集上常被优先选择。选型经验:数据少选 GRU,追求极致长程或已有 LSTM 基建选 LSTM,两者几乎总能被更大规模的 Transformer 架构压过。
五、序列任务
- 语言模型:按"预测下一个词"训练,是 N-gram 的神经化,也是后来大语言模型(LLM)的雏形。RNN-LM 靠隐藏状态记忆上文,配合 softmax 输出词表概率(输出层设计见损失函数与输出层);
- 机器翻译:编码器把源语言"读"成语义向量,解码器逐词生成目标语言。Bahdanau 注意力(2015)让解码器在每一步"回看"编码器的关键位置,这个机制后来在 Transformer 中被推到极致(见注意力机制);
- 语音识别/合成:RNN/LSTM 曾长期是语音模型的主力(WaveNet 也含扩张因果卷积),至今流式语音场景仍有应用,详见语音与音频;
- 时间序列预测:销量、流量、股票预测,RNN 依然是与 CNN、Transformer 并列的常见基座之一。
六、与 Transformer 的对比
2017 年 Transformer 几乎在所有序列任务上取代了 RNN,对比要理解"为什么":
| 维度 | RNN / LSTM | Transformer |
|---|---|---|
| 并行性 | 串行:$h_t$ 依赖 $h_{t-1}$,无法并行 | 自注意力一次性看到整句,可完全并行 |
| 长程依赖 | 靠门控缓解,仍受路径长度限制 | 任意两位置路径长度为 1,直接建模 |
| 计算复杂度(序列长 n) | 每步 O(1),总 O(n),能流式处理 | 每层 O(n²),长序列昂贵(有 FlashAttention 等优化) |
| 归纳偏置 | 天然的"顺序感",小数据更友好 | 依赖位置编码注入顺序 |
| 成本 | 便宜、可部署在端侧 | 大模型需要海量算力 |
RNN 输在了"串行"这个根子上:GPU 并行能力无法发挥,序列一长训练就极慢,而注意力的 O(n²) 在长度适中时完全可接受。但注意 RNN 有 Transformer 没有的特性:状态是定长的、恒定的推理开销、天然流式——这正是它至今仍存活的原因(见下节)。
七、现存场景
"Transformer 取代 RNN"是主流叙事,但工程世界是多元的:
- 流式语音识别:边听边识别要求"当前输出只依赖已输入的部分",RNN/TDNN 等因果结构天然合适,可实时推理且延迟恒定;
- 在线预测与边缘部署:设备端时间序列预测(心跳、传感器)、增量式在线学习,RNN 状态小、无二次复杂度,比注意力更省;
- 状态空间模型的理论对照:Mamba 等新模型把 RNN"定长状态、线性复杂度"的思想重新发扬,可视为 RNN 的现代复兴——也提醒我们:架构会过时,思想会循环。
学习建议
RNN/LSTM 可能不再是你简历上的"主力武器",但它浓缩了深度学习最核心的三件事:共享权重、时间展开、梯度消失的本质。把这些吃透,理解 Transformer 的 Pre-Norm、残差和 KV cache(见Transformer 架构)都会顺畅得多。
八、权衡与取舍
- RNN vs 注意力:序列长且要流式→RNN/状态空间模型;离线训练、需要强长程建模→注意力;
- LSTM vs GRU:参数与效果几乎等价,选实现简单、生态好的那个,别在两者间纠结过度;
- 单向 vs 双向:双向 LSTM 能看到未来上下文、效果更好,但无法流式——语音/翻译的线上系统常被迫回到单向;
- 深度与训练难度:堆叠多层 LSTM 有收益但梯度仍有限,务必备好梯度裁剪与合适的初始化(见训练配方与调参)。
延伸阅读
- Transformer 架构——注意力机制如何取代循环结构
- 注意力机制——从 Bahdanau 到自注意力的演进
- 大语言模型(LLM)——从 RNN-LM 到 GPT 的范式跃迁
- 语音与音频——流式 RNN 的最后堡垒之一
- 反向传播与自动微分——BPTT 与链式法则
- 初始化与归一化——缓解梯度消失的另一半工程手段
参考资料
- Elman. Finding Structure in Time (Cognitive Science 1990)
- Hochreiter, Schmidhuber. Long Short-Term Memory (Neural Computation 1997)
- Cho et al. Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation (2014)
- Bahdanau, Cho, Bengio. Neural Machine Translation by Jointly Learning to Align and Translate (ICLR 2015)
- Pascanu, Mikolov, Bengio. On the difficulty of training Recurrent Neural Networks (ICML 2013)
- Sutskever, Vinyals, Le. Sequence to Sequence Learning with Neural Networks (NeurIPS 2014)