Articles

从 Transformer 到 Decoder-only:我重新理解大语言模型是怎么“学会”的

这篇文章不是从公式开始,而是从我自己连续追问的几个问题开始:Transformer 到底突破了什么?Encoder 和 Decoder 为什么存在?今天的大模型为什么大量采用 Decoder-only?训练和真正回答用户问题时,到底发生了什么变化?

我原来试图把大模型理解成“训练时负责学习,线上时负责回答”的两个阶段。继续追问以后,我发现真正值得理解的不是“Encoder 负责训练、Decoder 负责推理”这样一个简单对应,而是:同一套参数化模型,如何通过 Attention 学习 token 之间的关系,又如何在生成时把这种能力转化成一次次 Next Token Prediction。

一、我为什么一直追问 Encoder 和 Decoder

最开始我的直觉很自然:Encoder 像一个阅读者,负责理解输入;Decoder 像一个写作者,负责按照顺序生成输出。经典 Transformer 的 Encoder-Decoder 结构确实非常适合用机器翻译来理解:Encoder 读取源语言,Decoder 根据已经生成的内容逐步产生目标语言。

但这个解释很快遇到了一个问题:今天我们熟悉的 GPT、Qwen、DeepSeek 等生成式大模型,为什么很多都不再保留完整的 Encoder-Decoder,而采用 Decoder-only?如果 Decoder 只是“生成”,它又是怎么学到语言、知识、代码以及各种世界规律的?更准确地说,Decoder-only 是在“开放域对话、指令跟随”这类任务上胜出的选择——机器翻译(T5、BART)、语音识别(Whisper)等场景里,Encoder-Decoder 至今仍然很常见。

这个问题最终把我带回了 Transformer 最核心的创新:Self-Attention。

二、Transformer 真正改变的,可能不是“神经网络”,而是 token 之间建立关系的方式

在更早的序列模型里,信息更倾向于沿着序列逐步传播。Transformer 则提供了一种不同的思路:对于一个 token,可以计算它与上下文中其他 token 的关系。

Token A ─┐
Token B ─┼──→ Attention → 当前 token 的上下文表示
Token C ─┤
Token D ─┘

这意味着模型不必只能依赖“前一个 token 传过来的信息”,而可以直接建立更远距离的关联。Multi-Head Attention 又把这种关系拆成多个并行的“观察角度”,不同 head 可以学习不同类型的模式。

所以我现在更愿意这样理解 Transformer:它把“序列处理”转化成了“关系计算”。

三、Encoder 与 Decoder 的真正区别:Attention Mask,而不是“块的名字”

回到最初的直觉:Encoder 像一个阅读者,Decoder 像一个写作者。这个直觉在机器翻译里确实好用,但追问到机制层面,真正起作用的不是“它叫 Encoder 还是 Decoder”,而是 Attention 的 Mask 模式。

Encoder 使用双向注意力:每个位置都可以利用完整输入上下文,因此天然适合做表征学习、分类、匹配等任务。一个句子输入以后,每个 token 都可以结合整个句子的语境形成表示。

Decoder 则使用因果注意力(Causal Mask)。简单说,在预测当前位置时,模型不能看到未来 token:

A B C D E
↑ ↑ ↑ ↑ ↑
每个位置只能使用它左侧已经出现的信息

这并不是说 Decoder 没有 Attention,而恰恰相反:Attention 仍然是 Decoder 的核心,只是未来的信息被 mask 掉。

所以 Encoder / Decoder 这两个名字,更多是原版 Transformer 论文为“翻译”任务留下的历史命名;真正决定行为差异的是 Mask 模式,而不是块的标签。理解了这一点,后面 Decoder-only 为什么能成为主流,就不再是意外。

四、我曾经把“预训练”和“推理”理解成 Encoder 与 Decoder 的切换

这是我在讨论过程中反复确认的地方。最初我的理解是:预训练时模型需要看到完整句子、学习前后关系,所以应该使用 Encoder;真正回答用户问题时,再切换到 Decoder,用掩码注意力预测下一个 token。

继续追问后,我发现这个模型不适用于今天主流的 Decoder-only LLM。

对于 Decoder-only LLM,预训练阶段本身就使用 Causal Mask。模型学习的目标就是:给定前面的 token,预测下一个 token。

因此更准确的图应该是:

海量训练数据
     ↓
Decoder-only Transformer
+ Causal Mask
     ↓
Next Token Prediction(预训练)
     ↓
微调 + 强化学习(SFT、RLHF/DPO)
     ↓
得到可对话、可遵循指令的模型

真实用户输入
     ↓
同样的 Decoder-only 结构
+ Causal Mask
     ↓
逐步预测下一个 Token
     ↓
生成回答

这里补上了一个我原先忽略的环节:后训练(对齐)。预训练产出的基座模型并不会天然以“回答问题”的方式输出,真正让模型学会跟随指令、按用户期望组织回答的,是后续的微调与强化学习阶段(详见下一节)。所以“结构相同”是对的,但“同一份权重”并不完全成立——线上服务的 chat 模型通常是经过对齐的版本。

五、微调与强化学习:预训练模型是怎么“学会回答问题”的

如果只做预训练,模型学到的能力本质上是“续写”:给它一段文本,它接下去。预训练基座模型会补全句子、模仿风格,但它并不会自动以“回答用户问题”的方式组织输出——它可能继续提问、继续铺陈背景,甚至不理会指令。

让模型“会对话”主要靠两个阶段:

  • 监督微调(SFT,Supervised Fine-Tuning):准备大量“指令 → 期望回答”的样本,让模型在这些真实回答上继续训练。这本质上是把“按用户指令作答”也变成一次 Next Token Prediction 的学习。微调之后,模型学会了回答的格式、语气,以及最基本的指令遵循。
  • 强化学习(RLHF / DPO):光模仿样本还不够——样本无法穷尽所有情形,而且人工写的答案也不一定是最受欢迎的。强化学习阶段用奖励来优化行为:RLHF 先收集人类对多个回答的偏好来训练一个奖励模型,再用 PPO 等算法让模型生成更受偏好的输出;DPO 则直接利用偏好数据优化,不再需要单独的奖励模型。这个阶段在很大程度上决定了模型是否乐于助人、是否愿意承认不知道、是否更少输出有害内容。此外,面向推理的强化学习(用可验证的奖励来优化思考过程)也在进一步强化模型的推理能力。

所以今天“同一个 Decoder-only 结构”背后的完整链条是:预训练学会语言与世界知识 → 监督微调学会跟随指令 → 强化学习优化行为偏好。这也解释了文末那个问题的一半:模型能按用户意图组织回答、调用工具,并不完全是预训练的自然涌现——指令跟随和工具调用的格式,正是对齐阶段显式教给模型的。

六、那么训练和推理到底有什么不同?

结构可以相同,但计算过程并不相同。

训练时,完整的训练序列已经存在,因此 GPU 可以同时计算大量位置上的 next-token prediction。虽然每个位置仍然不能“偷看未来”,但不同位置的计算可以高度并行。这里的关键机制是 Teacher Forcing:训练时每个位置的前缀都来自真实数据,所以可以放心并行;即使某个位置预测错了,错误也不会进入下一轮训练输入。

推理时,未来 token 并不存在。模型先生成一个 token,把它加入上下文,再生成下一个 token。因此生成过程天然具有自回归特征,而且每一步的前缀来自模型自己的采样——一旦某个 token 生成偏了,错误会进入下一轮输入并被放大,这就是 Exposure Bias:

A → 预测 B
A B → 预测 C
A B C → 预测 D
A B C D → 预测 E

所以真正重要的区别不是“训练使用 Encoder、推理使用 Decoder”,而是:

训练是在已知序列上并行学习 Next Token Prediction;推理是在未知未来上逐步执行 Next Token Prediction。

七、“训练集 → 真实问题”这个类比,我为什么仍然觉得有价值

严格来说,用户线上请求不能直接等同于机器学习意义上的 test set。真正的测试集通常是独立保留的数据,用于评估泛化能力。

但我的原始直觉仍然有价值:模型在训练阶段从历史数据中形成参数化能力,部署以后面对的是新的、真实的上下文,需要验证这种能力能否泛化到真实问题。

因此我更愿意把它表达成:

训练:从历史数据中学习规律
        ↓
参数:把学习结果压缩进模型
        ↓
推理:在新的上下文中调用这些能力
        ↓
真实结果:检验泛化是否成立

这也为我后面理解 Agent 打下了一个很重要的基础:模型拥有能力,不等于系统已经完成任务。

八、从“Attention”继续往下追:为什么长 Context 仍然会成为问题?

我在讨论中又遇到了一个新的疑问:既然 Attention 可以建立 token 之间的关系,为什么长上下文里仍然会出现信息利用不充分的问题?为什么重要信息的位置、上下文组织方式,会影响模型表现?

这让我意识到,“Context Window 很长”和“模型能有效利用所有 Context”不是一回事。Attention 是关系计算机制,但并不意味着每条信息都会被同等有效地利用。

这也正好连接到了我一直在研究的 Context Engineering:真正的工程问题开始从“模型有多大的窗口”,转向“哪些信息应该进入上下文、如何组织、什么时候更新,以及哪些信息应该交给外部系统”。

九、我现在对 Transformer 和 LLM 的一个阶段性理解

如果把今天的理解压缩成几句话:

  • Transformer 的核心突破:用 Self-Attention 高效建立 token 之间的关系。
  • Encoder:更适合利用完整输入上下文形成表征。
  • Decoder:通过 Causal Mask 保持自回归生成。
  • Decoder-only LLM:把大量能力统一到 Next Token Prediction 这个训练目标上。
  • 训练:已知序列上的并行学习。
  • 推理:未知未来上的自回归生成。
  • 后训练:微调(SFT)+ 强化学习(RLHF/DPO),让模型从“会续写”变成“会回答”。

以上是我目前的阶段性理解,其中几处表述需要标明边界:比如“Decoder-only 更优”应限定在开放域对话 / 指令跟随这类任务上;又比如“训练并行、推理自回归”的区分,在推测解码、chunked prefill 等工程优化下会变得模糊——并行度是工程后果,不是定义。

而最让我感兴趣的是最后一步:如果 LLM 的基本动作仍然是“预测下一个 Token”,为什么它已经可以表现出复杂的推理、规划和工具使用能力?这个问题一半的答案在模型内部——正如第 5 节所说,微调与强化学习让模型学会遵循指令、按任务组织输出;另一半才轮到模型之外的系统去回答。

这个问题把我自然带到了下一篇文章。

下一步:模型之外发生了什么?

如果说 Transformer 解决的是“模型如何处理信息”,LLM 解决的是“根据上下文生成下一步”,那么当模型真正进入现实系统之后,还需要解决另一个问题:

生成出来的下一步,如何真正作用于世界,并获得反馈?

这就从 Model 走向了 Inference Runtime、Tool、Environment、Verification 和 Agent Runtime。