先说结论
Transformer 架构可以从完整的 Encoder-Decoder 中拆分出三种变体:仅编码器(如 BERT)擅长理解任务,仅解码器(如 GPT)擅长生成任务,编码器-解码器(如 T5)兼顾两者但参数效率较低。
为什么我会单独记这一篇
原始 Transformer 是为机器翻译设计的完整 Encoder-Decoder 架构。但随着 Transformer 被应用到更多 NLP 任务中,研究者发现并非所有任务都需要完整的编码器-解码器结构:
- 分类、命名实体识别、情感分析等理解任务只需要对输入进行编码,不需要生成能力。
- 文本生成、对话、代码补全等任务需要自回归生成,但输入和输出可以统一为单一序列。
- 翻译、摘要等任务天然适合编码器-解码器的输入-输出分离结构。
架构选择直接影响:
- 模型效率:编码器-解码器有两套参数,同等参数量下单栈模型容量更大。
- 训练目标:不同架构决定了不同的预训练策略(掩码语言模型 vs 自回归语言模型 vs span 损伤)。
- 适用任务范围:架构限制了模型能够有效处理的任务类型。
先把核心脉络捋清楚
仅编码器架构(Encoder-Only)
代表模型:BERT、RoBERTa、ALBERT、DeBERTa、DistilBERT
核心特征:
- 双向注意力:每个 token 可以关注序列中所有其他 token(包括左边和右边),获得完整的上下文信息。
- 无生成能力:没有解码器的自回归机制,不能自然地逐 token 生成文本。
- 预训练目标:掩码语言模型(MLM)——随机遮盖约 15% 的 token,让模型根据上下文预测被遮盖的词。
训练流程:
- 输入:"The [MASK] sat on the [MASK]."
- 目标:预测 [MASK] 为 "cat" 和 "mat"。
- 15% 的 token 被选中,其中 80% 替换为 [MASK],10% 替换为随机词,10% 保持不变。
仅解码器架构(Decoder-Only)
代表模型:GPT 系列、LLaMA、Mistral、Qwen、Phi
核心特征:
- 因果(单向)注意力:每个 token 只能关注自己及之前的 token(从左到右),使用因果掩码(causal mask)。
- 自回归生成:天然支持逐 token 生成文本,每一步基于之前已生成的所有 token 预测下一个。
- 预训练目标:下一个 token 预测(Next Token Prediction / Causal LM)——给定前 k 个 token,预测第 k+1 个。
训练流程:
- 输入:"The cat sat on"
- 目标:"cat sat on the"
- 即将输入右移一位作为标签。
编码器-解码器架构(Encoder-Decoder)
代表模型:T5、BART、mT5、Flan-T5、UL2
核心特征:
- 编码器双向 + 解码器因果:编码器用双向注意力理解完整输入,解码器用因果注意力自回归生成输出。
- 交叉注意力连接:解码器通过交叉注意力从编码器输出中提取信息。
- 统一文本到文本框架:T5 将所有 NLP 任务统一为 text-to-text 格式。
- 预训练目标:T5 使用 span corruption(随机删除 span 并用 sentinel token 替代),BART 使用文本重建。
原理拆开看
为什么 Decoder-Only 成为主流
这是近年来最重要的趋势之一。虽然理论上 Encoder-Decoder 更"完整",但实践中 Decoder-Only 架构在大规模预训练中表现出以下优势:
- 统一的训练目标:下一个 token 预测是一个极其简洁且通用的目标,不需要设计特殊的预训练任务。所有文本数据都可以直接用于训练,无需构造 [MASK] 或 sentinel。
- 指令微调的自然适配:将 instruction、input、output 拼接成单一序列,用因果语言模型目标训练。格式统一,实现简单。
- 规模的胜利:当参数量和数据量足够大时,Decoder-Only 模型的理解能力可以逼近甚至超越同等规模的 Encoder-Only 模型。GPT-4 在各种理解任务上的表现证明了这一点。
- KV Cache 的推理优势:Decoder-Only 架构的 KV Cache 管理更简单(只有一组注意力状态),相比 Encoder-Decoder 的推理实现更高效。
双向 vs 单向注意力的 trade-off
双向注意力的优势:每个 token 可以利用其左右的完整上下文进行表示。在理解任务中,看到"猫追___"和"___被追"对填空都有帮助。
单向注意力的劣势:在预训练时,每个 token 只能看到左边的上下文,信息量减半。但这个劣势在大规模预训练中似乎被数据量弥补了。
一个关键的洞察是:预训练时双向注意力确实提供了更多信号,但这使得预训练和微调之间存在差距(预训练时看到完整上下文,微调时可能面临不同的信息访问模式)。单向注意力则保持了预训练和推理的一致性——训练时只看左边,推理时也只看左边。
T5 的 text-to-text 统一框架
T5 的设计哲学是:无论什么 NLP 任务,都转化为 text-in text-out 的格式。
例如:
- 翻译:"translate English to French: Hello" -> "Bonjour"
- 分类:"sentiment: This movie is great" -> "positive"
- 摘要:"summarize: [长文本]" -> "[摘要]"
- 问答:"question: What is X? context: [文本]" -> "answer"
这种统一使得一个模型可以同时处理多种任务,且所有任务共享相同的输入输出接口。
放到工程里怎么落
BERT 风格模型的微调
- 在预训练模型上添加任务特定的头(如分类器)。
- 通常对 [CLS] token 的表示进行分类。
- 在下游数据上微调所有参数(或仅微调顶层)。
- 典型应用:文本分类、命名实体识别、抽取式问答(SQuAD)。
GPT 风格模型的指令微调
- 构造 instruction-following 数据集。
- 将 instruction、input、response 拼接为单一序列。
- 通常只对 response 部分计算 loss(instruction 部分的 loss 被 mask 掉)。
- 典型格式:
<s>[INST] instruction [/INST] response </s>
T5 风格模型的微调
- 将任务格式化为 text-to-text。
- 输入输入编码器,目标输入解码器(teacher forcing)。
- 推理时自回归生成目标文本。
与相邻概念的区别
| 特征 | BERT(Encoder-Only) | GPT(Decoder-Only) | T5(Encoder-Decoder) |
|---|---|---|---|
| 注意力 | 双向 | 因果(单向) | 编码器双向 + 解码器因果 |
| 预训练 | MLM | Causal LM | Span Corruption |
| 生成 | 不支持 | 天然支持 | 支持 |
| 参数效率 | 高(单栈) | 高(单栈) | 较低(双栈) |
| 代表模型 | BERT, DeBERTa | GPT-4, LLaMA | T5, Flan-T5 |
| 时代 | 2018-2020 为主 | 2020 至今主导 | 持续有研究 |
设计时真正要权衡什么
| 选择 | 适用场景 | 不适用场景 |
|---|---|---|
| Encoder-Only | 需要高效理解任务的工业应用(分类、NER) | 需要生成能力的场景 |
| Decoder-Only | 通用大模型、对话系统、代码生成 | 需要双向编码的理解密集型任务(但规模足够大时可弥补) |
| Encoder-Decoder | 翻译、摘要等明确的 seq2seq 任务 | 资源受限、追求参数效率的场景 |
容易踩的坑
- 用 BERT 做生成任务:BERT 的双向预训练目标与自回归生成不兼容,强行做生成效果很差。
- 用 GPT 做密集理解任务但规模不够:小模型上 GPT 的理解能力不如 BERT,因为单向注意力确实限制了信息利用。
- T5 的 prefix 处理错误:在 Encoder-Decoder 中,输入和输出是分开的。如果将 instruction 错误地放在输出端而非输入端,会导致性能下降。
- 忽略预训练-微调的一致性:BERT 微调时使用 [MASK] token 或 GPT 微调时使用与预训练不同的 prompt 格式,都会导致性能下降。
工程落地时我会怎么做
- 分类/NER 等理解任务:使用 Encoder-Only 模型(如 DeBERTa-v3),参数效率最高。
- 对话/生成任务:使用 Decoder-Only 模型(如 LLaMA-3、Mistral),生态最成熟。
- 翻译/摘要任务:Encoder-Decoder 模型(如 mT5)仍然有优势,但 Decoder-Only 也可以胜任。
- 多任务统一:Decoder-Only + 指令微调是目前最主流的范式,一个模型处理多种任务。
- 资源受限场景:Encoder-Only 模型通常更小更快,适合边缘部署。
如果要对外讲,可以怎么概括
建议结构:
- 画出三种架构的结构对比图。
- 解释每种架构的核心特征和预训练目标。
- 重点讨论为什么 Decoder-Only 成为主流(规模的优势、训练目标的统一性、推理的简洁性)。
- 说明什么时候应该选择哪种架构。
常见面试追问:
- BERT 为什么不能做生成?(双向预训练与自回归生成不兼容)
- GPT 的单向注意力不是信息减半吗,为什么效果反而好?(规模补偿 + 预训练-推理一致性)
- T5 的 text-to-text 统一框架有什么优势?(任务统一、多任务共享)
最后记几条
- 三种变体:Encoder-Only(BERT)、Decoder-Only(GPT)、Encoder-Decoder(T5)——各有最佳适用场景。
- Decoder-Only 赢了规模游戏:当参数量和数据量足够大时,Decoder-Only 是最通用、最灵活的选择。
- 预训练目标决定架构:MLM -> Encoder-Only,Causal LM -> Decoder-Only,Span Corruption -> Encoder-Decoder。
- BERT 仍然有存在的价值:在参数受限的理解任务上,Encoder-Only 仍然是最有效率的选择。
- 架构选择是 trade-off:没有"万能"架构,理解任务选 Encoder-Only,通用生成选 Decoder-Only,明确 seq2seq 选 Encoder-Decoder。
面试高频题
QUESTION BERT 为什么不能做文本生成? BERT 使用双向注意力的 MLM 预训练目标:训练时每个位置可以看到左右两边的所有 token。但自回归生成要求"只看左边预测右边",与 BERT 的训练方式根本矛盾。BERT 没有学过"从左到右逐 token 生成"的模式,强行做生成效果很差。
QUESTION 为什么 Decoder-Only 成为主流而非 Encoder-Decoder?
- 训练目标统一:下一个 token 预测是通用目标,所有文本数据可直接用于训练,无需构造特殊任务
- 指令微调适配:instruction/input/output 拼成单一序列,格式统一,实现简单
- 规模的胜利:参数量足够大时,Decoder-Only 的理解能力可逼近甚至超越 Encoder-Only
- 推理效率:KV Cache 管理更简单(只有一组注意力状态),相比 Encoder-Decoder 实现更高效
- 预训练-推理一致性:训练时只看左边,推理时也只看左边,不存在分布偏移
QUESTION 三种架构分别用什么预训练目标?
架构 预训练目标 描述 Encoder-Only MLM(掩码语言模型) 随机遮盖 15% token,根据上下文预测 Decoder-Only CLM(因果语言模型) 给定前 k 个 token,预测第 k+1 个 Encoder-Decoder Span Corruption 随机删除 span,用 sentinel 替代后重建
QUESTION BERT 的 MLM 预训练中,被选中的 15% token 如何处理?
- 80% 替换为
[MASK]token- 10% 替换为随机 token(防止模型只关注
[MASK]位置)- 10% 保持不变(提供正确的输入分布信号)
这种设计确保模型对所有位置都学到有用的表示,而非仅对
[MASK]位置敏感。
QUESTION Encoder-Only 模型还有存在价值吗? 有。在参数受限的理解任务上(分类、NER、语义相似度),Encoder-Only 仍然是最有效率的选择。原因是双向注意力提供了更完整的上下文信息,在同等参数量下理解任务表现更好。典型场景:工业级文本分类、信息抽取,DeBERTa-v3 等模型仍然是最优选择。
三大架构对比总结
| 特征 | BERT (Encoder-Only) | GPT (Decoder-Only) | T5 (Encoder-Decoder) |
|---|---|---|---|
| 注意力方向 | 双向 | 因果(单向) | 编码器双向 + 解码器因果 |
| 预训练目标 | MLM | Causal LM | Span Corruption |
| 生成能力 | 不支持 | 天然支持 | 支持 |
| 参数效率 | 高(单栈) | 高(单栈) | 较低(双栈) |
| 代表模型 | BERT, DeBERTa | GPT-4, LLaMA | T5, Flan-T5 |
| 主导时期 | 2018-2020 | 2020 至今 | 持续有研究 |
| 典型任务 | 分类、NER | 对话、代码生成 | 翻译、摘要 |
延伸阅读
-
注意力机制 — 双向注意力 vs 因果掩码的机制
-
Transformer — 原始 Encoder-Decoder 架构
-
FFN与激活函数 — 不同架构使用的 FFN 变体
参考资料
- Devlin, J. et al. (2019). "BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding." NAACL 2019.
- Radford, A. et al. (2018/2019). "Improving Language Understanding by Generative Pre-Training" / "Language Models are Unsupervised Multitask Learners." GPT-1/GPT-2.
- Raffel, C. et al. (2020). "Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer." JMLR 2020. T5 原始论文.
- He, P. et al. (2021). "DeBERTa: Decoding-enhanced BERT with Disentangled Attention." ICLR 2021.
- Touvron, H. et al. (2023). "LLaMA: Open and Efficient Foundation Language Models." LLaMA 的 Decoder-Only 设计.