← 返回题目列表

RNN 和 Transformer 有什么区别?为什么 Transformer 取代了 RNN?

高频 困难 第 14 / 25 题 更新于 2026/07/29
循环神经网络Transformer注意力并行

简化版

RNN 按时间步串行处理序列(每步依赖上一步),靠隐藏状态传递记忆;Transformer 完全基于自注意力,让序列里任意两个位置直接相连、训练编码或 teacher-forced 解码时可并行处理各位置、抛弃了循环。Transformer 取代 RNN 的三大原因:① 并行——RNN 必须一步步按时间算、无法并行,训练慢;Transformer 在训练时可同时计算各位置;自回归推理仍逐 token,充分利用 GPU、训练快得多,能训超大模型。② 长距离依赖更强——RNN 信息要走 O(n) 个时间步、易梯度消失;单层全局自注意力让任意两位置的图路径长度为 O(1),长依赖建模更好。③ 大规模任务上通常更易扩展——在大数据上 Transformer 显著超越 RNN,催生了 BERT、GPT 等大模型。代价:Transformer 计算量随序列长度平方增长、需要位置编码、数据需求大;RNN 在小数据、流式、超长序列场景仍有一席之地。

详细版

RNN vs Transformer 核心对比:

维度RNN(含 LSTM/GRU)Transformer
处理方式时间步串行训练编码/teacher-forced 解码可按位置并行
核心机制循环 + 隐藏状态自注意力(Self-Attention)
长距离依赖路径 O(n)、易梯度消失路径 O(1)、直连
训练速度慢(不能并行)快(可并行)
位置信息天然有序(循环顺序)位置编码补充
计算复杂度O(n) 线性于长度O(n²)(注意力两两计算)
数据需求较小

Transformer 取代 RNN 的关键: 并行训练 + 长依赖强 + 可扩展到超大模型(BERT、GPT)。

完整版教学

一、两者的根本差异:串行循环 vs 并行注意力

RNN(包括 LSTM、GRU)处理序列的方式是串行、循环的:按时间步一个接一个地处理,每一步的计算依赖上一步的隐藏状态,用隐藏状态传递记忆(详见 RNN 基础专题)。

Transformer 则完全不同:它抛弃了循环,基于自注意力机制——让序列里每个位置直接和所有其他位置计算关联、一次性处理整个序列(详见注意力专题)。没有「按时间步递推」,而是「所有位置并行地互相关注」。

这个根本差异(串行循环 vs 并行注意力),决定了下面所有的优劣对比。

两者都可以表示序列条件关系,但计算图的关键路径不同。RNN 把历史压入固定维状态,时间步 t 必须等待 t-1;标准全局自注意力在已知整段输入时可一次构造位置间关系。这个差异影响训练吞吐、状态内存和流式延迟,而不是简单等同于“一个旧、一个新”。

二、原因一:并行——训练速度的巨大差距

这是 Transformer 取代 RNN 最现实、最关键的原因。

  • RNN 无法并行:因为第 t 步依赖第 t-1 步的结果,必须严格按顺序一步步算,序列有多长就要串行多少步。这让 RNN 训练慢,且无法充分利用 GPU 的并行算力。
  • Transformer 可以并行:自注意力对序列所有位置同时计算(矩阵运算一次搞定),没有时间步的先后依赖。这让它能充分利用 GPU、通常能显著提高训练硬件利用率,具体速度取决于长度、维度和实现

正是这个并行能力,让 Transformer 能在海量数据上训练超大规模模型(GPT、BERT 有亿到千亿参数)——如果用 RNN,串行训练这种规模根本不现实。「能不能训大」直接决定了模型上限,这是 Transformer 胜出的核心。

三、原因二:长距离依赖——路径长度 O(1) vs O(n)

  • RNN 的信息要「走很远」:序列里相隔 n 个位置的两个元素,信息要经过 n 个时间步才能相互影响(路径长度 O(n))。这么长的路径上,梯度反复连乘导致梯度消失,长依赖学不好(LSTM 缓解但没根除,详见 LSTM 缓解梯度专题)。
  • Transformer 任意位置直连:单层全局自注意力让任意两个位置形成直接边(图路径长度 O(1))。这缩短了信息路径,但能否学好长距离关系仍取决于数据、优化和注意力模式。

所以在需要捕捉长距离关系的任务上,Transformer 明显优于 RNN。

这里的 O(1) 指单层全局自注意力计算图中两个位置之间的边数,不是整模型运行时间为常数。RNN 跨 n 个时间步的依赖必须经过 n 次状态转移,梯度路径更长;注意力用一次加权汇总建立直接边,但仍要从数据中学到正确权重。局部或稀疏注意力也未必 O(1) 直连任意位置,其路径取决于具体稀疏模式。

RNN 时间关键路径:       1 -> 2 -> ... -> n      约 n 次串行转移
全局自注意力单层路径:   i ---------> j          图路径长度 1
注意:后者仍需计算位置关系,并非总运行时间 O(1)

四、原因三:效果与可扩展性

  • 大数据上效果更好:Transformer 在大规模数据上的表现显著超越 RNN,在机器翻译、语言理解、生成等几乎所有 NLP 任务上刷新纪录。
  • 可扩展:并行 + 强表达能力让它能不断「做大做深」,催生了 BERT(双向理解)、GPT(自回归生成) 等预训练大模型范式,进而引发大语言模型浪潮。CV 领域的 ViT 也把 Transformer 用到了图像上。

核心结论:Transformer 的训练并行性与全局交互更适合扩大数据、模型和算力规模,但优势取决于任务和部署条件。

Transformer 的扩展优势来自并行矩阵计算、残差堆叠和预训练范式的共同作用,不应只归因于注意力一个组件。大规模语料和算力下它通常更强,但小数据、严格流式或低内存条件下,门控 RNN 仍可能更合适。公平比较需要控制参数量、训练预算、序列长度和部署硬件。

五、Transformer 的代价与 RNN 的残留价值

Transformer 并非没有缺点:

  • 计算复杂度 O(n²):自注意力要计算所有位置两两之间的关联,复杂度随序列长度平方增长超长序列(如很长的文档)计算和显存开销巨大(催生了各种高效注意力变体)。而 RNN 是 O(n) 线性于长度。
  • 需要位置编码:RNN 天然有顺序(循环递推自带位置信息),不带位置机制的自注意力对顺序缺少区分能力,必须额外加位置编码告诉模型「谁在前谁在后」。
  • 数据需求大:Transformer 缺少 RNN/CNN 那样的归纳偏置,需要大量数据才能训好,小数据上未必比 RNN 好。

所以 RNN/LSTM 并未完全消失,在小数据、流式/实时处理、超长序列、资源受限等场景仍有用武之地。但在主流的大规模 NLP、大模型领域,Transformer 已成为主流,但 RNN 仍用于部分流式、低延迟和资源受限任务

六、复杂度不能只写 O(n) 对 O(n²)

设序列长度 n=1024,单头全局注意力矩阵有 1024²=1,048,576 个分数;长度翻倍到 2048,分数数目变为 4,194,304,正好四倍。RNN 不保存 n×n 相关矩阵,但每步包含隐藏维度相关的矩阵乘,且 n 步存在串行依赖。实际比较应把维度 d、层数、batch、KV cache 和硬件利用率一起考虑。

项目RNN 层标准 Transformer 层
序列方向关键路径O(n)训练时 O(1) 层内全局交互
典型计算量O(nd²)O(nd²+n²d)
注意力分数内存无 n² 矩阵O(n²),高效内核可降中间存储
自回归推理逐步同样逐 token,常配 KV cache

Transformer 的“并行”主要指已知整个输入或 teacher-forced 训练;GPT 在线生成第 t+1 个 token 仍依赖前 t 个 token。RNN 每步状态固定,流式内存可控;Transformer 用 KV cache 时缓存通常随上下文长度增长。

易错点:训练可并行不等于自回归生成可并行;复杂度更低也不等于 GPU 上一定更快。

七、常见误区与追问

  • 误区:Transformer 自回归推理能一次并行生成所有 token。 未来 token 未知,标准生成仍需逐 token,只是每步内部矩阵计算可并行。
  • 误区:RNN 是 O(n) 所以一定比 O(n²) 注意力快。 串行依赖和硬件利用率会改变实际延迟,必须结合 d 与实现。
  • 追问:为什么 Transformer 需要位置机制? 纯自注意力本身缺少对 token 顺序的区分,需要绝对、相对或旋转位置编码。
  • 追问:FlashAttention 改变 O(n²) 计算量吗? 它主要通过分块降低 IO 和中间显存,精确全注意力的算术量仍是二次。
  • 追问:RNN 仍适合哪些场景? 固定状态流式处理、严格低内存、小模型或特定时间序列任务仍可能合适。

八、加强记忆

RNN 串行循环(每步依赖上一步、隐藏状态传记忆)vs Transformer 自注意力(训练时位置可并行、全局层内交互、无循环状态递推)。Transformer 取代 RNN 三大原因:① 并行(RNN 必须按时间步串行、慢、不能并行;Transformer 训练时各位置可并行,通常更能利用 GPU 并扩展模型——最关键);② 长依赖更强(全局自注意力层内两位置的图路径为 O(1),RNN 是 O(n) 且梯度消失);③ 大规模任务上通常更易扩展(大数据上超越 RNN,催生 BERT/GPT/ViT)。代价:计算 O(n²)(超长序列贵)、需位置编码、数据需求大。所以 RNN 在小数据/流式/超长序列/资源受限仍有价值,在主流 NLP 与大模型中 Transformer 已占主导。