为什么主流大模型采用 Decoder-only 架构?

Decoder-only:为什么大模型只留"后半段"?
上篇聊完大模型是什么,你可能还留着一个疑问:这些模型的大脑到底是什么结构?
今天我们揭开这层纱。
你可能听说过 Transformer。2017 年 Google 那篇开山论文,它最初是为翻译任务设计的。一句话进去,另一句话出来。
这听起来很合理。
但这套架构有个特点:它有两部分。
一部分叫 Encoder,负责"读"。另一部分叫 Decoder,负责"写"。
大模型却把"读"的部分扔掉了,只留下"写"的部分。
这背后是有讲究的。
Transformer 的前世今生
先说历史。
2017 年,Google 发表那篇"Attention is All You Need"。他们想解决一个老问题:翻译。
传统的 RNN 模型处理长句子很吃力。前面的词和后面的词隔得太远,信息传递着传递着就丢了。
Transformer 换了个思路。不再逐个词处理,而是让所有词同时"互相看一眼"。
这个机制叫注意力机制。
它能让模型在任何距离上建立联系。头几个词能直接看到句尾,尾巴上的词也能直接看到开头。
翻译任务天然需要这个。你得先完整理解输入句子的意思,再生成对应的输出。
所以原始的 Transformer 设计了编码和解码两套组件。
编码器把源语言读进去,解码器把目标语言写出来。
一家翻译公司,接待员和翻译员都有。

三种架构,各有分工
但问题来了:是不是所有任务都需要这两部分?
不是的。
有些任务根本不需要生成,只需要理解。比如判断一句话是正面还是负面情感。
这类任务叫分类,或理解任务。
对于这类任务,Encoder 足够了。
BERT 就是这么干的。它只用了编码器部分。输入一句话,直接输出分类结果。
BERT 在各项理解任务上表现惊艳,一时风头无两。
反过来,有些任务主要是生成。比如写文章、做摘要、聊天对话。
这类任务,Decoder 更适合。
GPT 系列就走这条路。它只用解码器,一个词接一个词地往外蹦。
还有一种任务,两头都要。比如翻译。输入是英文,输出是中文。这需要理解英文,再生成中文。
T5 和 BART 就是 Encoder-Decoder 双管齐下。
三种架构,服务三种场景。
就像餐厅里的三种角色:品鉴师只管尝,厨师只管做,而高级定制厨师既要会尝也要会做。

大模型为什么偏爱 Decoder-only?
现在说回大模型。
GPT-1 是 2018 年 OpenAI 推出的。它做了一件当时看起来很大胆的事:用 Decoder-only 架构做预训练。
这个词现在你可能常听说:预训练+微调。
意思是先在大规模通用数据上训练一个语言模型,再在具体任务上微调。
之前的 BERT 也这么干。但 BERT 用的是 Encoder,大模型用的是 Decoder。
为什么大模型要选 Decoder?
第一个原因:任务匹配。
大模型的核心任务是"预测下一个词"。你给它一段话,它猜下一个最可能出现的词是什么。
这本质上是一个生成任务。
Decoder 架构天然适合生成。每个词生成后,成为下一步的输入,继续生成下一个。
这是它的本职能力。
而 Encoder 擅长的是理解,是把输入压缩成向量。它不太擅长做这种自回归生成。
就像短跑运动员去跑马拉松,也不是不能跑,但总归不是他的强项。
第二个原因:省钱。
Encoder-Decoder 有两个模块。Encoder 处理输入,Decoder 处理输出。
参数量接近翻倍。
大模型的参数规模是巨大的。1750 亿参数是 GPT-3 的量级。参数量翻倍意味着什么?
硬件成本翻倍。训练时间翻倍。电费翻倍。
而 Decoder-only 只需要维护一套模块。省下一半的资源。
想象你要建一座写字楼,只建输出端当然比输入输出都建更省钱。
第三个原因:工程简化。
预训练和微调用同一套架构,部署时不需要转换。
很多场景下,大模型直接用 prompt 就是最好的微调方式。不需要再去训练。
这种大一统的架构,降低了工程复杂度。

GPT 系列:一代一代怎么走过来的
GPT 的演进很有意思。
2018 年的 GPT-1,用的是 12 层 Decoder,1.17 亿参数。
它证明了一件事:Decoder-only 预训练+微调的范式是可行的。
2019 年的 GPT-2,把层数加到 48 层,参数提到 15 亿。
OpenAI 当时说:我们发现,语言模型容量越大,无监督预训练效果越好。
这句话翻译成人话就是:大力出奇迹。
更大的模型、更长的训练,效果就是更好。
2020 年的 GPT-3,直接把参数推到 1750 亿。
这个规模已经大到个人无法训练。它的思路是:不用微调了,直接用 prompt。
你给它几个例子,它自己学。这种叫 in-context learning。
GPT-3 之后的故事就是继续 scale up。
更大的模型、更强的能力、更多的数据。
这条路走到今天,就是 GPT-4,就是 Claude,就是 Gemini。
核心架构一直没变。但规模和能力发生了质变。
就像 iPhone 从第一代到现在的演进。外形没大变,但芯片越来越强,功能越来越丰富。

理解架构,不是非此即彼
但话说回来,Decoder-only 不是银弹。
每种架构都有自己的用武之地。
翻译任务,Encoder-Decoder 仍然是主流。BERT 这样的 Encoder 模型,在文本分类、情感分析、问答匹配上仍是首选。
有些研究者指出,Decoder-only 架构有低秩瓶颈问题。信息集中在低维子空间,可能限制了模型的表达能力。
架构还在演进。
混合专家模型 MoE 的思路是把模型拆成多个专家,每次只激活一部分。在 Decoder-only 框架上做扩展。
新的注意力机制也在探索。线性注意力、长上下文窗口,都是为了让 Decoder-only 更高效。
没有完美的架构,只有当下最合适的选择。
就像汽车既需要油门也需要刹车。

选对武器,事半功倍
最后说点实际的。
如果你是开发者,应该怎么选?
做文本生成、聊天对话、代码补全,选 Decoder-only。
开源模型很多:GPT-Neo、GPT-J、LLaMA、Mistral、Hugging Face 上随便找。
做文本分类、情感分析、实体识别,选 Encoder-only。
BERT 系列、RoBERTa、ELECTRA,都是成熟选择。
做翻译、摘要、问答,既要理解也要生成,选 Encoder-Decoder。
T5、BART、FLAN-T5,都是干这个的。
选工具就像选武器。拳击用拳头,开车用方向盘,拧螺丝用螺丝刀。
用错也能凑合,但总归不如对症下药。

大语言模型的革命,本质上是把 Decoder-only 架构做到了极致。
它找到了自己最擅长的事——生成,然后在这条路上狂奔。
你每天和 ChatGPT 对话,背后的 Transformer 可能只用了它设计的一半。
这听起来有点浪费。但正是这种专注,成就了今天的大模型。
那下一个问题是:大模型是怎么处理语言的?它怎么把"你好"变成模型能认识的数字?
这就要说到 token 了。
BPE、WordPiece、SentencePiece,这些分词方法有什么区别?
下篇见。
