encoder-only、decoder-only、encoder-decoder 三种架构有什么区别?为什么通用生成模型常用 decoder-only?
简化版
Transformer 有三种用法:
- encoder-only(如 BERT):双向注意力,常用于分类、抽取、检索等表示任务;经典 BERT 用 MLM,但 encoder-only 并不限定为一种预训练目标。它没有现成的自回归生成端。
- decoder-only(如 GPT/Llama):因果(单向)注意力,逐 token 自回归生成,擅长「生成」,也能靠上下文学习做各种任务。
- encoder-decoder(如 T5/BART):编码器双向理解输入 + 解码器自回归生成输出,中间用交叉注意力连接,擅长「输入到输出」的序列转换(翻译、摘要)。
许多通用生成式大模型选择 decoder-only,主要因为单一因果栈、next-token 数据管线和生成服务接口容易统一并规模化。它不是所有“大模型”的唯一选择:表示模型仍常用 encoder,翻译、语音和条件生成系统也会采用 encoder-decoder。架构优劣必须在相近参数、数据与计算预算下比较。
详细版
三种架构的机制对比
| 架构 | 注意力 | 预训练任务 | 强项 | 代表 |
|---|---|---|---|---|
| encoder-only | 双向(全可见) | 掩码语言建模 MLM | 理解、分类、抽取、句向量 | BERT、RoBERTa |
| decoder-only | 因果(只看左侧) | 下一个 token 预测 | 生成、对话、少样本学习 | GPT、Llama、Qwen |
| encoder-decoder | 编码双向 + 解码因果 + 交叉注意力 | 去噪 / seq2seq | 翻译、摘要等输入→输出转换 | T5、BART |
为什么 LLM 选 decoder-only(核心理由)
- 训练接口密集且简单:标准因果 LM 几乎每个非首 token 都提供目标;经典 BERT MLM 只在采样的遮盖位置计损失,但不能直接由目标数推出总体数据效率。
- 任务统一、通用性强:万物皆「续写」,分类/翻译/问答都能写成文本生成,无需为每类任务设计不同头。
- 上下文学习接口自然:示例与待答输入可串成同一因果序列;上下文学习不是 decoder-only 独占能力。
- 结构简单、易扩展:没有编码器—解码器分工和交叉注意力,训练与服务栈更统一;这属于工程优势,不证明同计算下质量必然最高。
- KV Cache 友好:自回归 + 因果掩码天然配合 KV 缓存,推理高效。
完整版教学
一、三种架构其实是”注意力可见性 + 有无生成端”的排列组合
理解三者,抓两个维度:
- 注意力能看到哪些位置:双向(每个 token 看全序列)还是因果(只看自己及左侧)。
- 有没有独立的生成端:是否需要一个自回归解码器产出新序列。
由此:
- encoder-only = 纯双向、无生成端(只出表示)。
- decoder-only = 纯因果、生成端即全部(边理解边生成)。
- encoder-decoder = 双向编码端 + 因果解码端,二者用交叉注意力桥接。
二、encoder-only(BERT):为”理解”而生
BERT 用双向注意力,每个 token 能同时看到左右全部上下文,因此对语义的「理解」很充分。预训练用掩码语言建模(MLM):随机遮住一些词让模型还原,配合双向上下文学到深层表示。
- 强项:文本分类、命名实体识别、句子相似度/检索(句向量)、阅读理解等「输入 → 标签/片段」的判别任务。
- 短板:没有独立自回归生成端,不能直接按经典 decoder 的方式逐 token 续写。它可用于迭代填空或接上解码器,但那已经改变了生成算法或系统结构。
三、encoder-decoder(T5/BART):为”序列转换”而生
它把任务显式建模成「一段输入 → 一段输出」:
-
编码器:双向注意力充分理解输入(如源语言句子)。
-
解码器:因果注意力自回归生成输出(如目标语言句子),且每步通过交叉注意力去「看」编码器的输出。
-
预训练:T5 用「填空式去噪」(把连续片段替换成哨兵符再还原),统一成 text-to-text。
-
强项:机器翻译、摘要、语法纠错这类输入和输出边界清晰的转换任务,编码端的双向理解是加分项。
-
代价:有两套栈与交叉注意力,训练、缓存和部署路径更复杂;但在条件生成上可能更高效或更合适,不能概括为开放任务必然不如 decoder-only。
四、decoder-only(GPT/Llama):为什么它成为通用生成的常见选择
decoder-only 只有一个因果解码器:每个 token 只能看它左边的,逐个预测下一个词。它成为 LLM 主流,是多重优势叠加的结果:
① 训练目标密集且统一。 自回归序列里几乎每个 token 都可作为下一 token 目标;经典 MLM 只在采样位置计损失。目标更多不等于自动“学习效率更高”,因为双向上下文、目标难度和计算分配也不同。
② 任务大一统。 把所有任务都写成「续写文本」:问答=续写答案,翻译=续写译文,分类=续写标签词。不需要针对每类任务设计不同输出头,一个模型通吃。
③ 上下文学习接口自然。 把示例、问题和答案依次放入同一序列,训练目标与推理接口一致。能力随规模和数据变化,不能把 in-context learning 当作只属于 decoder-only 的证明。
④ 结构与服务路径简单。 同构因果层便于并行、复用训练语料和统一生成服务。但 Scaling Law 描述经验关系,不推出该拓扑在所有预算下最优。
⑤ 推理高效。 因果掩码 + 自回归天然配合 KV Cache,历史算过的 K/V 可复用,逐 token 生成成本低。
面试时应把“生态与工程统一”同“模型质量”分开:因果注意力矩阵是否满秩不能单独解释架构胜负,真实选择还受数据目标、参数分配、输入输出比例和部署栈影响。
五、那 encoder 系彻底没用了吗
并非。理解类任务里 encoder 仍有价值:
- 做检索/嵌入(如句向量、RAG 的 embedding 模型),双向编码器(BERT 系、E5、BGE)通常比同规模 decoder 更强、更省。
- 判别式任务(分类、NER)在数据充足时,微调 BERT 往往又快又好。
现实是分工共存:通用文本生成常用 decoder-only,检索、排序与判别常用 encoder,条件生成也可用 encoder-decoder。decoder 同样可改造成 embedding 模型;最后应比较质量、吞吐和运维成本,而不是按架构名称预判赢家。
六、用翻译任务比较两条计算路径
假设输入是 128 个 token,要生成 32 个 token。encoder-decoder 先让编码器双向处理 128 个输入 token,解码器的 32 个位置通过 cross-attention 读取固定的编码结果;decoder-only 通常把输入和输出串成一条 160-token 的因果序列。前者把“读输入”和“写输出”明确分工,后者则用同一套堆叠和同一个 next-token 目标统一所有任务。
Encoder-Decoder: source(128) -> encoder states -> decoder generates 32
Decoder-Only: [source(128), target(32)] -> one causal token stream
| 比较项 | Encoder-Decoder | Decoder-Only |
|---|---|---|
| 输入可见性 | 编码器内双向 | 全程因果 |
| 条件复用 | 编码结果可被每个输出步复用 | 输入 K/V 保存在同一缓存中 |
| 训练接口 | 编码、解码两套路径 | 单一续写接口 |
| 典型优势 | 条件转换、输入理解充分 | 扩展简单、统一生成范式 |
不能仅凭总长度断言谁更快:参数分配、cross-attention 实现、输入输出长度比例都会改变结果。选型时应在同等质量与相近参数预算下比较吞吐、首 token 延迟和部署复杂度。
七、常见误区与追问
- 误区:Decoder-Only 不能做理解任务。 它可以通过生成标签、答案或结构化结果完成理解任务,只是输入采用因果可见性。
- 追问:Encoder-Decoder 为什么适合翻译和摘要? 编码器能双向压缩完整输入,解码器再通过交叉注意力按需读取,天然匹配条件序列生成。
- 误区:相同参数量下两种架构的推理成本只由总 token 数决定。 参数在编码器与解码器间的分配、交叉注意力和输入输出比例都会改变成本。
- 追问:Decoder-Only 为什么更容易统一多任务? 所有任务都可序列化为上下文续写,训练目标、模型堆叠和服务接口都更统一。
- 追问:什么时候仍优先 Encoder-Only? 固定表示、检索向量、分类和抽取等无需生成的任务,双向编码通常更直接且吞吐更高。
八、加强记忆
三种架构记「表示 / 自回归 / 条件生成」:encoder-only 用双向表示服务分类检索,decoder-only 用因果栈统一续写与生成,encoder-decoder 用双向编码、因果解码和交叉注意力明确分开输入输出。decoder-only 常见,是因为 next-token 数据、同构堆叠、上下文接口和 KV Cache 服务链路容易统一;这不是“所有大模型都用它”,也不证明同预算必胜。选型应结合任务、输入输出长度、参数分配、质量与部署基准。