2025年4月12日

仅编码器、仅解码器与编码器-解码器架构对比

Transformer 架构可以从完整的 Encoder-Decoder 中拆分出三种变体:仅编码器(如 BERT)擅长理解任务,仅解码器(如 GPT)擅长生成任务,编码器-解码器(如 T5)兼顾两者但参数效率较低。

知识库大模型基础原理llmmodeltransformerarchitecture

先说结论

Transformer 架构可以从完整的 Encoder-Decoder 中拆分出三种变体:仅编码器(如 BERT)擅长理解任务,仅解码器(如 GPT)擅长生成任务,编码器-解码器(如 T5)兼顾两者但参数效率较低。

为什么我会单独记这一篇

原始 Transformer 是为机器翻译设计的完整 Encoder-Decoder 架构。但随着 Transformer 被应用到更多 NLP 任务中,研究者发现并非所有任务都需要完整的编码器-解码器结构:

  • 分类、命名实体识别、情感分析等理解任务只需要对输入进行编码,不需要生成能力。
  • 文本生成、对话、代码补全等任务需要自回归生成,但输入和输出可以统一为单一序列。
  • 翻译、摘要等任务天然适合编码器-解码器的输入-输出分离结构。

架构选择直接影响:

  1. 模型效率:编码器-解码器有两套参数,同等参数量下单栈模型容量更大。
  2. 训练目标:不同架构决定了不同的预训练策略(掩码语言模型 vs 自回归语言模型 vs span 损伤)。
  3. 适用任务范围:架构限制了模型能够有效处理的任务类型。

先把核心脉络捋清楚

仅编码器架构(Encoder-Only)

代表模型:BERT、RoBERTa、ALBERT、DeBERTa、DistilBERT

核心特征:

  1. 双向注意力:每个 token 可以关注序列中所有其他 token(包括左边和右边),获得完整的上下文信息。
  2. 无生成能力:没有解码器的自回归机制,不能自然地逐 token 生成文本。
  3. 预训练目标:掩码语言模型(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

核心特征:

  1. 因果(单向)注意力:每个 token 只能关注自己及之前的 token(从左到右),使用因果掩码(causal mask)。
  2. 自回归生成:天然支持逐 token 生成文本,每一步基于之前已生成的所有 token 预测下一个。
  3. 预训练目标:下一个 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

核心特征:

  1. 编码器双向 + 解码器因果:编码器用双向注意力理解完整输入,解码器用因果注意力自回归生成输出。
  2. 交叉注意力连接:解码器通过交叉注意力从编码器输出中提取信息。
  3. 统一文本到文本框架:T5 将所有 NLP 任务统一为 text-to-text 格式。
  4. 预训练目标:T5 使用 span corruption(随机删除 span 并用 sentinel token 替代),BART 使用文本重建。

原理拆开看

为什么 Decoder-Only 成为主流

这是近年来最重要的趋势之一。虽然理论上 Encoder-Decoder 更"完整",但实践中 Decoder-Only 架构在大规模预训练中表现出以下优势:

  1. 统一的训练目标:下一个 token 预测是一个极其简洁且通用的目标,不需要设计特殊的预训练任务。所有文本数据都可以直接用于训练,无需构造 [MASK] 或 sentinel。
  2. 指令微调的自然适配:将 instruction、input、output 拼接成单一序列,用因果语言模型目标训练。格式统一,实现简单。
  3. 规模的胜利:当参数量和数据量足够大时,Decoder-Only 模型的理解能力可以逼近甚至超越同等规模的 Encoder-Only 模型。GPT-4 在各种理解任务上的表现证明了这一点。
  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 风格模型的微调

  1. 在预训练模型上添加任务特定的头(如分类器)。
  2. 通常对 [CLS] token 的表示进行分类。
  3. 在下游数据上微调所有参数(或仅微调顶层)。
  4. 典型应用:文本分类、命名实体识别、抽取式问答(SQuAD)。

GPT 风格模型的指令微调

  1. 构造 instruction-following 数据集。
  2. 将 instruction、input、response 拼接为单一序列。
  3. 通常只对 response 部分计算 loss(instruction 部分的 loss 被 mask 掉)。
  4. 典型格式:<s>[INST] instruction [/INST] response </s>

T5 风格模型的微调

  1. 将任务格式化为 text-to-text。
  2. 输入输入编码器,目标输入解码器(teacher forcing)。
  3. 推理时自回归生成目标文本。

与相邻概念的区别

特征 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 任务 资源受限、追求参数效率的场景

容易踩的坑

  1. 用 BERT 做生成任务:BERT 的双向预训练目标与自回归生成不兼容,强行做生成效果很差。
  2. 用 GPT 做密集理解任务但规模不够:小模型上 GPT 的理解能力不如 BERT,因为单向注意力确实限制了信息利用。
  3. T5 的 prefix 处理错误:在 Encoder-Decoder 中,输入和输出是分开的。如果将 instruction 错误地放在输出端而非输入端,会导致性能下降。
  4. 忽略预训练-微调的一致性:BERT 微调时使用 [MASK] token 或 GPT 微调时使用与预训练不同的 prompt 格式,都会导致性能下降。

工程落地时我会怎么做

  1. 分类/NER 等理解任务:使用 Encoder-Only 模型(如 DeBERTa-v3),参数效率最高。
  2. 对话/生成任务:使用 Decoder-Only 模型(如 LLaMA-3、Mistral),生态最成熟。
  3. 翻译/摘要任务:Encoder-Decoder 模型(如 mT5)仍然有优势,但 Decoder-Only 也可以胜任。
  4. 多任务统一:Decoder-Only + 指令微调是目前最主流的范式,一个模型处理多种任务。
  5. 资源受限场景:Encoder-Only 模型通常更小更快,适合边缘部署。

如果要对外讲,可以怎么概括

建议结构:

  1. 画出三种架构的结构对比图。
  2. 解释每种架构的核心特征和预训练目标。
  3. 重点讨论为什么 Decoder-Only 成为主流(规模的优势、训练目标的统一性、推理的简洁性)。
  4. 说明什么时候应该选择哪种架构。

常见面试追问:

  • BERT 为什么不能做生成?(双向预训练与自回归生成不兼容)
  • GPT 的单向注意力不是信息减半吗,为什么效果反而好?(规模补偿 + 预训练-推理一致性)
  • T5 的 text-to-text 统一框架有什么优势?(任务统一、多任务共享)

最后记几条

  1. 三种变体:Encoder-Only(BERT)、Decoder-Only(GPT)、Encoder-Decoder(T5)——各有最佳适用场景。
  2. Decoder-Only 赢了规模游戏:当参数量和数据量足够大时,Decoder-Only 是最通用、最灵活的选择。
  3. 预训练目标决定架构:MLM -> Encoder-Only,Causal LM -> Decoder-Only,Span Corruption -> Encoder-Decoder。
  4. BERT 仍然有存在的价值:在参数受限的理解任务上,Encoder-Only 仍然是最有效率的选择。
  5. 架构选择是 trade-off:没有"万能"架构,理解任务选 Encoder-Only,通用生成选 Decoder-Only,明确 seq2seq 选 Encoder-Decoder。

面试高频题

QUESTION BERT 为什么不能做文本生成? BERT 使用双向注意力的 MLM 预训练目标:训练时每个位置可以看到左右两边的所有 token。但自回归生成要求"只看左边预测右边",与 BERT 的训练方式根本矛盾。BERT 没有学过"从左到右逐 token 生成"的模式,强行做生成效果很差。

QUESTION 为什么 Decoder-Only 成为主流而非 Encoder-Decoder?

  1. 训练目标统一:下一个 token 预测是通用目标,所有文本数据可直接用于训练,无需构造特殊任务
  2. 指令微调适配:instruction/input/output 拼成单一序列,格式统一,实现简单
  3. 规模的胜利:参数量足够大时,Decoder-Only 的理解能力可逼近甚至超越 Encoder-Only
  4. 推理效率:KV Cache 管理更简单(只有一组注意力状态),相比 Encoder-Decoder 实现更高效
  5. 预训练-推理一致性:训练时只看左边,推理时也只看左边,不存在分布偏移

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 对话、代码生成 翻译、摘要

延伸阅读

参考资料

  • 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 设计.