前置讲 P2 · 生成模型的概率工具箱 · A Probability Toolbox for Generative Models

Generative AI · 预备知识 2。个人学习讲义与配套实验,按主题整理并持续修订。

课程源码 ZIP ↓

个人整理的学习笔记,非官方讲义;课程来源与整理说明见课程介绍。配套示例未逐一运行验证。

本篇目录

这是一篇前置讲,不对应原课的某一次课。原课从第 6 讲开始进入图像生成:GAN(第 6 讲)、扩散模型(第 7、8 讲)、VAE(第 9 讲),之后是 RLHF 与 DPO(第 11、12 讲)、推理模型的强化学习(第 20 讲)。这些推导反复用到同一批概率工具:贝叶斯公式、高斯分布、最大似然、熵与 KL 散度、隐变量与证据下界(ELBO)、蒙特卡洛估计、重参数化与得分函数、马尔可夫链与朗之万动力学。原课的 slides 在第 8 讲列出了两篇变分推断的入门读物(Blei et al. 2018、Eisner 2011)和一篇 VAE 教程(Doersch 2016),说明课程期待学生对这些工具有基本的掌握。这篇把它们从直觉讲起,每一个都用代码采样或数值计算验证。 依据说明:本讲讲的是标准的概率与统计知识;与生成模型的联系参考了上面三篇读物,以及 DDPM(Ho et al., 2020)、REINFORCE(Williams, 1992)、Metropolis et al. (1953) / Hastings (1970)。例子(农场语言、天气链、八高斯圆环等)是本讲义自己设计的。 配套代码 Code:code/prereq2/(6 个脚本 + 1 个模块;只需要 numpy;每个脚本 1–2 秒) 预计阅读时间:4–5 小时(含运行代码和推导) 建议阅读时机:第 6 讲之前;第 7–9 讲时可以回来查。


0. 本讲导航 · How to read this lecture

0.1 为什么生成模型需要这些工具

第 1 讲说过,生成式 AI 就是概率建模:表示一个分布、从数据里学习它、从中采样。语言模型很幸运:链式法则让 p(句子)p(\text{句子}) 可以精确地写成一串条件概率的乘积,训练就是数数(n-gram)或最大似然(RNN、Transformer)。

图像就没这么幸运了。一张图有几十万个像素,它们之间的依赖关系极其复杂;更自然的想法是假设图像由一些看不见的原因(隐变量 zz:画的是什么、什么姿势、什么光照)生成。可是一旦引入隐变量,似然就变成了一个算不动的积分 p(x)=∫p(x∣z)p(z) dzp(x) = \int p(x \mid z) p(z)\, dz。于是:

  • GAN 干脆不算似然,换成对抗博弈——它背后的散度是什么?为什么它容易模式崩塌?(§3.5)
  • VAE 和扩散模型最大化一个下界(ELBO)——它是怎么来的、为什么能代替似然?(§4)
  • VAE 训练要对”从一个分布里采样”求梯度——重参数化技巧怎样让梯度穿过采样?(§5.3)
  • 扩散模型先给数据一点点加噪声、再学会一点点去噪——加噪为什么有闭式解?(§2.5)采样为什么像朗之万动力学?(§6.4)
  • RLHF 和训练推理模型要对”生成了哪些 token”求梯度,而 token 是离散的——为什么只能用得分函数估计,为什么要减去基线?(§5.4)

这篇前置讲的每一节,都对应后面某几讲的一个关键步骤。

0.2 学习目标 Learning goals

  1. 熟练使用联合、边缘、条件分布,求和法则、乘积法则和贝叶斯公式;区分独立和条件独立。
  2. 掌握高斯分布的几个封闭性质:线性变换、相加、条件化、相乘都还是高斯;会用重参数化 x=μ+σεx = \mu + \sigma\varepsilon 和 Cholesky 分解采样。
  3. 理解最大似然估计;会算熵、交叉熵和 KL 散度,知道 KL 非负、不对称,知道最大似然 = 最小化前向 KL,以及前向 KL 和反向 KL 拟合出来的分布为什么一个”覆盖”、一个”寻模”。
  4. 理解隐变量模型、边缘似然和后验;能推导 log⁡p(x)=ELBO(q)+KL(q∥p(z∣x))\log p(x) = \mathrm{ELBO}(q) + \mathrm{KL}(q \Vert p(z \mid x)),并用它解释 EM 算法为什么单调。
  5. 会用蒙特卡洛估计期望,知道误差按 1/N1/\sqrt{N} 下降;会用重要性采样;能写出得分函数估计和重参数化估计,说出它们的适用条件和方差差别,知道基线为什么不改变期望。
  6. 理解马尔可夫链的平稳分布与收敛;能解释 Metropolis–Hastings 为什么正确、步长怎样影响它;能写出朗之万动力学,并说明噪声项为什么必不可少。

0.3 本讲地图 Map

§1  概率的基本语言:联合 / 边缘 / 条件、贝叶斯、独立与条件独立、基础比率   ← 代码 01
§2  高斯分布:重参数化、线性变换、相加(扩散的前向过程)、条件化、相乘      ← 代码 02
§3  最大似然、熵与 KL:MLE、交叉熵、KL 的性质、前向 KL vs 反向 KL           ← 代码 03
§4  隐变量与 ELBO:边缘似然、后验、ELBO 恒等式、EM、变分推断                ← 代码 04
§5  蒙特卡洛与梯度估计:1/√N、重要性采样、得分函数、重参数化、基线          ← 代码 05
§6  马尔可夫链与采样:平稳分布、Metropolis–Hastings、朗之万动力学            ← 代码 06
§7  工具箱在后面哪里用   §8 小结   §9 常见误区   §10 练习   §11 延伸阅读   §12 下一篇

0.4 先修与记号

需要高中水平的概率(事件、概率、期望)和一点微积分(求导、积分的含义)。第 1 讲的内容有帮助但不是必需的。

记号意思
p(x)p(x)离散变量的概率(pmf)或连续变量的概率密度(pdf);从上下文区分
x∼px \sim pxx 是从分布 pp 抽出的样本
Ex∼p[f(x)]\mathbb{E}_{x \sim p}[f(x)]期望:离散时 ∑xp(x)f(x)\sum_x p(x) f(x),连续时 ∫p(x)f(x) dx\int p(x) f(x)\, dx
N(μ,σ2)\mathcal{N}(\mu, \sigma^2)均值 μ\mu、方差 σ2\sigma^2 的高斯分布;多维时 N(μ,Σ)\mathcal{N}(\mu, \Sigma)
log⁡\log自然对数(单位 nat);以 2 为底时写 log⁡2\log_2(单位 bit)
KL(p∥q)\mathrm{KL}(p \Vert q)KL 散度,读作”p 相对于 q 的 KL”
θ\theta,ϕ\phi模型参数;变分分布的参数

1. 概率的基本语言 · The language of probability

1.1 联合、边缘、条件

用第 1 讲农场语言的两个随机变量做例子:句子的主语动物 AA(8 种),和句末的时间/地点短语 TT(night、morning、day、barn、field)。生成器先均匀地选一种动物,再按这种动物的习性选时间短语,所以我们确切知道它们的联合分布 p(a,t)=p(a) p(t∣a)p(a, t) = p(a)\, p(t \mid a)。01 第 1 部分把它和 2 万句训练语料里的频率并排列出(节选):

动物 \ 时间nightmorningdaybarnfield边缘 p(a)p(a)
bat0.091 (0.094)0.011 (0.012)00.023 (0.024)00.125
cow00.025 (0.024)0.037 (0.038)00.062 (0.064)0.125
owl0.113 (0.114)000.013 (0.011)00.125
…
边缘 p(t)p(t)0.360 (0.364)0.154 (0.157)0.149 (0.144)0.132 (0.132)0.205 (0.203)1

(括号里是语料频率;真实分布和语料频率的总变差距离 12∑∣p−p^∣=0.0134\frac{1}{2}\sum |p - \hat{p}| = 0.0134。)

三个基本概念:

  • 联合分布 p(a,t)p(a, t):表格里的每一格,所有格加起来等于 1。
  • 边缘分布:把不关心的变量”加掉”。p(t)=∑ap(a,t)p(t) = \sum_a p(a, t) 是每一列的和,p(a)=∑tp(a,t)p(a) = \sum_t p(a, t) 是每一行的和。这叫求和法则(sum rule)或边缘化(marginalization);连续变量时求和换成积分。
  • 条件分布:p(t∣a)=p(a,t)/p(a)p(t \mid a) = p(a, t) / p(a)——固定一行,再把这一行归一化。反过来就是乘积法则(product rule)p(a,t)=p(a) p(t∣a)p(a, t) = p(a)\, p(t \mid a);用很多次就是第 1 讲的链式法则。

整门课的生成模型都是这两条法则的反复应用:乘积法则用来定义模型(先抽这个、再抽那个),求和法则用来算边缘似然(把看不见的变量加掉)。

1.2 贝叶斯公式:反过来推理

模型通常告诉我们”原因 → 结果”的方向:p(t∣a)p(t \mid a)(某种动物在什么时候出现)。但我们常常需要反过来:“听到 at night,主语最可能是谁?“把乘积法则从两个方向各写一遍,p(a,t)=p(a) p(t∣a)=p(t) p(a∣t)p(a, t) = p(a)\,p(t \mid a) = p(t)\,p(a \mid t),就得到贝叶斯公式:

p(a∣t)⏟后验=p(t∣a)⏞似然 p(a)⏞先验p(t)⏟证据,p(t)=∑a′p(t∣a′) p(a′)\underbrace{p(a \mid t)}_{\text{后验}} = \frac{\overbrace{p(t \mid a)}^{\text{似然}}\ \overbrace{p(a)}^{\text{先验}}}{\underbrace{p(t)}_{\text{证据}}}, \qquad p(t) = \sum_{a'} p(t \mid a')\, p(a')

01 第 2 部分:p(night)=0.3597p(\text{night}) = 0.3597;

动物先验似然 p(night∣a)p(\text{night} \mid a)后验 p(a∣night)p(a \mid \text{night})
owl0.1250.9000.313
fox0.1250.7500.261
bat0.1250.7270.253
cat0.1250.5000.174
cow、dog、hen、horse0.12500

分母 p(t)p(t)(“证据”,evidence)只负责把后验归一化,它要用求和法则把所有可能的原因都加一遍。这一项正是生成模型的麻烦所在:动物只有 8 种,加一遍很容易;但如果”原因”是一个几百维的连续向量,这个求和就变成了算不动的高维积分(§4)。生成模型里的”推断”(inference),指的就是从结果反推原因的后验 p(z∣x)p(z \mid x)。

1.3 独立、互信息与条件独立

两个变量独立,当且仅当 p(x,y)=p(x) p(y)p(x, y) = p(x)\, p(y)——知道一个,对另一个毫无帮助。怎样度量”有多不独立”?用互信息:

I(X;Y)=KL(p(x,y) ∥ p(x) p(y))=∑x,yp(x,y)log⁡p(x,y)p(x) p(y) ≥0I(X; Y) = \mathrm{KL}\big(p(x, y) \,\Vert\, p(x)\,p(y)\big) = \sum_{x,y} p(x,y) \log \frac{p(x,y)}{p(x)\,p(y)} \ \ge 0

(KL 散度见 §3.3。)它等于 0 当且仅当独立,含义是”知道 YY 之后,XX 的不确定性平均减少了多少”。

01 第 3 部分有一个值得细想的结果:

量互信息(bit)
I(动物;时间)I(\text{动物}; \text{时间})1.0374
I(动词;时间)I(\text{动词}; \text{时间})0.0316
I(动词;时间∣动物)I(\text{动词}; \text{时间} \mid \text{动物})0.0000

在生成过程里,动词和时间短语互不影响——它们都只由主语决定。但它们并不独立:听到 at night,你会猜主语是猫头鹰、狐狸或蝙蝠,于是动词 see 的概率从 0.144 升到 0.195。一旦知道了主语,两者就独立了:p(v,t∣a)=p(v∣a) p(t∣a)p(v, t \mid a) = p(v \mid a)\, p(t \mid a)。这叫条件独立(conditional independence),主语是它们的共同原因。

两条教训:(1) 统计相关不等于有直接的因果联系,可能只是共同原因造成的;(2) 条件独立是让概率模型可以计算的关键结构。第 6 讲的概率图模型就是用一张图把”谁依赖谁”画出来:A→VA \to V、A→TA \to T,从图上就能读出 VV 和 TT 在给定 AA 时条件独立。

1.4 基础比率

01 第 4 部分:一个 AI 文本检测器,AI 写的文本 95% 会被标记(真阳性率),人写的文本 5% 会被误标记(假阳性率)。被标记的文本真是 AI 写的概率是多少?由贝叶斯公式,答案取决于 AI 文本本来占多少(先验,也叫基础比率 base rate):

AI 文本的比例p(AI∣被标记)p(\text{AI} \mid \text{被标记})
50%0.950
10%0.679
1%0.161

AI 文本只占 1% 时,被标记的文本里 84% 其实是人写的。只看”检测器准确率 95%“而忽略先验,是最常见的概率错误之一(“基础比率谬误”)。第 22 讲讨论水印和 AI 文本检测时,这个问题会再次出现。


2. 高斯分布 · The Gaussian

2.1 一维高斯、标准化与重参数化

一维高斯(正态)分布 N(μ,σ2)\mathcal{N}(\mu, \sigma^2) 的密度和对数密度是

p(x)=1σ2πexp⁡(−(x−μ)22σ2),log⁡p(x)=−12log⁡(2π)−log⁡σ−(x−μ)22σ2p(x) = \frac{1}{\sigma\sqrt{2\pi}} \exp\Big(-\frac{(x-\mu)^2}{2\sigma^2}\Big), \qquad \log p(x) = -\tfrac{1}{2}\log(2\pi) - \log\sigma - \frac{(x-\mu)^2}{2\sigma^2}

对数密度是 xx 的二次函数,所以尾部衰减极快:约 68% / 95% / 99.7% 的概率落在 1σ / 2σ / 3σ 之内(02 第 1 部分用 20 万个样本验证:0.6837 / 0.9544 / 0.9969,精确值 0.6827 / 0.9545 / 0.9973)。代码里总是算对数密度:密度本身可能小到下溢(前置讲 P1 §2.5),而且乘积变成求和更方便。

高斯分布有一个看似平凡、却极其重要的性质:

ε∼N(0,1)⟺x=μ+σε∼N(μ,σ2)\varepsilon \sim \mathcal{N}(0, 1) \quad \Longleftrightarrow \quad x = \mu + \sigma \varepsilon \sim \mathcal{N}(\mu, \sigma^2)

从右往左读是标准化 ε=(x−μ)/σ\varepsilon = (x - \mu)/\sigma;从左往右读是重参数化(reparameterization):把”从 N(μ,σ2)\mathcal{N}(\mu, \sigma^2) 采样”变成”从一个和参数无关的标准正态采样,再做一个关于参数可导的变换”。§5.3 会看到,这个改写让梯度可以穿过采样传回 μ\mu 和 σ\sigma——它是 VAE 能够训练的关键(第 9 讲)。

2.2 多维高斯、协方差与 Cholesky 采样

dd 维高斯 N(μ,Σ)\mathcal{N}(\mu, \Sigma) 由均值向量 μ\mu 和协方差矩阵 Σ\Sigma(对称正定)决定:

log⁡p(x)=−d2log⁡(2π)−12log⁡det⁡Σ−12(x−μ)⊤Σ−1(x−μ)\log p(x) = -\frac{d}{2}\log(2\pi) - \frac{1}{2}\log\det\Sigma - \frac{1}{2}(x-\mu)^\top \Sigma^{-1}(x-\mu)

Σij=Cov(xi,xj)\Sigma_{ij} = \mathrm{Cov}(x_i, x_j);对角线是各维的方差,非对角线描述维度之间的相关。

线性变换规则:若 x∼N(μ,Σ)x \sim \mathcal{N}(\mu, \Sigma),则 y=Ax+b∼N(Aμ+b, AΣA⊤)y = Ax + b \sim \mathcal{N}(A\mu + b,\ A\Sigma A^\top)。02 第 2 部分用 20 万个样本验证:例如 A=[[1,1],[0,2]]A = [[1,1],[0,2]] 时,公式给出的协方差 [[5.4, 4.4], [4.4, 4.0]],样本给出 [[5.403, 4.402], [4.402, 4.002]]。

怎样采样一个相关的高斯? 把 Σ\Sigma 做 Cholesky 分解 Σ=LL⊤\Sigma = LL^\top(LL 是下三角矩阵),然后 x=μ+Lεx = \mu + L\varepsilon,ε∼N(0,I)\varepsilon \sim \mathcal{N}(0, I)。由线性变换规则,Cov(Lε)=LIL⊤=Σ\mathrm{Cov}(L\varepsilon) = L I L^\top = \Sigma。同样的分解也让对数密度更好算:log⁡det⁡Σ=2∑ilog⁡Lii\log\det\Sigma = 2\sum_i \log L_{ii},马氏距离 (x−μ)⊤Σ−1(x−μ)=∥L−1(x−μ)∥2(x-\mu)^\top\Sigma^{-1}(x-\mu) = \lVert L^{-1}(x-\mu)\rVert^2——比直接求逆更快、更稳定(prob_lab.mvn_logpdf;和直接求逆的结果一致到 10−610^{-6})。

2.3 相加:方差相加

两个独立的高斯相加还是高斯,均值相加、方差相加:

x∼N(μ1,σ12), y∼N(μ2,σ22) 独立 ⇒ x+y∼N(μ1+μ2, σ12+σ22)x \sim \mathcal{N}(\mu_1, \sigma_1^2),\ y \sim \mathcal{N}(\mu_2, \sigma_2^2) \text{ 独立} \ \Rightarrow\ x + y \sim \mathcal{N}(\mu_1 + \mu_2,\ \sigma_1^2 + \sigma_2^2)

注意是方差相加,不是标准差相加:两个标准差为 1 的独立噪声相加,标准差是 2\sqrt{2} 而不是 2。(更一般地,任何独立随机变量相加方差都相加;“还是高斯”是高斯特有的。)

2.4 条件化:还是高斯

二维高斯 (x1,x2)(x_1, x_2),标准差 σ1,σ2\sigma_1, \sigma_2,相关系数 ρ\rho。给定 x2=ax_2 = a 时,x1x_1 的条件分布还是高斯:

x1∣x2=a ∼ N(μ1+ρσ1σ2(a−μ2),  σ12(1−ρ2))x_1 \mid x_2 = a \ \sim\ \mathcal{N}\Big(\mu_1 + \rho\frac{\sigma_1}{\sigma_2}(a - \mu_2),\ \ \sigma_1^2(1 - \rho^2)\Big)

02 第 4 部分(σ1=1\sigma_1 = 1、σ2=2\sigma_2 = 2、ρ=0.8\rho = 0.8):取 x2≈ax_2 \approx a 的一窄条样本,条件均值随 aa 线性移动(a=3a = 3 时公式 1.200、样本 1.194),条件标准差是 0.600,比无条件的 1 小,而且和 aa 无关。知道了一个相关的变量,不确定性就减少了——和 §1.2”听到 at night 就更确定主语是谁”是同一件事。

2.5 扩散模型的前向过程:加 1000 次小噪声

把 §2.3 的”方差相加”反复用 1000 次,就得到了扩散模型(第 7 讲)的前向加噪过程。DDPM(Ho et al., 2020)的做法是:

xt=1−βt xt−1+βt εt,εt∼N(0,1),t=1,…,Tx_t = \sqrt{1 - \beta_t}\, x_{t-1} + \sqrt{\beta_t}\, \varepsilon_t, \qquad \varepsilon_t \sim \mathcal{N}(0, 1), \quad t = 1, \dots, T

βt\beta_t 从 10−410^{-4} 线性增加到 0.02,T=1000T = 1000。每一步把信号缩小一点、再加一点独立噪声。两个关键性质:

  1. 方差的不动点是 1。 Var(xt)=(1−βt)Var(xt−1)+βt\mathrm{Var}(x_t) = (1 - \beta_t)\mathrm{Var}(x_{t-1}) + \beta_t。如果数据已经标准化成单位方差,每一步之后方差都还是 1(“保方差”,variance preserving);否则方差会逐渐被拉向 1。
  2. 任意一步都有闭式解。 把递推展开、用”独立高斯相加方差相加”合并所有噪声项,令 αˉt=∏s=1t(1−βs)\bar{\alpha}_t = \prod_{s=1}^{t}(1 - \beta_s):
q(xt∣x0)=N(αˉt x0, (1−αˉt)),即xt=αˉt x0+1−αˉt εq(x_t \mid x_0) = \mathcal{N}\big(\sqrt{\bar\alpha_t}\, x_0,\ (1 - \bar\alpha_t)\big), \qquad \text{即}\quad x_t = \sqrt{\bar\alpha_t}\, x_0 + \sqrt{1 - \bar\alpha_t}\, \varepsilon

02 第 3 部分从一个很不像高斯的数据分布出发(±2 两个尖峰):

步数 tαˉt\sqrt{\bar\alpha_t}逐步模拟的标准差闭式解一步到位的标准差与 x0x_0 的相关系数∣xt∣>1\lvert x_t \rvert > 1 的比例
100.99912.0012.0011.0001.000
1000.94711.9241.9230.9860.996
3000.62961.4801.4820.8520.632
10000.00640.9981.0030.0120.316

(标准正态里 ∣x∣>1\lvert x \rvert > 1 的比例是 0.317。)逐步模拟和闭式解一致;1000 步之后,两个尖峰被完全抹平成了 N(0,1)\mathcal{N}(0, 1),和 x0x_0 几乎不再相关。训练扩散模型时,正是用这个闭式解一步把任意一张图加噪到任意一步。扩散模型要学的,是把这个过程倒过来:从纯噪声出发,一步步去噪,回到数据分布。

2.6 相乘:精度加权平均

两个高斯密度相乘(再归一化)还是高斯:

N(x;m1,s12)⋅N(x;m2,s22) ∝ N(x; m1/s12+m2/s221/s12+1/s22,  11/s12+1/s22)\mathcal{N}(x; m_1, s_1^2)\cdot\mathcal{N}(x; m_2, s_2^2) \ \propto\ \mathcal{N}\Big(x;\ \frac{m_1/s_1^2 + m_2/s_2^2}{1/s_1^2 + 1/s_2^2},\ \ \frac{1}{1/s_1^2 + 1/s_2^2}\Big)

精度(precision,方差的倒数)相加,均值是按精度加权的平均。这是贝叶斯更新的样子:先验 N(0,22)\mathcal{N}(0, 2^2)(不太确定)乘以一次观测给出的似然 N(3,12)\mathcal{N}(3, 1^2)(比较确定),后验是 N(2.4,0.8942)\mathcal{N}(2.4, 0.894^2)——更靠近更确定的一方,而且比两者都更确定(02 第 5 部分,数值积分与公式一致到小数点后四位)。第 8 讲推导扩散模型的后验 q(xt−1∣xt,x0)q(x_{t-1} \mid x_t, x_0) 时,就是把两个高斯这样相乘。


3. 最大似然、熵与 KL 散度 · MLE, entropy and KL

3.1 最大似然估计

给定数据 x1,…,xNx_1, \dots, x_N(假设独立同分布)和一个带参数的模型 pθp_\theta,最大似然估计(MLE)选择让数据出现的概率最大的参数:

θ^=arg⁡max⁡θ∏i=1Npθ(xi)=arg⁡max⁡θ1N∑i=1Nlog⁡pθ(xi)\hat\theta = \arg\max_\theta \prod_{i=1}^N p_\theta(x_i) = \arg\max_\theta \frac{1}{N}\sum_{i=1}^N \log p_\theta(x_i)

(取对数把乘积变成求和,除以 NN 不改变最优点。)两个经典结果(03 第 1 部分):

  • 硬币:pθ(正面)=θp_\theta(\text{正面}) = \theta,NN 次里 kk 次正面。对数似然 klog⁡θ+(N−k)log⁡(1−θ)k\log\theta + (N-k)\log(1-\theta) 在 θ=k/N\theta = k/N 处最大——频率。抛 50 次出现 13 次正面,MLE 是 0.260(真实值 0.3)。第 1 讲 n-gram 的”数数”就是这个结论。
  • 高斯:MLE 是样本均值 xˉ\bar{x} 和样本方差 1N∑(xi−xˉ)2\frac{1}{N}\sum(x_i - \bar{x})^2。后者有偏:N=20N = 20 时重复 2 万次,平均 3.787,而真实方差是 4(理论期望 σ2(N−1)/N=3.8\sigma^2 (N-1)/N = 3.8)。原因是均值也是从同一批数据估出来的,数据离自己的均值总比离真实均值更近;除以 N−1N-1 的版本是无偏的(平均 3.987)。

MLE 不保证无偏,但在样本多时有很好的性质(一致、渐近有效)。更重要的是,它和信息论里的量有一个漂亮的联系(§3.4)。

3.2 熵与交叉熵

信息量(也叫惊奇度,surprisal):一个概率为 pp 的事件发生时,带来 −log⁡p-\log p 的”意外”。确定的事(p=1p = 1)毫不意外;罕见的事很意外。

熵是平均惊奇度:

H(p)=−∑xp(x)log⁡p(x)=Ex∼p[−log⁡p(x)]H(p) = -\sum_x p(x)\log p(x) = \mathbb{E}_{x \sim p}[-\log p(x)]

03 第 2 部分:公平硬币 1 bit、偏硬币 [0.9, 0.1] 0.469 bit、8 面骰子 3 bit、确定的结果 0 bit。越不确定,熵越大;KK 个结果时均匀分布的熵最大(log⁡K\log K)。熵也是”平均要用多少比特来编码一个结果”的下限(香农的信源编码定理)。

交叉熵是”数据来自 pp、却按 qq 去预测(或编码)“时的平均惊奇度:

H(p,q)=−∑xp(x)log⁡q(x)=Ex∼p[−log⁡q(x)]H(p, q) = -\sum_x p(x)\log q(x) = \mathbb{E}_{x \sim p}[-\log q(x)]

训练分类器和语言模型时用的”交叉熵损失”就是它:pp 是数据(真实标签),qq 是模型的预测。第 1 讲的困惑度就是交叉熵的指数。

3.3 KL 散度

KL(p ∥ q)=∑xp(x)log⁡p(x)q(x)=H(p,q)−H(p)\mathrm{KL}(p \,\Vert\, q) = \sum_x p(x) \log\frac{p(x)}{q(x)} = H(p, q) - H(p)

它是”用 qq 代替真实的 pp 时,平均每个样本多付出的惊奇度”。三个性质:

  1. 非负(Gibbs 不等式),等于 0 当且仅当 p=qp = q。证明只用 Jensen 不等式(对凹函数 log⁡\log,E[log⁡Y]≤log⁡E[Y]\mathbb{E}[\log Y] \le \log \mathbb{E}[Y]):
−KL(p∥q)=Ep[log⁡q(x)p(x)]≤log⁡Ep[q(x)p(x)]=log⁡∑xq(x)=log⁡1=0-\mathrm{KL}(p \Vert q) = \mathbb{E}_{p}\Big[\log\frac{q(x)}{p(x)}\Big] \le \log \mathbb{E}_{p}\Big[\frac{q(x)}{p(x)}\Big] = \log\sum_x q(x) = \log 1 = 0

03 随机抽了 1 万对 5 类分布,KL 的最小值是 0.0051,从未为负。 2. 不对称:p=[0.9,0.1]p = [0.9, 0.1]、q=[0.5,0.5]q = [0.5, 0.5] 时 KL(p∥q)=0.531\mathrm{KL}(p \Vert q) = 0.531 bit,KL(q∥p)=0.737\mathrm{KL}(q \Vert p) = 0.737 bit。所以它不是距离(叫”散度”)。 3. 零概率会让它爆炸:pp 认为可能、qq 却分配 0 概率的事件,会让 KL(p∥q)=∞\mathrm{KL}(p \Vert q) = \infty(03:KL([0.5,0.5]∥[1,0])=∞\mathrm{KL}([0.5, 0.5] \Vert [1, 0]) = \infty)——这就是第 1 讲里不平滑的 n-gram 困惑度无穷大的原因。

两个高斯之间的 KL 有闭式解(练习 3 让你推导):

KL(N(μ1,s12) ∥ N(μ2,s22))=log⁡s2s1+s12+(μ1−μ2)22s22−12\mathrm{KL}\big(\mathcal{N}(\mu_1, s_1^2) \,\Vert\, \mathcal{N}(\mu_2, s_2^2)\big) = \log\frac{s_2}{s_1} + \frac{s_1^2 + (\mu_1 - \mu_2)^2}{2 s_2^2} - \frac{1}{2}

03 第 4 部分把它和蒙特卡洛估计 Ex∼p[log⁡p(x)−log⁡q(x)]\mathbb{E}_{x \sim p}[\log p(x) - \log q(x)](20 万个样本)对照,例如 KL(N(0,1)∥N(1,1))=0.5000\mathrm{KL}(\mathcal{N}(0,1) \Vert \mathcal{N}(1,1)) = 0.5000(蒙特卡洛 0.5027)。不对称性也很明显:KL(N(0,1)∥N(0,22))=0.318\mathrm{KL}(\mathcal{N}(0,1) \Vert \mathcal{N}(0, 2^2)) = 0.318,反过来是 0.807——用窄分布去近似宽分布,漏掉了尾部,代价大得多。KL(N(μ,σ2)∥N(0,1))\mathrm{KL}(\mathcal{N}(\mu, \sigma^2) \Vert \mathcal{N}(0, 1)) 正是 VAE 损失里的那一项(第 9 讲)。

3.4 最大似然 = 最小化交叉熵 = 最小化 KL(p_data ‖ p_θ)

把 MLE 的目标改写一下。数据来自(我们看不见的)真实分布 pdatap_{\text{data}},样本平均是期望的估计:

1N∑ilog⁡pθ(xi) ≈ Ex∼pdata[log⁡pθ(x)]=−H(pdata,pθ)=−H(pdata)−KL(pdata∥pθ)\frac{1}{N}\sum_{i} \log p_\theta(x_i) \ \approx\ \mathbb{E}_{x \sim p_{\text{data}}}[\log p_\theta(x)] = -H(p_{\text{data}}, p_\theta) = -H(p_{\text{data}}) - \mathrm{KL}(p_{\text{data}} \Vert p_\theta)

H(pdata)H(p_{\text{data}}) 和模型无关,所以

最大化似然  ⟺  最小化交叉熵  ⟺  最小化 KL(pdata ∥ pθ)\textbf{最大化似然} \iff \textbf{最小化交叉熵} \iff \textbf{最小化 } \mathrm{KL}(p_{\text{data}} \,\Vert\, p_\theta)

03 第 3 部分验证:2000 个样本来自 [5,3,2,1,1]/12[5,3,2,1,1]/12,模型 qθ=softmax(θ)q_\theta = \mathrm{softmax}(\theta) 从均匀分布出发,用梯度下降(梯度 =q−p^= q - \hat{p},第 1 讲练习 4)最小化平均负对数似然。每一步都有 平均 NLL = H(p^)+KL(p^∥q)H(\hat p) + \mathrm{KL}(\hat p \Vert q);50 步后 KL 降到 0,qq 等于经验分布,NLL 降到它的下限 H(p^)=1.41834H(\hat p) = 1.41834。这就是第 1 讲说的”困惑度有理论下界”:下界是数据自身的熵。

注意 KL 的方向:期望是对数据取的,所以 MLE 最小化的是前向 KL KL(pdata∥pθ)\mathrm{KL}(p_{\text{data}} \Vert p_\theta)。方向重要吗?非常重要。

3.5 前向 KL vs 反向 KL:覆盖 vs 寻模

03 第 5 部分:目标 p=12N(−2,0.52)+12N(2,0.52)p = \frac{1}{2}\mathcal{N}(-2, 0.5^2) + \frac{1}{2}\mathcal{N}(2, 0.5^2) 是双峰的,而我们只允许用一个高斯 q=N(μ,σ2)q = \mathcal{N}(\mu, \sigma^2) 去拟合它。在网格上搜索最优的 (μ,σ)(\mu, \sigma):

目标最优 μ最优 σq 在山谷 ∣x∣<1\lvert x\rvert < 1 的概率p 落在 q 的 ±2σ 内
最小化 KL(p∥q)\mathrm{KL}(p \Vert q)(前向,= MLE)0.002.060.3721.000
最小化 KL(q∥p)\mathrm{KL}(q \Vert p)(反向)+2.000.500.0230.477

(pp 自己在山谷里只有 0.0225 的概率;pp 的标准差是 0.25+4=2.06\sqrt{0.25 + 4} = 2.06。)

  • 前向 KL(最大似然)选了 μ=0\mu = 0、σ=2.06\sigma = 2.06:正好是 pp 的均值和标准差(矩匹配)。它覆盖了两个峰(mode-covering),代价是在 pp 几乎为 0 的山谷里放了 37% 的概率——从 qq 采样会得到大量”不像真数据”的点。
  • 反向 KL 选了 μ=2\mu = 2、σ=0.5\sigma = 0.5:只盯住一个峰(mode-seeking),把它拟合得完美,却完全无视另一个峰。(它的 KL 最小值是 0.693 = ln⁡2\ln 2:qq 和右峰完全重合,只差了”右峰只占一半质量”带来的 log⁡2\log 2。)

为什么? 看被积函数在哪里大:

  • KL(p∥q)=Ep[log⁡p−log⁡q]\mathrm{KL}(p \Vert q) = \mathbb{E}_{p}[\log p - \log q] 在 pp 的样本上计算。凡是 p>0p > 0 而 q≈0q \approx 0 的地方,−log⁡q-\log q 巨大——所以 qq 必须在 pp 有质量的每个地方都有质量,宁可铺得很宽。
  • KL(q∥p)=Eq[log⁡q−log⁡p]\mathrm{KL}(q \Vert p) = \mathbb{E}_{q}[\log q - \log p] 在 qq 的样本上计算。凡是 q>0q > 0 而 p≈0p \approx 0 的地方,−log⁡p-\log p 巨大——所以 qq 绝不能把质量放到 pp 没有的地方(比如山谷),宁可缩在一个峰里。

这是理解生成模型的一把钥匙:

  • 最大似然训练的模型(自回归语言模型、VAE、扩散模型的 ELBO)倾向于覆盖所有模式:不会漏掉数据的任何一部分,但当模型容量不够时,会把概率”抹”到模式之间,样本显得模糊或出现奇怪的组合(第 9 讲 VAE 的模糊图像)。
  • GAN 的目标更接近反向 KL / JS 散度:样本清晰,但容易模式崩塌——只生成数据的一部分(第 6 讲)。
  • 第 11–12 讲 RLHF 里的 KL 约束 KL(πθ∥πref)\mathrm{KL}(\pi_\theta \Vert \pi_{\text{ref}}) 是反向的:策略可以集中到参考模型的某些高概率区域,但不能跑到参考模型认为不可能的地方。

4. 隐变量与证据下界 · Latent variables and the ELBO

4.1 隐变量模型

隐变量模型假设数据 xx 由一个看不见的变量 zz 生成:先 z∼p(z)z \sim p(z),再 x∼p(x∣z)x \sim p(x \mid z)。最简单的例子是高斯混合模型(GMM):zz 是”属于哪一类”,x∣z=k∼N(μk,σk2)x \mid z = k \sim \mathcal{N}(\mu_k, \sigma_k^2)。04 用一个三分量的例子:

π=[0.5,0.3,0.2],μ=[−3,0,4],σ=[1,0.5,1.5]\pi = [0.5, 0.3, 0.2],\quad \mu = [-3, 0, 4],\quad \sigma = [1, 0.5, 1.5]

我们只看得到 xx。两个基本量:

  • 边缘似然(marginal likelihood)p(x)=∑zp(z) p(x∣z)p(x) = \sum_z p(z)\, p(x \mid z):把看不见的 zz 加掉(§1.1 的求和法则)。
  • 后验 p(z∣x)=p(x,z)/p(x)p(z \mid x) = p(x, z)/p(x):看到 xx 之后,它来自哪个分量(§1.2 的贝叶斯公式)。EM 里叫”责任”(responsibility)。

04 第 1 部分:x=0x = 0 时后验几乎全部在 z=1z = 1(0.985);x=−1.0x = -1.0 时 z=0z = 0 和 z=1z = 1 的后验分别是 0.453 和 0.544——此时”它属于哪一类”本身就不确定。即使用真实参数,按后验猜 zz 也只能猜对 97.3%。

在 GMM 里 zz 只有 3 个取值,求和很容易。但在图像生成模型里,zz 是几百维的连续向量,p(x∣z)p(x \mid z) 是一个神经网络,p(x)=∫p(z) p(x∣z) dzp(x) = \int p(z)\, p(x \mid z)\, dz 算不出来——既不能直接最大化似然,也不能精确算后验。下面的 ELBO 就是为此而生的。

4.2 Jensen 不等式

对凹函数 ff(例如 log⁡\log),f(E[Y])≥E[f(Y)]f(\mathbb{E}[Y]) \ge \mathbb{E}[f(Y)]:“先平均再取对数”不小于”先取对数再平均”。直觉:log⁡\log 的曲线向下弯,任意两点连线都在曲线下方。§3.3 已经用它证明了 KL 非负。

4.3 ELBO:两种推导

推导一(Jensen):引入任意一个关于 zz 的分布 q(z)q(z)(要求在 p(x,z)>0p(x, z) > 0 的地方 q>0q > 0),

log⁡p(x)=log⁡∑zp(x,z)=log⁡∑zq(z)p(x,z)q(z)=log⁡Eq[p(x,z)q(z)] ≥ Eq[log⁡p(x,z)q(z)]≡ELBO(q)\log p(x) = \log \sum_z p(x, z) = \log \sum_z q(z)\frac{p(x,z)}{q(z)} = \log \mathbb{E}_{q}\Big[\frac{p(x,z)}{q(z)}\Big] \ \ge\ \mathbb{E}_{q}\Big[\log\frac{p(x,z)}{q(z)}\Big] \equiv \mathrm{ELBO}(q)

它叫证据下界(Evidence Lower BOund):p(x)p(x) 是”证据”(§1.2 贝叶斯公式的分母),ELBO 是它的对数的下界。

推导二(恒等式):Jensen 只告诉我们”≥“,差多少?对任意 qq,

log⁡p(x)=Eq[log⁡p(x)]=Eq[log⁡p(x,z)p(z∣x)]=Eq[log⁡p(x,z)q(z)]+Eq[log⁡q(z)p(z∣x)]=ELBO(q)+KL(q(z) ∥ p(z∣x))\begin{aligned} \log p(x) &= \mathbb{E}_{q}[\log p(x)] = \mathbb{E}_{q}\Big[\log\frac{p(x,z)}{p(z \mid x)}\Big] = \mathbb{E}_{q}\Big[\log\frac{p(x,z)}{q(z)}\Big] + \mathbb{E}_{q}\Big[\log\frac{q(z)}{p(z \mid x)}\Big] \\ &= \mathrm{ELBO}(q) + \mathrm{KL}\big(q(z) \,\Vert\, p(z \mid x)\big) \end{aligned}

第一个等号因为 log⁡p(x)\log p(x) 不依赖 zz;第二个等号就是贝叶斯公式 p(z∣x)=p(x,z)/p(x)p(z \mid x) = p(x, z)/p(x) 移项;第三个等号是在分子分母同乘 q(z)q(z) 后拆开。这是一个恒等式,不是近似。

04 第 2 部分对 x=−1.5x = -1.5(log⁡p(x)=−2.6959\log p(x) = -2.6959)试了 5 种 qq:

qELBO(q)KL(q ‖ p(z|x))ELBO + KL
均匀 [1/3, 1/3, 1/3]−5.00902.3131−2.6959
随机 [0.151, 0.254, 0.596]−6.72654.0306−2.6959
错得离谱 [0.01, 0.01, 0.98]−9.43776.7418−2.6959
真实后验 [0.960, 0.039, 0.001]−2.69590.0000−2.6959

这个恒等式告诉我们三件事:

  1. ELBO ≤ log p(x),差距恰好是 qq 和真实后验之间的 KL。qq 等于后验时下界取到等号。
  2. 最大化 ELBO 是一个好的替代目标:ELBO 变大,要么是 log⁡p(x)\log p(x) 变大了(模型更好地解释了数据),要么是 KL 变小了(qq 更接近后验)——两者都是我们想要的。
  3. ELBO 只需要 p(x,z)p(x, z)(模型的联合分布,按生成过程直接写出来),不需要算不动的 p(x)p(x)。

ELBO 还常写成另一种形式(把 p(x,z)=p(x∣z) p(z)p(x, z) = p(x \mid z)\, p(z) 代入):

ELBO(q)=Eq[log⁡p(x∣z)]⏟重建项:用 z 解释 x−KL(q(z) ∥ p(z))⏟正则项:q 别离先验太远\mathrm{ELBO}(q) = \underbrace{\mathbb{E}_{q}[\log p(x \mid z)]}_{\text{重建项:用 } z \text{ 解释 } x} - \underbrace{\mathrm{KL}(q(z) \,\Vert\, p(z))}_{\text{正则项:} q \text{ 别离先验太远}}

第 9 讲 VAE 的损失函数就是这个式子(取负号),其中第二项用 §3.3 的高斯 KL 闭式解计算。

4.4 EM 算法

如果后验 p(z∣x)p(z \mid x) 能精确算(像 GMM 这样),就可以交替做两步:

  • E 步:固定参数 θ\theta,令 q(z)=pθ(z∣x)q(z) = p_\theta(z \mid x)。由 §4.3 的恒等式,此时 KL = 0,ELBO 贴紧 log⁡pθ(x)\log p_\theta(x)。
  • M 步:固定 qq,对 θ\theta 最大化 ELBO。对 GMM,就是把后验 rik=p(zi=k∣xi)r_{ik} = p(z_i = k \mid x_i) 当作”软标签”,按权重重新估计:πk=1N∑irik\pi_k = \frac{1}{N}\sum_i r_{ik},μk=∑irikxi∑irik\mu_k = \frac{\sum_i r_{ik}x_i}{\sum_i r_{ik}},σk2=∑irik(xi−μk)2∑irik\sigma_k^2 = \frac{\sum_i r_{ik}(x_i - \mu_k)^2}{\sum_i r_{ik}}——如果知道每个点属于哪一类,最大似然就是这样”数”出来的。

为什么似然单调不降? 设第 nn 轮参数为 θn\theta_n。E 步后 ELBO(qn,θn)=log⁡pθn(x)\mathrm{ELBO}(q_n, \theta_n) = \log p_{\theta_n}(x);M 步让 ELBO(qn,θn+1)≥ELBO(qn,θn)\mathrm{ELBO}(q_n, \theta_{n+1}) \ge \mathrm{ELBO}(q_n, \theta_n);而对任意 qq 都有 log⁡pθn+1(x)≥ELBO(qn,θn+1)\log p_{\theta_{n+1}}(x) \ge \mathrm{ELBO}(q_n, \theta_{n+1})。三者连起来,log⁡pθn+1(x)≥log⁡pθn(x)\log p_{\theta_{n+1}}(x) \ge \log p_{\theta_n}(x)。

04 第 3 部分:1000 个样本,从一个糟糕的初始猜测(μ=[−1,0.5,1]\mu = [-1, 0.5, 1]、σ=[2,2,2]\sigma = [2, 2, 2])出发:

迭代平均对数似然μ(排序后)
0−2.60846[−1.0, 0.5, 1.0]
1−2.39524[−2.176, −0.158, 0.837]
10−2.37260[−2.388, 0.227, 1.687]
20−2.37076[−2.337, 0.141, 2.145]
50−2.21988[−2.923, 0.052, 3.937]
100−2.21949[−2.958, 0.037, 3.946]

100 次迭代中似然从未下降。注意第 10 到 20 次迭代几乎停滞,之后才跳到好的解——EM 有时会在”几个分量挤在一起”的状态里徘徊很久。最终的平均对数似然 −2.21949 略高于真实参数下的 −2.22190:MLE 在这 1000 个样本上比”真理”拟合得更好一点(过拟合了样本的偶然性),这是正常的。

局部最优(04 第 4 部分):从数据里随机挑 3 个点当初始均值,10 个起点里 6 个到达最好的解(−2.21949),其余停在 −2.35 附近(例如两个分量都挤在 −3 附近、右边的峰没人管)。EM 保证不下降,不保证全局最优;实践中用多个起点(或 k-means 初始化)然后挑最好的。

4.5 当后验算不出来:变分推断

EM 的 E 步要求精确算出后验。04 第 5 部分列了几种情况:

模型隐变量后验能精确算吗训练方法
高斯混合K 个离散取值能:K 项求和EM
隐马尔可夫模型一串离散状态能:动态规划EM(Baum–Welch)
VAE(第 9 讲)几十到几百维的连续向量,p(x∣z)p(x \mid z) 是神经网络不能学一个编码器 qϕ(z∣x)q_\phi(z \mid x),用梯度最大化 ELBO
扩散模型(第 7、8 讲)1000 步加噪的中间结果 x1..xTx_1..x_Tqq 是固定的加噪过程,所需的后验有闭式解最大化 ELBO,化简成”预测噪声”

后验算不出来时,退而求其次:让 qq 来自一个可以调参数的分布族(例如对角高斯 qϕ(z)=N(μϕ,diag(σϕ2))q_\phi(z) = \mathcal{N}(\mu_\phi, \mathrm{diag}(\sigma_\phi^2))),把 ELBO 同时对模型参数 θ\theta 和变分参数 ϕ\phi 求梯度、一起优化。这叫变分推断(variational inference,Blei et al. 2018 的综述)。VAE 是它的神经网络版本:用一个神经网络(编码器)直接从 xx 输出 qq 的参数(“摊销推断”,amortized inference)。

对 ELBO 中的 Eqϕ[⋯ ]\mathbb{E}_{q_\phi}[\cdots] 求关于 ϕ\phi 的梯度时,期望本身依赖于 ϕ\phi——这正是下一节的问题。


5. 蒙特卡洛估计与梯度估计 · Monte Carlo and gradient estimators

5.1 蒙特卡洛估计

期望 Ex∼p[f(x)]\mathbb{E}_{x \sim p}[f(x)] 往往算不出闭式解(高维积分)。蒙特卡洛估计:从 pp 抽 NN 个样本,用样本平均代替期望:

Ep[f(x)]≈1N∑i=1Nf(xi),标准误差=Std(f)N\mathbb{E}_{p}[f(x)] \approx \frac{1}{N}\sum_{i=1}^N f(x_i), \qquad \text{标准误差} = \frac{\mathrm{Std}(f)}{\sqrt{N}}

它是无偏的,误差按 1/N1/\sqrt{N} 下降。05 第 1 部分估计 E[cos⁡X]\mathbb{E}[\cos X](X∼N(0,1)X \sim \mathcal{N}(0,1),精确值 e−1/2=0.6065e^{-1/2} = 0.6065):

N200 次估计的实际标准差实际标准差 × √N
100.15030.475
1,0000.01420.450
100,0000.00150.461

最后一列基本是常数:样本多 100 倍,误差才缩小 10 倍。好消息是这个速度和维度无关——这是蒙特卡洛在高维问题里无可替代的原因。单次估计自己报告的标准误差(样本标准差 / √N)和 200 次重复的实际波动一致,所以不需要重复实验也能知道误差多大。

5.2 重要性采样

要估计一个极小的概率,比如 P(X>4)=3.167×10−5P(X > 4) = 3.167 \times 10^{-5},直接采样 1 万次(05 第 2 部分)一个样本都没落进去:估计值是 0,报告的标准误差也是 0——它甚至不知道自己错了。

重要性采样(importance sampling):换一个”把样本放在有事发生的地方”的提议分布 qq,再用权重修正:

Ep[f(x)]=∑xq(x) p(x)q(x)f(x)=Eq[f(x) p(x)q(x)]\mathbb{E}_{p}[f(x)] = \sum_x q(x)\, \frac{p(x)}{q(x)} f(x) = \mathbb{E}_{q}\Big[f(x)\, \frac{p(x)}{q(x)}\Big]

用 q=N(4,1)q = \mathcal{N}(4, 1),1 万个样本里一半落在 x>4x > 4,估计值 3.108×10−53.108 \times 10^{-5},相对误差约 2%。权重差异太大时,少数样本主宰估计,可以用有效样本数 ESS=(∑w)2/∑w2\mathrm{ESS} = (\sum w)^2 / \sum w^2 诊断(这里 1804)。

GenAI 联系:第 12 讲的 PPO 用旧策略采样、用比值 πθ(a)/πold(a)\pi_\theta(a)/\pi_{\text{old}}(a) 修正,从而复用旧样本——这就是重要性采样;比值离 1 太远时估计不可靠,所以 PPO 要把它裁剪(clip)在 [1−ϵ,1+ϵ][1-\epsilon, 1+\epsilon] 里。

5.3 对期望求梯度:重参数化

训练 VAE、做强化学习时,要算的是期望的梯度:∇μEz∼pμ[f(z)]\nabla_\mu \mathbb{E}_{z \sim p_\mu}[f(z)]。难点是参数 μ\mu 出现在采样分布里,不能简单地”对样本求导”。

重参数化(reparameterization / pathwise 估计):把 zz 写成参数和无关噪声的可导函数,z=μ+σεz = \mu + \sigma\varepsilon(§2.1),于是期望变成对 ε\varepsilon 取,和参数无关:

∇μEz∼N(μ,σ2)[f(z)]=∇μEε∼N(0,1)[f(μ+σε)]=Eε[f′(μ+σε)]\nabla_\mu \mathbb{E}_{z \sim \mathcal{N}(\mu, \sigma^2)}[f(z)] = \nabla_\mu \mathbb{E}_{\varepsilon \sim \mathcal{N}(0,1)}[f(\mu + \sigma\varepsilon)] = \mathbb{E}_{\varepsilon}\big[f'(\mu + \sigma\varepsilon)\big]

梯度可以”穿过”采样传回 μ\mu 和 σ\sigma,用自动微分就能算(第 1 讲)。条件是:(1) ff 可导;(2) 采样能写成这种”参数 + 噪声”的可导形式(连续分布通常可以,离散分布不行)。

5.4 得分函数估计(REINFORCE)与基线

另一种办法不需要 ff 可导,叫得分函数估计(score function estimator,也叫 REINFORCE 或 log-derivative trick)。利用 ∇θpθ=pθ∇θlog⁡pθ\nabla_\theta p_\theta = p_\theta \nabla_\theta \log p_\theta:

∇θEpθ[f(z)]=∑zf(z) ∇θpθ(z)=∑zpθ(z) f(z) ∇θlog⁡pθ(z)=Epθ[f(z) ∇θlog⁡pθ(z)]\nabla_\theta \mathbb{E}_{p_\theta}[f(z)] = \sum_z f(z)\, \nabla_\theta p_\theta(z) = \sum_z p_\theta(z)\, f(z)\, \nabla_\theta \log p_\theta(z) = \mathbb{E}_{p_\theta}\big[f(z)\, \nabla_\theta \log p_\theta(z)\big]

只需要能算 f(z)f(z) 的值和 log⁡pθ(z)\log p_\theta(z) 的梯度。对高斯,∇μlog⁡p=(z−μ)/σ2\nabla_\mu \log p = (z - \mu)/\sigma^2。

基线(baseline):因为 Epθ[∇θlog⁡pθ(z)]=∑z∇θpθ(z)=∇θ∑zpθ(z)=∇θ1=0\mathbb{E}_{p_\theta}[\nabla_\theta \log p_\theta(z)] = \sum_z \nabla_\theta p_\theta(z) = \nabla_\theta \sum_z p_\theta(z) = \nabla_\theta 1 = 0,所以对任何不依赖 zz 的常数 bb,

E[(f(z)−b) ∇θlog⁡pθ(z)]=E[f(z) ∇θlog⁡pθ(z)]\mathbb{E}\big[(f(z) - b)\, \nabla_\theta \log p_\theta(z)\big] = \mathbb{E}\big[f(z)\, \nabla_\theta \log p_\theta(z)\big]

减去基线不改变期望,却能大幅降低方差:ff 本身可能总是很大(比如奖励总是正的),估计器的噪声主要来自这个”平均水平”;减掉它,只留下”比平均好多少”的信号。

05 第 3 部分(μ=1\mu = 1,每次估计 100 个样本,重复 2000 次):

函数估计器真实梯度估计的平均估计的标准差
f(z)=z2f(z) = z^2得分函数2.00002.00540.5377
f(z)=z2f(z) = z^2得分函数 + 基线2.00002.00150.4215
f(z)=z2f(z) = z^2重参数化2.00002.00200.1949
f(z)=1[z>0]f(z) = \mathbb{1}[z > 0]得分函数0.24200.24250.0750
f(z)=1[z>0]f(z) = \mathbb{1}[z > 0]得分函数 + 基线0.24200.24210.0494
f(z)=1[z>0]f(z) = \mathbb{1}[z > 0]重参数化0.24200.00000.0000
  • 对光滑的 z2z^2,三种都是无偏的,但重参数化的方差最小(0.195 vs 0.538):它利用了 ff 的导数(“往哪边走 ff 会变大”),得分函数只知道 ff 的值。这就是 VAE 用重参数化的原因。
  • 对不可导的 0/1 函数,重参数化错了:阶跃函数几乎处处导数为 0,可期望 P(z>0)P(z > 0) 确实随 μ\mu 变化(真实梯度是标准正态密度在 1 处的值 0.242)。得分函数仍然无偏。
  • 基线把得分函数估计的标准差降低了约 20%–35%(0.538 → 0.422,0.075 → 0.049)。

离散变量只能用得分函数。 05 第 4 部分:4 个”动作”的策略 π=softmax(θ)\pi = \mathrm{softmax}(\theta),奖励 r=[1,0,0.5,2]r = [1, 0, 0.5, 2]。采样一个离散的 aa 不是 θ\theta 的可导函数,无法”把梯度穿过采样”;而得分函数估计 E[r(a) ∇θlog⁡πθ(a)]\mathbb{E}[r(a)\, \nabla_\theta \log \pi_\theta(a)](其中 ∇θlog⁡softmax(θ)a=onehot(a)−π\nabla_\theta \log \mathrm{softmax}(\theta)_a = \mathrm{onehot}(a) - \pi)与精确梯度一致,加基线 b=E[r]b = \mathbb{E}[r] 后标准差从 0.170 降到 0.094。

把”动作”换成”语言模型生成的一段回答”(一串离散 token),把 rr 换成奖励模型的打分,这就是 RLHF 里的策略梯度(第 11、12 讲);换成”答案对不对”,就是训练推理模型的 RLVR(第 20 讲)。RLHF 里的 advantage、GRPO 用”同一题多个回答的平均分”做基线,都是这一节的基线思想。


6. 马尔可夫链与采样 · Markov chains and sampling

6.1 马尔可夫链与平稳分布

马尔可夫链:一串随机状态 x0,x1,x2,…x_0, x_1, x_2, \dots,下一个状态只依赖当前状态(马尔可夫性):p(xt+1∣x0,…,xt)=p(xt+1∣xt)p(x_{t+1} \mid x_0, \dots, x_t) = p(x_{t+1} \mid x_t)。第 1 讲的 bigram 就是一条马尔可夫链。有限状态时用转移矩阵 PP 描述,PijP_{ij} 是从 ii 转到 jj 的概率(每行和为 1)。若第 tt 步的分布是行向量 dtd_t,则 dt+1=dtPd_{t+1} = d_t P。

06 第 1 部分用一个三状态天气链(晴、多云、雨):

起点天数天气分布与平稳分布的距离
晴0[1, 0, 0]0.54
晴5[0.4685, 0.2794, 0.2521]1.2e-02
晴20[0.4565, 0.2826, 0.2609]1.6e-07
雨0[0, 0, 1]0.74
雨20[0.4565, 0.2826, 0.2609]1.8e-07

无论从哪里出发,分布都收敛到同一个平稳分布 π\pi(满足 πP=π\pi P = \pi,即 P⊤P^\top 特征值为 1 的特征向量):[0.4565, 0.2826, 0.2609]。一条链跑 10 万天,各天气的时间占比也是它(遍历性:时间平均 = 分布平均)。收敛是几何级数的:距离每一步大约乘以 PP 的第二大特征值的绝对值(这里 0.473)。它越接近 1,链”忘记起点”越慢。(这些结论要求链不可约且非周期,这里满足。)

6.2 MCMC:反过来设计一条链

上面是”给定链,求平稳分布”。马尔可夫链蒙特卡洛(MCMC)反过来:给定一个想采样的分布 pp,设计一条以它为平稳分布的链,然后跑足够久,链上的状态就是(近似的)pp 的样本。

为什么要这么麻烦?因为很多分布我们只知道密度的形状,不知道归一化常数:贝叶斯后验 p(z∣x)∝p(x∣z) p(z)p(z \mid x) \propto p(x \mid z)\,p(z)(分母算不动)、能量模型 p(x)∝e−E(x)p(x) \propto e^{-E(x)}。MCMC 只需要密度的比值,常数自动约掉。

6.3 Metropolis–Hastings

最简单的 MCMC:从当前的 xx 提议 x′=x+sεx' = x + s\varepsilon(ss 是步长),以概率 min⁡(1,p(x′)/p(x))\min(1, p(x')/p(x)) 接受,否则留在原地。

为什么正确? 充分条件是细致平衡(detailed balance):p(x) T(x→x′)=p(x′) T(x′→x)p(x)\, T(x \to x') = p(x')\, T(x' \to x)——“从 xx 流到 x′x' 的概率质量”等于反方向的。对称提议下,设 p(x′)<p(x)p(x') < p(x):左边是 p(x)⋅g⋅p(x′)p(x)=g p(x′)p(x) \cdot g \cdot \frac{p(x')}{p(x)} = g\,p(x'),右边是 p(x′)⋅g⋅1p(x') \cdot g \cdot 1,相等(gg 是对称的提议密度)。满足细致平衡的链,pp 就是它的平稳分布(练习 9)。

06 第 2 部分:目标是双峰 12N(−3,0.72)+12N(3,0.72)\frac{1}{2}\mathcal{N}(-3, 0.7^2) + \frac{1}{2}\mathcal{N}(3, 0.7^2),从 x=−3x = -3 出发跑 2 万步(丢掉前 2000 步”预热”):

步长接受率落在右峰的比例(应为 0.5)在两峰间切换的次数
0.10.9520.0000
1.00.6060.4575
3.00.3290.499923
30.00.0590.500525
  • 步长太小:几乎每步都接受,但每步只挪一点点,2 万步都没离开起点的峰——链”卡”在一个模式里,样本看起来像单峰分布,而且接受率高得让人误以为一切正常。
  • 步长 1.0:只切换了 5 次,右峰比例偏离 0.5,混合不充分。
  • 步长和两峰间距同一量级(3.0)时混合最好。
  • 步长 30:接受率只有 6%,链大部分时间原地不动;但在一维里每次被接受的跳跃都可能落到另一个峰,所以照样混合得不错。在高维里,随机的大跳跃几乎全被拒绝,这招就失效了。

高维、多峰的分布里,MCMC 混合得极慢。这是扩散模型”从噪声出发、逐步去噪”而不是直接在数据分布上跑 MCMC 的原因之一。

6.4 朗之万动力学:只用得分函数采样

得分函数(score function)∇xlog⁡p(x)\nabla_x \log p(x):在 xx 处,往哪个方向走对数密度上升最快。它不需要归一化常数:∇xlog⁡(p~(x)/Z)=∇xlog⁡p~(x)\nabla_x \log(\tilde p(x)/Z) = \nabla_x \log \tilde p(x)。(注意:这里的”得分”是对数据 xx 求梯度,§5.4 的”得分函数估计”是对参数 θ\theta 求梯度,名字相同、对象不同。)

朗之万动力学(Langevin dynamics)只用得分函数就能采样:

x←x+η2 ∇xlog⁡p(x)+η ε,ε∼N(0,I)x \leftarrow x + \frac{\eta}{2}\, \nabla_x \log p(x) + \sqrt{\eta}\, \varepsilon, \qquad \varepsilon \sim \mathcal{N}(0, I)

第一项是沿着对数密度往上爬(梯度上升),第二项是随机扰动。步长 η\eta 足够小、步数足够多时,点的分布收敛到 pp。

06 第 3 部分:目标是 8 个高斯(σ = 0.3)排在半径 2 的圆上(prob_lab.ring_of_gaussians,第 6 讲 GAN 的经典玩具数据),4000 个点从 N(0,32I)\mathcal{N}(0, 3^2 I) 出发:

样本到最近中心的平均距离平均 log⁡p\log p8 个模式各分到的点数
真实样本0.369−2.458472–536
起点2.171−42.401—
朗之万 500 步(η = 0.01)0.383−2.519482–522
只做梯度上升 500 步(无噪声)0.000−1.509—
朗之万 500 步,全部从第 0 个峰出发0.380−2.5075–1692
  • 朗之万 500 步后,样本的统计和真实样本非常接近:只用 ∇log⁡p\nabla \log p 就采到了正确的分布。
  • 去掉噪声,所有点都挤到了峰顶(平均距离 0.000),平均 log⁡p\log p 反而更高——它找到的是”最可能的点”,而不是”分布的样本”。噪声项保证了样本有正确的散布。这个区别(采样 vs 优化)在生成模型里很要紧:我们要的是多样的样本,不是最可能的那一张图。
  • 峰间混合很慢:全部从第 0 个峰出发时,500 步后仍有 42.3% 的点留在原峰(应为 12.5%)。和 MCMC 一样,朗之万很难跨越低密度的山谷。

GenAI 联系:得分模型 / 扩散模型的采样就是朗之万动力学的升级版(第 7、8 讲):(1) 得分函数 ∇xlog⁡p(x)\nabla_x \log p(x) 不知道,就用神经网络从数据里学出来;(2) 为了解决”峰间混合慢”,先在加了大噪声的(模糊的、峰与峰连成一片的)分布上采样,再逐渐降低噪声,一步步细化到清晰的样本。§2.5 的前向加噪过程正是提供了这一串由模糊到清晰的分布。


7. 工具箱在后面哪里用 · Where each tool reappears

工具本讲后面在哪里
贝叶斯公式、后验§1.2第 6 讲(概率图模型的推断)、第 9 讲(VAE 的编码器近似后验)、第 22 讲(检测器与基础比率)
条件独立、图结构§1.3第 6 讲(有向 / 无向图模型、因子图)
重参数化 μ+σε\mu + \sigma\varepsilon§2.1、§5.3第 9 讲(VAE)、第 7–8 讲(扩散的加噪写法)
高斯的线性变换、相加§2.2–§2.5第 7 讲(前向过程的闭式解 q(xt∣x0)q(x_t \mid x_0))
高斯相乘§2.6第 8 讲(后验 q(xt−1∣xt,x0)q(x_{t-1} \mid x_t, x_0))
最大似然 = 最小化前向 KL§3.4第 1–4 讲(语言模型的交叉熵训练)、第 15 讲(规模定律里的损失)
前向 vs 反向 KL§3.5第 6 讲(GAN 的模式崩塌)、第 9 讲(VAE 的模糊)、第 11–12 讲(RLHF 的 KL 约束)
高斯 KL 闭式解§3.3第 8 讲(扩散 ELBO 的每一项)、第 9 讲(VAE 的 KL 项)
ELBO§4.3第 8 讲(扩散模型的训练目标)、第 9 讲(VAE)
EM、变分推断§4.4–§4.5第 9 讲(摊销变分推断)
蒙特卡洛、重要性采样§5.1–§5.2第 8 讲(对随机时间步取期望)、第 12 讲(PPO 的重要性比)
得分函数估计 + 基线§5.4第 11–12 讲(RLHF 的策略梯度)、第 20 讲(RLVR、GRPO)
马尔可夫链、MCMC§6.1–§6.3第 7 讲(前向过程是一条马尔可夫链)、第 6 讲(无向图模型的采样)
朗之万动力学、得分函数§6.4第 7–8 讲(得分模型 / 扩散模型的采样)

8. 小结 · Summary

  1. 求和法则(边缘化)和乘积法则(链式法则)是一切的基础;贝叶斯公式从”原因 → 结果”的模型反推”结果 → 原因”的后验,分母(证据)要把所有原因加一遍——高维时算不动,这是生成模型麻烦的根源。
  2. 独立 ≠ 条件独立:动词和时间短语在农场语言里不独立(I = 0.0316 bit),但给定主语后条件独立(I = 0)。先验(基础比率)和似然同样重要。
  3. 高斯是封闭的积木:线性变换、独立相加、条件化、相乘都还是高斯。重参数化 x=μ+σεx = \mu + \sigma\varepsilon;Cholesky 采样 x=μ+Lεx = \mu + L\varepsilon;反复”缩小一点 + 加一点噪声”1000 次就把任何数据变成 N(0,1)\mathcal{N}(0, 1),而且有闭式解 xt=αˉtx0+1−αˉtεx_t = \sqrt{\bar\alpha_t}x_0 + \sqrt{1-\bar\alpha_t}\varepsilon。
  4. 最大似然 = 最小化交叉熵 = 最小化 KL(p_data ‖ p_θ)。KL 非负、不对称、遇到零概率会爆炸。前向 KL 覆盖所有模式(矩匹配,会在山谷里放概率),反向 KL 只盯住一个模式——这是”VAE 模糊、GAN 模式崩塌”的统一解释。
  5. ELBO 恒等式 log⁡p(x)=ELBO(q)+KL(q∥p(z∣x))\log p(x) = \mathrm{ELBO}(q) + \mathrm{KL}(q \Vert p(z \mid x)) 对任意 qq 精确成立。似然算不动时最大化 ELBO;后验能精确算时就是 EM(似然单调不降,但有局部最优:10 个起点里 6 个到达最好的解);算不出来时就是变分推断 / VAE。
  6. 蒙特卡洛无偏,误差 ∝ 1/N1/\sqrt{N} 且与维度无关;罕见事件用重要性采样。
  7. 期望的梯度有两种估计:重参数化方差小但要求可导和连续;得分函数(REINFORCE)只要能算函数值,离散变量只能用它;基线不改变期望、降低方差。这是 VAE 与 RLHF / RLVR 在技术上的分水岭。
  8. 马尔可夫链收敛到平稳分布,速度由第二大特征值决定;MCMC 只用密度比值采样,但多峰时混合极慢;朗之万动力学只用得分函数采样,噪声项把”优化”变成”采样”——扩散模型的采样就是它的升级版。

9. 常见误区 · Common pitfalls

  1. “两个变量在生成过程里互不影响,所以它们独立。” 有共同原因时它们是相关的,只是在给定共同原因时条件独立。
  2. “检测器准确率 95%,所以被它标记的 95% 都是对的。” 后验取决于基础比率。
  3. “两个独立的标准差为 1 的噪声相加,标准差是 2。” 是方差相加,标准差是 2\sqrt{2}。
  4. “KL 散度是两个分布之间的距离。” 它不对称,也不满足三角不等式;方向决定了拟合出来的分布是”覆盖”还是”寻模”。
  5. “最大似然训练出来的模型样本质量最好。” 最大似然最小化的是前向 KL,容量不够时会把概率抹到模式之间;样本质量和似然是两回事。
  6. “ELBO 是 log p(x) 的近似值。” 它是下界,差距恰好是 KL(q∥p(z∣x))\mathrm{KL}(q \Vert p(z \mid x));qq 很差时下界可以很松。
  7. “EM 一定能找到最大似然解。” 它只保证不下降,会停在局部最优;高斯混合还可能退化(某个分量的方差收缩到 0,似然趋于无穷,练习 5)。
  8. “重参数化总比得分函数好。” 它要求 ff 可导、变量连续;对 0/1 奖励它给出 0,是有偏的。离散 token 上只能用得分函数。
  9. “MCMC 的接受率越高越好。” 步长 0.1 时接受率 95%,链却 2 万步没离开一个峰。
  10. “去掉朗之万的噪声能让样本更好(log p 更高)。” 那样得到的是众数,不是样本:所有点挤到峰顶,多样性消失。

10. 练习 · Exercises

练习 1(贝叶斯)。 用 §1.1 的农场语言:只有 bat、cat、owl、hen 四种动物会出现在 barn,p(barn∣a)p(\text{barn} \mid a) 分别是 2/11、3/8、1/10、4/10(来自它们的习性表),每种动物的先验是 1/8。(a) 算 p(barn)p(\text{barn})。(b) 算 p(a∣barn)p(a \mid \text{barn})。(c) 为什么 hen 的后验最大,尽管 cat 的似然和它差不多?

参考答案

(a) p(barn)=18(2/11+3/8+1/10+4/10)=18×1.0568=0.1321p(\text{barn}) = \frac{1}{8}(2/11 + 3/8 + 1/10 + 4/10) = \frac{1}{8} \times 1.0568 = 0.1321(01 表里的 0.132)。

(b) p(a∣barn)=p(barn∣a)⋅18/0.1321p(a \mid \text{barn}) = p(\text{barn} \mid a) \cdot \frac{1}{8} / 0.1321:bat 0.172、cat 0.355、owl 0.095、hen 0.379,其余 0。

(c) 先验都相同,后验只正比于似然:hen 0.400 > cat 0.375,差距不大,所以后验也只差一点(0.379 vs 0.355)。先验相同时,贝叶斯推断退化为”比较似然”——这就是最大似然分类。

练习 2(KL 非负)。 (a) 用 Jensen 不等式证明 KL(p∥q)≥0\mathrm{KL}(p \Vert q) \ge 0,并说明等号何时成立。(b) 证明 I(X;Y)≥0I(X; Y) \ge 0,等号当且仅当独立。

参考答案

(a) 见 §3.3:−KL=Ep[log⁡(q/p)]≤log⁡Ep[q/p]=log⁡∑x:p(x)>0q(x)≤log⁡1=0-\mathrm{KL} = \mathbb{E}_p[\log(q/p)] \le \log \mathbb{E}_p[q/p] = \log\sum_{x: p(x)>0} q(x) \le \log 1 = 0。Jensen 的等号要求 q/pq/p 在 pp 的支撑上是常数,再加上两者都归一化,就只能 p=qp = q。

(b) I(X;Y)=KL(p(x,y)∥p(x)p(y))≥0I(X; Y) = \mathrm{KL}(p(x,y) \Vert p(x)p(y)) \ge 0,由 (a),等号当且仅当 p(x,y)=p(x)p(y)p(x,y) = p(x)p(y),即独立。

练习 3(高斯 KL)。 (a) 推导 KL(N(μ1,s12)∥N(μ2,s22))\mathrm{KL}(\mathcal{N}(\mu_1, s_1^2) \Vert \mathcal{N}(\mu_2, s_2^2)) 的闭式解。(b) 特别地,写出 VAE 里的 KL(N(μ,σ2)∥N(0,1))\mathrm{KL}(\mathcal{N}(\mu, \sigma^2) \Vert \mathcal{N}(0, 1))。(c) 用 prob_lab.kl_gauss 验证 μ=1,σ=0.5\mu = 1, \sigma = 0.5 时的值。

参考答案

(a) KL=Ep[log⁡p−log⁡q]\mathrm{KL} = \mathbb{E}_{p}[\log p - \log q],代入两个对数密度: Ep[−log⁡s1−(x−μ1)22s12+log⁡s2+(x−μ2)22s22]\mathbb{E}_p\big[-\log s_1 - \frac{(x-\mu_1)^2}{2s_1^2} + \log s_2 + \frac{(x-\mu_2)^2}{2s_2^2}\big]。用 Ep[(x−μ1)2]=s12\mathbb{E}_p[(x-\mu_1)^2] = s_1^2 和 Ep[(x−μ2)2]=s12+(μ1−μ2)2\mathbb{E}_p[(x-\mu_2)^2] = s_1^2 + (\mu_1-\mu_2)^2,得 log⁡s2s1−12+s12+(μ1−μ2)22s22\log\frac{s_2}{s_1} - \frac12 + \frac{s_1^2 + (\mu_1-\mu_2)^2}{2s_2^2}。

(b) KL(N(μ,σ2)∥N(0,1))=12(μ2+σ2−1−log⁡σ2)\mathrm{KL}(\mathcal{N}(\mu, \sigma^2) \Vert \mathcal{N}(0,1)) = \frac12(\mu^2 + \sigma^2 - 1 - \log\sigma^2)。

(c) 12(1+0.25−1−log⁡0.25)=12(0.25+1.3863)=0.8181\frac12(1 + 0.25 - 1 - \log 0.25) = \frac12(0.25 + 1.3863) = 0.8181,和 03 第 4 部分最后一行的闭式解 0.8181(蒙特卡洛 0.8182)一致。

练习 4(扩散的前向过程)。 用 DDPM 的线性调度(β\beta 从 10−410^{-4} 到 0.02,T=1000T = 1000)。(a) 证明:若 Var(xt−1)=1\mathrm{Var}(x_{t-1}) = 1,则 Var(xt)=1\mathrm{Var}(x_t) = 1。(b) 由 xt=αˉtx0+1−αˉtεx_t = \sqrt{\bar\alpha_t}x_0 + \sqrt{1-\bar\alpha_t}\varepsilon,第 500 步时信号和噪声的系数各是多少?(可以用几行 numpy 算。)(c) 第 1000 步的 αˉT\bar\alpha_T 是多少?为什么扩散模型的采样可以从 N(0,1)\mathcal{N}(0, 1) 开始?

参考答案

(a) xt−1x_{t-1} 和 εt\varepsilon_t 独立,Var(xt)=(1−βt)⋅1+βt⋅1=1\mathrm{Var}(x_t) = (1-\beta_t)\cdot 1 + \beta_t \cdot 1 = 1。

(b) b = np.linspace(1e-4, 0.02, 1000); ab = np.cumprod(1 - b),本机得 αˉ500=0.280\sqrt{\bar\alpha_{500}} = 0.280、1−αˉ500=0.960\sqrt{1 - \bar\alpha_{500}} = 0.960:到一半时信号只剩 28%,噪声已经占主导。

(c) αˉT≈4.0×10−5\bar\alpha_T \approx 4.0 \times 10^{-5},αˉT≈0.0064\sqrt{\bar\alpha_T} \approx 0.0064:xTx_T 里几乎没有 x0x_0 的信息,它的分布和 N(0,1)\mathcal{N}(0, 1) 几乎一样(02 第 3 部分:相关系数 0.012)。所以生成时直接从 N(0,1)\mathcal{N}(0, 1) 抽一个 xTx_T,再一步步去噪,就相当于从前向过程的终点出发往回走。

练习 5(GMM 的退化解)。 (a) 证明:如果允许某个分量的 σk→0\sigma_k \to 0 并把它的中心放在某个数据点上,GMM 的似然可以趋于无穷。(b) prob_lab.GMM1D.em_step 是怎样防止这一点的?(c) 这说明了最大似然的什么问题?

参考答案

(a) 设 μ1=x1\mu_1 = x_1,则 p(x1)≥π1N(x1;x1,σ12)=π1/(σ12π)→∞p(x_1) \ge \pi_1 \mathcal{N}(x_1; x_1, \sigma_1^2) = \pi_1/(\sigma_1\sqrt{2\pi}) \to \infty;其余数据点由其他分量解释,似然有限且不为 0。乘积趋于无穷。

(b) 方差下限 np.maximum(var, 1e-6)(以及 NkN_k 的下限 1e-12)。实践中还会加先验(MAP 估计)或在发现退化时重新初始化该分量。

(c) 最大似然在模型过于灵活时会”钻空子”:一个把所有概率质量集中在训练点上的模型,训练似然最高,却完全不能泛化。这和第 1 讲 5-gram 照抄训练句、过拟合是同一类问题;连续密度的似然没有上界,这一点要特别小心。

练习 6(蒙特卡洛的样本量)。 用直接采样估计 p=P(X>4)≈3.17×10−5p = P(X > 4) \approx 3.17 \times 10^{-5},想让相对标准误差达到 10%,大约需要多少个样本?重要性采样只用了 1 万个样本就做到了 2%,相当于节省了多少倍?

参考答案

指示函数的方差是 p(1−p)p(1-p),标准误差 p(1−p)/N\sqrt{p(1-p)/N},相对标准误差 (1−p)/(pN)\sqrt{(1-p)/(pN)}。令它等于 0.1:N=(1−p)/(0.01p)≈3.2×106N = (1-p)/(0.01p) \approx 3.2 \times 10^6。要达到 2% 还要再乘 25,约 7.9×1077.9 \times 10^7 个样本。重要性采样用 10410^4 个就做到了,节省约 8000 倍。代价是需要一个好的提议分布——在高维里找到它往往很难。

练习 7(基线为什么不改变期望)。 (a) 证明 Epθ[∇θlog⁡pθ(z)]=0\mathbb{E}_{p_\theta}[\nabla_\theta \log p_\theta(z)] = 0。(b) 如果基线 bb 依赖于被采样的 zz 本身,还成立吗?(c) GRPO 用”同一道题的一组回答的平均奖励”做基线,这个基线依赖于当前回答吗?

参考答案

(a) 离散时 ∑zpθ(z)∇θlog⁡pθ(z)=∑z∇θpθ(z)=∇θ∑zpθ(z)=∇θ1=0\sum_z p_\theta(z)\nabla_\theta\log p_\theta(z) = \sum_z \nabla_\theta p_\theta(z) = \nabla_\theta\sum_z p_\theta(z) = \nabla_\theta 1 = 0;连续时把求和换成积分。

(b) 不成立:E[b(z)∇log⁡p(z)]\mathbb{E}[b(z)\nabla\log p(z)] 一般不为 0,会引入偏差。基线可以依赖于”状态”(例如题目、上下文),但不能依赖于被评估的那个动作本身。

(c) 严格说,组平均里包含了当前这个回答自己的奖励,所以有一点依赖;当组大小为 GG 时,这一项的权重是 1/G1/G,会让梯度按 (G−1)/G(G-1)/G 缩小(相当于学习率的微小变化)。也有实现用”除当前回答外的其他回答的平均”(leave-one-out)来得到严格无偏的基线。第 20 讲会再讨论。

练习 8(对 σ 求梯度)。 对 f(z)=z2f(z) = z^2、z∼N(μ,σ2)z \sim \mathcal{N}(\mu, \sigma^2):(a) 精确的 ∇σE[f(z)]\nabla_\sigma \mathbb{E}[f(z)] 是多少?(b) 写出重参数化估计和得分函数估计(提示:∇σlog⁡p=(z−μ)2σ3−1σ\nabla_\sigma \log p = \frac{(z-\mu)^2}{\sigma^3} - \frac{1}{\sigma})。(c) 改一改 05 的代码,比较两者的方差(μ=1\mu = 1,σ=1\sigma = 1)。

参考答案

(a) E[z2]=μ2+σ2\mathbb{E}[z^2] = \mu^2 + \sigma^2,所以 ∇σ=2σ=2\nabla_\sigma = 2\sigma = 2。

(b) 重参数化:z=μ+σεz = \mu + \sigma\varepsilon,∇σf=2zε=2(μ+σε)ε\nabla_\sigma f = 2z\varepsilon = 2(\mu + \sigma\varepsilon)\varepsilon,期望 2σ2\sigma ✓。得分函数:f(z)((z−μ)2σ3−1σ)f(z)\big(\frac{(z-\mu)^2}{\sigma^3} - \frac{1}{\sigma}\big)。

(c) 自己运行验证:两者的平均都应接近 2;重参数化的方差应明显更小(和第 3 部分对 μ 的结论一样)。这里不给具体数字,以你的运行结果为准。

练习 9(细致平衡 ⇒ 平稳)。 证明:若转移核 TT 满足 p(x)T(x→x′)=p(x′)T(x′→x)p(x)T(x \to x') = p(x')T(x' \to x) 对所有 x,x′x, x' 成立,则 pp 是平稳分布,即 ∑xp(x)T(x→x′)=p(x′)\sum_x p(x)T(x \to x') = p(x')。

参考答案

∑xp(x)T(x→x′)=∑xp(x′)T(x′→x)=p(x′)∑xT(x′→x)=p(x′)\sum_x p(x)T(x\to x') = \sum_x p(x')T(x'\to x) = p(x')\sum_x T(x'\to x) = p(x'),最后一步因为从 x′x' 出发转到所有状态的概率之和为 1。细致平衡是充分条件,不是必要条件:§6.1 的天气链就不满足细致平衡,但照样有平稳分布。

练习 10(采样 vs 优化)。 06 第 3 部分去掉噪声后,所有点挤到了峰顶,平均 log⁡p\log p 是 −1.509,比真实样本的 −2.458 还高。(a) 为什么”平均对数密度更高”反而说明样本不对?(b) 联系第 1 讲:用温度 0 的贪心解码生成文字,类似于朗之万的哪种情况?

参考答案

(a) 真实样本的平均 log⁡p\log p 是 −H(p)-H(p)(负熵),它是一个确定的值;样本比它”更可能”,说明它们集中在高密度区域、缺少应有的散布。好的样本要在统计上和真实样本一致,而不是越可能越好。8 个高斯的密度峰值处 log⁡p\log p 约为 log⁡18−log⁡(2π⋅0.09)=−1.509\log\frac{1}{8} - \log(2\pi \cdot 0.09) = -1.509,正是去噪声后所有点的值。

(b) 贪心解码每一步都选最可能的词,相当于去掉噪声的梯度上升:得到”最可能”的句子,但缺少多样性,还容易重复(第 3 讲)。温度 1 的采样才对应真正的分布。


11. 延伸阅读 · Further reading

原课第 8 讲列出的读物

  • Blei, Kucukelbir & McAuliffe (2017/2018), Variational Inference: A Review for Statisticians:变分推断的标准综述。
  • Eisner (2011), High-Level Explanation of Variational Inference:一篇很短的直觉讲解。
  • Doersch (2016), Tutorial on Variational Autoencoders:从 ELBO 到 VAE 的完整推导。

教材

  • Bishop (2006), Pattern Recognition and Machine Learning:第 2 章(概率分布与高斯)、第 9 章(混合模型与 EM)、第 10 章(变分推断)、第 11 章(采样方法)。
  • MacKay (2003), Information Theory, Inference, and Learning Algorithms:熵、KL、蒙特卡洛的直观讲法(作者网站免费提供 PDF)。
  • Murphy (2022), Probabilistic Machine Learning: An Introduction:第 2–6 章。

论文

  • Dempster, Laird & Rubin (1977), Maximum Likelihood from Incomplete Data via the EM Algorithm。
  • Williams (1992), Simple Statistical Gradient-Following Algorithms for Connectionist Reinforcement Learning:REINFORCE。
  • Kingma & Welling (2014), Auto-Encoding Variational Bayes:重参数化技巧与 VAE。
  • Mohamed et al. (2020), Monte Carlo Gradient Estimation in Machine Learning, JMLR:各种梯度估计器的系统综述。
  • Song & Ermon (2019), Generative Modeling by Estimating Gradients of the Data Distribution:用学出来的得分函数做(退火的)朗之万采样。
  • Ho, Jain & Abbeel (2020), Denoising Diffusion Probabilistic Models:前向加噪的 β 调度与闭式解(第 7 讲的阅读材料)。

12. 下一篇预告 · Next

前置讲 P3:GPU 与性能模型(建议第 16 讲之前读)。前两篇前置讲分别回答了”数怎样存”和”概率怎样算”;P3 回答”为什么 GPU 适合神经网络、一次运算的耗时由什么决定”:CPU 与 GPU 的设计取舍、存储层次(寄存器、SRAM、HBM)、算术强度与 roofline 模型、算子融合。P1 §6 用一个 CPU 核心粗测的”逐元素加法 vs 矩阵乘法差了 300 倍”,会在那里得到完整的解释。

如果你是按顺序学习,下一步是第 2 讲:Transformer 语言模型(撰写中);P2 的内容从第 6 讲开始才大量用到。

← 返回课程目录