HelloAI
L3 第 4 篇 🐣 难度 🕒 12 分钟

RNN / LSTM 兴衰:序列模型简史

2017 年 Transformer 出现前,所有处理语言/语音的 AI 都靠 RNN 和它的衍生品。理解它的兴衰,才理解为什么 attention 是革命。

阿莱
2026/7/2

L3-01 我们看到 MLP 不能处理序列——它把每个位置看成独立的。

但语言、语音、视频、时间序列——全都有顺序

2017 年 Transformer 出来之前的 10 年里,处理序列的主流是 RNN(循环神经网络) 及其改进版。理解 RNN 的兴衰,是理解 Attention 为什么是革命的前置课

第一站:RNN 的核心思想

序列处理的本质要求:当前位置的输出,应该依赖前面所有位置的信息

MLP 不行——它只看当前输入。

RNN 的招数:引入一个”隐藏状态” hh,让它在时间维度上传递

        h₀

x₁  →  [RNN cell]  →  y₁

        h₁

x₂  →  [RNN cell]  →  y₂

        h₂

x₃  →  [RNN cell]  →  y₃

每一步用同一个网络(参数共享),但接收两个输入:

  • 当前 token 的 xtx_t
  • 上一步的隐藏状态 ht1h_{t-1}

输出:

  • 当前隐藏状态 hth_t
  • 当前预测 yty_t

公式

ht=tanh(Whhht1+Wxhxt+b)h_t = \tanh(W_{hh} h_{t-1} + W_{xh} x_t + b) yt=Whyht+cy_t = W_{hy} h_t + c

参数 Whh,Wxh,WhyW_{hh}, W_{xh}, W_{hy} 是要学的,在所有时间步上共享

隐藏状态 hth_t 就是”模型的短期记忆”——它压缩了前面所有 token 的信息。

第二站:RNN 的训练

通过时间反向传播(BPTT, Backpropagation Through Time)——把整个时间序列展开,当成一个超深的网络做反向传播。

x₁ → h₁ → x₂ → h₂ → x₃ → h₃ → y₃ → loss
        ←————————————————————————────  反向传播

但这有一个致命问题——

第三站:梯度消失/爆炸

序列长了之后(比如 50 个 token),反向传播要穿过 50 个 tanh:

Lh1=Lh50t=250htht1\frac{\partial L}{\partial h_1} = \frac{\partial L}{\partial h_{50}} \cdot \prod_{t=2}^{50} \frac{\partial h_t}{\partial h_{t-1}}

每个 htht1\frac{\partial h_t}{\partial h_{t-1}} 是个矩阵,通常元素 < 1——50 个相乘 ≈ 0

结果:远处时间步的梯度消失——模型学不会长距离依赖。

“我最爱的国家是法国,我喜欢吃 ___ “(30 个词之后才用到”法国”)——基础 RNN 学不到这种依赖。

第四站:LSTM 救场

1997 年 Hochreiter 和 Schmidhuber 提出 LSTM(Long Short-Term Memory)——专门为解决梯度消失设计。

LSTM 用一个**“细胞状态”** ctc_t 像传送带一样直接穿过时间——绕过 tanh 的累乘:

细胞状态 c:══════════════════════════
            ↑     ↑     ↑     ↑
            门   门    门    门
            ↑     ↑     ↑     ↑
隐藏状态 h:→ h₁ → h₂ → h₃ → h₄

三种”门”

LSTM 的 3 个 sigmoid 单元(输出 0-1)控制信息流:

公式作用
遗忘门 ftf_tft=σ(Wf[ht1,xt])f_t = \sigma(W_f \cdot [h_{t-1}, x_t])决定从 ct1c_{t-1} 丢弃多少
输入门 iti_tit=σ(Wi[ht1,xt])i_t = \sigma(W_i \cdot [h_{t-1}, x_t])决定加入多少新信息
输出门 oto_tot=σ(Wo[ht1,xt])o_t = \sigma(W_o \cdot [h_{t-1}, x_t])决定输出多少

LSTM 完整公式

c~t=tanh(Wc[ht1,xt]+bc)(候选新信息)ct=ftct1+itc~t(细胞状态更新)ht=ottanh(ct)(隐藏状态)\begin{aligned} \tilde{c}_t &= \tanh(W_c \cdot [h_{t-1}, x_t] + b_c) & \text{(候选新信息)} \\ c_t &= f_t \odot c_{t-1} + i_t \odot \tilde{c}_t & \text{(细胞状态更新)} \\ h_t &= o_t \odot \tanh(c_t) & \text{(隐藏状态)} \end{aligned}

公式看起来吓人,但本质就一句话:

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]

                  "我喜欢人工智能"

但有个问题:整个源句子被压缩到一个固定大小的向量 hTh_T。长句子塞不下。

2014-2015 年 Bahdanau 等人加了 Attention ——让 decoder 在每一步回头看 encoder 的所有 hth_t,决定关注哪些。

这就是 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 账号登录评论
⚠️ Giscus 评论未配置 —— 在 src/components/Comments.astro 顶部填入 仓库 ID 和分类 ID(见组件注释里的配置步骤)。