编码器、解码器与编码器-解码器架构
排布 transformer 堆栈的三种方式——仅编码器、仅解码器、编码器-解码器——差别只有一处:哪些位置能看见哪些位置。这个选择决定了它们各自擅长什么。
同一个 transformer 模块可以按三种方式排布,而这三种排布并不通用。仅编码器、仅解码器、编码器-解码器,各自适合不同类型的任务。它们的差别最终归结为一个设计决定:哪些位置可以关注哪些位置。 抓住这一点,三个家族就各归其位——也包括为什么说「一个 LLM」时,几乎总是指其中某一种排布。
唯一要紧的变量
下面所有内容,说到底都在讲注意力(attention)掩码——每个位置能看什么的规则。
- **双向注意力:**每个位置都能关注其他所有位置,前面的后面的都行。每个 token 两侧的完整上下文都看得到。
- **因果注意力:**每个位置只能关注自己和之前的位置。未来被遮住了。
就这一个开关——一个 token 能不能看到它后面的内容——把三种架构区分开来。三者的自注意力机制完全相同,变的只是掩码。抓住这一点,剩下的都是推论。
仅编码器:为理解而生
仅编码器模型全程使用双向注意力。每个 token 一次性看到整个输入,两个方向都在内。这非常适合理解一段固定文本:分类、情感分析、抽取片段,或者为整句话生成一个信息丰富的 embedding。BERT 系模型是这个家族最知名的代表。
问题在于,双向注意力会让文本生成变得语无伦次。如果每个位置都能看到其他所有位置,那「预测下一个 token」就失去了意义——答案早就明摆在右边了。所以仅编码器模型的训练方式不同:通常是随机遮掉一些 token,让模型用两侧的上下文把它们补回来。这个目标能产出极佳的文本表示,却生不出续写能力。仅编码器模型会读,不会写。
仅解码器:为生成而生
仅解码器模型全程使用因果注意力。每个 token 只能看到自己和之前的内容,永远看不到未来。这正是下一 token 预测的要求:模型不能偷看它要预测的那个 token。人们说「一个语言模型」时,指的几乎总是这种架构。
因果掩码让自回归生成循环变得自洽:模型产出一个 token,把它接在后面,再预测下一个,全程不曾看到自己无权看到的答案。它也让 KV cache 成为可能:由于过去的位置永远无法关注未来,它们算出的 key 和 value 在生成过程中不再变化,可以存下来重复使用。
这个取舍与编码器正好相反。仅解码器模型被限制只能向后看,对固定输入构建的表示会比双向模型略弱——但它能生成,而事实证明,这才是最重要的能力。整个领域最终把通用模型收敛到这个家族,原因就在这里。
编码器-解码器:为转换而生
最初的 transformer 并不属于上面两种,而是一个编码器-解码器,为翻译设计——任务是把一个序列转换成另一个序列。它把两个堆栈合在一起,是经典序列到序列设计的 transformer 版本。
- 编码器双向读取整个输入,产出一组上下文表示。
- 解码器以因果方式逐 token 生成输出——并且加进了第三种成分:交叉注意力,即解码器的 query 去关注编码器的 key 和 value。
交叉注意力就是那座桥。每生成一步,解码器都回头看一眼已被充分理解的输入,来决定下一步产出什么。这适合输入到输出的映射关系明确、且两端都有分量的任务:翻译、摘要、语音转写。编码器拿到对源文本的完整双向理解,解码器拿到对目标文本的正规因果生成,交叉注意力把两者连起来。
三者怎么选
透过掩码来看,规律就非常清晰:
| 任务形态 | 架构 | 原因 |
|---|---|---|
| 对固定文本分类 / 生成 embedding | 仅编码器 | 双向上下文给出最丰富的理解 |
| 开放式生成、通用助手 | 仅解码器 | 因果掩码让下一 token 预测自洽 |
| 把一个序列转换成另一个序列 | 编码器-解码器 | 双向读输入、因果写输出,由交叉注意力连接 |
为什么仅解码器会成为大模型的默认选择?一部分原因是它只做一件事,而这件事的可扩展性极好——在无标注文本上做下一 token 预测;另一部分原因是,够大的仅解码器模型可以把「理解」和「转换」任务重新表述为生成,从而做得足够好。你只要用 prompt 问一句,就能让仅解码器模型做分类或翻译,而仅编码器模型根本无法被 prompt 出生成行为。通用性打败了专精。
要点回顾
- 三种架构只差一处:注意力掩码——双向(能看全部)还是因果(只能看过去)。
- 仅编码器(双向):最擅长理解固定文本——分类、embedding——但不会生成。
- 仅解码器(因果):最擅长生成,让下一 token 预测自洽、让 KV cache 成为可能;通常说的「LLM」就是指它。
- 编码器-解码器:双向编码器加因果解码器,由交叉注意力连接,适合把一个序列转换成另一个序列。
- 仅解码器成为默认,是因为下一 token 预测能在无标注数据上扩展,而大模型可以通过 prompt 处理理解与转换任务。
下一篇: 解码策略——解码器产出一个分布之后,怎么把它变成一个序列?