上一篇笔记建立了 Transformer 的直觉和代码实现,这篇深入每个组件背后的数学原理。每个主题都标注了出处论文或博客,方便查阅原文。
一、Scaled Dot-Product:为什么除以 √dk?
出处:Vaswani et al. (2017) “Attention Is All You Need”, Section 3.2.1
上一篇笔记里我们知道 Attention 的计算公式是:
$$\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) V$$其中:
- $Q$:Query 矩阵
- $K$:Key 矩阵
- $V$:Value 矩阵
- $d_k$:Key 向量的维度
- $\text{softmax}$:归一化函数(将分数转为概率分布)
但为什么要除以 $\sqrt{d_k}$?Vaswani et al. 在论文中给出了一句关键解释:“We suspect that for large values of $d_k$, the dot products grow large in magnitude, pushing the softmax function into regions where it has extremely small gradients.” 下面把这句话拆成严格的数学推导。
1.1 方差推导
假设 $q$ 和 $k$ 的每个分量都是独立同分布的随机变量,均值为 0,方差为 1。点积 $q^T k = \sum_{i=1}^{d_k} q_i k_i$。
每一项 $q_i k_i$ 的期望和方差:
其中:
- $E[\cdot]$:期望(均值)
- $\text{Var}(\cdot)$:方差(衡量数据的离散程度)
- $q_i$:Query 向量的第 $i$ 个分量
- $k_i$:Key 向量的第 $i$ 个分量
因为各分量独立,$d_k$ 项求和后:
$$E[q^T k] = 0, \quad \text{Var}(q^T k) = d_k$$结论:点积的方差随 $d_k$ 线性增长。$d_k = 64$ 时标准差是 8,$d_k = 512$ 时标准差是 $\approx 22.6$。
1.2 方差过大的后果
当点积的数值很大时,softmax 的输出会趋近 one-hot 分布:
假设 3 个 token 的 attention score 为 [a, b, c]
当 score 量级正常(如 [1.0, 0.5, 0.2]):
softmax → [0.49, 0.30, 0.22] ← 平滑分布,梯度正常
当 score 量级过大(如 [20.0, 10.0, 4.0]):
softmax → [≈1.00, ≈0.00, ≈0.00] ← 几乎是 one-hot,梯度趋近 0
softmax 在输入值差距很大时进入饱和区,梯度接近零,参数几乎无法更新。除以 $\sqrt{d_k}$ 把方差拉回 1,让 softmax 始终工作在梯度有效的区间。
1.3 为什么是 √dk 而不是 dk?
因为我们要让缩放后的方差等于 1:
$$\text{Var}\left(\frac{q^T k}{\sqrt{d_k}}\right) = \frac{\text{Var}(q^T k)}{d_k} = \frac{d_k}{d_k} = 1$$如果除以 $d_k$,方差会变成 $1/d_k$,过度压缩了分数的区分度。$\sqrt{d_k}$ 是恰好让方差归一的选择。
二、Softmax 与 Boltzmann 分布:为什么 softmax 能当概率用?
出处:统计力学中的 Boltzmann 分布;Vaswani et al. (2017)
2.1 Softmax 就是 Boltzmann 分布
统计力学中,一个系统处于能量状态 $e_i$ 的概率由 Boltzmann 分布给出:
$$P(i) = \frac{\exp(-e_i / T)}{\sum_j \exp(-e_j / T)}$$其中:
- $P(i)$:系统处于状态 $i$ 的概率
- $e_i$:状态 $i$ 的能量
- $T$:温度参数
- $\exp(\cdot)$:指数函数 $e^{(\cdot)}$
- $\sum_j$:对所有状态 $j$ 求和
其中 $T$ 是温度。如果把 $-e_i$ 替换为 logit $z_i$,令 $T = 1$,就得到 softmax:
$$\text{softmax}(z_i) = \frac{\exp(z_i)}{\sum_j \exp(z_j)}$$两者形式完全一致。Attention 中的 $\frac{1}{\sqrt{d_k}}$ 缩放因子,本质上就是在调节温度 $T = \sqrt{d_k}$。
2.2 温度对注意力分布的影响
温度控制分布的"锐度":
score = [2.0, 1.0, 0.5]
T = 0.5(低温):softmax(score/0.5) = softmax([4.0, 2.0, 1.0])
→ [0.84, 0.11, 0.04] ← 集中在最大值,接近 argmax
T = 1.0(标准):softmax(score/1.0) = softmax([2.0, 1.0, 0.5])
→ [0.63, 0.23, 0.14] ← 平滑分布
T = 5.0(高温):softmax(score/5.0) = softmax([0.4, 0.2, 0.1])
→ [0.39, 0.32, 0.29] ← 接近均匀分布
- $T \to 0$:softmax 退化为 argmax(硬注意力),只关注一个 token
- $T \to \infty$:softmax 退化为均匀分布,所有 token 权重相等
- $T = \sqrt{d_k}$:Transformer 的默认选择,保持适度的区分度
这个温度视角在知识蒸馏(Hinton et al., 2015)中也很重要——用高温 softmax 让 teacher 模型输出更平滑的概率分布,传递更多"暗知识"。
三、Positional Encoding:为什么用 sin/cos 就能编码位置?
出处:Vaswani et al. (2017) Section 3.5;Kazemnejad, “Transformer Architecture: The Positional Encoding”(博客)
3.1 公式
原始 Transformer 的正弦位置编码:
$$PE(pos, 2i) = \sin\left(\frac{pos}{10000^{2i/d_{model}}}\right)$$$$PE(pos, 2i+1) = \cos\left(\frac{pos}{10000^{2i/d_{model}}}\right)$$其中 $pos$ 是 token 在序列中的位置,$i$ 是编码向量的维度索引。每一对 $(2i, 2i+1)$ 维度使用同一个频率的 sin 和 cos。
3.2 不同维度 = 不同频率
频率由 $\omega_i = 1 / 10000^{2i/d_{model}}$ 决定:
维度 i=0: ω = 1/10000^0 = 1 → 周期 = 2π ≈ 6.28 个位置
维度 i=128: ω = 1/10000^(256/512) = 1/100 → 周期 ≈ 628 个位置
维度 i=255: ω = 1/10000^(510/512) ≈ 1/9770 → 周期 ≈ 61400 个位置
低维度变化快(捕捉相邻 token 的位置差异),高维度变化慢(捕捉远距离的位置关系)。Jay Alammar 在 “The Illustrated Transformer” 中把这比作二进制计数器:最低位每步翻转,高位翻转越来越慢。
3.3 核心数学性质:相对位置的线性可表达性
这是正弦编码最精妙的设计。Kazemnejad 在博客中给出了完整推导:
对于任意固定偏移 $k$,$PE(pos + k)$ 可以表示为 $PE(pos)$ 的线性变换:
$$\begin{bmatrix} PE(pos+k, 2i) \\ PE(pos+k, 2i+1) \end{bmatrix} = \begin{bmatrix} \cos(k\omega_i) & \sin(k\omega_i) \\ -\sin(k\omega_i) & \cos(k\omega_i) \end{bmatrix} \begin{bmatrix} PE(pos, 2i) \\ PE(pos, 2i+1) \end{bmatrix}$$其中:
- $k$:位置偏移量(两个 token 之间的距离)
- $\omega_i$:第 $i$ 个维度对应的频率
推导依赖三角恒等式:
$$\sin(a + b) = \sin a \cos b + \cos a \sin b$$$$\cos(a + b) = \cos a \cos b - \sin a \sin b$$
其中 $a = pos \cdot \omega_i$,$b = k \cdot \omega_i$。
这意味着什么? 变换矩阵只依赖偏移量 $k$,不依赖绝对位置 $pos$。模型可以通过学习一个线性变换来捕捉"距离为 $k$ 的两个 token 之间的关系"——这就是相对位置信息。Self-Attention 中的 $Q^T K$ 运算天然包含了这种线性组合,因此模型不需要显式计算相对位置,正弦编码已经把这个信息编进去了。
3.4 为什么底数是 10000?
Vaswani et al. 没有给出严格的理论推导,这更像是一个工程选择。10000 保证了:
- 最低频率的周期($\approx 2\pi \times 10000 \approx 62800$ 个位置)远大于训练时的最大序列长度
- 最高频率的周期($2\pi \approx 6$ 个位置)足以区分相邻 token
- 频率在对数尺度上均匀分布,覆盖从局部到全局的所有距离
实际上,后续工作提出了不同的位置编码方案,但正弦编码的数学优雅性使它成为理解位置编码的最佳起点。
3.5 现代扩展:RoPE 和 ALiBi
- RoPE(Rotary Position Embedding):不把位置信息加到 token embedding 上,而是在计算 $Q^T K$ 时对 Q 和 K 做旋转变换,使得点积结果自然包含相对位置信息。数学上,RoPE 把正弦编码的"加法"思路改成了"乘法(旋转)“思路。
- ALiBi(Attention with Linear Biases):完全不用位置编码,而是在 Attention score 上直接加一个与距离成正比的偏置:$\text{score}_{ij} = q_i^T k_j - m \cdot |i - j|$,其中 $m$ 是每个 head 不同的斜率。这是便于理解的简化写法;在实际 causal attention 中,ALiBi 对不同 head 使用不同斜率,并结合相对位置方向构造 bias。
两者都比正弦编码更适合处理超长序列(外推到训练时没见过的长度),是当前大模型的主流选择。
四、Attention 与核方法:为什么 Attention 的形式不是凭空设计的?
出处:Tsai et al. (EMNLP 2019) “Transformer Dissection: An Unified Understanding for Transformer’s Attention via the Lens of Kernel”
这一节揭示了一个很漂亮的联系:Attention 不是凭空设计的,它和经典统计学中的核回归有着精确的数学对应。
4.1 Nadaraya-Watson 核回归
在非参数统计中,Nadaraya-Watson 估计器用核函数对观测值做加权平均:
$$\hat{f}(x) = \frac{\sum_{j=1}^{n} \kappa(x, x_j) \cdot y_j}{\sum_{j=1}^{n} \kappa(x, x_j)}$$其中 $\kappa(x, x_j)$ 是核函数,衡量 $x$ 和 $x_j$ 的相似度。离 $x$ 越近的观测点,权重越大。
4.2 Attention 就是核回归
把 Attention 的公式展开到单个 query $q_i$:
$$\text{Attn}(q_i) = \sum_{j=1}^{T} \frac{\exp(q_i^T k_j / \sqrt{d_k})}{\sum_{l=1}^{T} \exp(q_i^T k_l / \sqrt{d_k})} \cdot v_j$$定义核函数 $\kappa(q, k) = \exp(q^T k / \sqrt{d_k})$,上式变成:
$$\text{Attn}(q_i) = \frac{\sum_j \kappa(q_i, k_j) \cdot v_j}{\sum_j \kappa(q_i, k_j)}$$其中:
- $\kappa(q, k)$:核函数(衡量两个向量相似度的函数)
- $v_j$:第 $j$ 个 token 的 Value 向量
- $T$:序列长度
和 Nadaraya-Watson 估计器形式完全一致。从核方法的视角看,$\kappa$ 可以理解为一种指数内积核(exponentiated inner product kernel),Attention 的 softmax 归一化对应核回归中自然出现的归一化。
4.3 这个视角的意义
- 理解视角:Attention 的形式并非凭空设计——它和经典非参数统计中的核回归有清晰的形式对应,softmax 归一化在核回归框架下是自然的
- 计算瓶颈的来源:核回归的计算复杂度是 $O(n^2)$(每对样本都要算核函数),这正是 Attention 的 $O(T^2)$ 复杂度的根源
- 线性 Attention 的动机:Choromanski et al. (2021) 的 Performer 利用核的随机特征分解 $\kappa(q, k) \approx \phi(q)^T \phi(k)$,把 Attention 从 $O(T^2)$ 降到 $O(T)$
五、Multi-Head Attention:为什么要分成多个头?
5.1 维度推导
输入 $X \in \mathbb{R}^{T \times d_{model}}$,通过三个权重矩阵投影:
$$Q = XW_Q, \quad K = XW_K, \quad V = XW_V$$其中:
- $X$:输入序列,$T$ 个 token,每个 $d_{model}$ 维
- $W_Q, W_K \in \mathbb{R}^{d_{model} \times d_{model}}$:Query 和 Key 的投影矩阵
- $W_V \in \mathbb{R}^{d_{model} \times d_{model}}$:Value 的投影矩阵
Multi-Head 把 $Q, K, V$ 沿特征维度 reshape/split 成 $h$ 个头:
$$Q \in \mathbb{R}^{T \times d_{model}} \;\rightarrow\; Q^{(1)}, \ldots, Q^{(h)}, \quad Q^{(i)} \in \mathbb{R}^{T \times d_k}, \quad d_k = d_{model} / h$$注意这里是沿特征维度切分(每个头看 $d_k$ 个特征通道),不是沿 token 维度拼接。
每个头独立做 Attention:
$$\text{head}_i = \text{Attention}(Q^{(i)}, K^{(i)}, V^{(i)}) \in \mathbb{R}^{T \times d_k}$$最后拼接并通过输出投影:
$$\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \ldots, \text{head}_h) \cdot W_O$$其中:
- $h$:头的数量(BERT-base 用 12,GPT-2 用 12)
- $d_k$:每个头的维度($d_{model} / h$,如 $768 / 12 = 64$)
- $W_O \in \mathbb{R}^{d_{model} \times d_{model}}$:输出投影矩阵
5.2 为什么分头不损失表达能力?
在标准实现中,Q/K/V 线性投影的总输出维度仍为 $d_{model}$,因此 Multi-Head 的投影参数量与单头 Attention 保持同量级。分头的优势不在于增加参数,而在于让不同子空间学习不同的关注模式(语法关系、语义关系、位置关系等),而不是把所有模式压缩到一组 Q/K/V 里。
六、Mask 的数学形式:如何控制 Attention 的可见范围?
6.1 统一公式
Mask 通过在 Attention score 上加一个矩阵 $M$ 来实现:
$$\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T + M}{\sqrt{d_k}}\right) V$$其中:
- $M \in \mathbb{R}^{T \times T}$:Mask 矩阵
- $M_{ij} = 0$:位置 $i$ 可以看到位置 $j$
- $M_{ij} = -\infty$:位置 $i$ 不能看到位置 $j$($\exp(-\infty) = 0$,softmax 后权重为 0)
6.2 Causal Mask(自回归 Mask)
Decoder 生成时,每个 token 只能看到自己和前面的 token:
$$M_{ij} = \begin{cases} 0 & \text{if } i \geq j \\ -\infty & \text{if } i < j \end{cases}$$这是一个下三角矩阵(对角线及以下为 0,上三角为 $-\infty$)。GPT 系列全程使用 causal mask。
6.3 Padding Mask
变长序列需要 padding 到统一长度,padding 位置不应参与 Attention 计算:
$$M_{ij} = \begin{cases} 0 & \text{if } j \text{ 不是 padding} \\ -\infty & \text{if } j \text{ 是 padding} \end{cases}$$实际实现中,两种 mask 可以叠加使用。代码里通常用一个很大的负数(如 $-10^9$ 或 dtype 的最小值)近似 $-\infty$,而不是真正的无穷大。
七、FFN:为什么 Attention 之后还需要一个 MLP?
7.1 数学形式
每个 Transformer Block 中,Attention 之后紧跟一个 Feed-Forward Network:
$$\text{FFN}(x) = W_2 \cdot \phi(W_1 x + b_1) + b_2$$其中:
- $x \in \mathbb{R}^{d_{model}}$:单个 token 的特征向量
- $W_1 \in \mathbb{R}^{d_{ff} \times d_{model}}$:升维矩阵(通常 $d_{ff} = 4 \times d_{model}$)
- $W_2 \in \mathbb{R}^{d_{model} \times d_{ff}}$:降维矩阵
- $\phi$:激活函数(原始 Transformer 用 ReLU,现代模型常用 GELU)
- $b_1, b_2$:偏置项
7.2 Attention 和 FFN 的分工
- Attention 负责 token 之间的信息交互——“哪些 token 和我相关?”
- FFN 负责每个 token 内部的特征变换——“拿到相关信息后,怎么处理?”
FFN 对每个 token 独立作用(不涉及 token 间交互),但所有位置共享同一组 $W_1, W_2, b_1, b_2$ 参数——不是每个 token 一个 MLP,而是同一个 MLP 逐个处理每个 token。可以理解为一个逐 token 的非线性变换:先升维到 $d_{ff}$(扩大表示空间),经过非线性激活,再降维回 $d_{model}$。
八、复杂度分析:为什么长序列是 Transformer 的瓶颈?
8.1 Self-Attention 的复杂度
对于序列长度 $T$、模型维度 $d$:
| 操作 | 时间复杂度 | 空间复杂度 |
|---|---|---|
| $QK^T$ 计算 | $O(T^2 \cdot d)$ | $O(T^2)$(存储 Attention 矩阵) |
| Softmax | $O(T^2)$ | $O(T^2)$ |
| Attention × V | $O(T^2 \cdot d)$ | $O(T \cdot d)$ |
瓶颈在 $O(T^2)$:Attention 矩阵的大小是 $T \times T$。当 $T = 512$ 时矩阵有 26 万个元素,$T = 4096$ 时有 1600 万个,$T = 32768$ 时有 10 亿个。这就是为什么早期 Transformer 的最大序列长度被限制在 512 或 1024。
Multi-Head Attention 虽然分成 $h$ 个头,但总复杂度的主阶仍然是 $O(T^2 \cdot d_{model})$——分头不会把平方复杂度变成线性。
8.2 FFN 的复杂度
| 操作 | 时间复杂度 | 空间复杂度 |
|---|---|---|
| $W_1 x$(升维) | $O(T \cdot d \cdot d_{ff})$ | $O(T \cdot d_{ff})$ |
| $W_2 \cdot \phi(\cdot)$(降维) | $O(T \cdot d_{ff} \cdot d)$ | $O(T \cdot d)$ |
FFN 的复杂度是 $O(T \cdot d \cdot d_{ff})$,对 $T$ 是线性的。当 $T$ 较小时 FFN 可能是计算瓶颈(因为 $d_{ff} = 4d$ 很大),但当 $T$ 增大后,$O(T^2)$ 的 Attention 会迅速超过 FFN。
8.3 这就是 Linear Attention 的动机
§4 中提到的 Performer 用核的随机特征分解把 Attention 从 $O(T^2)$ 降到 $O(T)$,代价是近似精度。后续的 Flash Attention 则从另一个角度优化——不改变数学计算,而是通过 IO-aware 的分块算法减少显存访问次数,在保持精确计算的同时大幅提速。
九、Cross-Attention:两个序列之间怎么交互?
9.1 与 Self-Attention 的区别
Self-Attention 中 Q、K、V 全部来自同一个输入序列。Cross-Attention 则是 Q 来自一个序列(Decoder),K 和 V 来自另一个序列(Encoder):
$$\text{CrossAttn}(Q_{dec}, K_{enc}, V_{enc}) = \text{softmax}\left(\frac{Q_{dec} K_{enc}^T}{\sqrt{d_k}}\right) V_{enc}$$其中:
- $Q_{dec} \in \mathbb{R}^{T_{dec} \times d_k}$:来自 Decoder 当前层的 Query(“我需要什么信息?")
- $K_{enc} \in \mathbb{R}^{T_{enc} \times d_k}$:来自 Encoder 输出的 Key(“源序列有哪些信息?")
- $V_{enc} \in \mathbb{R}^{T_{enc} \times d_k}$:来自 Encoder 输出的 Value(“源序列的实际内容”)
- $T_{dec}$:目标序列长度,$T_{enc}$:源序列长度(两者可以不同)
Attention 矩阵的 shape 是 $T_{dec} \times T_{enc}$——Decoder 的每个位置对 Encoder 的每个位置计算相关性。
9.2 三种 Attention 的对比
| 类型 | Q 来源 | K/V 来源 | 典型用途 |
|---|---|---|---|
| Self-Attention | 同一序列 | 同一序列 | BERT、GPT、ViT |
| Masked Self-Attention | 同一序列(加 causal mask) | 同一序列 | GPT 生成、Decoder |
| Cross-Attention | Decoder | Encoder | 机器翻译、T5、Stable Diffusion |
9.3 哪些模型用 Cross-Attention?
- Encoder-Decoder 模型(原始 Transformer、T5、BART):Decoder 每一层都有 Cross-Attention 来"读取"Encoder 的输出
- Decoder-only 模型(GPT 系列):没有 Cross-Attention,因为没有 Encoder
- 多模态模型(Stable Diffusion):用 Cross-Attention 让图像生成过程"读取"文本条件
十、残差连接:为什么加一个 $x$ 就能训练几十层?
出处:He et al. (CVPR 2016) “Deep Residual Learning for Image Recognition”;He et al. (2016) “Identity Mappings in Deep Residual Networks”
10.1 残差连接的数学形式
标准的残差块:
$$y = F(x, \{W_i\}) + x$$其中 $F(x)$ 是残差函数(在 Transformer 中就是 Multi-Head Attention 或 FFN)。网络学习的不是完整映射 $H(x) = y$,而是残差 $F(x) = H(x) - x$。
10.2 梯度流的关键推导
对 loss $\mathcal{L}$ 求 $x$ 的梯度:
$$\frac{\partial \mathcal{L}}{\partial x} = \frac{\partial \mathcal{L}}{\partial y} \cdot \frac{\partial y}{\partial x} = \frac{\partial \mathcal{L}}{\partial y} \cdot \left(\frac{\partial F}{\partial x} + I\right)$$其中:
- $\mathcal{L}$:损失函数
- $\frac{\partial \mathcal{L}}{\partial x}$:损失对输入 $x$ 的梯度(参数更新的方向和大小)
- $F(x)$:残差函数(Attention 或 FFN 的输出)
- $I$:单位矩阵(恒等变换)
恒等项 $I$ 是关键。不管 $\frac{\partial F}{\partial x}$ 有多小(甚至趋近零),梯度中始终有一个 $\frac{\partial \mathcal{L}}{\partial y} \cdot I = \frac{\partial \mathcal{L}}{\partial y}$ 的分量直接传回。这条"梯度高速公路"保证了深层网络不会出现梯度消失。
10.3 多层堆叠的效果
对于 $L$ 层残差网络,第 $l$ 层的输出可以递归展开:
$$x_L = x_l + \sum_{i=l}^{L-1} F(x_i, W_i)$$梯度:
$$\frac{\partial \mathcal{L}}{\partial x_l} = \frac{\partial \mathcal{L}}{\partial x_L} \cdot \left(1 + \frac{\partial}{\partial x_l} \sum_{i=l}^{L-1} F(x_i, W_i)\right)$$前面的 $1$ 保证了即使后面的求和项很小,梯度也不会消失。这就是为什么 12 层甚至 96 层的 Transformer 能正常训练。
10.4 Pre-Norm vs Post-Norm
He et al. 在 “Identity Mappings” 中进一步证明,把 Normalization 放在残差函数内部(Pre-Norm)比放在外部(Post-Norm)梯度流更干净:
Post-Norm(原始 Transformer):
y = LayerNorm(x + F(x)) ← LayerNorm 在残差连接之后
Pre-Norm(改进版):
y = x + F(LayerNorm(x)) ← LayerNorm 在残差函数内部
Pre-Norm 保证了恒等路径上没有任何非线性变换,梯度高速公路完全畅通。GPT-2 和后续大多数大模型都采用了 Pre-Norm。在深层大模型中,Pre-Norm 通常比 Post-Norm 更稳定,因此现代 LLM(GPT、LLaMA、Gemma 等)基本都使用 Pre-Norm 或其变体。
十一、LayerNorm vs BatchNorm:为什么 Transformer 选 LayerNorm?
出处:Ba, Kiros & Hinton (2016) “Layer Normalization”
11.1 归一化的通用公式
所有归一化方法的形式都一样:
$$\hat{x} = \gamma \cdot \frac{x - \mu}{\sqrt{\text{Var}(x) + \epsilon}} + \beta$$其中:
- $x$:输入向量
- $\mu$:$x$ 所有分量的均值
- $\text{Var}(x)$:$x$ 所有分量的方差
- $\epsilon$:防止除零的小常数(如 $10^{-8}$)
- $\gamma$:可学习的缩放参数
- $\beta$:可学习的偏移参数
- $\hat{x}$:归一化后的输出
区别在于 $\mu$ 和 $\text{Var}(x)$ 沿哪个维度计算。
11.2 BatchNorm vs LayerNorm 的归一化轴
假设输入张量的 shape 是 $[B, T, D]$(batch, 序列长度, 特征维度):
BatchNorm:沿 B 维度归一化
对每个特征维度 d,计算 batch 内所有样本、所有位置的均值和方差
μ_d = mean over (B, T)
→ 依赖 batch 内其他样本
LayerNorm:沿 D 维度归一化
对每个样本的每个位置,计算该位置所有特征维度的均值和方差
μ_{b,t} = mean over D
→ 每个样本独立,不依赖 batch 内其他样本
11.3 为什么 BatchNorm 不适合 Transformer
问题一:变长序列和 padding 让 batch 统计量不稳定。 不同样本的序列长度不同,短序列需要 padding,这些 padding token 会污染 batch 统计量,让均值和方差的估计带有噪声。
问题二:小 batch 和推理时的不稳定性。 BatchNorm 的统计量质量取决于 batch size。Transformer 训练时 batch 往往不大(尤其是长序列场景),推理时 batch=1 更是问题——需要依赖训练时积累的 running statistics,但这些统计量在序列任务中不够可靠。
问题三:token-wise 表示更自然对应 LayerNorm。 Transformer 的核心操作是 token 级别的:每个 token 有自己的特征向量,Attention 在 token 之间交互。对每个 token 独立归一化(LayerNorm)比跨 batch 归一化(BatchNorm)更符合这种计算范式。
LayerNorm 对每个 token 独立归一化,完全回避了以上三个问题。
11.4 LayerNorm 的数学效果
LayerNorm 把每个 token 的特征向量投影到一个标准化的超球面上(均值为 0,方差为 1),然后通过可学习的 $\gamma$ 和 $\beta$ 做仿射变换。这有两个好处:
- 稳定前向传播:防止特征值在层间累积增长或衰减
- 稳定反向传播:梯度的尺度不会因为层数增加而剧烈变化
结合残差连接,LayerNorm 是 Transformer 能堆叠到几十甚至上百层的另一个关键保障。
11.5 现代变体:RMSNorm
现代大模型(如 LLaMA、Gemma)常用 RMSNorm 替代 LayerNorm:
$$\text{RMSNorm}(x) = \gamma \cdot \frac{x}{\sqrt{\frac{1}{d}\sum_{i=1}^{d} x_i^2 + \epsilon}}$$和 LayerNorm 的区别:RMSNorm 去掉了均值中心化(不减 $\mu$),只做缩放归一化。好处是计算更快(少一次均值计算),实验表明效果和 LayerNorm 相当。
十二、Cross-Entropy Loss:为什么用交叉熵而不是均方误差?
出处:Cover & Thomas, “Elements of Information Theory”;Lei Mao 博客 “Cross Entropy, KL Divergence, and Maximum Likelihood Estimation”
Transformer 训练时,Decoder 每个位置的 loss 都是交叉熵。但交叉熵不是一个随意选择的损失函数——它和最大似然估计、KL 散度在数学上完全等价。
12.1 三者等价链
交叉熵:
$$H(p, q) = -\sum_{x} p(x) \log q(x)$$其中:
- $H(p, q)$:交叉熵
- $p(x)$:真实分布(训练标签)
- $q(x)$:模型预测的概率分布
- $\log$:自然对数
KL 散度:
$$D_{KL}(p \| q) = \sum_{x} p(x) \log \frac{p(x)}{q(x)} = H(p, q) - H(p)$$其中:
- $D_{KL}(p \| q)$:KL 散度(衡量两个概率分布之间的差异)
- $H(p)$:真实分布的熵(常数,不依赖模型参数)
因为 $H(p)$(真实分布的熵)是常数,不依赖模型参数,所以:
$$\arg\min_\theta H(p, q_\theta) = \arg\min_\theta D_{KL}(p \| q_\theta)$$最大似然估计:
给定 $N$ 个样本 $\{x_1, ..., x_N\}$,MLE 最大化对数似然:
$$\arg\max_\theta \frac{1}{N} \sum_{i=1}^{N} \log q_\theta(x_i) = \arg\min_\theta \left(-\frac{1}{N} \sum_{i=1}^{N} \log q_\theta(x_i)\right)$$右边就是经验分布 $\hat{p}$ 下的交叉熵 $H(\hat{p}, q_\theta)$。
结论:最小化交叉熵 = 最小化 KL 散度 = 最大似然估计。三条路殊途同归。
12.2 对 Transformer 的意义
Decoder 训练时,每个位置预测下一个 token 的概率分布 $q_\theta$,标签是 one-hot 的 $p$。交叉熵退化为:
$$H(p, q) = -\log q_\theta(x_{correct})$$就是正确 token 的负对数概率。模型要做的就是让正确 token 的预测概率尽可能高——这正是最大似然估计。
十三、Label Smoothing:为什么"故意犯错"反而更好?
出处:Szegedy et al. (CVPR 2016) “Rethinking the Inception Architecture”;Vaswani et al. (2017)
13.1 One-hot 标签的问题
标准交叉熵要求模型对正确类别输出概率 1,对其他类别输出概率 0。但 softmax 只有在 logit 趋向无穷大时才能输出 1:
$$\text{softmax}(z_i) \to 1 \quad \text{当且仅当} \quad z_i - z_j \to \infty, \forall j \neq i$$这迫使模型不断增大 logit 的绝对值,导致:
- 过拟合:模型对训练数据过度自信
- 泛化差:对分布外的输入缺乏鲁棒性
13.2 Label Smoothing 的数学形式
把 one-hot 标签 $y$ 替换为平滑标签:
$$y_{smooth} = (1 - \epsilon) \cdot y_{onehot} + \frac{\epsilon}{K}$$其中:
- $y_{onehot}$:原始 one-hot 标签
- $\epsilon$:平滑系数(原始 Transformer 用 0.1)
- $K$:类别总数
- $y_{smooth}$:平滑后的标签
假设 K=5,正确类别是第 2 类:
one-hot: [0, 1, 0, 0, 0]
smoothed: [0.02, 0.92, 0.02, 0.02, 0.02] (ε=0.1)
模型不再需要输出 100% 的置信度,只需要输出 92% 就够了。这给了模型一个"不用绝对确定"的许可。
13.3 Label Smoothing 的正则化效果
从 KL 散度的角度看,label smoothing 等价于在标准交叉熵上加了一个正则项:
$$L_{smooth} = (1 - \epsilon) \cdot H(y, q) + \epsilon \cdot H(u, q)$$其中 $u$ 是均匀分布。第二项 $H(u, q)$ 惩罚模型输出偏离均匀分布太远——也就是说,不允许模型对任何类别过度自信。
Vaswani et al. 在论文中报告了一个有趣的现象:“Label smoothing hurts perplexity, as the model learns to be more unsure, but improves accuracy and BLEU score.” 困惑度变差(因为模型不再 100% 确定),但翻译质量反而提升了。
十四、Learning Rate Warmup:为什么不能一开始就用大学习率?
出处:Vaswani et al. (2017) Section 5.3;Ma & Yarats (2024) “Why Warmup the Learning Rate?”
14.1 原始 Transformer 的学习率调度
Vaswani et al. 提出了一个两阶段的学习率公式:
$$lr = d_{model}^{-0.5} \cdot \min(step^{-0.5}, \; step \cdot warmup\_steps^{-1.5})$$其中:
- $lr$:学习率
- $d_{model}$:模型隐藏层维度
- $step$:当前训练步数
- $warmup\_steps$:预热阶段的总步数(原始 Transformer 用 4000)
行为分两段:
阶段一(step < warmup_steps):
lr ≈ d_model^(-0.5) × step × warmup_steps^(-1.5)
→ 学习率线性增长
阶段二(step ≥ warmup_steps):
lr ≈ d_model^(-0.5) × step^(-0.5)
→ 学习率按 1/√step 衰减
原始 Transformer 用 warmup_steps = 4000
14.2 为什么需要 Warmup?
Adam 优化器维护每个参数的一阶矩(梯度均值)和二阶矩(梯度方差)的指数移动平均:
$$m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t$$$$v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2$$
其中:
- $m_t$:第 $t$ 步的一阶矩估计(梯度的指数移动平均)
- $v_t$:第 $t$ 步的二阶矩估计(梯度平方的指数移动平均)
- $g_t$:第 $t$ 步的梯度
- $\beta_1, \beta_2$:衰减系数(通常 $\beta_1=0.9, \beta_2=0.999$)
参数更新量为 $\Delta \theta \propto m_t / \sqrt{v_t}$。
问题在训练初期:$m_t$ 和 $v_t$ 都初始化为 0,前几步的估计严重偏向 0。虽然 Adam 有偏差校正($\hat{m}_t = m_t / (1 - \beta_1^t)$),但校正后的估计在前几十步仍然不稳定。如果此时学习率很大,不稳定的梯度估计 × 大学习率 = 参数剧烈震荡甚至发散。
Warmup 的作用就是在 Adam 积累可靠统计量的这段时间里,用小学习率保护训练过程。
14.3 Warmup 步数的选择
Ma & Yarats (2024) 提出了一个较新的解释视角:warmup 的作用可能在于让网络在训练早期经历一个"渐进锐化"阶段,逐步适应更大的学习率。warmup 步数通常设为总训练步数的 1%-5%。太短则保护不够,太长则浪费了高学习率带来的快速收敛。关于 warmup 为什么有效,目前还没有完全统一的理论解释。
十五、信息瓶颈:一个理解 Attention 的启发性视角(选读)
出处:Tishby & Schwartz-Ziv (2017) “Opening the Black Box of Deep Neural Networks via Information”
这一节提供一个理论视角来思考"为什么 Attention 有效”。需要强调的是,这更多是一种启发性的类比,而非针对 Transformer 的严格证明。
15.1 信息瓶颈原理
给定输入 $X$ 和目标 $Y$,一个好的中间表示 $Z$ 应该满足:
$$\max I(Z; Y) \quad \text{subject to} \quad \min I(Z; X)$$其中:
- $I(\cdot; \cdot)$:互信息(衡量两个变量之间共享的信息量)
- $X$:输入数据
- $Y$:预测目标(标签)
- $Z$:中间表示(模型学到的特征)
即:保留尽可能多的与预测目标相关的信息($I(Z; Y)$ 大),同时压缩掉与预测无关的输入噪声($I(Z; X)$ 小)。
15.2 Attention 与信息瓶颈
Attention 的 softmax 权重可以看作一种信息选择机制:
- 高权重的 token:信息被保留(与当前 query 相关)
- 低权重的 token:信息被压缩(与当前 query 无关)
每一层 Attention 都在做一次"选择性压缩”——保留对当前任务有用的信息,丢弃无关的上下文。这和信息瓶颈的目标天然吻合。
不过需要强调,这是一个启发性的类比,不是严格的数学证明。Tishby 的信息瓶颈理论本身在深度学习中的适用性仍有争议(Saxe et al., 2018 提出了质疑)。把它作为理解 Attention 的一个思考框架是有价值的,但不宜过度解读。
核心概念速查表
| 概念 | 一句话解释 | 为什么重要 |
|---|---|---|
| $\sqrt{d_k}$ 缩放 | 点积方差随维度线性增长,除以 $\sqrt{d_k}$ 使方差归一 | 防止 softmax 饱和导致梯度消失 |
| Softmax 温度 | $\sqrt{d_k}$ 本质上是 Boltzmann 分布的温度参数 | 控制注意力分布的锐度 |
| 正弦位置编码 | 不同频率的 sin/cos 编码位置,$PE(pos+k)$ 是 $PE(pos)$ 的线性变换 | 让模型通过线性运算学到相对位置关系 |
| Attention = 核回归 | softmax attention 与 Nadaraya-Watson 核回归形式对应 | 提供理解 Attention 设计的经典统计视角 |
| Multi-Head | 分头后每个头独立做 Attention,最后拼接投影 | 让不同头学习不同的关注模式 |
| Mask | 在 $QK^T$ 上加 $M$ 矩阵($-\infty$ 屏蔽不可见位置) | 实现 causal 生成和 padding 处理 |
| FFN | 逐 token 的两层 MLP:升维 → 激活 → 降维 | Attention 管 token 间交互,FFN 管 token 内变换 |
| $O(T^2)$ 复杂度 | Attention 矩阵大小为 $T \times T$ | 长序列的核心瓶颈,Linear Attention 的动机 |
| Cross-Attention | Q 来自 Decoder,K/V 来自 Encoder,连接两个序列 | Encoder-Decoder 架构和多模态模型的桥梁 |
| 残差连接 | $y = F(x) + x$,梯度中恒等项 $I$ 保证梯度直通 | 深层 Transformer 能训练的核心保障 |
| LayerNorm | 沿特征维度归一化,每个样本独立 | 不受 batch 大小和序列长度影响 |
| 交叉熵 = KL 散度 = MLE | 三种优化目标在数学上完全等价 | 理解 Decoder 训练的本质 |
| Label Smoothing | 用 $(1-\epsilon) \cdot y + \epsilon/K$ 替代 one-hot | 防止过拟合,提升泛化 |
| LR Warmup | 前 N 步线性增长学习率,之后衰减 | 给 Adam 时间积累可靠的梯度统计量 |
| 信息瓶颈 | 好的表示应最大化 $I(Z;Y)$ 同时最小化 $I(Z;X)$ | 一个理解 Attention 信息筛选的启发性框架 |
学习检查清单
- 能推导为什么点积的方差是 $d_k$,以及为什么除以 $\sqrt{d_k}$
- 能解释 softmax 和 Boltzmann 分布的关系,以及温度参数的作用
- 能写出正弦位置编码的公式,并解释为什么 $PE(pos+k)$ 可以表示为 $PE(pos)$ 的线性变换
- 能把 Attention 改写成核回归的形式,并说出核函数是什么
- 能写出 Multi-Head Attention 的完整维度变化:输入 shape → 分头 → 各头 Attention → 拼接 → 输出
- 能用 $QK^T + M$ 的统一公式解释 causal mask 和 padding mask
- 能写出 FFN 的公式,并解释 Attention 和 FFN 的分工
- 能分析 Self-Attention 的时间和空间复杂度,并解释为什么 $O(T^2)$ 是长序列瓶颈
- 能写出 Cross-Attention 的公式,并说清 Q/K/V 分别来自哪个序列
- 能推导残差连接的梯度公式,并解释恒等项 $I$ 的作用
- 能说出 LayerNorm 和 BatchNorm 的归一化轴区别,以及为什么 Transformer 选 LayerNorm
- 能证明最小化交叉熵等价于最大似然估计
- 能写出 Label Smoothing 的公式,并解释它为什么能防止过拟合
- 能写出原始 Transformer 的学习率公式,并解释 warmup 的必要性
- 能用信息瓶颈的语言描述 Attention 在做什么(选读)
参考文献
| 编号 | 论文/博客 | 对应章节 |
|---|---|---|
| [1] | Vaswani et al. (2017). “Attention Is All You Need.” NeurIPS. arXiv:1706.03762 | §1, §2, §3, §13, §14 |
| [2] | Jay Alammar. “The Illustrated Transformer.” jalammar.github.io | §3 |
| [3] | Amirhossein Kazemnejad. “Transformer Architecture: The Positional Encoding.” kazemnejad.com | §3 |
| [4] | Tsai et al. (2019). “Transformer Dissection: A Unified Understanding for Transformer’s Attention via the Lens of Kernel.” EMNLP. arXiv:1908.11775 | §4 |
| [5] | Choromanski et al. (2021). “Rethinking Attention with Performers.” ICLR. arXiv:2009.14794 | §4, §8 |
| [6] | He et al. (2016). “Deep Residual Learning for Image Recognition.” CVPR. arXiv:1512.03385 | §10 |
| [7] | He et al. (2016). “Identity Mappings in Deep Residual Networks.” ECCV. arXiv:1603.05027 | §10 |
| [8] | Ba, Kiros & Hinton (2016). “Layer Normalization.” arXiv:1607.06450 | §11 |
| [9] | Cover & Thomas. “Elements of Information Theory.” Wiley. | §12 |
| [10] | Lei Mao. “Cross Entropy, KL Divergence, and Maximum Likelihood Estimation.” leimao.github.io | §12 |
| [11] | Szegedy et al. (2016). “Rethinking the Inception Architecture for Computer Vision.” CVPR. arXiv:1512.00567 | §13 |
| [12] | Ma & Yarats (2024). “Why Warmup the Learning Rate?” arXiv:2406.09405 | §14 |
| [13] | Tishby & Schwartz-Ziv (2017). “Opening the Black Box of Deep Neural Networks via Information.” arXiv:1703.00810 | §15 |
| [14] | Hinton et al. (2015). “Distilling the Knowledge in a Neural Network.” arXiv:1503.02531 | §2 |