Decoder-only Transformer 是当前大多数自回归大语言模型的基础架构形态。它只保留 Transformer decoder 的 causal self-attention 和 FFN 堆叠,不使用单独 encoder,也通常不使用 encoder-decoder 架构中的 cross-attention。模型把输入 prompt 和待生成文本统一看作一条 token 序列,并通过 Next-token Prediction 学习:

这种结构的核心优势是训练目标、模型结构和推理过程高度一致:训练时每个位置预测下一个 token,推理时也逐 token 生成后续文本。

结构与数据流

给定 token 序列:

模型首先把 token 映射为 embeddings,并注入位置信息,例如 RoPE

然后经过 个 decoder-only Transformer blocks。现代 LLM 常见 block 可以抽象为 Pre-Norm 形式:

最后通过输出层得到每个位置的 logits:

并对词表做 softmax 得到下一 token 分布。

Causal Mask

Decoder-only Transformer 的关键约束是 causal mask。第 个位置只能看到 的 token,不能访问未来 token:

softmax 后,未来位置的 attention weight 变为 0。这让模型在训练时可以并行计算所有位置的 loss,同时不泄漏未来答案。

直观地说:

position 1: sees x1
position 2: sees x1, x2
position 3: sees x1, x2, x3
...

如果去掉 causal mask,模型会在训练时偷看目标 token 后面的上下文,得到不合法的语言建模目标。

与 Encoder-Decoder 的区别

原始 Transformer 用 encoder 读取源序列,用 decoder 生成目标序列,并通过 cross-attention 让 decoder 访问 encoder 输出。Decoder-only Transformer 去掉这个显式的输入/输出分离,把所有任务都组织成 prompt + continuation。

架构输入读取输出生成常见用途
Encoder-only双向 self-attention通常不是自回归生成表示学习、分类、检索
Encoder-Decoderencoder 双向读取,decoder 自回归生成cross-attention 连接输入输出翻译、摘要、seq2seq
Decoder-onlycausal self-attentionnext-token generationLLM、对话、代码、工具调用

Decoder-only 的好处是统一、简单、可扩展;代价是所有输入理解、条件控制和输出格式都要通过同一条 token 序列表达。

为什么适合 LLM

Decoder-only Transformer 适合大模型,主要因为它把很多工程问题统一起来:

  • 统一目标:预训练、continued pretraining、SFT 都可以看成不同数据上的 token prediction。
  • 统一接口:分类、问答、翻译、代码生成、tool use 都可以转成 prompt 后续生成。
  • 训练并行:训练时所有 token 位置可以在 causal mask 下并行计算。
  • 推理增量:推理时可以用 KV Cache 复用历史 K/V。
  • 扩展简单:增加层数、宽度、数据和 token 数时,结构不需要为每个任务重写。

这也是 GPT、LLaMA、Qwen、DeepSeek 等模型家族大量采用 decoder-only 路线的原因。

与 Chat Template 的关系

Base decoder-only model 只学习 token continuation。要让它成为 assistant,后训练通常引入 Chat Template,把多轮对话组织成带角色标记的序列:

<system>...
<user>...
<assistant>...

结构上模型仍然是 decoder-only Transformer;变化的是数据格式、loss masking 和后训练目标。训练时如果只对 assistant token 计算 loss,user/system token 仍参与 attention,但不被直接预测。这说明 decoder-only 架构本身不区分“输入”和“输出”,这种区分来自数据模板和 loss mask。

推理链路

自回归推理过程是:

prompt tokens
  -> prefill: compute hidden states and KV cache
  -> decode step 1: sample next token
  -> append token and update KV cache
  -> decode step 2
  -> ...

Prefill 阶段并行处理 prompt;decode 阶段每次只生成一个或少量新 token。由于历史 K/V 已缓存,新 token 只需计算自己的 Q/K/V,并读取历史 K/V 做 causal attention。

这带来一个重要系统后果:decoder-only LLM 的推理成本不仅由参数量决定,也由上下文长度、batch size、KV Cache、attention head 设计和 serving 调度决定。

复杂度与瓶颈

训练阶段,标准 full attention 的主要复杂度来自序列长度:

其中 是 sequence length, 是 hidden size 或 attention 相关维度。长上下文训练会显著增加 attention 计算和 activation memory。

推理阶段,decode 每一步只处理新 token,但需要读取历史 K/V,因此 KV Cache 显存近似随:

增长,其中 是层数, 是 KV heads 数, 是 head dimension。这解释了为什么 GQAMQAMLA 和 PagedAttention 都与 decoder-only serving 强相关。

设计取舍

设计点优势代价
Causal self-attention训练和生成目标一致不能双向读取未来 token
Prompt + continuation任务接口统一输入/输出边界依赖模板设计
KV Cache避免重复计算历史 K/V长上下文和大 batch 显存压力大
Decoder-only stack简洁、可扩展seq2seq 任务需要用文本格式模拟
Next-token objective数据规模化容易不直接优化偏好、安全或任务成功

常见误解

  • 误解:decoder-only 只能生成,不能理解。 它通过条件生成完成理解任务,例如分类可以组织成“给定文本,输出标签”。
  • 误解:decoder-only 没有输入输出区分。 结构上没有 encoder/decoder 区分,但训练数据、模板和 loss mask 可以定义哪些 token 是条件、哪些 token 是目标。
  • 误解:训练时也是一个 token 一个 token 算。 训练可以并行计算整段序列的所有位置,只是 causal mask 限制每个位置可见范围。
  • 误解:KV Cache 只是小优化。 对长上下文和高并发 serving,KV Cache 往往是核心显存瓶颈。

相关概念

经典论文与资料