Ch09 Transformer修订于 二〇二六年七月六日

9.7 完整编码器-解码器架构

9.7.1 生活比喻:翻译员的工作流程

一个专业的翻译员工作时,脑子里同时运行两个阶段:

编码阶段:通读原文,理解全部意思。他可以在段落之间来回跳跃,用后文的信息帮助理解前文(比如看到”他”才知道前面提到的”John”是男性)。这种自由回溯的能力就是编码器的双向注意力。

解码阶段:逐句翻译。翻译第 3 句时,他已经写好了前两句,不能提前知道后面会翻译什么(自回归约束)。但每写一句译文时,他都可以回看原文的任意部分——这个”回看原文”的动作就是交叉注意力(Cross-Attention)。

Transformer 的编码器-解码器架构就是把这两个阶段分别建模,中间用交叉注意力连接。本节详细拆解这个架构的每一层。

9.7.2 编码器的 6 层

原始 Transformer 的编码器有 6 层,每层包含两个子层:

子层 1:多头自注意力(双向、无掩码)。 编码器中的每个 token 可以看到所有其他 token——左边和右边的都行。这叫作”双向注意力”(bidirectional attention)。对于理解任务来说,上下文中的前后信息都重要。要理解句子中间的”bank”指的是”银行”还是”河岸”,你需要同时看左边(“deposited money in the”)和右边(“near the river”)。

子层 2:前馈网络(FFN)。 对每个 token 的表示独立做非线性变换。FFN 先扩维到 4 倍(d_ff = 4 × d_model),做激活运算,再缩回原维度。这个”先扩后缩”的结构给了模型足够的容量来存储和提取知识——事实上,多项研究证明 FFN 层是 Transformer 存储事实性知识的主要位置,相当于模型的”长期记忆” 1。

每个子层后面都有一个残差连接 + LayerNorm:残差连接把子层的输入直接加到输出上(Output = SubLayer(x) + x),为梯度提供一条绕过子层的”高速公路”;LayerNorm 将输出归一化到均值为 0、方差为 1,防止数值在层间传递时逐渐发散。

9.7.3 解码器的 6 层 + 额外的一步

解码器也是 6 层,但每层有三个子层,比编码器多一个:

子层 1:掩码多头自注意力(因果掩码)。 不同于编码器的双向注意力,解码器的自注意力使用因果掩码——每个 token 只能看到自己和前面的 token,不能看到后面的。掩码矩阵的上三角(j > i 的位置)被设为 -∞,经过 softmax 后权重变为 0。这确保了自回归生成的正确性:生成第 5 个词时,模型不能”偷看”第 6 个词。

子层 2:交叉注意力(Encoder-Decoder Attention)。 这是编码器和解码器之间的桥梁。关键区别在于 Q/K/V 的来源:

  • **Q(查询)**来自解码器的前一子层输出——“我在生成这个位置时,想从原文中找什么信息?”
  • **K(键)和 V(值)**来自编码器的最终输出——“原文的每个位置提供了什么信息?”

计算过程:解码器的 Q 与编码器的 K 做点积,得到一个 (tgt_len × src_len) 的注意力矩阵。矩阵的每个元素 (i, j) 表示”生成目标语言第 i 个词时,应该多大程度关注源语言第 j 个词”。然后用这个权重对编码器的 V 加权求和,得到”回看原文”后的表示。

举个例子:将 “I love you” 翻译成 “我爱你”。生成”爱”这个字时,交叉注意力会高度关注原文中的 “love”。生成”你”时会高度关注 “you”。这种”翻译对齐”是交叉注意力自动学会的,没有人为规则指导 2。

子层 3:前馈网络(FFN)。 与编码器的 FFN 完全相同。对交叉注意力的输出做非线性变换,提取和存储知识。

同样,每个子层后面都有残差连接 + LayerNorm。

9.7.4 训练 vs 推理的差异

训练和推理时,解码器的行为有根本区别:

训练时(Teacher Forcing):把完整的目标序列一次性喂给解码器,通过因果掩码确保每个位置只能看到前面的 token。比如训练翻译 “I love you” → “我 爱 你” 时,输入为 ” 我 爱 你”,模型预测 “我 爱 你 “。因为用了因果掩码,第 1 个位置只能看到 来预测”我”,第 2 个位置看到 和”我”来预测”爱”——以此类推。整个序列在 GPU 上并行计算,一次前向传播完成全部预测。

推理时(自回归生成):没有目标序列可用,必须逐个生成。第 1 步,输入 ,生成”我”。第 2 步,输入 我,生成”爱”。第 3 步,输入 我 爱,生成”你”。第 4 步,生成 表示结束。KV 缓存让推理过程更加高效——已经计算过的 K 和 V 不需要重复计算。

9.7.5 关键设计决策总结

组件作用原始论文选择2026 年变体
位置编码注入序列顺序信息——Transformer 并行处理所有词所以”看不到”哪个词在前正弦位置编码(sin/cos 固定函数)RoPE(旋转位置编码,见 [[9.4 位置编码 - Transformer 的序列感知
注意力类型编码器用双向,解码器用因果+交叉多头注意力(h=8)GQA/MQA(见 [[9.9 2026 Transformer 进化
归一化位置影响训练稳定性Post-LN(归一化在残差之后)Pre-LN(归一化在子层之前,见 [[9.6 残差连接与层归一化
残差连接梯度畅通传递,防止深层退化标配标配,所有架构都使用
FFN 激活非线性变换ReLUSwiGLU(门控线性单元变体)
层数/宽度决定模型容量6 层 / d_model=512数十到上百层 / d_model=4096~12288

9.7.6 与纯 Decoder-Only 的关系

理解了完整的编码器-解码器架构之后,再看 9.8 节 就会豁然开朗:Decoder-Only 本质上是把编码器和解码器”合二为一”——去掉交叉注意力和编码器,只保留带因果掩码的自注意力 + FFN。输入和输出的界限被模糊了——一切都被视为一个连续的 token 序列,模型始终在”根据上文预测下一个词”。这种简化带来了架构的统一性和训练的便利性,代价是失去了双向编码那种深度的”理解”能力。

交叉注意力相关的概念补充在 注意力机制 (Attention Mechanism) 中,关于上下文窗口对这类架构的影响见 上下文窗口(深挖)。

3; 4


← 上一节:9.6 残差连接与层归一化 | 下一节:9.8 Decoder-Only -- 为什么 LLM 只用解码器 →

注释

  1. Geva et al., “Transformer Feed-Forward Layers Are Key-Value Memories”, 2021, https://arxiv.org/abs/2012.14913 ↩

  2. Vaswani et al., “Attention Is All You Need”, 2017, https://arxiv.org/abs/1706.03762 ↩

  3. Vaswani et al., “Attention Is All You Need”, 2017 ↩

  4. Lilian Weng, “The Transformer Family”, https://lilianweng.github.io/posts/2020-04-07-the-transformer-family/ ↩

关联9

知识图谱

局部图谱 · 点节点跳转