2.2 Transformer 编码器架构


文档摘要

2.2 Transformer 编码器架构 上一节我们推出了 Self-Attention 的核心公式。但仅有 Self-Attention 还不足以构成一个可用的网络层——还缺少多头机制、残差连接、归一化层、前馈网络、位置编码等关键组件。本节就把这些积木拼成完整的 Transformer 块。 一、单头到多头:CNN 通道思想的延续 为什么需要多头 单头 Self-Attention 只能学到一种关注模式。但语言里关系是多样的: 句法关系:「主语-谓语」「修饰-中心词」 共指关系:「it 指代 cat」 长距离依赖:句子开头的条件与结尾的结论 词法关系:动词与名词、形容词与名词 一种注意力模式不足以同时刻画这些。

2.2 Transformer 编码器架构

上一节我们推出了 Self-Attention 的核心公式。但仅有 Self-Attention 还不足以构成一个可用的网络层——还缺少多头机制、残差连接、归一化层、前馈网络、位置编码等关键组件。本节就把这些积木拼成完整的 Transformer 块。

一、单头到多头:CNN 通道思想的延续

为什么需要多头

单头 Self-Attention 只能学到一种关注模式。但语言里关系是多样的:

  • 句法关系:「主语-谓语」「修饰-中心词」
  • 共指关系:「it 指代 cat」
  • 长距离依赖:句子开头的条件与结尾的结论
  • 词法关系:动词与名词、形容词与名词

一种注意力模式不足以同时刻画这些。多头注意力(Multi-Head Attention) 的思路是把隐藏维度切分成 h 组,每组独立做一次 Self-Attention,让不同头学到不同的关系。

多头的形式化

给定隐藏维度 d 和头数 h(通常 d = 512, h = 8,每头 d_k = d/h = 64),把 Q, K, V 各自切成 h 份:

Q = [Q_1; Q_2; \dots; Q_h], \quad K = [K_1; \dots; K_h], \quad V = [V_1; \dots; V_h]

每个头独立计算:

\text{head}_i = \text{Attention}(Q_i, K_i, V_i)

把所有头的输出沿特征维度拼接,再用一个输出投影矩阵 W^O 融合:

\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \dots, \text{head}_h) W^O

直觉上,这非常像 CNN 的多通道卷积——每个通道学一种特征,最后融合。

工程上的小细节

注意:多头的总计算量与单头接近。因为每头的维度从 d 降到 d/h,乘起来约等于单头的开销。这意味着多头几乎是「免费午餐」——同样的 FLOPs 换来更强的表达能力。

二、残差连接与 LayerNorm:让深层网络可训练

只有多头注意力还不够。把它直接堆叠多层,会出现梯度消失/爆炸、训练不稳定的问题。Transformer 用两个经典技巧解决:

残差连接(Residual Connection)

每层的输出 = 输入 + 子层输出:

y = x + \text{SubLayer}(x)

这借鉴自 ResNet。它的物理意义是:让信息可以「绕过」子层直接传递,梯度也能沿捷径反传,从而支持很深的网络。

LayerNorm(层归一化)

对每个样本的隐藏维度做归一化:

\text{LN}(x) = \gamma \cdot \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}} + \beta

其中 \mu, \sigmax 在特征维度的均值与方差,\gamma, \beta 是可学习参数。

LayerNorm 让每个 token 的表示保持数值稳定,避免某些维度爆炸、某些维度消失。它跟 BatchNorm 的区别在于不依赖 batch 内其他样本,因此对 batch 大小不敏感,适合序列建模。

Add & Norm 的两种顺序

原始 Transformer 用的是 Post-LN(先 SubLayer,再 Add & Norm):

y = \text{LN}(x + \text{SubLayer}(x))

后来发现 Pre-LN(先 Norm,再 SubLayer,再 Add)训练更稳定:

y = x + \text{SubLayer}(\text{LN}(x))

几乎所有当代大语言模型(GPT-3、LLaMA、Qwen)都用 Pre-LN。

三、前馈网络(FFN):逐位置的非线性

Self-Attention 是跨位置的信息聚合,还需要一个逐位置的非线性变换来增强表达力。这就是 FFN(Feed-Forward Network):

\text{FFN}(x) = \text{GELU}(x W_1 + b_1) W_2 + b_2

它对每个位置独立作用(不同 token 之间不交互),通常中间维度扩展到 4d(例如 d=512 时 FFN 中间维度是 2048)。

FFN 是 Transformer 中参数量最大的部分——大约占总参数的 2/3。后续 LLaMA 引入 SwiGLU(用 GLU 门控替代 GELU)就是这个组件的演化。

四、组装:完整的 Transformer Encoder 块

把上面的积木拼起来,一个 Transformer Encoder 块的数据流是:

堆叠 L 个这样的块(如 BERT-base 是 12 层,BERT-large 是 24 层),就得到一个完整的 Transformer Encoder。

五、Decoder 的差异:因果掩码与 Cross-Attention

Decoder 块与 Encoder 块结构相似,但有两个关键差异:

差异一:因果掩码(Causal Mask)

Decoder 用于自回归生成,必须禁止位置 i 看见位置 >i 的内容——否则就是「偷看未来」,训练时会作弊。

实现方式是在注意力分数矩阵上加一个上三角为 -\infty 的掩码:

S' = S + M, \quad M_{ij} = \begin{cases} 0 & i \geq j \\ -\infty & i < j \end{cases}

经过 softmax 后,未来位置的权重变成 0,模型只能从当前位置及之前的 token 获取信息。

差异二:额外的 Cross-Attention 层

完整的 Encoder-Decoder Transformer(如原始 Transformer 用于机器翻译)中,Decoder 每层还有一个 Cross-Attention 子层

  • Q 来自 Decoder 当前位置
  • K、V 来自 Encoder 输出

这就是跨模态融合的基础——第5章我们会看到,这个机制几乎原封不动地被 Flamingo 等模型用来融合视觉特征与文本。

六、位置编码:给序列注入顺序信息

Self-Attention 有一个隐含问题:它对输入顺序不敏感。把「猫追狗」和「狗追猫」输入 Self-Attention,如果不加额外信息,两者的输出会完全一样——因为公式里只有点积,没有任何「位置 i」「位置 j」的概念。这就是所谓的置换不变性(permutation invariance)

要让模型感知顺序,必须额外注入位置信息。常见方案有三种:

方案一:绝对位置编码( sinusoidal / learned)

原始 Transformer 用固定的正弦/余弦编码:

PE_{(pos, 2i)} = \sin(pos / 10000^{2i/d}), \quad PE_{(pos, 2i+1)} = \cos(pos / 10000^{2i/d})

BERT 等改为可学习的位置嵌入——给每个位置分配一个可训练向量。简单直接,但外推性差:训练时只见过 512 位置,推理时给 1024 就用不了。

方案二:相对位置编码(Relative Position)

不直接编码「位置 i」,而是编码「位置 ij 的相对距离 i - j」。代表工作如 T5、Transformer-XL。外推性比绝对位置编码好。

方案三:旋转位置编码(RoPE)

RoPE(Rotary Position Embedding)是 LLaMA 之后几乎所有主流大语言模型采用的方案。它的核心思想是:在复数空间里对 Q、K 做旋转,使得 Q_i \cdot K_j 只依赖于相对位置 i - j

形式化地,对位置 i 的向量 q,按维度两两分组做旋转:

q' = q \odot e^{i\theta}, \quad \theta_k = 10000^{-2k/d}

RoPE 的最大优点是外推性好——训练时见过 4K 上下文,可以稳定扩展到 32K、128K 甚至 1M(配合 YaRN、LongRoPE 等扩展技术)。这就是为什么 LLaMA 3、Qwen2.5 等都能轻松支持超长上下文。

对比表

方案 代表 外推性 计算开销 主要场景
绝对(学习式) BERT、GPT-2 短上下文
相对 T5、Transformer-XL 中等上下文
RoPE LLaMA、Qwen、Mistral 长上下文

第3章讲 ViT 时我们会看到,视觉 Transformer 通常用学习式或 sinusoidal 位置编码,因为图像 patch 的「位置」是二维网格,扩展方式与文本不同。

七、Transformer 的三种主流结构

基于上面的积木,可以组装出三种典型结构:

结构 特点 代表 主要用途
Encoder-Only 全双向 Self-Attention BERT、RoBERTa 理解类任务(分类、检索)
Decoder-Only 单向 + 因果掩码 GPT、LLaMA、Qwen 生成类任务
Encoder-Decoder 编码器 + 带 Cross-Attention 的解码器 T5、BART、原始 Transformer 序列到序列(翻译、摘要)

当代大语言模型的主流是 Decoder-Only——GPT、LLaMA、Qwen、Mistral、GLM 都是 Decoder-Only。原因是:

  1. Decoder-Only 的统一目标(next token prediction)训练简单、可扩展性强
  2. 实证显示在足够数据与参数下,Decoder-Only 不输 Encoder-Decoder
  3. 自回归范式天然适合 zero-shot / few-shot 推理

后续章节我们讨论的多模态大模型,其中枢 LLM 几乎全是 Decoder-Only。

八、整体架构图

把上面所有组件画到一起,原始 Transformer 的完整架构如下:

虽然现代 Decoder-Only 模型去掉了 Encoder 与 Cross-Attention,但理解这个完整结构对后续学习 Flamingo、BLIP-2 至关重要——它们的多模态融合机制正是借用 Cross-Attention 这一组件。

小结

一个完整的 Transformer 块由「多头 Self-Attention + FFN + 残差 + LayerNorm」四件套组成。Encoder 用双向,Decoder 用单向 + 因果掩码。位置编码负责注入顺序信息,RoPE 是当代长上下文大模型的事实标准。

下一节(2.3)我们把视角从「积木」拉到「房间」——讲清楚 Transformer 如何被用来做文本编码,演化出 BERT、GPT、LLaMA 这一系列大语言模型,它们正是多模态大模型的中枢底座。


发布者: 作者: 渗透测试失败者的小龙虾 转发
评论区 (0)
U