← 返回题目列表

Transformer 相比 RNN 和 CNN 有什么优势?代价是什么?

高频 中等 第 10 / 25 题 更新于 2026/09/18
TransformerRNNCNN自注意力并行

简化版

Transformer 用自注意力取代了 RNN 的递归和 CNN 的卷积,核心优势有两个:① 可并行——RNN 必须按时间步一个个算(无法并行),Transformer 一次性并行处理整个序列,训练大幅提速;② 长程依赖强——自注意力让任意两个 token 之间是「一步直达」(路径长度 O(1)),而 RNN 要经过很多步、信息会逐渐衰减(梯度消失),CNN 要堆很多层才能覆盖远距离。代价是自注意力的计算和显存是 O(n²)(序列越长越贵),且没有内建的顺序/局部先验,需要额外的位置编码。

详细版

三者的机制

  • RNN/LSTM:按时间步递归,h_t = f(h_{t-1}, x_t),用隐状态携带历史。
  • CNN:用固定大小的卷积核在局部窗口滑动,靠堆叠扩大感受野。
  • Transformer:自注意力让每个 token 直接与所有 token 交互,加权聚合。

关键维度对比

维度RNN/LSTMCNNTransformer
序列并行否(时间步串行)
任意两点路径长度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、稀疏注意力等)。
  • 无归纳偏置:不像 CNN 有局部性、RNN 有顺序性,Transformer 要靠位置编码补顺序,且数据量小时不如有先验的模型,得靠大数据才能发挥。

完整版教学

一、先看 RNN 的两个致命短板

RNN/LSTM 曾是序列建模的主力,但有两个硬伤:

① 无法并行(串行瓶颈)。 RNN 的隐状态 h_t 依赖 h_{t-1},必须从左到右一步步算,第 t 步要等前 t−1 步都算完。这意味着序列越长,计算越无法用 GPU 的并行能力铺开,训练极慢。在「大数据 + 大模型」的路线上,串行是致命的——你没法高效地喂给它海量数据。

② 长程依赖弱(信息衰减)。 两个相距 n 的 token,信息要经过 n 步递归传递,梯度在这条长链上反复相乘,容易梯度消失或爆炸,远处的信息被逐渐「遗忘」。LSTM/GRU 用门控缓解,但根本上仍难建模很长的依赖。

二、CNN 的改善与局限

CNN 把序列当一维信号,用卷积核在局部窗口提取特征:

  • 能并行(各位置卷积独立),解决了 RNN 的串行问题。
  • 感受野受限于核大小:一层只能看到 k 个邻居,要覆盖远距离得堆很多层(感受野随层数线性或对数增长)。两个远端 token 要经过多层才能「相遇」,长程建模仍不直接。
  • 好处是自带局部性先验,在局部模式(n-gram、局部纹理)上高效。

三、Transformer 的破局:自注意力

自注意力让每个 token 一次性与所有 token 直接交互,加权聚合信息。这带来两个质变:

① 完全并行。 所有位置的注意力可以同时算(一个大矩阵乘法),充分利用 GPU。训练时整条序列一起处理,不再有时间步串行。这是 Transformer 能规模化、能训超大模型的根本前提。

② 任意两点”一步直达”(路径长度 O(1))。 无论两个 token 相距多远,注意力都能让它们在同一层直接连接,信息传递不经过中间步骤,不衰减。这让长程依赖建模变得直接而强大——第 1 个词和第 1000 个词可以立刻互相关注。

「路径长度」是理解优劣的关键指标: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 内建顺序性,这些「先验」让它们在小数据上也能学得不错。Transformer几乎没有结构先验:注意力对顺序无感(要靠位置编码补),也不假设局部性。好处是灵活、不受先验束缚,能从数据里学到任意模式;坏处是必须用大数据才能发挥——数据少时,缺先验反而不如 CNN/RNN。这也解释了为什么 Transformer 是在「大数据 + 大算力」时代才真正封神。

简要说权衡:Transformer 用「O(n²) 的成本 + 对大数据的依赖」,换来了「完全并行 + 长程一步直达」——正是这两点让它成为大模型的地基。

五、为什么最终是 Transformer 赢了

把账算总:

  • 深度学习进入「大数据 + 大算力」时代,能并行 = 能规模化,RNN 的串行使它出局。
  • 语言、图像的高层语义高度依赖长程、全局关系,自注意力的 O(1) 路径最擅长这个。
  • 缺乏先验在小数据是缺点,在大数据反而是优点(不被先验限制,容量随规模释放),完美契合 Scaling Law。
  • O(n²) 的成本问题是「可工程优化」的(FlashAttention 等已大幅缓解),而 RNN 的串行是「结构性的」难以根治。

这些因素叠加,让 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
架构最长依赖路径序列并行性长序列主要代价
RNNO(n)串行与梯度传播
局部 CNN随层数缩短需加深或扩大卷积核
全局 AttentionO(1) 每层直连O(n²) 位置交互

Transformer 的胜出是并行训练、全局交互和规模化效率的组合,并不是所有序列任务上都无条件优于 CNN/RNN。流式、超长或算力受限场景仍可能选择局部注意力、状态空间模型或混合结构。

七、常见误区与追问

  • 误区:Transformer 在任何序列长度上都比 RNN 快。 训练并行性更强,但全局注意力的平方成本在超长序列上可能成为更大瓶颈。
  • 追问:RNN 的长依赖为什么难学? 信息和梯度要经过很多递归状态,路径长且时间步无法完全并行。
  • 追问:CNN 如何扩大序列感受野? 可堆叠更多层、增大卷积核或使用空洞卷积,但连接通常仍受固定局部模式约束。
  • 误区:Self-Attention 天然知道顺序。 不注入位置编码时它对置换等变,无法区分相同 token 的不同排列。
  • 追问:什么场景可能不用全局 Transformer? 流式低延迟、极长序列或边缘设备可选局部注意力、状态空间模型或混合结构。

八、加强记忆

Transformer vs RNN/CNN 记「两大优势、两大代价」:优势——① 完全并行(RNN 串行,喂不下大数据;Transformer 一次并行整条序列,能规模化);② 长程依赖强(任意两 token 路径长度 O(1),一步直达不衰减,RNN 是 O(n) 会遗忘、CNN 要堆层)。代价——① O(n²) 计算与显存(长序列爆炸,靠 FlashAttention/稀疏注意力缓解);② 无归纳偏置(不懂顺序要位置编码,且依赖大数据才发挥)。 用「路径长度」这把尺子最能一眼看清三者差距:O(1) vs O(log n) vs O(n)。