Transformer 相比 RNN 和 CNN 有什么优势?代价是什么?
简化版
Transformer 以自注意力实现全局信息混合。相比标准 RNN 的时间递归,它能在训练时并行计算序列位置;相比局部 CNN/RNN,全局注意力让任意两位置在一层内直接连接。优势是并行矩阵计算和短依赖路径,代价是 O(n²d) 算术量,以及朴素实现的 O(n²) 中间矩阵。它仍有全局连接、参数共享等归纳偏置,只是没有 CNN 的固定局部性或 RNN 的递归顺序;位置与因果性需显式设计。
详细版
三者的机制
- RNN/LSTM:按时间步递归,
h_t = f(h_{t-1}, x_t),用隐状态携带历史。 - CNN:用固定大小的卷积核在局部窗口滑动,靠堆叠扩大感受野。
- Transformer:自注意力让每个 token 直接与所有 token 交互,加权聚合。
关键维度对比
| 维度 | RNN/LSTM | CNN | Transformer |
|---|---|---|---|
| 序列并行 | 否(时间步串行) | 是 | 是 |
| 任意两点路径长度 | O(n) | O(n/k) 或 O(log_k n) | O(1) |
| 长程连接路径 | 递归路径长 | 由感受野与层数决定 | 全局注意力单层直连 |
| 每层计算复杂度 | O(n·d²) | O(n·k·d²) | O(n²·d) |
| 顺序/局部先验 | 递归顺序 | 固定局部性 | 无显式位置时置换等变、默认全局连接 |
| 长序列成本 | 线性 | 线性 | 二次(O(n²)) |
为什么并行和长程这两点如此关键
- 并行让 Transformer 能吃下海量数据、训超大模型,直接催生了大模型时代(RNN 因串行难以规模化)。
- 短路径让远处信息可直接交互,但能否可靠利用仍取决于训练数据、注意力分布和任务评测。
代价
- O(n²):长上下文计算和显存爆炸(催生 FlashAttention、稀疏注意力等)。
- 先验不同:它默认内容寻址和全局连接,而非固定局部窗口或递归状态;小数据下谁更好取决于任务与正则,不能一概而论。
完整版教学
一、先看 RNN 的两个致命短板
RNN/LSTM 曾是序列建模的主力,但有两个硬伤:
① 无法并行(串行瓶颈)。 RNN 的隐状态 h_t 依赖 h_{t-1},必须从左到右一步步算,第 t 步要等前 t−1 步都算完。这意味着序列越长,计算越无法用 GPU 的并行能力铺开,训练极慢。在「大数据 + 大模型」的路线上,串行是致命的——你没法高效地喂给它海量数据。
② 长程路径较长。 两个相距 n 的 token 需经过多次状态转移,梯度可能消失或爆炸。LSTM/GRU 的门控显著改善记忆,但递归路径与串行依赖仍存在;不能说所有长程信息必然衰减。
二、CNN 的改善与局限
CNN 把序列当一维信号,用卷积核在局部窗口提取特征:
- 能并行(各位置卷积独立),解决了 RNN 的串行问题。
- 但感受野受限于核大小:一层只能看到 k 个邻居,要覆盖远距离得堆很多层(感受野随层数线性或对数增长)。两个远端 token 要经过多层才能「相遇」,长程建模仍不直接。
- 好处是自带局部性先验,在局部模式(n-gram、局部纹理)上高效。
三、Transformer 的破局:自注意力
自注意力让每个 token 一次性与所有 token 直接交互,加权聚合信息。这带来两个质变:
① 完全并行。 所有位置的注意力可以同时算(一个大矩阵乘法),充分利用 GPU。训练时整条序列一起处理,不再有时间步串行。这是 Transformer 能规模化、能训超大模型的根本前提。
② 任意两点可在一层直连。 全局注意力图中两位置的最短连接为一层,这避免了必须逐位置传递;但 softmax 权重可能很小,模型也可能受干扰,因此“直连”不等于信息不会衰减或任务必然成功。
「路径长度」是理解优劣的关键指标:RNN 是 O(n)(要走 n 步)、CNN 是 O(log n)~O(n/k)(要过几层)、Transformer 是 O(1)(一层直达)。路径越短,长程信息越不易丢失、梯度越好传。
四、天下没有免费的午餐:Transformer 的代价
① O(n²) 的计算与显存。 每个 token 要和所有 token 算相关度,产生 n×n 的注意力矩阵,计算 O(n²·d)、显存 O(n²)。序列一长(32K、128K),成本二次爆炸。这催生了一整个「高效/长上下文」研究方向:FlashAttention(IO 优化、精确)、稀疏/线性注意力(降阶、近似)、滑动窗口、KV 压缩等。相比之下 RNN 是线性 O(n) 成本。
② 归纳偏置不同。 无位置自注意力是置换等变并默认全局内容寻址,这本身也是结构偏置,只是不含 CNN 的固定局部窗口与 RNN 的递归顺序。位置编码、因果 mask、滑窗和参数共享又会加入更多先验。小数据表现依任务而定,不能推出“必须大数据才有效”。
简要说权衡:Transformer 用二次全局交互成本换取训练期位置并行与一层直连;是否值得由序列长度、硬件和任务依赖结构决定。
五、为什么最终是 Transformer 赢了
把账算总:
- 大规模训练偏好高吞吐矩阵计算,标准 RNN 的时间依赖限制扩展;RNN 并未“出局”,仍适合流式和状态压缩场景。
- 语言、图像的高层语义高度依赖长程、全局关系,自注意力的 O(1) 路径最擅长这个。
- 灵活的内容寻址、统一架构与成熟硬件 kernel 共同推动规模化,并非单一 Scaling Law 自动选出 Transformer。
- FlashAttention 减少 IO 和中间存储,但不降低全局注意力 O(n²d) 算术阶;极长序列仍可能更适合局部、递归或状态空间结构。
这些因素叠加,让 Transformer 从 NLP 一路统一到视觉(ViT)、语音、多模态。
六、比较长度 1024 时的信息路径
在单向 RNN 中,第 1 个 token 的信息要影响第 1024 个 token,至少经过 1023 次递归状态传递,训练也难以在时间维完全并行。全局 self-attention 在一层内就能建立两者的直接连接,但要计算约 1024²≈105 万 个位置对;一维 CNN 若 kernel=3,则单层只能扩大有限感受野,需要堆叠或空洞卷积才能覆盖远距离。
RNN: token1 -> h2 -> h3 -> ... -> h1024
CNN: token1 -> local windows -> deeper receptive field
Attention: token1 -----------------> token1024
| 架构 | 最长依赖路径 | 序列并行性 | 长序列主要代价 |
|---|---|---|---|
| RNN | O(n) | 低 | 串行与梯度传播 |
| 局部 CNN | 随层数缩短 | 高 | 需加深或扩大卷积核 |
| 全局 Attention | O(1) 每层直连 | 高 | O(n²) 位置交互 |
Transformer 的胜出是并行训练、全局交互和规模化效率的组合,并不是所有序列任务上都无条件优于 CNN/RNN。流式、超长或算力受限场景仍可能选择局部注意力、状态空间模型或混合结构。
七、常见误区与追问
- 误区:Transformer 在任何序列长度上都比 RNN 快。 训练并行性更强,但全局注意力的平方成本在超长序列上可能成为更大瓶颈。
- 追问:RNN 的长依赖为什么难学? 信息和梯度要经过很多递归状态,路径长且时间步无法完全并行。
- 追问:CNN 如何扩大序列感受野? 可堆叠更多层、增大卷积核或使用空洞卷积,但连接通常仍受固定局部模式约束。
- 误区:Self-Attention 天然知道顺序。 不注入位置编码时它对置换等变,无法区分相同 token 的不同排列。
- 追问:什么场景可能不用全局 Transformer? 流式低延迟、极长序列或边缘设备可选局部注意力、状态空间模型或混合结构。
八、加强记忆
Transformer vs RNN/CNN 记三条轴:训练期序列并行、依赖路径和长序列成本。标准 RNN 有递归串行与 O(n) 路径,局部 CNN 的路径由核、空洞和层数决定,全局注意力一层直连但计算为 O(n²d),朴素中间矩阵为 O(n²)。直连不保证学会远距依赖,Transformer 也不是“无归纳偏置”。最终按流式要求、长度、数据、硬件与质量选择,FlashAttention 只优化执行,不消除二次算术。