Transformer 为什么比 RNN 快
一句话速记
说「快」时默认指训练与单次前向在 GPU 上更好并行:RNN 在时间维上步与步串行,Transformer 在训练阶段可对全序列各位置用矩阵一次性算自注意力。推理阶段自回归生成本质仍是步进,但单次前向内部仍是高并行。
必须先拆「训练 vs 推理」,不拆容易被追问穿。
先澄清:「快」指什么
| 阶段 | RNN / LSTM | Transformer | 谁通常更快、为什么 |
|---|---|---|---|
| 训练(有整句标签,一次前向要算全序列) | 时间步 t 依赖 t−1 的 h_{t-1},时间维上串行 | 自注意力在实现上为 Q、K、V 与序列长度 n 的矩阵乘,n 个位置在硬件上可并行 | 训练通常 Transformer 更吃满 GPU、 wall-clock 更短(同算力、可比设置下,粗结论) |
| 推理(自回归,一个一个吐 token) | 每步只算一个 h_t,步与步仍串行 | 每步要算当前已生成前缀上的注意力,步与步仍串行;但单步前向内部是大矩阵 | 每步延迟上不一定「RNN 更慢、Transformer 更快」的绝对关系;吞吐上往往仍是 Transformer 更有优势(大 GEMM、工程优化多) |
所以:真正拉开差距的,是「训练 / 有监督的一次前向」里能不能把时间维并掉,不是「Transformer 发 token 不要时间」。
为什么训练阶段 Transformer 能并行、RNN 不能
- RNN 一步:
h_t = f(x_t, h_{t-1})。算h_t必须先有h_{t-1},时间维依赖链 → 无法对 t=1…n 在单遍里完全并行完整个网络的前向(同一层上)。 - Transformer 一步(单层):每个位置 i 的表示由所有位置的 K、V 与当前 Q 一起算。实现上为矩阵运算(形状大致
(n, d)与(d, d)类乘法),单遍前向里同时更新所有位置(在该层内)。
和 GPU 的关系(加分点)
- GPU 对 大矩阵乘(GEMM) 极友好;大量小步串行 则容易「吃不饱」。
- RNN 长序列 = 多步小算子串成链;Transformer 在单层内 = 少批大矩阵 → 更匹配 GPU 形态(粗直觉,具体还看实现和 batch)。
复杂度(避免被追问时懵)
-
RNN 单序列单步(一个时间步、一层):约
O(d²)量级(与d相关的矩阵向量乘,取决于实现)。 -
全序列 n、一层(RNN):必须走 O(n) 个时间步,总代价约 O(n·d²),且时间步串行。
-
Self-Attention 一层(序列长度 n、隐藏维 d、单头,忽略常数与多头):
算Q, K, V为O(n·d²),算QK^T为O(n²·d),再与 V 为O(n²·d)。
随 n 的瓶颈往往是 O(n²·d)(当 n 很大时压过线性项)。 -
重要:Transformer 训练快 说的是 能并行 + 大矩阵适合 GPU;不是 说复杂度一定比 RNN 低。n 很大时,注意力的 n² 还会变成长上下文瓶颈(FlashAttention 等要解决的也是这块)。
和「路径长度」那套话的区别
- RNN:信息从位置 1 到位置 n 在隐状态里要「走」约 O(n) 步,长距依赖还衰减。
- Transformer(单层自注意力):任意两位置在一层内经注意力直接连边,表示路径 O(1) 层(指深度),利于建模远距关系。
这一点通常说成「长距离、不经过 O(n) 个时间步的压缩」,更偏效果与表示能力;「快」 主要指 计算并行与硬件利用率。别混成一句糊话。
延伸追问
-
Q:推理时生成一句话,也是 Transformer 更快吗?
答:自回归下外层的步数仍是「每生成 1 个 token 要跑 1 次前向」;RNN 也一样。快不快看单步前向的算子形态、工程(KV Cache 等)和算力。不要答「推理一定快一倍」这种绝对话。 -
Q:那 Transformer 相对 RNN 的核心优势是什么?
答三点拆开:(1) 训练时可并行 (2) 远距依赖表示路径短 (3) 规模化(堆层、大矩阵)在工程上更顺。不打包成「就是快」。 -
Q:Transformer 有没有比 RNN 更慢的时候?
答:n 小、层浅、要极致低延迟的端侧 有时小 RNN 更省;n 很大 时注意力 O(n²) 显存和算力都顶;长上下文要用 FlashAttention、稀疏注意力、线性注意力、RNN/Mamba 系等折中。 -
Q:KV Cache 是什么、跟「快」有啥关系?(追问常见)
答:自回归时已生成位置的 K、V 不重复算,缓存起来,新一步只算新 token 的 K、V 并拼上,避免每步 O(n²) 里重复部分爆掉。这是推理工程侧的「快」。
我的记法
TODO
状态
- 已背速记
- 能讲通俗版
- 能答追问
- 在实际场景中用上过
参考资料
- Vaswani et al., 2017(并行与注意力动机)
- FlashAttention: Fast and Memory-Efficient Exact Attention(长序列工程)