本文是《算法工程师的数学:读公式不卡壳的最小集》系列的第 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}\) 从此不用背。

八、自测

  1. 一个三面骰子,\(p(1) = 0.5, p(2) = 0.3, p(3) = ?\);期望是多少?
  2. 用第三章的表算 \(p(\text{下雨} \mid \text{带伞})\)——这就是贝叶斯公式的一次应用。
  3. 把 \(p(x_1, x_2, x_3, x_4)\) 用链式法则展开成四项。语言模型算的是其中哪些项?
  4. 十道独立的题、每题答对概率 0.8,答对题数的期望与标准差是多少?
  5. 若 \(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 会按你的通知设置发邮件,不用守在这里。

×