人人都会AI编程

3.2 Transformer 整体架构:编码器 - 解码器框架详解

更新时间:2026-07-09

在 1.2 节中,我们提到 2017 年《Attention Is All You Need》提出了 Transformer,用注意力机制取代 RNN,一举解决了长程依赖与并行训练两大难题。但 Transformer 具体长什么样?数据在其中如何流动?为什么基于同一套骨架,BERT 走向了双向理解,GPT 走向了单向生成,而今天的千亿级大模型又普遍只保留了“半边”?

本节我们把这副骨架拆开来看。为了不迷失在细节中,请记住一个核心图景:原始 Transformer 是一个“先理解、后生成”的流水线;而现代大语言模型则是一个“边理解、边生成”的简化版。 后续 3.3–3.6 节将分别深入每个零件,本节先建立整机的总装图。


一、宏观蓝图:Encoder-Decoder 的原始设计

Transformer 最初是为机器翻译设计的 Seq2Seq(序列到序列)模型。你可以把它想象成一位同声传译员的工作流程:

  • 编码器(Encoder):竖起耳朵听完整个源语言句子,把它压缩成一组高维的“语义向量包”;
  • 解码器(Decoder):拿着这个向量包,从左到右逐词生成目标语言,每写一个新词都回头看看已经写了什么,也回头看看源句子的信息。

原始论文采用 6 层 Encoder + 6 层 Decoder 的堆叠结构。现代模型的层数早已远超这个规模(如 Llama 3 8B 有 32 层,GPT-4 据传有上百层),但层内的零件组合逻辑并未改变。


二、编码器:双向语境的压缩器

编码器由 N 个完全相同的层堆叠而成。每一层内部只有两个核心零件:

  1. 多头自注意力(Multi-Head Self-Attention)

让序列中每个 Token 都能“看到”序列中所有其他 Token(包括前面和后面的),计算彼此之间的关联强度。这是“双向理解”的物理基础。3.3 节和 3.4 节将分别推导 Self-Attention 的数学原理和 Multi-Head 的设计逻辑。

  1. 前馈神经网络(Position-wise FFN)

对每个位置独立施加相同的非线性变换,进一步提取高阶特征。3.6 节将详述它的作用。

在注意力层和 FFN 层前后,还包裹着两个工程上至关重要的组件——残差连接(Residual Connection)层归一化(Layer Normalization),用于防止梯度消失、稳定深层训练。3.6 节同样会展开。

关键特性:双向性。输入“猫坐在垫子上”,编码器在处理“坐”这个字时,其表示向量已经同时融合了“猫”和“垫子”的信息。
代表模型:BERT、RoBERTa、ALBERT,以及今天用来做文本嵌入(Embedding)和向量检索的模型。


三、解码器:带掩码的自回归生成器

解码器同样由 N 个相同层堆叠,但每一层内部有三个子层,比编码器多了一个关键结构:

  1. 掩码多头自注意力(Masked Multi-Head Self-Attention)

这是解码器与编码器最核心的差异。在生成第 t 个 Token 时,模型只能“看”到第 1 到 t-1 个已经生成的 Token,绝对不允许偷看未来的答案。这种“因果掩码”(Causal Mask)保证了生成过程严格遵循 1.1 节所说的“自回归”特性——逐词接龙,从左到右。

  1. 交叉注意力(Cross-Attention,又称 Encoder-Decoder Attention)

这是连接编码器与解码器的桥梁。Query(查询)来自解码器当前状态,而 Key(键)和 Value(值)来自编码器最终层的输出。你可以理解为:解码器每生成一个新词,都要回头查阅一遍源句子的全部信息,决定此时该输出什么。

  1. 前馈神经网络(FFN)

结构与编码器中的 FFN 相同。

关键特性:单向(因果)性。它必须按顺序生成,无法像编码器那样一次性看完整个句子再做全局规划。
代表模型:原始论文中的翻译模型、GPT 系列、Llama、Qwen 等生成式大模型(不过它们后来做了一项关键删减,见下文)。


四、输入与输出系统:从离散符号到连续向量

在进入 Encoder 或 Decoder 之前,原始文本需要经过统一的预处理:

  • Token 嵌入(Token Embedding):将词汇表中的离散 ID 映射到 d_model 维的连续向量空间(原始论文 d_model=512,现代大模型通常为 4096、8192 甚至更高)。
  • 位置编码(Positional Encoding):自注意力机制本身对位置不敏感——如果不加额外信息,“我打你”和“你打我”对它 initially 是一样的。因此必须显式注入位置信息。原始论文使用正弦/余弦函数,现代模型则普遍采用可学习位置编码、RoPE 或 ALiBi(详见 3.5 节)。

在输出端,解码器顶层接一个线性投影层(其权重通常与输入嵌入层共享,以减少参数量),再通过 Softmax 输出词汇表上的概率分布,完成“下一个 Token 预测”。


五、一个完整的翻译数据流示例

为了让你直观感受这三大部分如何协作,我们以英译中为例,走一遍数据流:

  1. 编码阶段:输入英文句子 "The cat sat on the mat" → Token 化 → 嵌入+位置编码 → 经过 6 层(或 32 层)Encoder → 输出一个上下文相关的表示矩阵(形状:[源序列长度, d_model])。
  2. 解码启动:解码器输入起始符 <s>
  3. 第 1 步生成<s> 经过 Masked Self-Attention(只能看自己)→ Cross-Attention(Q=<s> 的状态,K/V=Encoder 输出)→ FFN → 线性投影 → Softmax → 预测第一个词 ""。
  4. 第 2 步生成:将 <s> 猫 拼回解码器输入 → Masked Self-Attention(此时能看到 <s>)→ Cross-Attention(再次查阅 Encoder 的源句信息)→ 预测 ""。
  5. 循环往复:直到模型输出结束符 </s>,生成完毕。

这个例子清晰地展示了 Cross-Attention 的价值:如果没有它,解码器在生成“坐”时,根本无法知道源句子里对应的是 "sat" 还是 "sat on"。


六、现代大模型的架构分野:为什么 Decoder-only 成了主流?

原始 Transformer 是完整的 Encoder-Decoder,但现代 LLM 赛道分出了三条路线。理解它们的分工,是你阅读技术报告和选型部署的前提:

| 架构路线 | 结构特点 | 优势场景 | 代表模型 |
|---------|---------|---------|---------|
| Encoder-only | 仅保留 Encoder 的双向注意力 | 文本理解:分类、实体抽取、语义相似度 | BERT、RoBERTa、现代 Embedding 模型 |
| Decoder-only | 仅保留 Decoder 的 Masked Self-Attention,移除 Cross-Attention 和整个 Encoder | 文本生成、对话、代码补全、通用大模型 | GPT-4、Llama 3、Qwen2、Claude |
| Encoder-Decoder | 保留完整结构 | 输入输出结构差异大的任务:机器翻译、摘要、T5-style 统一任务框架 | T5、BART、GLM(早期)、Google 翻译 |

为什么今天的主流大模型(GPT、Llama、Qwen 等)不约而同选择了 Decoder-only?

  1. 架构统一,工程简洁:不再需要维护两套参数和复杂的 Cross-Attention 计算。一个模型堆栈即可覆盖从理解到生成的所有任务——理解任务被巧妙地转化为“条件生成”任务(例如,问模型“这段话的情感是正面还是负面?”)。
  2. 训练效率更高:Decoder-only 的注意力计算和通信模式在分布式训练中更容易优化,适合千卡/万卡集群上的大规模预训练。
  3. 涌现能力(Emergent Abilities)的温床:后续研究发现,Decoder-only 架构在规模化后,更容易涌现出 In-Context Learning(上下文学习)和复杂推理能力(详见 6.1 节)。3.7 节将从架构选型逻辑的角度给出更深层的解释。

当然,这并不意味着 Encoder-Decoder 已死。在机器翻译、结构化摘要等“输入长文本、输出结构化短文本”的场景中,T5、BART 等模型依然表现强劲。而 Encoder-only 的 BERT 路线,则在 RAG(检索增强生成)的向量编码环节继续扮演不可替代的角色。


七、实用指南:读技术报告时该抓哪些关键数字

当你阅读 Llama 3、Qwen2 或 Mistral 的论文时,架构章节通常会出现以下超参数,它们直接定义了模型的“身材”:

| 参数 | 典型值 | 含义 |
|------|--------|------|
| d_model | 4096 / 8192 | 隐藏层维度,每层向量宽度 |
| n_layers | 32 / 80 / 126 | Transformer Block 堆叠层数 |
| n_heads | 32 / 64 / 128 | 注意力头数 |
| n_kv_heads | 8(GQA)| KV 缓存压缩头数,直接影响推理显存 |
| vocab_size | 128K | 词表大小,影响嵌入层参数量 |
| context_length | 128K / 1M | 最大上下文窗口 |
| FFN dim | 11008 / 28672 | 前馈层中间维度,通常是 d_model 的 2.7–4 倍 |
| tie_word_embeddings | True/False | 输入嵌入与输出投影是否共享权重 |

一个小技巧:参数量的 2/3 往往集中在 FFN 层,1/3 在注意力层。如果你想估算一个陌生模型的推理显存,记住 2.1 节的公式——每 1B 参数约 2GB(FP16/BF16),再结合层数和序列长度估算 KV-Cache 开销,就能快速判断现有硬件能否跑起来。


小结

Transformer 的原始设计是一个精密的 Encoder-Decoder 流水线:Encoder 负责双向理解,Decoder 负责因果生成,Cross-Attention 负责两者之间的信息桥梁。但现代大模型为了通用性和工程效率,普遍走向了 Decoder-only 的简化路线——它把“理解”内化为生成的前置条件,用一个统一的自回归框架包揽了所有任务。

在下一节(3.3),我们将打开 Transformer 最核心的黑箱,从数学上推导 自注意力机制(Self-Attention) 的计算原理,看看“每个词如何权衡其他词的重要性”这件事,究竟是如何被量化为一组矩阵运算的。