RNN / LSTM 兴衰:序列模型简史
2017 年 Transformer 出现前,所有处理语言/语音的 AI 都靠 RNN 和它的衍生品。理解它的兴衰,才理解为什么 attention 是革命。
L3-01 我们看到 MLP 不能处理序列——它把每个位置看成独立的。
但语言、语音、视频、时间序列——全都有顺序。
2017 年 Transformer 出来之前的 10 年里,处理序列的主流是 RNN(循环神经网络) 及其改进版。理解 RNN 的兴衰,是理解 Attention 为什么是革命的前置课。
第一站:RNN 的核心思想
序列处理的本质要求:当前位置的输出,应该依赖前面所有位置的信息。
MLP 不行——它只看当前输入。
RNN 的招数:引入一个”隐藏状态” ,让它在时间维度上传递:
h₀
↓
x₁ → [RNN cell] → y₁
↓
h₁
↓
x₂ → [RNN cell] → y₂
↓
h₂
↓
x₃ → [RNN cell] → y₃
每一步用同一个网络(参数共享),但接收两个输入:
- 当前 token 的
- 上一步的隐藏状态
输出:
- 当前隐藏状态
- 当前预测
公式
参数 是要学的,在所有时间步上共享。
隐藏状态 就是”模型的短期记忆”——它压缩了前面所有 token 的信息。
第二站:RNN 的训练
通过时间反向传播(BPTT, Backpropagation Through Time)——把整个时间序列展开,当成一个超深的网络做反向传播。
x₁ → h₁ → x₂ → h₂ → x₃ → h₃ → y₃ → loss
←————————————————————————──── 反向传播
但这有一个致命问题——
第三站:梯度消失/爆炸
序列长了之后(比如 50 个 token),反向传播要穿过 50 个 tanh:
每个 是个矩阵,通常元素 < 1——50 个相乘 ≈ 0。
结果:远处时间步的梯度消失——模型学不会长距离依赖。
“我最爱的国家是法国,我喜欢吃 ___ “(30 个词之后才用到”法国”)——基础 RNN 学不到这种依赖。
第四站:LSTM 救场
1997 年 Hochreiter 和 Schmidhuber 提出 LSTM(Long Short-Term Memory)——专门为解决梯度消失设计。
LSTM 用一个**“细胞状态”** 像传送带一样直接穿过时间——绕过 tanh 的累乘:
细胞状态 c:══════════════════════════
↑ ↑ ↑ ↑
门 门 门 门
↑ ↑ ↑ ↑
隐藏状态 h:→ h₁ → h₂ → h₃ → h₄
三种”门”
LSTM 的 3 个 sigmoid 单元(输出 0-1)控制信息流:
| 门 | 公式 | 作用 |
|---|---|---|
| 遗忘门 | 决定从 丢弃多少 | |
| 输入门 | 决定加入多少新信息 | |
| 输出门 | 决定输出多少 |
LSTM 完整公式
公式看起来吓人,但本质就一句话:
LSTM 是一个有”门”的精密 RNN,能选择性地记住或忘记长距离信息。
用 PyTorch
import torch.nn as nn
lstm = nn.LSTM(input_size=128, hidden_size=256, num_layers=2, batch_first=True)
x = torch.randn(32, 10, 128) # (batch=32, seq_len=10, input_size=128)
output, (h, c) = lstm(x)
print(output.shape) # (32, 10, 256)
print(h.shape) # (2, 32, 256) — 2 层每层的最终隐藏
print(c.shape) # (2, 32, 256) — 细胞状态
第五站:GRU(简化版)
2014 年提出 GRU(Gated Recurrent Unit)——把 LSTM 的 3 个门合成 2 个,参数更少。
gru = nn.GRU(input_size=128, hidden_size=256, num_layers=2, batch_first=True)
实际效果接近 LSTM,计算更快。所以在小数据集或追求速度的场景,GRU 比 LSTM 受欢迎。
第六站:Seq2Seq 与 Attention 的萌芽
2014 年,Sutskever 等人提出 Seq2Seq——用两个 RNN 做翻译:
"I love AI"
↓
[Encoder RNN] → 最后一个 h_T(压缩全句信息)
↓
[Decoder RNN]
↓
"我喜欢人工智能"
但有个问题:整个源句子被压缩到一个固定大小的向量 。长句子塞不下。
2014-2015 年 Bahdanau 等人加了 Attention ——让 decoder 在每一步回头看 encoder 的所有 ,决定关注哪些。
这就是 Attention 的第一次出现。当时还是辅助 RNN 的”小工具”。
直到 2017 年 Attention Is All You Need 论文出来——完全砍掉 RNN,只用 Attention——才有了 Transformer 革命。
第七站:RNN 为什么”死了”
到 2026 年,主流 NLP/LLM 几乎完全抛弃了 RNN。原因:
1. 训练慢
RNN 必须串行计算(每一步等前一步)——GPU 并行能力浪费了。
一个 100 token 的序列在 Transformer 上是 1 步计算,在 RNN 上是 100 步。
2. 长依赖仍然不如 Attention
即使有 LSTM/GRU,处理超长依赖(>500 token)还是吃力。Attention 可以直接跨越任意距离。
3. 效果不如 Transformer
在几乎所有 NLP 基准上,Transformer 全面超越 LSTM——一旦数据规模上来,差距越拉越大。
第八站:RNN 还有用吗
少数场景下 RNN 仍然在用:
- 流式推理:实时语音识别、实时翻译——RNN 天然适合”边来边算”
- 资源极端紧张:边缘设备、嵌入式 IoT——RNN 模型小
- 时间序列预测:股票、天气——传统 ARIMA + LSTM 混合
- 某些 RL 场景:策略需要记忆历史
新研究还在探索 RNN 复兴:Mamba、RWKV、xLSTM 等”现代 RNN” 试图用 SSM(状态空间模型)做线性时间复杂度,挑战 Transformer。但目前 Transformer 仍是绝对主流。
一句话总结
RNN 教会我们”如何处理序列”——但它的串行计算和梯度问题,最终让位给了 Attention 和 Transformer。
学 RNN 不是因为它今天最强,是因为不懂它你无法理解为什么 Transformer 是革命。
2014-2017 年,几乎所有 NLP 论文都基于 RNN/LSTM。 2017 年 6 月那篇 Attention Is All You Need 改变了一切。 2018 年 BERT 出来后,RNN 在学术 NLP 圈基本退场。 3 年时间,一个统治了 10 年的范式被彻底取代。 这就是深度学习的节奏。
下一篇:《完整 Transformer 架构》 —— 把 attention(L3-05)+ 位置编码 + FFN + 残差连接组合起来。
读到这里说明你认真在学 🎯
订阅每周精选 —— 下一篇新文章 / 新可视化第一时间送到邮箱。
讨论区
· 用 GitHub 账号登录评论src/components/Comments.astro 顶部填入
仓库 ID 和分类 ID(见组件注释里的配置步骤)。