从 RNN 到 Transformer--序列建模架构的演进与变革(一)

目录

一、人工智能发展简史:四条主线与三次范式迁移

理解 Transformer 为什么会出现,先要理解它要替代的东西是在什么背景下长出来的。人工智能七十多年的发展,可以粗略划分为四个阶段。

1.1 符号主义时代(1950s–1980s):规则与搜索

年份事件意义
1943McCulloch-Pitts 神经元模型用数学形式描述神经元,连接主义的种子
1950图灵《计算机器与智能》提出图灵测试从哲学层面定义”机器能否思考”
1956达特茅斯会议“Artificial Intelligence” 一词正式诞生,领域确立
1958Rosenblatt 感知机(Perceptron)第一个可学习的线性分类器,硬件实现 Mark I
1969Minsky & Papert《Perceptrons》指出感知机无法解决 XOR,第一次 AI 寒冬的直接导火索

这一阶段的核心假设是**“智能 = 符号操作 + 逻辑推理”**:知识用规则显式编码,问题求解靠搜索。典型产物是专家系统(如 MYCIN)和定理证明器。

架构特征:系统由”知识库 + 推理引擎”两部分硬耦合构成,知识获取依赖人工录入。这条路线最终撞上了知识获取瓶颈——现实世界的常识无法被穷举成规则。

1.2 连接主义复兴与统计学习(1980s–2000s):从规则到数据

  • 1982:Hopfield 网络,用能量函数把记忆与联想引入神经网络。
  • 1986:Rumelhart、Hinton、Williams 系统阐述反向传播算法,让多层网络的训练成为可能。
  • 1989 / 1998:LeCun 的 LeNet 用于手写数字识别,卷积的局部感受野 + 权值共享思想成型,成为此后二十年视觉架构的范式。
  • 1990s–2000s:SVM、决策树、Boosting、概率图模型等统计机器学习方法占据主流。它们有扎实的理论基础、在小数据上表现优异,但依赖人工特征工程。

范式迁移的第一次转折:智能的来源从”人写规则”转向”从数据中学习参数”。但受限于算力和数据规模,网络做不深,特征仍需人工设计。

1.3 深度学习爆发(2006–2017):表征学习的胜利

三个条件同时成熟:大规模标注数据(ImageNet)+ GPU 算力 + 深层网络训练技巧。

  • 2006:Hinton 提出深度信念网络与逐层预训练,重启对”深度”的信心。
  • 2012:AlexNet 在 ImageNet 上以压倒性优势夺冠,ReLU、Dropout、GPU 并行训练三板斧成为标配。计算机视觉被彻底重构。
  • 2014:
    • Sutskever 等提出 Seq2Seq(Encoder-Decoder),把 RNN 用于机器翻译,序列到序列学习范式确立;
    • Bahdanau 等在 Seq2Seq 上引入 Attention,让解码器在每一步动态”回看”编码器所有时刻的状态——这是 Transformer 最直接的思想源头;
    • Goodfellow 提出 GAN,生成模型进入对抗范式。
  • 2015:ResNet 用残差连接把网络深度推到上百层,解决了深度网络的优化难题。
  • 2016:AlphaGo 战胜李世石,强化学习 + 深度网络出圈。

范式迁移的第二次转折:特征工程被表征学习取代。模型不再需要人告诉它”什么是边缘”,而是自己从数据中逐层抽象出层次化的表示。

但这一时期,序列建模(NLP、语音、时间序列)的主力架构仍是循环神经网络,它的结构性缺陷开始成为整个领域的天花板。

1.4 大模型时代(2017–至今):架构统一与规模定律

  • 2017:Google 发表 Attention Is All You Need,提出 Transformer。
  • 2018:BERT(Encoder-only,双向预训练)与 GPT(Decoder-only,自回归预训练),确立 “大规模预训练 + 下游微调” 范式。
  • 2020:GPT-3(1750 亿参数)展示少样本学习能力;ViT 把 Transformer 引入视觉,CNN / RNN / Transformer 三足鼎立的局面开始向 Transformer 收敛。
  • 2022–至今:ChatGPT 引爆生成式 AI;随之而来的是 Scaling Law、RLHF、指令微调、MoE 稀疏化、长上下文、多模态、推理模型(o1 / R1 系列)的密集迭代。

范式迁移的第三次转折:模型架构趋于统一与通用。同一个 Transformer 骨架可以处理文本、图像、音频、视频、代码、分子结构——这是 RNN 时代不可想象的。

一句话概括这段历史:符号主义解决了”如何表示知识”,统计学习解决了”如何从数据中学习”,深度学习解决了”如何自动学特征”,而 Transformer 解决的是”如何让学习过程规模化、并行化”。


二、序列建模的”循环”时代:RNN / LSTM / GRU

2.1 RNN:把”时间”引入神经网络

CNN 处理的是空间上的局部相关性(图像),而语言、语音、时序信号的核心特征是顺序依赖——当前时刻的理解依赖历史。RNN 的设计直觉极其朴素:

在网络中引入一个”记忆单元”,把上一时刻的隐状态传给下一时刻。

核心结构

按时间步展开后的 RNN:

graph LR
    X1((x₁)) --> H1((h₁))
    X2((x₂)) --> H2((h₂))
    X3((x₃)) --> H3((h₃))
    Xt((xₜ)) --> Ht((hₜ))
    H1 -->|W_hh| H2 -->|W_hh| H3 -->|W_hh| Ht
    H1 --> Y1((y₁))
    H2 --> Y2((y₂))
    H3 --> Y3((y₃))
    Ht --> Yt((yₜ))

数学形式(Elman RNN):

h_t = tanh(W_xh · x_t + W_hh · h_{t-1} + b_h)
y_t = W_hy · h_t + b_y

其中 h_t ∈ ℝ^d 是隐状态(记忆),W_hh 是跨时间共享的状态转移矩阵。

架构特性

特性说明
参数共享所有时间步复用同一套 W_xh / W_hh / W_hy,参数量与序列长度无关
变长输入天然支持任意长度序列
状态传递h_t 理论上可编码截至 t 的全部历史信息
训练算法BPTT(Backpropagation Through Time),按时间展开后反向传播

四种典型拓扑

结构示意典型任务
N → N每步都输出序列标注(词性标注、NER)
N → 1只在末步输出文本分类、情感分析
1 → N单输入展开成序列图像描述生成
N → MEncoder-Decoder机器翻译、摘要、对话

其中 N→M 的 Seq2Seq 是当时最重要的架构:编码器把源序列压缩成一个定长向量 c,解码器从 c 出发生成目标序列。

2.2 痛点一:长程依赖与梯度消失 / 爆炸

这是 RNN 的致命伤,必须讲清楚数学根源。

梯度为什么消失

考虑损失 L_t 对 k 时刻隐状态 h_k 的梯度(k ≪ t),由链式法则:

∂L_t / ∂h_k = ( ∂L_t / ∂h_t ) · ∏_{j=k+1}^{t} ( ∂h_j / ∂h_{j-1} )

而

∂h_j / ∂h_{j-1} = diag( tanh'(z_j) ) · W_hh

于是梯度包含 (W_hh)^(t-k) 的连乘:

  • 若 W_hh 的谱半径 < 1(且 tanh 导数 ≤ 1,多数区域 < 1)→ 连乘结果指数级趋近 0 → 梯度消失,早期时刻的参数几乎学不到东西;
  • 若谱半径 > 1 → 指数级发散 → 梯度爆炸,参数更新震荡、NaN。

后果

  • 模型只能记住最近几十个时间步的信息,无法建模跨句、跨段落的依赖;
  • 典型表现:翻译长句时主语-谓语一致性、指代关系崩坏;语言模型”说完上句忘了下句”;
  • 梯度裁剪(Gradient Clipping)能救爆炸,但救不了消失——它不改变连乘的衰减本质。

本质问题:信息在时间轴上的传递路径长度是 O(n),路径越长,信息损耗越严重。

2.3 LSTM:用”门控”造一条梯度高速公路

1997 年 Hochreiter & Schmidhuber 提出 LSTM(Long Short-Term Memory),核心思路是:

把”记忆”和”输出”解耦,并为记忆单元开辟一条梯度可以无损通过的线性通路。

结构:三门 + 细胞状态

graph LR
    subgraph Cell["LSTM Cell @ time t"]
        X((xₜ)) --> C1
        Hp((hₜ₋₁)) --> C1
        C1{{"拼接 [hₜ₋₁, xₜ]"}}
        C1 --> F["fₜ 遗忘门 σ"]
        C1 --> I["iₜ 输入门 σ"]
        C1 --> O["oₜ 输出门 σ"]
        C1 --> G["C̃ₜ 候选状态 tanh"]
        F --> M1(("⊙"))
        I --> M2(("⊙"))
        G --> M2
        M1 --> A(("⊕"))
        M2 --> A
        A --> Ct((Cₜ))
        Ct --> T["tanh"]
        O --> M3(("⊙"))
        T --> M3
        M3 --> Ht((hₜ))
    end

数学形式:

f_t = σ(W_f · [h_{t-1}, x_t] + b_f)          # 遗忘门:丢弃多少旧记忆
i_t = σ(W_i · [h_{t-1}, x_t] + b_i)          # 输入门:写入多少新信息
õ_t = tanh(W_C · [h_{t-1}, x_t] + b_C)       # 候选状态
C_t = f_t ⊙ C_{t-1} + i_t ⊙ õ_t              # 细胞状态更新(线性!)
o_t = σ(W_o · [h_{t-1}, x_t] + b_o)          # 输出门
h_t = o_t ⊙ tanh(C_t)                        # 隐状态

为什么能缓解梯度消失

对细胞状态求导(忽略其他路径,只看主通路):

∂C_t / ∂C_{t-1} = diag(f_t) + ... ≈ diag(f_t)

关键洞察:这是一条加性更新而非乘性变换。当遗忘门 f_t ≈ 1(模型学会”什么都不忘”)时,梯度可以几乎无损地从 t 时刻一路传回第 1 个时刻——这就是所谓的 Constant Error Carousel(CEC,常数误差流),相当于在时间轴上修了一条”梯度高速公路”。

代价

代价说明
参数量 ×4四组门控矩阵,参数量为普通 RNN 的 4 倍
计算更慢每步要做 4 次矩阵乘 + 逐元素运算
显存更贵需同时保存 C_t 与 h_t 两条状态轨迹
串行本质未变C_t 依赖 C_{t-1},依然无法并行
仍是有限记忆细胞状态维度固定,超长序列依然会”挤爆”

2.4 GRU:极简主义的重构

2014 年 Cho 等提出 GRU(Gated Recurrent Unit),是一次做减法的工程优化:

z_t = σ(W_z · [h_{t-1}, x_t])                # 更新门(融合 输入门+遗忘门)
r_t = σ(W_r · [h_{t-1}, x_t])                # 重置门
h̃_t = tanh(W · [r_t ⊙ h_{t-1}, x_t])         # 候选状态(受重置门控制)
h_t = (1 - z_t) ⊙ h_{t-1} + z_t ⊙ h̃_t        # 线性插值更新

与 LSTM 的差异

维度LSTMGRU
门数量3(遗忘 / 输入 / 输出)2(更新 / 重置)
状态双状态 C_t + h_t单状态 h_t
参数量4·(d²+d·d_in)3·(d²+d·d_in)(约 75%)
输出门有(独立控制读出)无(读出 = 状态本身)
训练速度慢更快(约 20–30% 提升)
效果长序列、大数据上略优中小规模数据上常相当甚至更优

工程选型经验:没有绝对优劣。数据量小 / 追求训练速度 / 算力受限选 GRU;序列极长 / 数据充足 / 需要精细记忆控制选 LSTM。

2.5 循环时代的五大架构瓶颈(关键转折)

即便有了 LSTM/GRU,RNN 家族仍有一组结构性、无法通过调参或堆算力解决的问题。这正是 Transformer 诞生的直接动因:

瓶颈 1:串行计算,无法并行 —— 算力的浪费

h_1 → h_2 → h_3 → ... → h_n

每个时间步的计算严格依赖上一步的输出。这意味着:

  • 单条序列内部的时间维度完全无法并行,只能 batch 维度并行;
  • 训练时间复杂度为 O(n) 串行步数,序列越长越慢;
  • GPU 的 SIMD 并行能力被严重浪费——RNN 是典型的访存密集 + 小矩阵乘,MFU(模型算力利用率)极低。

这是最致命的工程问题:算力在指数增长,而 RNN 吃不下这些算力。

瓶颈 2:信息通路长度 O(n),长程依赖天然衰减

即使 LSTM 缓解了梯度消失,信息从位置 1 传到位置 n 仍需穿过 n 个模块,每经过一次非线性变换就有一次损耗。路径越长,保真度越低。

瓶颈 3:Encoder-Decoder 的”信息瓶颈”

Seq2Seq 把整句压缩成一个定长向量 c:

源句(可能 80 个词) → [固定维度向量 c] → 目标句

无论句子多长、信息多复杂,都必须塞进同一个向量。前言被后语覆盖、细节被主旨淹没是必然结果。

瓶颈 4:层次化特征难堆叠

深层 RNN(堆叠多层)训练极难稳定,通常堆到 2–4 层就收益递减;而视觉领域的 CNN 已经能堆到上百层(ResNet)。序列建模缺少”深度”这一维度。

瓶颈 5:可解释性差

隐状态是一个不可分解的稠密向量,很难回答”模型在生成这个词时,到底参考了输入的哪一部分”。

2.6 破局的火种:Attention(2014)

Bahdanau 等人在 Seq2Seq 上做了一个关键改动:不再把源句压成单一向量,而是保留编码器所有时刻的隐状态 {h_1, ..., h_n},让解码器在每一步自己决定该”看”哪些。

对齐分数:e_{t,i} = a(s_{t-1}, h_i)
注意力权重:α_{t,i} = softmax(e_{t,i})
上下文向量:c_t = Σ_i α_{t,i} · h_i

这一改动的效果是革命性的:

  • 信息通路从 O(n) 缩短为 O(1)——解码器可以直接”跳”到任意编码器时刻;
  • 注意力权重可视化后,甚至能自动对齐双语词序,可解释性大幅提升。

但它的载体仍然是 RNN:编码器必须串行跑完才能拿到所有 h_i,解码器也必须串行推进。循环结构依然是瓶颈,注意力只是挂在上面的一个补丁。

于是问题变得清晰了:

既然 Attention 已经能完成信息的聚合,那”循环”还有必要吗?

评论