← 返回题目列表

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

高频 困难 第 14 / 25 题 更新于 2026/09/25
循环神经网络Transformer注意力并行
学习 AI 实战项目

简化版

RNN 按时间步递推隐藏状态,单序列的时间维存在串行关键路径;Transformer 用注意力完成位置间交互,并配合前馈层、残差和归一化,不使用循环状态递推。已知整段输入或 teacher-forced 目标时,Transformer 可并行计算各位置;标准自回归推理仍逐 token。全局自注意力在单层内建立任意位置的直接边,长距离图路径短,但计算量含 O(n²d) 项,KV cache 也会随上下文增长。它在大规模训练中的硬件利用率和扩展性使其成为主流,但 RNN 的固定状态、流式和低内存特性在部分任务仍有价值,不能只凭“大数据/小数据”一条规则选型。

详细版

RNN vs Transformer 核心对比:

维度RNN(含 LSTM/GRU)Transformer
处理方式时间步串行训练编码/teacher-forced 解码可按位置并行
核心机制循环 + 隐藏状态注意力交互 + 前馈子层
长距离依赖路径 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;但预训练、正则和迁移学习会显著改变结果,不能笼统断言它必然需要更多任务标注数据。

所以 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 已占主导。