
前言2017 年 Google 发表 “Attention Is All You Need”提出了 Transformer 架构。原始 Transformer 是一个Encoder-Decoder结构——Encoder 负责理解输入Decoder 负责生成输出中间还有一个交叉注意力层连接两者。这个架构最初是为机器翻译设计的Encoder 读英文句子Decoder 生成中文翻译。但从 GPT 开始一个趋势越来越明显去掉 Encoder只用 Decoder。到今天的 GPT-4、LLaMA、Qwen、DeepSeek几乎所有主流大语言模型都采用了 Decoder-only 架构。Encoder-Decoder 反而成了少数派。这篇文章拆解这个问题Decoder-only 到底做了什么改动三种架构有什么本质区别为什么 Decoder-only 赢了一、Transformer 的三种架构变体原始 Transformer 论文发布后社区沿着三个方向做了变体图1Transformer 的三种架构变体。左Encoder-Decoder原始 Transformer / T5中Encoder-onlyBERT右Decoder-onlyGPT / LLaMA。架构注意力类型代表模型典型任务Encoder-Decoder双向Encoder 因果Decoder 交叉注意力T5、BART翻译、摘要、问答Encoder-only双向注意力BERT、RoBERTa分类、NER、语义匹配Decoder-only因果注意力单向GPT、LLaMA、Qwen文本生成、对话、推理三种架构的核心区别在于注意力的可见范围——每个 token 能看到哪些其他 token。Encoder 的双向注意力Encoder 中每个 token 可以看到序列中的所有其他 token包括前面的和后面的。这让 Encoder 擅长理解任务——给定一句话每个词都能充分利用全局上下文来构建语义表示。双向注意力Encoder: tok0 tok1 tok2 tok3 tok0 [ ✓ ✓ ✓ ✓ ] ← 每个 token 能看到所有 tok1 [ ✓ ✓ ✓ ✓ ] tok2 [ ✓ ✓ ✓ ✓ ] tok3 [ ✓ ✓ ✓ ✓ ]BERT 的训练目标是 Masked Language ModelingMLM随机遮住一些词让模型根据双向上下文来预测被遮住的词。这天然需要双向注意力。Decoder 的因果注意力Decoder 中每个 token只能看到它自己和它前面的 token看不到后面的。这就是Causal Mask因果掩码也叫单向注意力。因果注意力Decoder: tok0 tok1 tok2 tok3 tok0 [ ✓ -∞ -∞ -∞ ] ← 只能看自己 tok1 [ ✓ ✓ -∞ -∞ ] ← 能看前两个 tok2 [ ✓ ✓ ✓ -∞ ] ← 能看前三个 tok3 [ ✓ ✓ ✓ ✓ ] ← 能看所有这个设计直接服务于自回归生成预测第 i 个 token 时模型只能使用前 i-1 个 token 的信息。如果能看到后面的 token就作弊了。Encoder-Decoder 的交叉注意力在 Encoder-Decoder 架构中Decoder 除了自己的因果注意力外还有一个交叉注意力Cross-Attention层Decoder 的 Query 来自自身Key 和 Value 来自 Encoder 的输出。这让 Decoder 在生成每个词时能查阅完整的输入序列。交叉注意力流程: Encoder 输出: [h₁, h₂, h₃, h₄]输入序列的完整表示 ↓ 作为 K, V Decoder 当前隐藏状态: q_t ↓ 作为 Q Cross-Attention(q_t, [h₁,h₂,h₃,h₄]) → 融合输入信息的输出机器翻译时Decoder 生成中文的每个字都可以通过交叉注意力回头看英文原文的任意位置。这对于需要对齐输入和输出的任务非常有效。二、Decoder-only 的架构细节Decoder-only 架构很简单把 Encoder 和交叉注意力全部去掉只保留 Decoder 的堆叠层。图2LLaMA 的 Decoder-only 架构。输入 token 经过 Embedding 后逐层通过 Transformer Decoder Block因果自注意力 前馈网络最终投影到词汇表空间预测下一个 token。2.1 单层 Decoder Block 的结构每一层 Decoder Block 包含两个子模块每个子模块都有残差连接和归一化输入 x (形状: [seq_len, hidden_dim]) │ ├── 因果自注意力Masked Self-Attention │ Q x × W_Q ← 加上 RoPE 位置编码 │ K x × W_K ← 加上 RoPE 位置编码 │ V x × W_V │ Attention softmax(QK^T / √d_k Causal_Mask) × V │ 输出经 W_O 投影 残差连接 RMSNorm │ ├── 前馈网络SwiGLU FFN │ FFN(x) (xW₁ ⊙ Swish(xW₃)) × W₂ │ 输出 残差连接 RMSNorm │ ↓ 输出形状不变: [seq_len, hidden_dim]这个 Block 重复堆叠 N 次LLaMA-7B 是 32 层LLaMA-70B 是 80 层。2.2 因果掩码的实现因果掩码在注意力分数矩阵上加一个上三角全 -∞ 的 mask# 伪代码causal_masktorch.triu(torch.ones(seq_len,seq_len)*float(-inf),diagonal1)attention_scoresQ K.T/sqrt(d_k)causal_mask attention_weightssoftmax(attention_scores,dim-1)outputattention_weights V加上 mask 后softmax 会把 -∞ 对应的位置变成 0概率为零等效于这些位置不存在。这样每个 token 的注意力只分配到它之前的 token 上。2.3 训练目标Next Token PredictionDecoder-only 的训练目标极其简单——预测下一个 token输入: 今天天气真 → token IDs: [2521, 1083, 29576, 17582] 标签: 天天气真好 → token IDs: [1083, 29576, 17582, 6521]把输入序列整体右移一位就是标签。模型对每个位置预测给定前面的 token下一个应该是什么。损失函数是交叉熵Loss - Σ log P(x_i | x_1, ..., x_{i-1})整个序列的联合概率被分解成条件概率的乘积P(x₁,...,xₙ) ∏ P(xᵢ | x₁,...,xᵢ₋₁)。这就是自回归语言模型的数学本质。三、为什么 Decoder-only 赢了从 2018 年 GPT-1 到 2024 年的 GPT-4o 和 LLaMA-3Decoder-only 从一种可选方案变成了唯一选择。这背后有多个层面的原因。3.1 训练目标天然适配海量无标注文本Decoder-only 的训练目标就是预测下一个 token。这意味着任何文本都是训练数据——不需要标注不需要配对不需要人工标签。互联网的万亿 token 文本可以直接拿来训练。相比之下Encoder-Decoder 最适合的是配对数据英文-中文、原文-摘要这类数据量远小于无标注文本。Encoder-onlyBERT需要特殊设计 MLM 任务也无法直接利用生成式目标。3.2 Scaling Law 表现可预测2020 年 OpenAI 的 Scaling Laws 论文揭示了一个关键发现Decoder-only 模型的性能loss随参数量、数据量和计算量的增加呈现可预测的幂律关系。L(N) ∝ N^{-0.076} 参数量的 scaling law L(D) ∝ D^{-0.095} 数据量的 scaling law这意味着投入多少算力和数据能得到多少性能提升是可以提前算出来的。这让砸钱扩大模型变成了一个可量化、可规划的工程决策而不是赌博。Encoder-only 和 Encoder-Decoder 没有展现出同样清晰的 scaling law。3.3 架构简洁参数利用率高Decoder-only 只有一种注意力因果自注意力只有一种训练目标next token prediction。每一层的参数都直接服务于同一个任务。Encoder-Decoder 有两套参数Encoder 参数 Decoder 参数加上交叉注意力层。在同等参数预算下Decoder-only 可以把所有参数都投入到生成能力上而不是分一半给理解能力。一个直觉如果最终目标是生成文本为什么要花一半参数去做理解输入这件事直接让所有参数都学怎么生成效率更高。3.4 统一理解和生成早期观点认为Encoder 负责理解Decoder 负责生成分工明确效率更高。但 Decoder-only 的大规模实验表明自回归预训练本身就隐含了理解能力。当模型在海量文本上做 next token prediction 时要预测好下一个词它必须理解前面的上下文——因果关系、逻辑推理、世界知识。理解不是独立于生成的任务而是生成能力的副产品。这就是所谓的“理解即预测”哲学。3.5 微调和对齐的兼容性Decoder-only 做指令微调Instruction Tuning和 RLHF 非常自然prompt 和 response 拼成一个序列只对 response 部分计算 loss。不需要修改架构不需要添加额外模块。四、从 GPT 到 LLaMADecoder-only 架构的演进虽然都叫 Decoder-only但从 GPT-1 到 LLaMA-3架构细节发生了很多重要变化。4.1 GPT 系列OpenAI版本年份参数量关键特征GPT-12018117M12 层 DecoderLearned Positional EmbeddingGELUGPT-220191.5B48 层Pre-LayerNormByte-Pair EncodingGPT-32020175B96 层Sparse AttentionScaling Law 验证GPT-42023~1.8T推测MoE推测多模态具体架构未公开GPT 系列验证了 Decoder-only 规模扩展的路线。GPT-3 是里程碑175B 参数证明了大就是好的 scaling law。4.2 LLaMA 的架构创新MetaLLaMA 在 GPT 的 Decoder-only 基础上做了几个关键改动成为开源 LLM 的事实标准图3RoPE 旋转位置编码的原理。通过对 Query 和 Key 向量施加与位置相关的旋转将绝对位置信息编码进向量使得注意力分数自然反映相对位置关系。Pre-RMSNorm替代 LayerNormLLaMA 使用 RMSNorm 替代标准 LayerNorm。RMSNorm 只做缩放不做平移计算更简单训练更稳定。而且放在子模块之前Pre-Norm而非之后Post-Norm避免梯度消失。原始 Transformer: x LayerNorm(x SubLayer(x)) ← Post-Norm LLaMA: x x SubLayer(RMSNorm(x)) ← Pre-NormSwiGLU 激活替代 ReLU/GELULLaMA 的 FFN 使用 SwiGLU 门控激活比 GELU 表达力更强SwiGLU(x) (xW₁ ⊙ Swish(xW₃)) × W₂SwiGLU 引入了一个额外的门控分支W₃让网络可以动态调节信息流。代价是 FFN 有 3 个权重矩阵而非 2 个所以 LLaMA 把 FFN 的隐藏层维度从 4d 缩小到约 2.67d 来平衡参数量。RoPE 位置编码替代 Learned/SinusoidalRoPERotary Position Embedding通过对 Q 和 K 向量施加旋转来注入位置信息。它的核心优势是两个 token 的注意力得分只取决于它们的相对位置差而非绝对位置。这让模型可以泛化到比训练时更长的序列。RoPE 的核心操作: q_m R(θ, m) × W_Q × x_m ← 位置 m 的 Query 旋转 mθ 角 k_n R(θ, n) × W_K × x_n ← 位置 n 的 Key 旋转 nθ 角 q_m · k_n 只和 (m-n) 有关 ← 相对位置GQAGrouped Query AttentionLLaMA-2 70B 引入了 GQA——多个 Query 头共享同一组 Key/Value 头。标准的 Multi-Head Attention 中Q/K/V 头数量相同比如 32:32:32GQA 可以减少 K/V 头数量比如 32:8:8大幅降低 KV Cache 的显存占用对长序列推理至关重要。注意力类型Q:K:V 头比例KV Cache 显存效果MHAMulti-Head32:32:32基准最强但最贵MQAMulti-Query32:1:11/32最快但质量下降GQAGrouped-Query32:8:81/4平衡点五、三种架构的适用场景虽然 Decoder-only 统治了 LLM但其他架构并没有完全被淘汰架构最适合的场景不适合的场景Decoder-only文本生成、对话、代码、推理、通用任务需要严格双向理解的短文本分类Encoder-only文本分类、NER、语义相似度、检索匹配任何需要生成文本的任务Encoder-Decoder翻译、摘要、多模态对齐语音→文本开放式长文本生成Encoder-onlyBERT 系列在理解型下游任务上仍然有优势——比如判断两句话是否语义相同、从文本中提取实体。这些任务不需要生成能力双向注意力可以更充分地利用上下文。Encoder-DecoderT5、BART在需要输入-输出对齐的任务上仍有竞争力——比如机器翻译Decoder 需要反复查阅源语言文本。但对于通用大模型来说Decoder-only 已经足够好了。六、常见疑问与澄清疑问一Decoder-only 没有 Encoder怎么理解输入Decoder-only 的因果注意力中最后一个 token 可以看到前面所有 token。经过多层堆叠后最后一个 token 的隐藏状态实际上编码了整个输入序列的信息——虽然每个位置只能看到前面的但信息通过残差连接和多层传递逐渐汇聚到序列末尾。这就是为什么推理时只取最后一个 token 的隐藏状态做 LM Head 投影就能预测下一个词。疑问二因果注意力是不是浪费了一半的注意力直觉上双向注意力能看到更多上下文应该更好。但实验反复证明在足够大的规模下Decoder-only 的单向注意力不比双向差。原因可能是大规模模型有足够的容量在单向约束下学到等效的双向表示而且自回归预训练的数据效率更高每个位置都是一个训练样本而非 BERT 的 15% mask。疑问三Encoder-Decoder 有没有可能在某些场景反超有。在严格的序列到序列任务上如翻译Encoder-Decoder 仍然有理论优势——因为 Encoder 可以做完整的双向理解Decoder 通过交叉注意力精准对齐。但在通才型 LLM 场景下这种优势被 Decoder-only 的规模效应碾压了。一些最新研究尝试在 Decoder-only 框架中引入双向注意力前缀如 PrefixLM算是一种折中。七、总结Decoder-only 架构的本质是用因果自注意力 自回归目标 规模扩展来替代 Encoder-Decoder 的分工设计。它的成功不是某一个技巧的胜利而是简洁架构 海量数据 大规模训练这个组合拳的胜利。从原始 Transformer 到 LLaMA 的演进路径很清晰去掉 Encoder → 去掉交叉注意力 → 用 RMSNorm 替换 LayerNorm → 用 SwiGLU 替换 GELU → 用 RoPE 替换固定位置编码 → 用 GQA 降低推理显存。每一步改动都不大但累积起来形成了现代 LLM 的标准蓝图。一个实用的判断框架如果你的任务核心是生成对话、写作、代码、推理用 Decoder-only如果核心是理解且不需要生成分类、匹配、检索Encoder-only 可能更轻量高效如果需要精确的输入-输出对齐翻译、语音识别Encoder-Decoder 仍然值得考虑。参考资料深度拆解 TransformerDecoder-only 为什么赢了通用语言建模一文梳理主流 LLM 架构技术演进Transformer Decoder 详解GPT 为什么使用 DecoderDecoder-Only、Encoder-Only 与 Encoder-Decoder为什么大多数 LLM 只使用 Decoder-Only 结构