本文是《算法工程师的数学:读公式不卡壳的最小集》系列的第 4 篇(共八篇)。上一篇:正交与旋转、特征值与 SVD——从 RoPE 到 LoRA;下一篇:从最大似然到交叉熵——第一个要会推的 loss。
前三篇讲的是模型怎么算——一堆矩阵乘法。这一篇讲模型是什么。答案只有一句话:语言模型是一个条件分布 \(p(x_t \mid x_{<t})\)——给定前面的文字,输出下一个 token 的概率。这句话里每个词都需要概率的语言来定义;而一旦定义清楚,训练目标(第五篇)、采样方式、KV cache 为什么能增量、attention 为什么除以 \(\sqrt{d_k}\),都是它的直接推论。
本篇从零建立这套语言。全篇的核心问题是:
“语言模型是一个条件分布”这句话的每个词是什么意思?它决定了哪些事?
一、总览
1. 本文的对象
随机变量 X ──取值──► 分布 p(x) "下一个 token 是什么"
联合 p(a, b) · 边缘 p(a) · 条件 p(a | b) "给定前文,下一个 token 是什么"
链式法则:p(x₁…x_T) = Π p(x_t | x_<t) "一句话的概率 = 逐 token 条件概率的乘积"
期望 E · 方差 Var "平均是多少、抖多大"
常见分布:伯努利 · 类别 · 高斯 · 均匀 "评测的对错 · next-token · 初始化与扩散"
2. 本文的章节安排
| 章 | 主题 | 内容 |
|---|---|---|
| 二 | 随机变量与分布 | 概率是什么、分布要满足什么、离散与连续 |
| 三 | 联合、边缘、条件与贝叶斯 | 三种概率与它们的关系、独立性、贝叶斯公式的三个出场 |
| 四 | 链式法则与语言模型 | 序列概率的分解、”语言模型”的定义、它决定的四件事 |
| 五 | 期望与方差 | 定义、线性性、独立和的方差相加 |
| 六 | 常见分布 | 伯努利 / 二项、类别、高斯、均匀各在哪出场 |
| 七 | 高斯的两条性质 | 初始化的方差传播、扩散的多步等价一步、为什么除以 \(\sqrt{d_k}\) |
| 八 | 自测 | 五道题 |
| 九 | 本文小结 |
二、随机变量与分布
1. 随机变量
随机变量是一个”结果不确定的量”:掷一个骰子的点数、下一个 token 是词表里的哪一个、一道评测题答对还是答错。大写 \(X\) 表示随机变量本身,小写 \(x\) 表示它的一个具体取值。”\(X = x\) 的概率”写作 \(P(X = x)\),简写 \(p(x)\)。
2. 分布
分布是”每个取值的概率各是多少”的完整描述。对离散随机变量(取值可以一个个列出来),分布就是一张表,要满足两条:
\[p(x) \ge 0, \qquad \sum_x p(x) = 1\]——每个概率非负、加起来是 1。
掷骰子: x 1 2 3 4 5 6
p(x) 1/6 1/6 1/6 1/6 1/6 1/6 均匀分布
next-token:x "the" "a" "of" … (词表 128256 个)
p(x) 0.12 0.08 0.05 … 加起来 = 1 类别分布
语言模型最后一层输出的就是右边这张表:词表里每个 token 一个概率,128256 个数加起来是 1。
对连续随机变量(取值是实数,比如权重初始化时抽的数),概率用密度函数 \(p(x)\) 描述,\(\int p(x)\,dx = 1\),”落在某个区间的概率”是密度在那个区间上的积分。本系列用到的连续分布只有高斯与均匀两个(第六章)。
三、联合、边缘、条件与贝叶斯
1. 三种概率
两个随机变量 \(A, B\):
- 联合概率 \(p(a, b)\):\(A = a\) 且 \(B = b\) 的概率;
- 边缘概率 \(p(a)\):不管 \(B\) 是什么,\(A = a\) 的概率——把联合概率对 \(b\) 求和”边缘化”掉:\(p(a) = \sum_b p(a, b)\);
- 条件概率 \(p(a \mid b)\):已知 \(B = b\) 的情况下 \(A = a\) 的概率。竖线读作”给定”。
三者的关系是一条定义式:
\[p(a, b) = p(a \mid b)\, p(b) = p(b \mid a)\, p(a)\]”\(a\) 和 \(b\) 同时发生的概率 = 先发生 \(b\) 的概率 × 在 \(b\) 发生的条件下 \(a\) 发生的概率”。一个例子:
下雨 (B=1) 不下雨 (B=0) 边缘 p(a)
带伞 (A=1) 0.24 0.06 0.30
不带伞 (A=0) 0.06 0.64 0.70
边缘 p(b) 0.30 0.70 1.00
p(带伞 | 下雨) = p(带伞, 下雨) / p(下雨) = 0.24 / 0.30 = 0.8
p(带伞 | 不下雨) = 0.06 / 0.70 ≈ 0.086
条件概率改变了分布:不知道天气时带伞概率 0.3,知道下雨后变成 0.8。”语言模型”里的”条件”就是这个意思——知道了前文,下一个 token 的分布会大变。
2. 独立性
如果知道 \(B\) 不改变 \(A\) 的分布——\(p(a \mid b) = p(a)\),等价地 \(p(a, b) = p(a)\,p(b)\)——就说 \(A, B\) 独立。上面的例子不独立(0.8 ≠ 0.3)。独立性在第五章(独立和的方差相加)和第八篇(评测的每道题视为独立试验)里用。
3. 贝叶斯公式
把定义式的两种写法联立,除过去:
\[p(a \mid b) = \frac{p(b \mid a)\, p(a)}{p(b)}\]它把”由 \(a\) 推 \(b\)“的条件概率翻转成”由 \(b\) 推 \(a\)“。术语:\(p(a)\) 叫先验(看到 \(b\) 之前对 \(a\) 的信念),\(p(b \mid a)\) 叫似然,\(p(a \mid b)\) 叫后验(看到 \(b\) 之后更新的信念),\(p(b)\) 是归一化常数。
它在后面三处出现:
- 最大后验估计(MAP):第五篇的最大似然是最大化 \(p(\text{数据} \mid \theta)\),MAP 是最大化 \(p(\theta \mid \text{数据}) \propto p(\text{数据} \mid \theta)\,p(\theta)\)——多乘一个先验;取对数后先验变成一个加在 loss 上的正则化项。第二篇的 weight decay 就等价于高斯先验。
- 朴素贝叶斯分类器(L2 系列):\(p(\text{类别} \mid \text{文本}) \propto p(\text{文本} \mid \text{类别})\,p(\text{类别})\),假设词之间独立。
- 扩散模型的反向过程(L7):前向是给图加噪 \(p(x_t \mid x_{t-1})\),生成要的是反向 \(p(x_{t-1} \mid x_t)\),贝叶斯公式把两者联系起来。
四、链式法则与语言模型
1. 序列的联合概率
一个有 \(T\) 个 token 的序列 \(x = (x_1, x_2, \dots, x_T)\),它的联合概率 \(p(x_1, \dots, x_T)\) 可以用第三章的定义式反复拆:
\[p(x_1, x_2, \dots, x_T) = p(x_1)\, p(x_2 \mid x_1)\, p(x_3 \mid x_1, x_2) \cdots p(x_T \mid x_1, \dots, x_{T-1}) = \prod_{t=1}^{T} p(x_t \mid x_{<t})\]\(x_{<t}\) 是 \(x_1, \dots, x_{t-1}\) 的简写。这叫概率的链式法则(与第七篇微积分的链式法则同名、无关)。它是恒等式,不含任何假设:任何序列的概率都可以写成”第一个 token 的概率 × 给定第一个之后第二个的概率 × …”。
p("我 爱 北京") = p("我") × p("爱" | "我") × p("北京" | "我 爱")
2. 语言模型的定义
语言模型就是链式法则里每一项 \(p(x_t \mid x_{<t})\) 的参数化:一个带参数 \(\theta\) 的函数(Transformer),输入前文 \(x_{<t}\),输出词表上的一个分布 \(p_\theta(\cdot \mid x_{<t})\)——128256 个非负数,加起来是 1。
这就是”语言模型是一个条件分布”的全部含义。它决定了后面四件事:
- 训练目标是 next-token prediction(第五篇):让训练集里每个真实的下一个 token 在模型分布里的概率尽量大。
- 推理是逐个 token 生成:从 \(p_\theta(\cdot \mid \text{prompt})\) 里抽一个 token,接到后面,再算下一个分布,再抽……每一步只依赖前文。
- KV cache 能增量追加:算 \(p(x_{t+1} \mid x_{\le t})\) 时前文 \(x_{\le t}\) 与上一步的 \(x_{<t}\) 只多了一个 token,前面 token 的中间结果(key、value)不用重算——条件不变,缓存就有效。
- 评测依赖采样设置:同一个模型、不同的抽样方式(温度、top-p,第五篇)是不同的分布,比较模型时要固定它们。
3. “条件分布”里的条件是什么
在预训练里,条件是前文。在 SFT 里,条件是”用户的问题”,模型只对”回答”部分建模(第五篇的 loss mask)。在多模态里,条件里多了一张图的编码。在 RL 里,模型被叫成”策略” \(\pi_\theta(y \mid x)\)——换了名字,还是同一个条件分布:给定 prompt \(x\),回答 \(y\) 的概率。读后训练论文时把 \(\pi\) 读成 \(p\),一切都对得上。
五、期望与方差
1. 期望
随机变量的期望(均值)是所有取值按概率加权的平均:
\[\mathbb{E}[X] = \sum_x x\, p(x)\]掷骰子的期望是 \((1 + 2 + \dots + 6)/6 = 3.5\)。函数的期望 \(\mathbb{E}[f(X)] = \sum_x f(x)\,p(x)\)。
期望的线性性:\(\mathbb{E}[aX + bY] = a\,\mathbb{E}[X] + b\,\mathbb{E}[Y]\),不管 \(X, Y\) 是否独立都成立。这是所有”对期望求导”、”减 baseline 不改变期望”(第七篇)的基础。
2. 方差
方差度量取值围绕期望抖动的幅度:
\[\text{Var}[X] = \mathbb{E}\big[(X - \mathbb{E}[X])^2\big] = \mathbb{E}[X^2] - (\mathbb{E}[X])^2\]方差的平方根叫标准差 \(\sigma\),与 \(X\) 同单位。两条规则:
- 常数倍:\(\text{Var}[aX] = a^2\,\text{Var}[X]\)(标准差放大 \(a\) 倍,方差放大 \(a^2\) 倍);
- 独立变量之和:\(\text{Var}[X + Y] = \text{Var}[X] + \text{Var}[Y]\)。方差相加,标准差不相加——\(n\) 个独立、方差 \(\sigma^2\) 的量加起来,方差 \(n\sigma^2\),标准差 \(\sqrt{n}\,\sigma\)。
第二条是第七章三个推导的共同来源。
3. 从样本估计
实践中期望与方差都从样本估:\(n\) 个样本的平均 \(\bar x = \frac{1}{n}\sum_i x_i\) 估期望;样本方差 \(\frac{1}{n-1}\sum_i (x_i - \bar x)^2\) 估方差。样本平均本身也是随机的,它的方差是 \(\sigma^2 / n\)(独立和的方差相加、再除 \(n^2\)),标准差 \(\sigma/\sqrt{n}\)——样本越多估得越准,但只按 \(\sqrt{n}\) 变好:想把误差减半要四倍样本。这是第八篇置信区间的核心。
六、常见分布
| 分布 | 取值 | 参数 | 期望 · 方差 | 在哪里出现 |
|---|---|---|---|---|
| 伯努利 | 0 或 1 | 成功概率 \(p\) | \(p\) · \(p(1-p)\) | 一道题答对 / 答错;奖励模型”A 比 B 好”的概率;二分类 |
| 二项 | \(0, 1, \dots, n\) | \(n, p\) | \(np\) · \(np(1-p)\) | \(n\) 道题答对几道——\(n\) 个独立伯努利之和 |
| 类别(categorical) | \(1, \dots, V\) | \(p_1, \dots, p_V\),和为 1 | — | next-token 的分布;softmax 的输出;任何多分类 |
| 高斯(正态) | 实数 | 均值 \(\mu\)、方差 \(\sigma^2\) | \(\mu\) · \(\sigma^2\) | 权重初始化;梯度噪声;扩散模型的加噪;VAE 的隐变量;中心极限定理 |
| 均匀 | \([a, b]\) | \(a, b\) | \(\frac{a+b}{2}\) · \(\frac{(b-a)^2}{12}\) | 初始化的另一选择;随机采样的基础 |
高斯的密度函数
\[\mathcal{N}(x; \mu, \sigma^2) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp\!\left(-\frac{(x - \mu)^2}{2\sigma^2}\right)\]是一条以 \(\mu\) 为中心的钟形曲线,\(\sigma\) 越小越尖。\(\mu = 0, \sigma = 1\) 叫标准正态。大约 68% 的概率在 \(\mu \pm \sigma\) 内,95% 在 \(\mu \pm 1.96\sigma\) 内——后面这个数字第八篇反复用。
中心极限定理:大量独立随机变量的和(或平均),不管每个的分布是什么,都近似高斯。这是为什么高斯到处出现——评测的正确率(很多道题对错之和)、一层网络的输出(很多项之和)、梯度噪声(很多样本梯度之和)都近似高斯。
七、高斯的两条性质
1. 独立高斯之和仍是高斯,方差相加
\(X \sim \mathcal{N}(\mu_1, \sigma_1^2)\),\(Y \sim \mathcal{N}(\mu_2, \sigma_2^2)\) 独立,则 \(X + Y \sim \mathcal{N}(\mu_1 + \mu_2,\; \sigma_1^2 + \sigma_2^2)\)。两个用处:
初始化的方差传播(L3 第二篇展开)。一层网络 \(y = Wx\),\(y\) 的每个分量是 \(d\) 项 \(W_{ij} x_j\) 之和。若 \(W_{ij}\) 独立、方差 \(\sigma_W^2\),\(x_j\) 方差 \(\sigma_x^2\),则 \(\text{Var}[y_i] = d\,\sigma_W^2 \sigma_x^2\)。想让 \(y\) 的方差与 \(x\) 相同(信号经过很多层不放大不缩小),就要 \(\sigma_W^2 = 1/d\)——这是 Xavier / Kaiming 初始化”标准差取 \(1/\sqrt{d}\) 量级”的来源。Llama 用固定的 0.02,与 \(1/\sqrt{4096} = 0.0156\) 同量级。
扩散模型的 \(T\) 步加噪等价于一步(L7 展开)。每步加一个小高斯噪声,\(T\) 步之后总噪声是 \(T\) 个独立高斯之和——仍是高斯,方差是各步之和。所以不用真的一步步加,可以直接从原图一步跳到第 \(t\) 步的噪声图,训练效率高 \(T\) 倍。
2. 为什么 attention 除以 \(\sqrt{d_k}\)
attention 的 score 是 \(q^T k = \sum_{i=1}^{d_k} q_i k_i\),\(d_k\) 项之和。假设 \(q_i, k_i\) 各自独立、均值 0、方差 1,则每一项 \(q_i k_i\) 均值 0、方差 \(\mathbb{E}[q_i^2 k_i^2] = \mathbb{E}[q_i^2]\,\mathbb{E}[k_i^2] = 1\),\(d_k\) 项相加方差是 \(d_k\),标准差 \(\sqrt{d_k}\)。\(d_k = 128\) 时 score 的标准差约 11——过 softmax(第五篇)后概率几乎全压在最大的那一项上,其余接近零,梯度也接近零,训不动。除以 \(\sqrt{d_k}\) 把 score 的方差拉回 1,softmax 才能工作在”有区分度但不饱和”的区间。
q^T k = Σ_{i=1}^{d_k} q_i k_i d_k 项,每项方差 1,独立
⇒ Var[q^T k] = d_k,标准差 √d_k d_k = 128 → 标准差 ≈ 11.3
⇒ 除以 √d_k 后标准差 = 1 softmax 不饱和
这一行推导只用了”独立和的方差相加”。公式 3(\(\text{softmax}(QK^T / \sqrt{d_k})\,V\))里那个 \(\sqrt{d_k}\) 从此不用背。
八、自测
- 一个三面骰子,\(p(1) = 0.5, p(2) = 0.3, p(3) = ?\);期望是多少?
- 用第三章的表算 \(p(\text{下雨} \mid \text{带伞})\)——这就是贝叶斯公式的一次应用。
- 把 \(p(x_1, x_2, x_3, x_4)\) 用链式法则展开成四项。语言模型算的是其中哪些项?
- 十道独立的题、每题答对概率 0.8,答对题数的期望与标准差是多少?
- 若 \(q_i, k_i\) 的方差不是 1 而是 4(比如没做归一化),\(d_k = 128\) 的 score 标准差是多少?除以 \(\sqrt{d_k}\) 够不够?
答案要点:(1)0.2;\(1 \times 0.5 + 2 \times 0.3 + 3 \times 0.2 = 1.7\)。(2)\(0.24 / 0.30 = 0.8\)。(3)\(p(x_1)\,p(x_2 \mid x_1)\,p(x_3 \mid x_1, x_2)\,p(x_4 \mid x_1, x_2, x_3)\);全部四项——第一项的条件是空前文(或一个起始符)。(4)期望 8,方差 \(10 \times 0.8 \times 0.2 = 1.6\),标准差 1.26。(5)每项方差 16,和的方差 \(128 \times 16 = 2048\),标准差 45;除以 \(\sqrt{128}\) 后还剩 4——不够,这正是 QK-norm 之类”先归一化再算内积”的动机。
九、本文小结
- 分布是”每个取值的概率”,非负、和为 1;语言模型最后一层输出的就是词表上的一个分布。
- 联合 / 边缘 / 条件由一条定义式相连:\(p(a, b) = p(a \mid b)\,p(b)\);条件改变分布;独立即条件不改变分布。贝叶斯公式翻转条件方向,在 MAP(先验 = 正则化)、朴素贝叶斯、扩散反向过程里出现。
- 链式法则 \(p(x_{1:T}) = \prod_t p(x_t \mid x_{<t})\) 是恒等式;语言模型是每一项的参数化。它决定了 next-token 训练目标、逐 token 生成、KV cache 增量有效、评测依赖采样设置;RL 里的策略 \(\pi(y \mid x)\) 是同一个条件分布。
- 期望线性(不需要独立);方差:常数倍平方、独立和相加;样本均值的标准差是 \(\sigma/\sqrt{n}\)。
- 常见分布:伯努利 / 二项(评测对错)、类别(next-token)、高斯(初始化、噪声、扩散、中心极限定理)、均匀。高斯 95% 在 \(\mu \pm 1.96\sigma\)。
- “独立和的方差相加”一条性质推出三件事:初始化标准差 \(\sim 1/\sqrt{d}\)、扩散 \(T\) 步等价一步、attention 除以 \(\sqrt{d_k}\)(\(d_k\) 项内积的标准差是 \(\sqrt{d_k}\),不除就饱和)。
下一篇从”语言模型是条件分布”出发,三行推出训练日志里那个 loss:最大似然 → 负对数似然 → 交叉熵。
本文由 arganzheng 创作,采用 CC BY 4.0 许可协议。在保留原文作者、署名以及完整原文链接(https://arganzheng.life/probability-basics-language-model-as-conditional-distribution.html)的前提下,欢迎各种形式的转载、翻译或商业引用。
COMMENTS
评论存放在 GitHub Discussions, 用 GitHub 账号登录即可发表,支持 Markdown。 想针对正文某句话说?选中那段文字,点浮出的「评论」即可划线评论;觉得哪里写错了,发表时勾上「同时提交 Issue」。 有人回复你时 GitHub 会按你的通知设置发邮件,不用守在这里。