Encoder-only、Decoder-only 和 Encoder-Decoder 架构有什么区别?

Encoder-only、Decoder-only 和 Encoder-Decoder 到底有什么区别?
上回聊完位置编码,你可能会有个疑问:Transformer 那些注意力机制听起来挺厉害,但实际用的时候,怎么有的模型只用来理解文本,有的模型却能从头生成新内容?这就涉及到 Transformer 的三种架构选择了。
同样是 Transformer,为什么 BERT 刷阅读理解题特别溜,GPT 能写小说,而 T5 翻译文章最在行?答案就藏在它们架构设计的差异里。
三种架构,长什么样?
先把目光放到这三种架构的基本构造上。
Encoder-only,顾名思义,只有编码器。它的代表作是 BERT 系列。你给它一段文字,它能理解这段文字说了什么,但不会往外吐东西。
Decoder-only,刚好反过来,只有解码器。GPT 系列就是典型。它不挑输入,想写什么就写什么,一个字一个字往外蹦。
Encoder-Decoder,两边都有,既有编码器也有解码器。T5 和 BART 走的是这条路。先把东西吃进去消化,再把自己理解的东西说出来。

我打个比方。Encoder 像是"听力理解",Decoder 像是"口头表达"。Encoder-only 是个聋哑人,听得懂但说不出。Decoder-only 是个文盲,脑子里有东西但不会写。Encoder-Decoder 才是个正常人,先听再说。
这个比喻不精准,但能帮你快速建立直觉。
Encoder 在干什么?
说说编码器这边。它的工作是什么?
编码器的核心任务是把输入文本变成一个"理解过的表示"。说白了就是把文字嚼碎了,消化成机器能懂的形式。
它怎么做到的?靠自注意力机制。你可能还记得上篇位置编码里提到的注意力分数——每个词都能看看上下文里其他词跟自己的关系。
BERT 训练的时候用的是一种叫"掩码语言模型"的方法。简单说就是完形填空:把一句话里几个词挖掉,让模型猜被挖掉的是什么。
"今天天气真好啊"变成"今天天气真[MASK]"。模型需要根据上下文推断出 [MASK] 位置应该是"好"。

这个过程让 BERT 学会了什么?学会了理解。学会了看到"今天天气真",知道后面大概率跟的是"好"而不是"坏"。学会了"苹果"在"吃苹果"里是水果,在"苹果公司"里是公司。
BERT 不生成内容,它只是把文本消化成向量表示。这个表示包含了上下文信息,叫上下文表示。
Decoder 的独门绝技
解码器这边有什么不一样?
关键在于那个 Mask。中文叫掩码或者遮罩。
解码器在处理输入的时候,会把"未来的内容"遮住。什么意思?
当你让 GPT 写"今天天气真好"这句话的时候,它生成第一个字"今"的时候,只能看到"今"自己。生成第二个字"天"的时候,只能看到"今天"这两个字。生成第三个字"天"的时候,只能看到"今天天气"。
它永远看不到自己还没生成的东西。这叫自回归生成。

你可以把这个过程想象成闭卷考试。学生只能根据已经写下的答案继续往下写,不能偷看书本后面的内容。
为什么要这样设计?因为生成任务需要这个特性。写文章的时候,你不可能先看到整篇文章再动笔。你是一个字一个字往外蹦的。
Decoder 的训练方式也因此不同。它用的是"下一个词预测"。给定"今天天气真",预测下一个词是什么。给对了就加分,给错了就调整参数。
这个训练方式看起来简单,但当数据量足够大、模型规模足够大的时候,涌现出了惊人的能力。GPT 能写代码、写小说、回答问题,都是从这个简单的训练目标里长出来的。
三种架构,各有所长
那么问题来了:到底该用哪个?
Encoder-only 擅长理解分析任务。 情感分类、命名实体识别、文本分类,这些任务的特点是给你一段话,你给个判断。BERT 刷这些题特别在行。
Decoder-only 擅长创造性生成任务。 对话、写作、代码生成,你需要模型帮你产出新内容。GPT 就是干这个的。
Encoder-Decoder 擅长"输入到输出"的任务。 机器翻译是典型,把中文翻译成英文。文本摘要也是,把长文章压缩成短概括。还有问答,给个问题从文档里找答案。

再打个比方。Encoder-only 像是个分析师,读完一堆材料给你出结论。Decoder-only 像是个作家,脑子里有故事要讲给你听。Encoder-Decoder 像是个翻译官,先听你说什么,再用另一种方式表达出来。
它们不是谁比谁强的问题,是术业有专攻。
为什么 GPT 突然这么火?
你有没有发现,这几年最出风头的都是 Decoder-only 的模型?ChatGPT、Claude、Gemini,清一色是纯解码器架构。
为什么?
首先,Decoder-only 的资源利用率更高。Encoder-Decoder 要跑两套注意力机制,一套编码一套解码。Decoder-only 只有一套,处理开放式生成任务的时候更省。
其次,Decoder-only 在大规模训练后展现出了一种有趣的能力:涌现。模型不只能写文章,微调一下之后做分类任务也能达到 Encoder-only 的水平。
也就是说,一个"作家"稍加训练也能当"分析师"用。
反过来呢?Encoder-only 能微调成生成模型吗?能,但效果不如专门的 Decoder。分析能力比较好转,生成能力比较难学。
这就解释了为什么大家都在卷 Decoder-only。一套架构能做的事越来越多,为什么还要两套?
实战指南:怎么选?
好,理论讲完了。来点实在的。
你的任务是文本分类、情感分析、实体识别?选 Encoder-only。用 BERT、RoBERTa 这些模型。直接拿过来微调,几个小时就能出效果。
你的任务是对话、写作、代码生成?选 Decoder-only。用 GPT、LLaMA 这些模型。准备好大量算力和数据,它会给你惊喜。
你的任务是翻译、摘要、问答?选 Encoder-Decoder。用 T5、BART 这些模型。输入输出有明确对应关系的,找它没错。
你的情况比较特殊,资源有限但想做通用任务?还是选 Decoder-only。一个模型能覆盖多种能力,虽然专项可能不如精调的 Encoder,但胜在灵活。

说到底,架构选择是工程决策。要看你的任务类型、数据规模、算力预算。
结尾
现在你知道了,BERT 不是为了跟 GPT 竞争而设计的,GPT 也不是要替代 T5。它们解决的是不同的问题。
架构没有好坏之分,只有合不合适。理解了这些设计哲学,下次遇到新任务,你也能从架构层面给出判断——这才是从"调 API"到"懂模型"的关键一步。
不过我好奇的是:BERT 和 GPT,一个靠理解起家,一个靠生成起家,它们各自的长处能不能互补?下回我们就来聊聊这个话题。
