编码器-解码器(Encoder-Decoder)
一句话 TL;DR:Transformer 有三种架构变体--编码器-解码器(原版,翻译用)、仅编码器(BERT,理解用)、仅解码器(GPT,生成用)。它们的区别不是细节,而是"看输入的方式"和"能做什么任务"的根本分歧。
L1 · 一句话点破
编码器-解码器是 Transformer 的三种架构变体之一,本质是把"理解输入"和"生成输出"分到两个独立组件:编码器负责把输入序列压缩成上下文表示,解码器负责自回归地生成输出。
但更重要的认知是:原版 Transformer 是编码器-解码器,后续演化出仅编码器(BERT 系)和仅解码器(GPT 系)两条路线。理解这三者的差异,就理解了现代 NLP 架构选择的底层逻辑。
L2 · 通俗类比
想象三种不同的"阅读-写作"工作流:
- 编码器-解码器(翻译官):先通读整篇原文(编码器,双向看),理解透彻后,再一句句写译文(解码器,从左到右生成)。原文和译文是两种语言,需要"先理解再表达"。
- 仅编码器(阅读理解考生):只通读原文(双向看),然后直接在每个位置上打标签或选答案。不生成新文本,只做理解。
- 仅解码器(作家):从左到右自己写文章,每写一个字时只能看前面写过的字(单向),不能偷看后面。既是阅读也是生成,但永远是"接着前面写"。
三种工作流对应三类任务,没有谁比谁强,只有谁适合什么。GPT 系列的崛起不是"解码器赢了编码器",而是"生成任务在 scaling law 下扩展性更好"。
L3 · 正经定义
编码器-解码器(Encoder-Decoder) 是一种将序列建模拆分为两个阶段的架构:编码器将输入序列 $X = (x_1, \dots, x_n)$ 映射为连续表示 $H = (h_1, \dots, h_n)$,解码器以 $H$ 为条件,自回归地生成输出序列 $Y = (y_1, \dots, y_m)$。
Transformer 的编码器-解码器结构(Vaswani et al., 2017):
- 编码器:$N$ 层,每层含多头自注意力 + FFN,自注意力是双向的(每个位置能看所有位置)。输出 $H$ 作为解码器交叉注意力的 K/V 来源。
- 解码器:$N$ 层,每层含三个子层:掩码自注意力(单向,防看到未来)、交叉注意力(Q 来自解码端,K/V 来自编码端)、FFN。
三种变体对比:
| 变体 | 代表模型 | 注意力方向 | 适合任务 | 自回归 |
|---|---|---|---|---|
| 编码器-解码器 | 原版 Transformer、T5、BART | 编码双向 + 解码单向 | seq2seq(翻译、摘要) | 是(解码端) |
| 仅编码器 | BERT、RoBERTa | 双向 | 理解(分类、NER、抽取) | 否 |
| 仅解码器 | GPT、LLaMA、Qwen | 单向 | 生成(对话、续写) | 是 |
参考资料:
- Vaswani et al., 2017 - Attention Is All You Need
- Devlin et al., 2018 - BERT
- Radford et al., 2018-2020 - GPT / GPT-2 / GPT-3
- Raffel et al., 2020 - T5
L4 · 原理深挖
4.1 为什么会有三种变体?--任务驱动
原版 Transformer 是为机器翻译设计的:输入一种语言的句子,输出另一种语言的句子。这天然需要"先理解输入(双向),再生成输出(单向)"两阶段,所以用编码器-解码器。
但很快人们发现,Transformer 的组件可以单独用:
仅编码器路线(BERT):理解任务(分类、NER、问答)只需要把输入编码成好的表示,不需要生成新序列。编码器的双向注意力让每个 token 都能看前后文,表示质量高。砍掉解码器,加个分类头就能用。
仅解码器路线(GPT):生成任务的核心是"给定前文,预测下一个 token"。这本质就是解码器的掩码自注意力做的事。砍掉编码器和交叉注意力,让解码器直接吃输入并自回归生成。注意:GPT 把"输入"也当作生成的 prefix 处理,所以输入端也是单向的。
4.2 双向 vs 单向:最根本的差异
这是三种变体的核心分水岭:
双向注意力(编码器):
位置 $i$ 的注意力能看所有位置 $j$(包括 $j > i$)。对理解任务理想:判断一个词的含义,看前后文都帮得上忙。BERT 的"完形填瓶"预训练任务(mask 一些 token 让模型预测)依赖双向。
单向/因果注意力(解码器):
位置 $i$ 只能看 $j \le i$,未来被掩码挡住。对生成任务必须如此:生成第 $i$ 个 token 时,第 $i+1$ 还没生成,不能看。代价是理解阶段也变成了单向--GPT 处理输入 prompt 时也是从左到右看,不如 BERT 的双向看得全。
这个差异的深层后果:早期(2018-2020)BERT 在理解任务上一直压着 GPT 打,因为双向确实更适合理解。GPT 的翻盘不是靠架构优势,而是靠 scaling--当模型和数据足够大,单向的"理解不足"被弥补,而自回归生成的统一性(一个目标函数搞定一切)在 scaling 下优势放大。这是 GPT-3 之后的事。
4.3 交叉注意力:编码器-解码器的独有组件
仅编码器和仅解码器都没有交叉注意力,它是编码器-解码器架构的标志。
交叉注意力的 Q 来自解码端,K/V 来自编码端:
$$ \text{CrossAttn}(Q_{dec}, K_{enc}, V_{enc}) = \text{softmax}!\left(\frac{Q_{dec} K_{enc}^\top}{\sqrt{d_k}}\right) V_{enc} $$
作用:生成每个输出 token 时,模型动态决定"关注输入的哪些位置"。翻译里就是"生成目标词时回看源句的哪些词"。
这是为什么 T5、BART 这类编码器-解码器模型在翻译、摘要等"输入和输出长度差异大、需要对齐"的任务上仍有优势--它们有专门的组件处理"输入到输出的映射"。
4.4 为什么大模型时代选择了仅解码器
2020 年后,主流通用大模型(GPT-4、Claude、LLaMA、Qwen)几乎全是仅解码器。原因不是"解码器架构更优",而是几个工程和范式的因素叠加:
统一的训练目标:仅解码器只需"预测下一个 token"一个目标,所有任务(续写、翻译、摘要、问答)都能统一成这个目标。编码器-解码器需要为理解和生成设计不同目标(BERT 的 MLM + T5 的 span corruption),复杂度高。
Scaling law 友好:Kaplan et al., 2020 的研究发现,自回归语言模型的损失随模型规模、数据量、计算量呈幂律下降。统一的训练目标 + 大数据 = 更可预测的扩展。
In-context learning 的涌现:GPT-3 发现,足够大的仅解码器模型能通过 prompt 上下文学习新任务,不需要微调。这种能力在编码器-解码器上没有同等涌现。
工程简洁:一个架构吃所有任务,训练和推理管线统一,工程成本低。
代价:仅解码器在纯理解任务(如 NER、情感分类)上,理论上不如同等规模的编码器高效(因为单向)。但大模型的规模优势压过了这个差异。
4.5 编码器-解码器还活着吗
活着,但在特定领域:
- 翻译:Google 的 mT5、NLLB;Meta 的 NLLB-200 都是编码器-解码器。翻译的"输入输出长度差异大 + 需要对齐"特点让这个架构仍有优势。
- 摘要:BART、T5 在摘要任务上表现稳定。
- 语音:Whisper(OpenAI 的语音识别)是编码器-解码器。
- 小模型场景:参数量受限时,编码器-解码器的"专门化"优势仍在。
通用大模型选仅解码器,专精任务选编码器-解码器或仅编码器,这是当前的实用判断。
L5 · 沿革与坑
沿革
- 2017 年 6 月:原版 Transformer 是编码器-解码器,为翻译设计。
- 2018 年 10 月:Google 发表 BERT(仅编码器),11 项 NLP 理解任务 SOTA,证明双向注意力对理解的价值。
- 2018-2019 年:OpenAI 发表 GPT、GPT-2(仅解码器),初期反响不如 BERT,但 GPT-2 的零样本生成能力初现端倪。
- 2019-2020 年:T5、BART 把编码器-解码器架构发扬光大,提出"文本到文本"统一框架。
- 2020 年 5 月:GPT-3 发布,175B 参数的仅解码器模型展示了惊人的 few-shot 能力,标志着仅解码器路线胜出。同年 Kaplan 的 scaling law 论文为这条路线提供了理论支撑。
- 2022 年至今:LLaMA、Qwen、Mistral、Claude、GPT-4 等主流大模型全部采用仅解码器。编码器-解码器退守翻译、语音等专精领域。
- 2024 年:有研究重新审视架构选择,发现编码器-解码器在小模型 + 长输出任务上仍有性价比。架构之争并未完全终结。
常见误解
❌ 误解:仅解码器架构比编码器-解码器更先进,所以赢了。 ✅ 真相:架构本身没有高下。仅解码器胜出是因为"统一训练目标 + scaling law 友好 + in-context learning 涌现"的工程组合优势,不是架构层面的优越。在翻译等特定任务上,编码器-解码器仍然更好。
❌ 误解:BERT 是 Transformer,GPT 也是 Transformer,所以它们是同一种东西。 ✅ 真相:它们都是 Transformer 的变体,但用的是不同部分。BERT 用编码器(双向),GPT 用解码器(单向)。这导致 BERT 擅长理解、GPT 擅长生成,能力边界完全不同。
❌ 误解:GPT 不能看后面的字,所以理解能力天生差。 ✅ 真相:理论上单向确实不如双向适合理解,但大模型规模弥补了这个差距。GPT-4 的理解能力远超任何 BERT 变体,证明规模能突破架构限制。架构决定的是"同等规模下的效率上限",不是"绝对能力上限"。
❌ 误解:编码器-解码器已经被淘汰了。 ✅ 真相:在通用大模型里确实式微,但在翻译(NLLB)、语音(Whisper)、摘要(BART)等领域仍是首选。它没有被淘汰,只是退守到更适合它的战场。
面试怎么考
- "Transformer 的三种架构变体是什么?各适合什么任务?" --必考。答出编码器-解码器/仅编码器/仅解码器 + 双向/单向 + 适合任务(见 L3 表格)。
- "为什么主流大模型都用仅解码器?" --高频题。统一训练目标 + scaling law + in-context learning 涌现 + 工程简洁(见 4.4)。
- "BERT 和 GPT 在架构上的核心区别是什么?" --双向 vs 单向注意力。这导致能力边界不同。
- "什么是交叉注意力?它出现在哪种架构里?" --编码器-解码器独有,Q 来自解码端,K/V 来自编码端(见 4.3)。
- "BERT 为什么用双向,GPT 为什么用单向?" --任务驱动:理解需要看全前后文(双向),生成不能看未来(单向)。
- "编码器-解码器架构还有用吗?" --有,在翻译/语音/摘要等特定领域仍是首选(见 4.5)。
延伸阅读
- 📄 Vaswani et al., 2017 - Attention Is All You Need
- 📄 Devlin et al., 2018 - BERT
- 📄 Radford et al., 2020 - GPT-3
- 📄 Raffel et al., 2020 - T5 - 编码器-解码器的"文本到文本"统一框架
- 📄 Kaplan et al., 2020 - Scaling Laws - 解释为什么仅解码器赢
- 📝 The Illustrated BERT - Jay Alammar