Ch09 Transformer修订于 二〇二六年七月二日

9.1 为什么需要 Transformer — RNN 的困境

9.1.0 生活比喻:流水线工人 vs 全体同时阅读

想象一个翻译团队处理一篇 100 页的文件。RNN 模式:只有一个人工作,他从第 1 页逐页读到第 100 页。读到第 50 页时,他对第 1 页的记忆已经模糊。速度受限于一个人的阅读速度,其他人帮不上忙——每一步都必须等前一步完成。

Transformer 模式:100 个人同时每人负责一页,每个人可以随时查阅任何其他页的内容。读到第 50 页的人可以直接翻到第 1 页去确认术语定义,也可以跳到第 80 页去建立联系。所有 100 人同时工作,没有先后依赖。

这个比喻抓住了 Transformer 的两个核心优势:并行(所有人同时工作)和直接长距离访问(任何时候都能看到任何位置)。本节从 RNN 的困境出发,层层递进地理解这两个优势为什么是革命性的。

在 Transformer 之前,序列建模靠 RNN/LSTM。问题不是单一的,而是层层叠加的:

9.1.1 RNN 的串行瓶颈

RNN 的核心公式:h_t = f(h_{t-1}, x_t),其中 h_t 是当前时刻的隐藏状态,x_t 是当前输入。这个公式看似简单,但隐藏了一个致命约束:要计算 h_t,必须先算完 h_{t-1};要算 h_{t-1},必须先算完 h_{t-2}。整个序列必须按时间步逐个处理,像一条单行道,前面的车不走,后面的车永远过不去。

在训练时,反向传播通过时间(BPTT)展开整个计算图,但展开后的图仍然是串行的——每一步都依赖前一步的梯度。这意味着:

  • 处理长度为 n 的序列需要 O(n) 个串行步骤。对于 2026 年的 LLM 处理 128K token 的上下文,这意味着 128000 次串行计算,每一步都必须等待前一步完成
  • GPU 拥有数千个核心,专门为并行计算设计。但 RNN 在时间维度上只能用 1 个核心,其余全部闲置。这是对 GPU 计算能力的巨大浪费
  • 训练一个 RNN 处理长序列的时间,可能比训练一个同等规模的 Transformer 慢 10-100 倍

9.1.2 LSTM/GRU 的改进与局限

LSTM 引入了三个门控机制来缓解梯度问题:

  • 遗忘门 f_t = σ(W_f [h_{t-1}, x_t]):决定丢弃哪些旧信息
  • 输入门 i_t = σ(W_i [h_{t-1}, x_t]):决定写入哪些新信息
  • 输出门 o_t = σ(W_o [h_{t-1}, x_t]):决定输出哪些信息

细胞状态 c_t = f_t ⊙ c_{t-1} + i_t ⊙ tanh(W_c [h_{t-1}, x_t]) 通过加法操作(而非乘法)让信息可以跨越多个时间步几乎无损地传递。这在一定程度上缓解了梯度消失问题——遗忘门全开时,c_t 就是 c_{t-1} 的复制,梯度可以畅通无阻地回传。

GRU 进一步简化:合并细胞状态和隐藏状态,用两个门(重置门 r_t 和更新门 z_t)替代三个门,参数量更少,效果相当。

但 LSTM/GRU 的局限在于:门控机制缓解了梯度消失,但并没有解决串行依赖的根本问题。h_t 的计算仍然依赖 h_{t-1}。对于长度为 1000 的序列,仍然需要 1000 步串行计算。当序列长度达到 10000 甚至 100000 时,LSTM 的训练速度仍然慢得不可接受。

此外,LSTM 虽然理论上能记住更长的依赖关系,但实践中,超过 100 步的依赖仍然难以可靠捕获。门控是”缓解”而不是”解决”。

9.1.3 Seq2Seq 的信息瓶颈

Seq2Seq 模型(Sutskever et al., 2014)将编码器和解码器各用一个 RNN 实现:

  • 编码器处理整个输入序列,将全部信息压缩成一个固定长度的上下文向量 c
  • 解码器从 c 出发,逐步生成输出序列

问题在于 c 是固定大小的。无论输入序列是一个 5 词的短句还是一篇 1000 词的文档,都必须全部塞进同一个向量里。对于长输入,早期信息被后来信息不断”冲刷”——编码器最后几步的输出实际上主导了 c 的内容,而开头的关键信息可能已经完全丢失。

这就像让一个人一次性读完一本 500 页的书,然后凭记忆逐字翻译——越靠后的内容记得越清楚,越靠前的内容越模糊。这就是”信息瓶颈”(information bottleneck)。

9.1.4 注意力机制的萌芽:Bahdanau 2014

Bahdanau 等人(2014)提出了一个关键改进:不让解码器只看一个固定的上下文向量,而是让它在每一步都能”回顾”编码器的所有隐藏状态。

具体做法:在解码的每一步 t,计算当前解码器状态与所有编码器状态的相似度分数,然后加权求和:

α_{t,i} = softmax(score(h_i^enc, h_t^dec))    -- 注意力权重
c_t = Σ α_{t,i} · h_i^enc                       -- 上下文向量

这被称为”软注意力”(soft attention),因为权重 α 是连续的(0 到 1 之间),解码器可以同时关注多个位置。与之相对的是”硬注意力”(hard attention),只选一个位置。

Bahdanau 注意力解决了信息瓶颈问题——解码器不再受限于一个向量,而是可以动态选择关注输入的不同部分。机器翻译的 BLEU 分数因此大幅提升,尤其是长句翻译。

但 Bahdanau 注意力仍然有一个未解决的问题:解码器本身仍然是串行的。解码器的每一步仍然依赖上一步的隐藏状态。注意力机制让解码器看得更广,但没有让它跑得更快。

9.1.5 Transformer 的杀手特性

Transformer 的两个核心创新,一次性解决了上述所有问题:

(1)完全并行。 自注意力层中,所有位置的表示同时计算。不再有”第 t 步必须等第 t-1 步”的串行依赖。在每一层内部,n 个 token 的计算可以完全并行。对于 GPU 来说,这意味着成千上万个核心可以同时工作。一个长度为 10000 的序列,RNN 需要 10000 个串行步骤,而 Transformer 只需要 O(1) 个串行步骤(每层一个)。

(2)直接建模任意距离依赖。 在自注意力中,任意两个 token 之间的信息传递路径长度是 O(1)——它们之间只有一次点积运算。相比之下,RNN 中第 100 个词和第 1 个词之间的路径长度是 O(100)(需要经过 100 个时间步的隐藏状态传递)。路径越短,梯度越容易传播,依赖越容易学习。

总结:并行 = 训练快,直接依赖 = 学习好。 这两个特性加在一起,让 Transformer 成为序列建模的事实标准。接下来 9.2 节 逐步骤拆解自注意力的内部运算,9.3 节 解释为什么要让多个注意力头并行工作。

1; 2; 3; 4


← 上一节:章首 | 下一节:9.2 自注意力机制 — 深度拆解 →

注释

  1. Vaswani et al., “Attention Is All You Need”, 2017, https://arxiv.org/abs/1706.03762 ↩

  2. Bahdanau et al., “Neural Machine Translation by Jointly Learning to Align and Translate”, 2014, https://arxiv.org/abs/1409.0473 ↩

  3. Sutskever et al., “Sequence to Sequence Learning with Neural Networks”, 2014, https://arxiv.org/abs/1409.3215 ↩

  4. Jay Alammar, “The Illustrated Transformer”, https://jalammar.github.io/illustrated-transformer/ ↩

关联6

知识图谱

局部图谱 · 点节点跳转