引言
现代 AI——尤其是大语言模型、图像生成器和分类系统——建立在一个出奇精简的数学基础之上。从 ChatGPT 生成一句话,到 Stable Diffusion 渲染一张图像,归根结底都是同样的运算:矩阵乘法、非线性函数和梯度下降。其精妙之处在于这些基本单元如何组合与扩展。
本文从第一性原理出发构建这套数学。我们从线性代数和概率论开始,经由基于微积分的优化,搭建神经网络的形式化体系,推导反向传播,最终抵达 2026 年所有主流语言模型都依赖的注意力机制和 Transformer 架构。全程不走捷径,每个公式都会从其组成部分推导或解释。
前置知识:熟悉高中代数,了解基本的微积分记号(导数、链式法则)。其余内容都会在这里逐步建立。
线性代数
AI 的语言
1.1 向量与向量空间
向量是一个有序的数字列表。在 AI 中,向量可以表示一切:一个词、一个图像块、一种用户偏好、一个隐藏状态。n 维实数空间中的向量 x 写作:
x = [x₁, x₂,..., xₙ]ᵀ ∈ ℝⁿ
集合 ℝⁿ 是一个向量空间:它对加法和标量乘法封闭,含有零向量,并满足向量空间的八条公理。正是这种代数结构让线性代数能够应用于机器学习——神经网络的层就是向量空间之间的线性映射。
1.1.1 点积与余弦相似度
两个向量 x, y ∈ ℝⁿ 的点积为:
x · y = xᵀy = Σᵢ xᵢyᵢ = ‖x‖‖y‖cos(θ)
其中 θ 是两个向量之间的夹角。点积衡量的是方向的一致程度:当 x 和 y 指向同一方向时(cos θ = 1)点积最大,二者垂直时(cos θ = 0)为零,方向相反时(cos θ = -1)最小。这种几何解释正是注意力机制的基础——查询与键之间的点积衡量它们彼此“关注”的程度。
余弦相似度用两个向量模长的乘积对点积进行归一化:
cos_sim(x, y) = (x · y) / (‖x‖ · ‖y‖) ∈ [-1, 1]
余弦相似度在 NLP 中被广泛用于衡量词嵌入之间的语义相似度:表示近义词的向量会在嵌入空间中聚集在一起,其余弦相似度接近 1。
1.2 矩阵与线性变换
矩阵 W ∈ ℝᵐˣⁿ 表示从 ℝⁿ 到 ℝᵐ 的线性变换。矩阵与向量相乘:
y = Wx,其中 yᵢ = Σⱼ Wᵢⱼ xⱼ
这是神经网络层的核心运算。每一行 Wi· 都是一个权重向量;输出 yi 是第 i 行与输入 x 的点积。矩阵 W 编码了该层学到的内容:要计算输入特征的哪些线性组合。
1.2.1 矩阵乘法
对于矩阵 A ∈ ℝᵐˣⁿ 和 B ∈ ℝⁿˣᵖ,它们的乘积 C = AB ∈ ℝᵐˣᵖ 的元素为:
Cᵢⱼ = Σₖ Aᵢₖ Bₖⱼ = Aᵢ· · B·ⱼ
矩阵乘法不满足交换律(一般而言 AB ≠ BA),但满足结合律:A(BC) = (AB)C。将 m×n 矩阵与 n×p 矩阵相乘的计算成本为 O(mnp)——这是大型神经网络中最主要的开销。对于隐藏维度 d = 4096、处理 2048 个 token 序列的 Transformer,单次矩阵乘法的成本为 O(2048 × 4096 × 4096) ≈ 340 亿次运算。
1.2.2 转置与对称矩阵
矩阵 W 的转置 Wᵀ 将行与列互换:(Wᵀ)ij = Wji。关键性质:(AB)ᵀ = BᵀAᵀ,(Wᵀ)ᵀ = W。对称矩阵满足 W = Wᵀ。
Transformer 中的注意力权重矩阵 QKᵀ/√dk 是通过包含转置的矩阵乘积计算得出的 — 查询矩阵 Q ∈ ℝˢˣᵈ 乘以转置后的键矩阵 Kᵀ ∈ ℝᵈˣˢ,得到一个 s×s 的注意力权重矩阵,其中 s 为序列长度。
1.3 特征值、特征向量与 SVD
如果满足以下条件,向量 v 就是矩阵 A 的特征向量:
Av = λv
其中 λ 是对应的特征值。特征向量是矩阵 A 只做缩放、不做旋转的方向。所有特征值的集合称为 A 的谱,它刻画了矩阵的行为:大的特征值会放大对应的方向,小的特征值则会使其衰减。
奇异值分解(SVD)将特征分解推广到非方阵:
W = U Σ Vᵀ
其中 U ∈ ℝᵐˣᵐ 和 V ∈ ℝⁿˣⁿ 是正交矩阵(旋转/反射),Σ ∈ ℝᵐˣⁿ 是对角矩阵,其非负元素满足 σ₁ ≥ σ₂ ≥... ≥ σᵣ(即奇异值)。SVD 被用于权重压缩:仅保留前 k 个奇异值的低秩近似 Wk = Uk Σk Vkᵀ,是在 Frobenius 范数意义下 W 的最佳秩 k 近似 — 这正是 LoRA(Low-Rank Adaptation,低秩适配)微调的基础。
1.4 范数与正则化
向量 x ∈ ℝⁿ 的 L2 范数(欧几里得范数):
‖x‖₂ = √(Σᵢ xᵢ²) = √(xᵀx)
矩阵 W ∈ ℝᵐˣⁿ 的 Frobenius 范数:
‖W‖_F = √(Σᵢ Σⱼ Wᵢⱼ²) = √(tr(WᵀW))
范数用于量化向量和矩阵的“大小”。在优化中,在损失函数中加入范数惩罚项 — 即正则化 — 可以惩罚过大的权重、防止过拟合。L2 正则化(权重衰减)会在损失中加入 λ‖W‖²F,使权重在训练过程中向零衰减。
概率论与信息论
2.1 概率分布
离散样本空间 X 上的概率分布 P 为每个结果 x ∈ X 赋予 P(x) ≥ 0,且 Σx P(x) = 1。语言建模恰恰就是这件事:估计 token 序列上的概率分布。
对于连续变量,概率密度函数(PDF)f(x) 满足 f(x) ≥ 0 且 ∫f(x)dx = 1。某个区间的概率为 P(a ≤ X ≤ b) = ∫ab f(x)dx。
2.1.1 Softmax 分布
softmax 函数将实值 logits 向量 z ∈ ℝⁿ 转换为概率分布:
softmax(z)ᵢ = exp(zᵢ) / Σⱼ exp(zⱼ)
性质:所有输出均为正数,总和为 1(构成有效的概率分布),较大的 logit 映射为接近 1 的概率,较小的 logit 映射为接近 0 的概率。温度缩放会改变这一点:softmax(z/T)——当 T → 0 时趋近于 argmax(one-hot),当 T → ∞ 时趋近于均匀分布。语言模型在每一步生成时都从这个分布中采样。
数值稳定性问题:当 z 很大时,exp(z) 会溢出。标准的解决办法是在取指数之前先减去最大值:
softmax(z)ᵢ = exp(zᵢ - max(z)) / Σⱼ exp(zⱼ - max(z))
2.2 信息论
2.2.1 香农熵
分布 P 的熵 H(P) 衡量其不确定性——即一个结果的平均信息量:
H(P) = -Σₓ P(x) log₂ P(x) [比特]
当 P 为均匀分布时熵最大(不确定性最大),当 P 为确定性分布时熵最小(= 0)。一枚公平硬币的 H = 1 比特;一个六面骰子的 H = log₂(6) ≈ 2.58 比特。语言熵衡量的是编码一种语言时每个 token 需要多少比特。
2.2.2 交叉熵与 KL 散度
交叉熵 H(P, Q) 衡量的是用分布 Q 来编码来自真实分布 P 的样本时的期望编码长度:
H(P, Q) = -Σₓ P(x) log Q(x)
这是分类和语言建模的标准训练损失:P 是真实的(one-hot)标签分布,Q 是模型预测的分布。最小化交叉熵等价于最大化数据在该模型下的对数似然。
KL 散度 DKL(P‖Q) 衡量 Q 与 P 的差异程度:
D_KL(P‖Q) = Σₓ P(x) log(P(x)/Q(x)) = H(P,Q) - H(P) ≥ 0
当且仅当 P 与 Q 几乎处处相等时,KL 散度为零,否则为正(吉布斯不等式)。它不具有对称性:DKL(P‖Q) ≠ DKL(Q‖P)。它出现在 RLHF 训练中:防止微调后的模型偏离基础模型过远的 KL 惩罚项就是 DKL(πθ ‖ πref)。
2.2.3 Perplexity
困惑度(Perplexity)是交叉熵损失的指数——评估语言模型的标准指标:
PPL(P, Q) = exp(H(P, Q)) = exp(-1/N Σₙ log Q(tₙ | t₁,...,tₙ₋₁))
直观地说,困惑度就是模型在每一步实际上从多大的词表中做选择。困惑度为 20 意味着模型平均而言的不确定程度,相当于在 20 个等可能的选项中均匀选择。最先进的语言模型在标准基准上的困惑度为 3–8。
2.3 贝叶斯定理
贝叶斯定理是概率机器学习的基础:
P(θ|D) = P(D|θ) · P(θ) / P(D)
其中 θ 为模型参数,D 为观测数据,P(θ|D) 为后验,P(D|θ) 为似然,P(θ) 为先验,P(D) = ∫P(D|θ)P(θ)dθ 为边际似然(证据)。最大似然估计(MLE)最大化 P(D|θ),忽略先验。最大后验估计(MAP)最大化 P(θ|D),等价于加上与 -log P(θ) 成正比的正则化项的 MLE。
现代深度学习通常使用 MLE/MAP,而不是完整的贝叶斯推断,因为在数十亿个参数上计算后验在计算上是不可行的。LLM 的不确定性估计至今仍是一个开放的研究问题。
微积分与优化
3.1 导数与梯度
标量函数 f: ℝ → ℝ 在点 x 处的导数衡量其瞬时变化率:
f'(x) = df/dx = lim_{h→0} [f(x+h) - f(x)] / h
对于函数 f: ℝⁿ → ℝ(例如损失函数),梯度 ∇f ∈ ℝⁿ 是由各偏导数组成的向量:
∇f(x) = [∂f/∂x₁, ∂f/∂x₂,..., ∂f/∂xₙ]ᵀ
梯度指向上升最快的方向。因此,沿负梯度方向移动就会让损失函数下降——这正是梯度下降的基础。
3.1.1 雅可比矩阵与黑塞矩阵
对于向量值函数 f: ℝⁿ → ℝᵐ,雅可比矩阵 J ∈ ℝᵐˣⁿ 包含所有一阶偏导数:Jij = ∂fi/∂xj。某一层输出对其输入的雅可比矩阵是反向传播的核心。
标量函数的黑塞矩阵 H ∈ ℝⁿˣⁿ 包含所有二阶偏导数:Hij = ∂²f/(∂xi ∂xj)。黑塞矩阵刻画了损失曲面的曲率:正定的黑塞矩阵意味着局部最小值,负定意味着局部最大值,不定则意味着鞍点。
3.1.2 链式法则
链式法则是反向传播的数学基础。对于复合函数 g(f(x)):
d/dx g(f(x)) = g'(f(x)) · f'(x)
对于向量值函数,多元链式法则使用雅可比矩阵:
∂z/∂x = (∂z/∂y) · (∂y/∂x) = J_g · J_f
神经网络是函数的复合:L(θ) = loss(fₙ(...f₂(f₁(x; W₁)); Wₙ))。沿这一复合结构递归地应用链式法则,就能为每一层 i 计算 ∂L/∂Wi — 这种递归应用就是反向传播。
3.2 梯度下降及其变体
3.2.1 随机梯度下降
最基本的梯度下降沿负梯度方向更新参数 θ:
θ_{t+1} = θ_t - η · ∇_θ L(θ_t)
其中 η 为学习率。在整个数据集上计算真实梯度代价高昂——每一步需要 O(N) 次前向传递。随机梯度下降(SGD)使用大小为 b 的小批量 B ⊂ D 来近似计算:
θ_{t+1} = θ_t - η · (1/b) Σ_{x∈B} ∇_θ ℓ(f(x; θ), y)
小批量梯度是完整梯度的无偏估计量:E[gB] = ∇L。其方差随批量大小 b 增大而减小:Var(gB) = σ²/b。
3.2.2 动量
动量会沿着梯度中持续存在的分量方向累积一个速度向量 v:
v_{t+1} = β · v_t + (1-β) · ∇_θ L(θ_t)
θ_{t+1} = θ_t - η · v_{t+1}
当 β ∈ [0.9, 0.99] 时,动量实际上是对 1/(1-β) 步的梯度取平均——β=0.9 时为 10 步,β=0.99 时为 100 步。这能加快沿平坦维度的收敛,并抑制沿陡峭维度的振荡。
3.2.3 Adam:自适应矩估计
Adam(Kingma & Ba, 2015)通过同时追踪梯度的一阶矩(均值)和二阶矩(非中心化方差),为每个参数维护自适应的学习率:
m_t = β₁ · m_{t-1} + (1-β₁) · g_t
v_t = β₂ · v_{t-1} + (1-β₂) · g_t²
m̂_t = m_t / (1-β₁ᵗ), v̂_t = v_t / (1-β₂ᵗ)
θ_{t+1} = θ_t - η · m̂_t / (√v̂_t + ε)
典型的超参数:β₁ = 0.9,β₂ = 0.999,ε = 10⁻⁸,η = 3×10⁻⁴。每个参数的有效学习率为 η/√v̂_t——梯度方差大的参数有效步长更小,梯度方差小的参数有效步长更大。
3.2.4 学习率调度
学习率 η 通常不会保持恒定。常见的调度方式包括线性预热 + 余弦衰减(大多数 Transformer 预训练都采用这种方式)、带重启的余弦退火,以及多项式衰减。预热阶段对大模型至关重要:在初始化时,梯度估计噪声很大,过大的初始学习率可能导致训练不稳定。
神经网络架构
数学原理
4.1 前馈层
单个神经网络层先计算一次线性变换,再接一个非线性激活函数 σ:
h = σ(Wx + b)
其中 W ∈ ℝᵐˣⁿ 为权重矩阵,b ∈ ℝᵐ 为偏置向量,x ∈ ℝⁿ 为输入,h ∈ ℝᵐ 为隐藏状态。如果没有 σ,堆叠多层就等价于单个线性变换。激活函数打破了这种线性,使深度网络能够表示复杂程度呈指数级增长的函数。
4.2 激活函数
4.2.1 ReLU 及其变体
ReLU(x) = max(0, x) = x · 𝟙[x > 0]
性质:计算极其简单,梯度要么为 0(x < 0),要么为 1(x > 0),产生稀疏激活,对正值不会饱和。问题:“神经元死亡”(dying ReLU)— x < 0 的神经元梯度为零,无法恢复。
GeLU(Gaussian Error Linear Unit,高斯误差线性单元),用于 GPT 和 BERT:
GELU(x) = x · Φ(x) = x · P(Z ≤ x) 其中 Z ~ N(0,1)
SwiGLU 用于 LLaMA/PaLM,是一种门控变体:
SwiGLU(x, W, V) = Swish(xW) ⊙ (xV)
4.2.2 Sigmoid 与 Tanh
σ(x) = 1/(1 + e⁻ˣ) ∈ (0,1)
tanh(x) = (eˣ - e⁻ˣ)/(eˣ + e⁻ˣ) ∈ (-1,1)
在深度网络中,两者都存在梯度消失问题:当 |x| >> 0 时,梯度 σ'(x) = σ(x)(1-σ(x)) → 0,导致梯度在反向传播过程中呈指数级消失。在 ReLU 和残差连接出现之前,这是训练深度网络的主要障碍。
4.3 多层感知机(MLP)
一个 L 层 MLP 的计算如下:
h₀ = x
hₗ = σ(Wₗ hₗ₋₁ + bₗ) ,l = 1,...,L-1
ŷ = softmax(W_L h_{L-1} + b_L)
万能近似定理(Hornik, 1989)指出,只要宽度足够,仅含一个隐藏层的 MLP 就能以任意精度逼近紧致定义域上的任何连续函数。然而,对于许多函数类,深度网络的参数效率比浅层网络高出指数级。
4.4 反向传播
反向传播利用沿计算图反向应用的链式法则,为神经网络中的每个权重矩阵 W 计算 ∂L/∂W。
定义误差信号(上游梯度):
δₗ = ∂L/∂zₗ,其中 zₗ = Wₗhₗ₋₁ + bₗ
反向传播的递推关系:
δ_L = ∂L/∂z_L
δₗ = (Wₗ₊₁ᵀ δₗ₊₁) ⊙ σ'(zₗ)
∂L/∂Wₗ = δₗ hₗ₋₁ᵀ
∂L/∂bₗ = δₗ
# Forward pass
def forward(x, layers):
activations = [x]
pre_activations = []
for W, b in layers:
z = W @ activations[-1] + b
pre_activations.append(z)
activations.append(relu(z))
return activations, pre_activations
# Backward pass
def backward(loss_grad, activations, pre_acts, layers):
delta = loss_grad
grads = []
for l in reversed(range(len(layers))):
W, b = layers[l]
dW = delta @ activations[l].T # ∂L/∂W
db = delta.sum(axis=1) # ∂L/∂b
grads.insert(0, (dW, db))
if l > 0:
delta = (W.T @ delta) * relu_grad(pre_acts[l-1])
return grads
为什么反向传播如此高效
一种朴素的做法是将每个权重扰动 ε,然后测量 (L(W+εeij) - L(W))/ε。对于 n 个参数,这需要 n 次前向传递。反向传播借助动态规划复用中间计算结果,只需一次反向传递就能算出全部 n 个梯度 — 复杂度为 O(n) 而非 O(n²)。
4.5 梯度消失与梯度爆炸问题
误差信号 δₗ 涉及 L-l 个雅可比矩阵的乘积。如果谱半径 ρ(J) < 1,梯度会呈指数级消失;如果 ρ(J) > 1,梯度会爆炸。解决方法包括残差连接(h = F(x) + x)、梯度裁剪(‖g‖ > γ → 重新缩放)、层归一化,以及谨慎的初始化(He 初始化:W ~ N(0, 2/nin))。
归一化层
5.1 批归一化
μ_B = (1/m) Σᵢ xᵢ, σ²_B = (1/m) Σᵢ (xᵢ - μ_B)²
x̂ᵢ = (xᵢ - μ_B) / √(σ²_B + ε)
yᵢ = γ · x̂ᵢ + β
γ 和 β 是可学习的参数,必要时网络可以借助它们撤销归一化。BatchNorm 并不适合语言模型,因为序列长度可变,而且小批量下的批统计量不稳定。
5.2 层归一化
μₓ = (1/H) Σⱼ xⱼ, σ²ₓ = (1/H) Σⱼ (xⱼ - μₓ)²
x̂ⱼ = (xⱼ - μₓ) / √(σ²ₓ + ε), yⱼ = γⱼ x̂ⱼ + βⱼ
层归一化的统计量按样本计算,而不是按批次计算——与批量大小无关,在训练和推理时的行为完全一致。这使得 LayerNorm 成为 Transformer 中的标准归一化方法。在 Pre-LN Transformer(GPT-2 及之后)中,LayerNorm 应用于注意力子层和 MLP 子层之前,在大规模训练时能带来更稳定的训练动力学。
5.3 RMSNorm
RMSNorm(x) = x / RMS(x) · γ,其中 RMS(x) = √(1/H Σⱼ xⱼ²)
RMSNorm 比 LayerNorm 快约 10%,效果相当。LLaMA、Mistral 和 Gemma 架构都采用了它。其直观解释是:LayerNorm 中的重新中心化步骤对模型质量影响甚微,主要收益来自控制激活幅度的重新缩放。
嵌入与位置编码
6.1 Token 嵌入
token 嵌入矩阵 E ∈ ℝ|V|×d 将词表 V 中的每个离散 token 映射为一个稠密的 d 维向量:
e_t = E[t] ∈ ℝᵈ
现代模型的嵌入维度 d 通常为 512–4096。嵌入矩阵与模型其余部分联合学习——在嵌入空间中彼此靠近的 token 具有相似的上下文用法。Word2Vec 发现嵌入空间中的算术运算能够捕捉语义关系(king - man + woman ≈ queen),这是在大规模语料上训练后涌现出的特性。
权重绑定:在许多模型中,输出投影矩阵 Wout 与 Eᵀ 共享,参数量减少 |V|×d,而且在实践中性能没有下降。
6.2 位置编码
Transformer 本身没有顺序概念——注意力具有置换等变性。位置编码负责注入位置信息。
6.2.1 正弦位置编码
PE(pos, 2i) = sin(pos / 10000^(2i/d))
PE(pos, 2i+1) = cos(pos / 10000^(2i/d))
6.2.2 旋转位置嵌入(RoPE)
RoPE(Su et al., 2021)被 LLaMA、Mistral 和 GPT-NeoX 采用,它通过在二维子空间中旋转查询向量和键向量来编码位置:
q_m = R_m q, k_n = R_n k
(R_m q)ᵀ(R_n k) = qᵀ R_{m-n}ᵀ k = f(q, k, m-n)
点积只取决于相对位置 m-n,而与绝对位置无关。这使得 RoPE 在相对位置敏感性上严格优于正弦编码,并支持上下文长度外推。
注意力机制
7.1 缩放点积注意力
注意力机制计算值的加权和,其中权重由查询与键的相似度决定:
Attention(Q, K, V) = softmax(QKᵀ / √dₖ) · V
其中 Q ∈ ℝˢˣᵈᵏ(查询),K ∈ ℝˢˣᵈᵏ(键),V ∈ ℝˢˣᵈᵥ(值)。缩放因子 1/√dk 防止点积变得过大 — 没有它,softmax 会饱和成近似 one-hot 的分布,导致梯度消失。
注意力权重矩阵 A = softmax(QKᵀ/√dk) ∈ ℝˢˣˢ 中的元素 Aij 表示位置 i 对位置 j 的关注程度。输出是值的加权和:outputi = Σj Aij Vj。这让每个位置都能汇聚序列中任意其他位置的信息 — 这正是 Transformer 的标志性能力。
7.2 多头注意力
多头注意力在低维子空间中并行运行 h 个注意力运算:
headᵢ = Attention(QWᵢQ, KWᵢK, VWᵢV)
MultiHead(Q,K,V) = Concat(head₁,...,headₕ) Wᴼ
不同的头会学到不同的注意力模式:有的关注邻近位置(局部上下文),有的关注句法结构,还有的关注语义关系。当 h=12 个头、d=768(BERT-base)时,每个头在 64 维子空间中运算。
7.3 因果(掩码)注意力
A = softmax((QKᵀ/√dₖ) + M), M_ij = 0(j≤i 时),-∞(j>i 时)
在 softmax 之前给被掩码的位置加上 -∞,会使 exp(-∞) = 0,从而把这些注意力权重置零。得到的注意力矩阵是下三角的:位置 i 关注位置 1,...,i,而不关注 i+1,...,s。
7.4 计算复杂度
由于存在 s×s 的注意力矩阵,标准注意力的时间复杂度为 O(s²d),内存复杂度为 O(s²)。高效变体包括 FlashAttention(通过分块实现 2-4 倍加速,且结果精确)、稀疏注意力(窗口大小为 w 时为 O(s·w))、线性注意力(O(s·d²)),以及 Multi-Query Attention(在各个头之间共享 K 和 V,将 KV 缓存缩小为原来的 1/h)。
Transformer 架构
8.1 Transformer 模块
一个 Transformer 层由两个子层组成:多头自注意力和逐位置 MLP,每个子层都带有残差连接和层归一化:
x' = x + MultiHead(LN(x), LN(x), LN(x))
x'' = x' + MLP(LN(x'))
MLP 子层:
MLP(x) = W₂ · GELU(W₁x + b₁) + b₂
其中 W₁ ∈ ℝ4d×d,W₂ ∈ ℝd×4d。当 d=4096 时,这个 MLP 每层约有 1.34 亿个参数。
8.2 参数量
| 组件 | 参数量 | 备注 |
|---|---|---|
| Token 嵌入 | d × |V| | 与输出层权重绑定 |
| 位置嵌入 | d × s_max | RoPE 模型中没有 |
| 注意力(每层) | 4d² | Q、K、V、O 投影 |
| MLP(每层) | 8d² | SwiGLU:12d² |
| LayerNorm(每层) | 4d | 可忽略不计 |
| 总计(L 层) | ≈ 12Ld² | d 较大时 |
以 GPT-3(L=96,d=12288)为例:12 × 96 × 12288² ≈ 1750 亿个参数。
8.3 残差流
残差连接模式形成了残差流——一个贯穿整个网络的 d 维向量,每一层都以加法的方式对其进行修改:
x₀ = Embed(tokens) + PE
xₗ = xₗ₋₁ + Attn_l(xₗ₋₁) + MLP_l(...)
logits = Unembed(LN(x_L))
机制可解释性的视角把残差流看作一条通信信道:注意力头和 MLP 层从中读取信息并写入加性更新,这使得针对信息流的可解释性研究成为可能。
大规模训练动力学
9.1 损失曲面
神经网络的损失函数 L: ℝⁿ → ℝ(其中 n ~ 10⁹–10¹²)是高度非凸的。理论上难以处理,但大型过参数化网络却相对容易训练,原因包括:过参数化(大多数局部最小值都接近全局最小值)、NTK 区间(无限宽网络的收敛方式类似核回归),以及隐式正则化(SGD 会找到平坦且泛化良好的最小值)。
9.2 Chinchilla 缩放定律
Hoffmann et al.(2022)推导出了经验缩放定律,将计算预算 C、模型规模 N 和数据集规模 D 联系起来:
L(N, D) = E + A/Nᵅ + B/Dᵝ
其中 E ≈ 1.69(不可约熵),α ≈ β ≈ 0.34。关键发现:在计算量 C = 6ND 固定时,最优权衡为 Nopt ∝ C0.5 且 Dopt ∝ C0.5 — 模型规模和数据集规模应等比例扩展。这意味着 GPT-3(1750 亿参数、3000 亿 token)的训练明显不足。
9.3 混合精度训练
现代模型采用混合精度训练:前向传递使用 float16 以节省内存,权重更新使用 float32 以保证数值稳定性。
# Forward pass in fp16
with torch.autocast(device_type='cuda', dtype=torch.float16):
logits = model(input_ids)
loss = cross_entropy(logits, targets)
# Backward pass: gradients in fp16
scaler.scale(loss).backward()
# Gradient unscaling + clipping in fp32
scaler.unscale_(optimizer)
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
# Weight update in fp32 (master weights)
scaler.step(optimizer)
scaler.update()
BFloat16 比 float16 更受青睐:它与 float32 一样有 8 位指数(动态范围相同),但只有 7 位尾数,无需损失缩放就能避免上溢和下溢。
9.4 分布式训练
训练一个 70B 模型,仅权重就需要约 140 GB 的 GPU 显存。可选策略包括数据并行(复制模型、同步梯度)、张量并行(将权重矩阵拆分到多个 GPU 上)、流水线并行(将不同的层分配给不同的 GPU),以及 ZeRO(在各个 worker 之间切分优化器状态、梯度和权重,从而支持任意规模的模型)。
语言建模与生成
10.1 自回归目标
L(θ) = -E_{x~D}[ Σₜ log P_θ(xₜ | x_{<t}) ]
在每个位置 t,模型都会根据前面所有的 token,预测完整词表 V 上的概率分布。这个简单的下一个 token 预测目标,在超大规模下应用,就足以学到丰富的语言表示、事实知识和推理能力。
10.2 解码策略
10.2.1 温度缩放
P(tᵢ) = exp(zᵢ/T) / Σⱼ exp(zⱼ/T)
T < 1 会让分布更尖锐(更确定),T > 1 会让分布更平坦(更随机)。T = 0 时退化为 argmax(贪心解码)。
10.2.2 Top-k 采样
P'(tᵢ) = P(tᵢ) / Σ_{j∈top-k} P(tⱼ) (i ∈ top-k)
10.2.3 核采样(Top-p)
V_p = {t : Σ_{v 已排序} P(v) ≤ p}, P'(tᵢ) = P(tᵢ)/p
Top-p 是自适应的:不确定时纳入更多 token,有把握时纳入更少。常见设置:temperature 0.7–1.0,top-p 0.9–0.95。
10.2.4 束搜索
score(x_{1:t}) = (1/t) Σᵢ log P(xᵢ|x_{<i})
束搜索直接最大化概率,更适合翻译和结构化输出;而开放式生成则更适合采样。
10.3 键值缓存
在自回归推理过程中,KV 缓存会存储先前计算出的 K 和 V 张量,使每一步生成的复杂度从 O(s²d) 降为 O(sd),但需要占用 O(2Lsd) 的内存——对于一个 70B 模型,在 float16 下约为 320 GB。KV 缓存压缩是一个活跃的研究方向,对长上下文推理至关重要。
kv_cache = {}
def generate_step(input_token, kv_cache, model):
q, k, v = model.qkv_proj(embed(input_token))
if layer_idx in kv_cache:
K = torch.cat([kv_cache[layer_idx][0], k], dim=1)
V = torch.cat([kv_cache[layer_idx][1], v], dim=1)
else:
K, V = k, v
kv_cache[layer_idx] = (K, V)
output = scaled_dot_product_attention(q, K, V)
return output, kv_cache
基于人类反馈的强化学习
11.1 三阶段流程
RLHF 通过三个阶段使预训练语言模型与人类偏好对齐:监督微调(SFT)、奖励模型训练和强化学习优化。
11.2 奖励模型
奖励模型 Rφ:(提示词, 补全)→ ℝ 基于成对的人类偏好数据进行训练:
L_RM(φ) = -E[ log σ(R_φ(x,y_w) - R_φ(x,y_l)) ]
11.3 PPO 优化
对语言模型 πθ 进行优化,使其在贴近参考策略的同时最大化期望奖励:
max_θ E[ R_φ(x,y) ] - β · D_KL(π_θ ‖ π_ref)
L_PPO = E_t[ min(rₜ Aₜ, clip(rₜ, 1-ε, 1+ε) Aₜ) ]
KL 项可以防止奖励黑客(reward hacking)——即模型偏离正轨去利用奖励模型的弱点。PPO 的裁剪替代目标则能防止策略更新幅度过大而导致训练不稳定。
11.4 直接偏好优化(DPO)
DPO(Rafailov et al., 2023)完全绕过了奖励模型:
L_DPO(θ) = -E[ log σ(β log π_θ(y_w|x)/π_ref(y_w|x) - β log π_θ(y_l|x)/π_ref(y_l|x)) ]
DPO 在数学上与 RLHF 等价,但更简单、更稳定,而且无需单独的奖励模型。大多数现代微调流程都使用 DPO 或其变体(IPO、KTO),而不是 PPO。
总结:数学基础模块
| 概念 | 核心公式 | 在 AI 中的作用 |
|---|---|---|
| 矩阵乘法 | y = Wx + b | 所有线性层、注意力投影 |
| Softmax | exp(z)/Σexp(z) | token 概率、注意力权重 |
| 交叉熵 | H(P,Q) = -Σ P log Q | 分类/语言模型的训练损失 |
| 链式法则 | ∂z/∂x = (∂z/∂y)(∂y/∂x) | 跨层反向传播 |
| Adam 更新 | θ -= η·m̂/√(v̂+ε) | 训练过程中的参数更新 |
| 点积注意力 | softmax(QKᵀ/√dₖ)V | Transformer 自注意力的核心 |
| 层归一化 | (x-μ)/σ · γ + β | 按样本稳定激活值 |
| RoPE | (Rₘq)ᵀ(Rₙk)=f(q,k,m-n) | 相对位置编码 |
| KL 散度 | Σ P log(P/Q) | RLHF 正则化、VAE 目标 |
| Perplexity | exp(H(P,Q)) | 语言模型评估指标 |
| SVD | W=UΣVᵀ | 权重压缩、LoRA 微调 |
| PPO 目标 | E[min(r·A, clip(r)·A)] | RLHF 策略优化 |
参考文献
Vaswani, A., et al. (2017). Attention is all you need. NeurIPS 2017.
He, K., et al. (2016). Deep residual learning for image recognition. CVPR 2016.
Ba, J. L., et al. (2016). Layer normalization. arXiv:1607.06450.
Kingma, D. P., & Ba, J. (2015). Adam: A method for stochastic optimization. ICLR 2015.
Hochreiter, S., & Schmidhuber, J. (1997). Long short-term memory. Neural Computation 9(8).
Ioffe, S., & Szegedy, C. (2015). Batch normalization. ICML 2015.
Elhage, N., et al. (2021). A mathematical framework for transformer circuits. Transformer Circuits Thread.
Hoffmann, J., et al. (2022). Training compute-optimal large language models. arXiv:2203.15556.
Su, J., et al. (2021). RoFormer: Enhanced transformer with rotary position embedding. arXiv:2104.09864.
Dao, T., et al. (2022). FlashAttention: Fast and memory-efficient exact attention. NeurIPS 2022.
Rafailov, R., et al. (2023). Direct preference optimization. NeurIPS 2023.
Zhang, B., & Sennrich, R. (2019). Root mean square layer normalization. NeurIPS 2019.
Schulman, J., et al. (2017). Proximal policy optimization algorithms. arXiv:1707.06347.
Ouyang, L., et al. (2022). Training language models to follow instructions with human feedback. NeurIPS 2022.
Kirchenbauer, J., et al. (2023). A watermark for large language models. ICML 2023.
Rajbhandari, S., et al. (2020). ZeRO: Memory optimizations toward training trillion parameter models. SC 2020.