这是一篇前置讲 ,不对应原课的某一次课。原课从第 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{句子}) p ( 句子 ) 可以精确地写成一串条件概率的乘积,训练就是数数(n-gram)或最大似然(RNN、Transformer)。
图像就没这么幸运了。一张图有几十万个像素,它们之间的依赖关系极其复杂;更自然的想法是假设图像由一些看不见的原因 (隐变量 z z z :画的是什么、什么姿势、什么光照)生成。可是一旦引入隐变量,似然就变成了一个算不动的积分 p ( x ) = ∫ p ( x ∣ z ) p ( z ) d z p(x) = \int p(x \mid z) p(z)\, dz p ( x ) = ∫ p ( x ∣ z ) p ( z ) d z 。于是:
GAN 干脆不算似然,换成对抗博弈——它背后的散度是什么?为什么它容易模式崩塌 ?(§3.5)
VAE 和扩散模型最大化一个下界 (ELBO)——它是怎么来的、为什么能代替似然?(§4)
VAE 训练要对”从一个分布里采样”求梯度——重参数化技巧 怎样让梯度穿过采样?(§5.3)
扩散模型先给数据一点点加噪声、再学会一点点去噪——加噪为什么有闭式解?(§2.5)采样为什么像朗之万动力学 ?(§6.4)
RLHF 和训练推理模型要对”生成了哪些 token”求梯度,而 token 是离散的——为什么只能用得分函数估计 ,为什么要减去基线 ?(§5.4)
这篇前置讲的每一节,都对应后面某几讲的一个关键步骤。
0.2 学习目标 Learning goals
熟练使用联合、边缘、条件分布,求和法则、乘积法则和贝叶斯公式;区分独立和条件独立。
掌握高斯分布的几个封闭性质:线性变换、相加、条件化、相乘都还是高斯;会用重参数化 x = μ + σ ε x = \mu + \sigma\varepsilon x = μ + σ ε 和 Cholesky 分解采样。
理解最大似然估计;会算熵、交叉熵和 KL 散度,知道 KL 非负、不对称,知道最大似然 = 最小化前向 KL ,以及前向 KL 和反向 KL 拟合出来的分布为什么一个”覆盖”、一个”寻模”。
理解隐变量模型、边缘似然和后验;能推导 log p ( x ) = E L B O ( q ) + K L ( q ∥ p ( z ∣ x ) ) \log p(x) = \mathrm{ELBO}(q) + \mathrm{KL}(q \Vert p(z \mid x)) log p ( x ) = ELBO ( q ) + KL ( q ∥ p ( z ∣ x )) ,并用它解释 EM 算法为什么单调。
会用蒙特卡洛估计期望,知道误差按 1 / N 1/\sqrt{N} 1/ N 下降;会用重要性采样;能写出得分函数估计和重参数化估计,说出它们的适用条件和方差差别,知道基线为什么不改变期望。
理解马尔可夫链的平稳分布与收敛;能解释 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) p ( x ) 离散变量的概率(pmf)或连续变量的概率密度(pdf);从上下文区分 x ∼ p x \sim p x ∼ p x x x 是从分布 p p p 抽出的样本E x ∼ p [ f ( x ) ] \mathbb{E}_{x \sim p}[f(x)] E x ∼ p [ f ( x )] 期望:离散时 ∑ x p ( x ) f ( x ) \sum_x p(x) f(x) ∑ x p ( x ) f ( x ) ,连续时 ∫ p ( x ) f ( x ) d x \int p(x) f(x)\, dx ∫ p ( x ) f ( x ) d x N ( μ , σ 2 ) \mathcal{N}(\mu, \sigma^2) N ( μ , σ 2 ) 均值 μ \mu μ 、方差 σ 2 \sigma^2 σ 2 的高斯分布;多维时 N ( μ , Σ ) \mathcal{N}(\mu, \Sigma) N ( μ , Σ ) log \log log 自然对数(单位 nat);以 2 为底时写 log 2 \log_2 log 2 (单位 bit) K L ( p ∥ q ) \mathrm{KL}(p \Vert q) KL ( p ∥ q ) KL 散度,读作”p 相对于 q 的 KL” θ \theta θ ,ϕ \phi ϕ 模型参数;变分分布的参数
1. 概率的基本语言 · The language of probability
1.1 联合、边缘、条件
用第 1 讲农场语言的两个随机变量做例子:句子的主语动物 A A A (8 种),和句末的时间/地点短语 T T T (night、morning、day、barn、field)。生成器先均匀地选一种动物,再按这种动物的习性选时间短语,所以我们确切知道 它们的联合分布 p ( a , t ) = p ( a ) p ( t ∣ a ) p(a, t) = p(a)\, p(t \mid a) p ( a , t ) = p ( a ) p ( t ∣ a ) 。01 第 1 部分把它和 2 万句训练语料里的频率并排列出(节选):
动物 \ 时间 night morning day barn field 边缘 p ( a ) p(a) p ( a ) bat 0.091 (0.094) 0.011 (0.012) 0 0.023 (0.024) 0 0.125 cow 0 0.025 (0.024) 0.037 (0.038) 0 0.062 (0.064) 0.125 owl 0.113 (0.114) 0 0 0.013 (0.011) 0 0.125 … 边缘 p ( t ) 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
(括号里是语料频率;真实分布和语料频率的总变差距离 1 2 ∑ ∣ p − p ^ ∣ = 0.0134 \frac{1}{2}\sum |p - \hat{p}| = 0.0134 2 1 ∑ ∣ p − p ^ ∣ = 0.0134 。)
三个基本概念:
联合分布 p ( a , t ) p(a, t) p ( a , t ) :表格里的每一格,所有格加起来等于 1。
边缘分布 :把不关心的变量”加掉”。p ( t ) = ∑ a p ( a , t ) p(t) = \sum_a p(a, t) p ( t ) = ∑ a p ( a , t ) 是每一列的和,p ( a ) = ∑ t p ( a , t ) p(a) = \sum_t p(a, t) p ( a ) = ∑ t p ( a , t ) 是每一行的和。这叫求和法则 (sum rule)或边缘化 (marginalization);连续变量时求和换成积分。
条件分布 :p ( t ∣ a ) = p ( a , t ) / p ( a ) p(t \mid a) = p(a, t) / p(a) p ( t ∣ 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) p ( a , t ) = p ( a ) p ( t ∣ a ) ;用很多次就是第 1 讲的链式法则。
整门课的生成模型都是这两条法则的反复应用 :乘积法则用来定义 模型(先抽这个、再抽那个),求和法则用来算边缘似然 (把看不见的变量加掉)。
1.2 贝叶斯公式:反过来推理
模型通常告诉我们”原因 → 结果”的方向:p ( t ∣ a ) p(t \mid a) p ( t ∣ 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 ( a ) p ( t ∣ a ) = p ( t ) p ( a ∣ 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') 后验 p ( a ∣ t ) = 证据 p ( t ) p ( t ∣ a ) 似然 p ( a ) 先验 , p ( t ) = a ′ ∑ p ( t ∣ a ′ ) p ( a ′ )
01 第 2 部分:p ( night ) = 0.3597 p(\text{night}) = 0.3597 p ( night ) = 0.3597 ;
动物 先验 似然 p ( night ∣ a ) p(\text{night} \mid a) p ( night ∣ a ) 后验 p ( a ∣ night ) p(a \mid \text{night}) p ( a ∣ night ) owl 0.125 0.900 0.313 fox 0.125 0.750 0.261 bat 0.125 0.727 0.253 cat 0.125 0.500 0.174 cow、dog、hen、horse 0.125 0 0
分母 p ( t ) p(t) p ( t ) (“证据”,evidence)只负责把后验归一化,它要用求和法则把所有可能的原因都加一遍。这一项正是生成模型的麻烦所在 :动物只有 8 种,加一遍很容易;但如果”原因”是一个几百维的连续向量,这个求和就变成了算不动的高维积分(§4)。生成模型里的”推断”(inference),指的就是从结果反推原因的后验 p ( z ∣ x ) p(z \mid x) p ( z ∣ x ) 。
1.3 独立、互信息与条件独立
两个变量独立 ,当且仅当 p ( x , y ) = p ( x ) p ( y ) p(x, y) = p(x)\, p(y) p ( x , y ) = p ( x ) p ( y ) ——知道一个,对另一个毫无帮助。怎样度量”有多不独立”?用互信息 :
I ( X ; Y ) = K L ( p ( x , y ) ∥ p ( x ) p ( y ) ) = ∑ x , y p ( x , y ) log p ( x , y ) p ( x ) p ( y ) ≥ 0 I(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 I ( X ; Y ) = KL ( p ( x , y ) ∥ p ( x ) p ( y ) ) = x , y ∑ p ( x , y ) log p ( x ) p ( y ) p ( x , y ) ≥ 0
(KL 散度见 §3.3。)它等于 0 当且仅当独立,含义是”知道 Y Y Y 之后,X X X 的不确定性平均减少了多少”。
01 第 3 部分有一个值得细想的结果:
量 互信息(bit) I ( 动物 ; 时间 ) I(\text{动物}; \text{时间}) I ( 动物 ; 时间 ) 1.0374 I ( 动词 ; 时间 ) I(\text{动词}; \text{时间}) I ( 动词 ; 时间 ) 0.0316 I ( 动词 ; 时间 ∣ 动物 ) I(\text{动词}; \text{时间} \mid \text{动物}) I ( 动词 ; 时间 ∣ 动物 ) 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) p ( v , t ∣ a ) = p ( v ∣ a ) p ( t ∣ a ) 。这叫条件独立 (conditional independence),主语是它们的共同原因 。
两条教训:(1) 统计相关不等于有直接的因果联系,可能只是共同原因造成的;(2) 条件独立是让概率模型可以计算的关键结构。第 6 讲的概率图模型 就是用一张图把”谁依赖谁”画出来:A → V A \to V A → V 、A → T A \to T A → T ,从图上就能读出 V V V 和 T T T 在给定 A A A 时条件独立。
1.4 基础比率
01 第 4 部分:一个 AI 文本检测器,AI 写的文本 95% 会被标记(真阳性率),人写的文本 5% 会被误标记(假阳性率)。被标记的文本真是 AI 写的概率是多少?由贝叶斯公式,答案取决于 AI 文本本来占多少 (先验,也叫基础比率 base rate):
AI 文本的比例 p ( AI ∣ 被标记 ) p(\text{AI} \mid \text{被标记}) p ( AI ∣ 被标记 ) 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) N ( μ , σ 2 ) 的密度和对数密度是
p ( x ) = 1 σ 2 π exp ( − ( x − μ ) 2 2 σ 2 ) , log p ( x ) = − 1 2 log ( 2 π ) − log σ − ( x − μ ) 2 2 σ 2 p(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} p ( x ) = σ 2 π 1 exp ( − 2 σ 2 ( x − μ ) 2 ) , log p ( x ) = − 2 1 log ( 2 π ) − log σ − 2 σ 2 ( x − μ ) 2
对数密度是 x x x 的二次函数 ,所以尾部衰减极快:约 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) ε ∼ N ( 0 , 1 ) ⟺ x = μ + σ ε ∼ N ( μ , σ 2 )
从右往左读是标准化 ε = ( x − μ ) / σ \varepsilon = (x - \mu)/\sigma ε = ( x − μ ) / σ ;从左往右读是重参数化 (reparameterization):把”从 N ( μ , σ 2 ) \mathcal{N}(\mu, \sigma^2) N ( μ , σ 2 ) 采样”变成”从一个和参数无关 的标准正态采样,再做一个关于参数可导 的变换”。§5.3 会看到,这个改写让梯度可以穿过采样传回 μ \mu μ 和 σ \sigma σ ——它是 VAE 能够训练的关键(第 9 讲)。
2.2 多维高斯、协方差与 Cholesky 采样
d d d 维高斯 N ( μ , Σ ) \mathcal{N}(\mu, \Sigma) N ( μ , Σ ) 由均值向量 μ \mu μ 和协方差矩阵 Σ \Sigma Σ (对称正定)决定:
log p ( x ) = − d 2 log ( 2 π ) − 1 2 log det Σ − 1 2 ( 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) log p ( x ) = − 2 d log ( 2 π ) − 2 1 log det Σ − 2 1 ( x − μ ) ⊤ Σ − 1 ( x − μ )
Σ i j = C o v ( x i , x j ) \Sigma_{ij} = \mathrm{Cov}(x_i, x_j) Σ ij = Cov ( x i , x j ) ;对角线是各维的方差,非对角线描述维度之间的相关。
线性变换规则 :若 x ∼ N ( μ , Σ ) x \sim \mathcal{N}(\mu, \Sigma) x ∼ N ( μ , Σ ) ,则 y = A x + b ∼ N ( A μ + b , A Σ A ⊤ ) y = Ax + b \sim \mathcal{N}(A\mu + b,\ A\Sigma A^\top) y = A x + b ∼ N ( A μ + b , A Σ A ⊤ ) 。02 第 2 部分用 20 万个样本验证:例如 A = [ [ 1 , 1 ] , [ 0 , 2 ] ] 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 分解 Σ = L L ⊤ \Sigma = LL^\top Σ = L L ⊤ (L L L 是下三角矩阵),然后 x = μ + L ε x = \mu + L\varepsilon x = μ + L ε ,ε ∼ N ( 0 , I ) \varepsilon \sim \mathcal{N}(0, I) ε ∼ N ( 0 , I ) 。由线性变换规则,C o v ( L ε ) = L I L ⊤ = Σ \mathrm{Cov}(L\varepsilon) = L I L^\top = \Sigma Cov ( L ε ) = L I L ⊤ = Σ 。同样的分解也让对数密度更好算:log det Σ = 2 ∑ i log L i i \log\det\Sigma = 2\sum_i \log L_{ii} log det Σ = 2 ∑ 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 ( x − μ ) ⊤ Σ − 1 ( x − μ ) = ∥ L − 1 ( x − μ ) ∥ 2 ——比直接求逆更快、更稳定(prob_lab.mvn_logpdf;和直接求逆的结果一致到 10 − 6 10^{-6} 1 0 − 6 )。
2.3 相加:方差相加
两个独立 的高斯相加还是高斯,均值相加、方差相加:
x ∼ N ( μ 1 , σ 1 2 ) , y ∼ N ( μ 2 , σ 2 2 ) 独立 ⇒ x + y ∼ N ( μ 1 + μ 2 , σ 1 2 + σ 2 2 ) 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) x ∼ N ( μ 1 , σ 1 2 ) , y ∼ N ( μ 2 , σ 2 2 ) 独立 ⇒ x + y ∼ N ( μ 1 + μ 2 , σ 1 2 + σ 2 2 )
注意是方差 相加,不是标准差相加:两个标准差为 1 的独立噪声相加,标准差是 2 \sqrt{2} 2 而不是 2。(更一般地,任何独立随机变量相加方差都相加;“还是高斯”是高斯特有的。)
2.4 条件化:还是高斯
二维高斯 ( x 1 , x 2 ) (x_1, x_2) ( x 1 , x 2 ) ,标准差 σ 1 , σ 2 \sigma_1, \sigma_2 σ 1 , σ 2 ,相关系数 ρ \rho ρ 。给定 x 2 = a x_2 = a x 2 = a 时,x 1 x_1 x 1 的条件分布还是高斯:
x 1 ∣ x 2 = a ∼ N ( μ 1 + ρ σ 1 σ 2 ( a − μ 2 ) , σ 1 2 ( 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) x 1 ∣ x 2 = a ∼ N ( μ 1 + ρ σ 2 σ 1 ( a − μ 2 ) , σ 1 2 ( 1 − ρ 2 ) )
02 第 4 部分(σ 1 = 1 \sigma_1 = 1 σ 1 = 1 、σ 2 = 2 \sigma_2 = 2 σ 2 = 2 、ρ = 0.8 \rho = 0.8 ρ = 0.8 ):取 x 2 ≈ a x_2 \approx a x 2 ≈ a 的一窄条样本,条件均值随 a a a 线性移动(a = 3 a = 3 a = 3 时公式 1.200、样本 1.194),条件标准差是 0.600,比无条件的 1 小,而且和 a a a 无关 。知道了一个相关的变量,不确定性就减少了——和 §1.2”听到 at night 就更确定主语是谁”是同一件事。
2.5 扩散模型的前向过程:加 1000 次小噪声
把 §2.3 的”方差相加”反复用 1000 次,就得到了扩散模型(第 7 讲)的前向加噪过程 。DDPM(Ho et al., 2020)的做法是:
x t = 1 − β t x t − 1 + β t ε t , ε t ∼ N ( 0 , 1 ) , t = 1 , … , T x_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 x t = 1 − β t x t − 1 + β t ε t , ε t ∼ N ( 0 , 1 ) , t = 1 , … , T
β t \beta_t β t 从 10 − 4 10^{-4} 1 0 − 4 线性增加到 0.02,T = 1000 T = 1000 T = 1000 。每一步把信号缩小一点、再加一点独立噪声。两个关键性质:
方差的不动点是 1。 V a r ( x t ) = ( 1 − β t ) V a r ( x t − 1 ) + β t \mathrm{Var}(x_t) = (1 - \beta_t)\mathrm{Var}(x_{t-1}) + \beta_t Var ( x t ) = ( 1 − β t ) Var ( x t − 1 ) + β t 。如果数据已经标准化成单位方差,每一步之后方差都还是 1(“保方差”,variance preserving);否则方差会逐渐被拉向 1。
任意一步都有闭式解。 把递推展开、用”独立高斯相加方差相加”合并所有噪声项,令 α ˉ t = ∏ s = 1 t ( 1 − β s ) \bar{\alpha}_t = \prod_{s=1}^{t}(1 - \beta_s) α ˉ t = ∏ s = 1 t ( 1 − β s ) :
q ( x t ∣ x 0 ) = N ( α ˉ t x 0 , ( 1 − α ˉ t ) ) , 即 x t = α ˉ t x 0 + 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 q ( x t ∣ x 0 ) = N ( α ˉ t x 0 , ( 1 − α ˉ t ) ) , 即 x t = α ˉ t x 0 + 1 − α ˉ t ε
02 第 3 部分从一个很不像高斯的数据分布出发(±2 两个尖峰):
步数 t α ˉ t \sqrt{\bar\alpha_t} α ˉ t 逐步模拟的标准差 闭式解一步到位的标准差 与 x 0 x_0 x 0 的相关系数 ∣ x t ∣ > 1 \lvert x_t \rvert > 1 ∣ x t ∣ > 1 的比例10 0.9991 2.001 2.001 1.000 1.000 100 0.9471 1.924 1.923 0.986 0.996 300 0.6296 1.480 1.482 0.852 0.632 1000 0.0064 0.998 1.003 0.012 0.316
(标准正态里 ∣ x ∣ > 1 \lvert x \rvert > 1 ∣ x ∣ > 1 的比例是 0.317。)逐步模拟和闭式解一致;1000 步之后,两个尖峰被完全抹平成了 N ( 0 , 1 ) \mathcal{N}(0, 1) N ( 0 , 1 ) ,和 x 0 x_0 x 0 几乎不再相关。训练扩散模型时,正是用这个闭式解一步 把任意一张图加噪到任意一步。扩散模型要学的,是把这个过程倒过来 :从纯噪声出发,一步步去噪,回到数据分布。
2.6 相乘:精度加权平均
两个高斯密度 相乘(再归一化)还是高斯:
N ( x ; m 1 , s 1 2 ) ⋅ N ( x ; m 2 , s 2 2 ) ∝ N ( x ; m 1 / s 1 2 + m 2 / s 2 2 1 / s 1 2 + 1 / s 2 2 , 1 1 / s 1 2 + 1 / s 2 2 ) \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) N ( x ; m 1 , s 1 2 ) ⋅ N ( x ; m 2 , s 2 2 ) ∝ N ( x ; 1/ s 1 2 + 1/ s 2 2 m 1 / s 1 2 + m 2 / s 2 2 , 1/ s 1 2 + 1/ s 2 2 1 )
精度 (precision,方差的倒数)相加,均值是按精度加权的平均。这是贝叶斯更新的样子:先验 N ( 0 , 2 2 ) \mathcal{N}(0, 2^2) N ( 0 , 2 2 ) (不太确定)乘以一次观测给出的似然 N ( 3 , 1 2 ) \mathcal{N}(3, 1^2) N ( 3 , 1 2 ) (比较确定),后验是 N ( 2.4 , 0.894 2 ) \mathcal{N}(2.4, 0.894^2) N ( 2.4 , 0.89 4 2 ) ——更靠近更确定的一方,而且比两者都更确定(02 第 5 部分,数值积分与公式一致到小数点后四位)。第 8 讲推导扩散模型的后验 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1} \mid x_t, x_0) q ( x t − 1 ∣ x t , x 0 ) 时,就是把两个高斯这样相乘。
3. 最大似然、熵与 KL 散度 · MLE, entropy and KL
3.1 最大似然估计
给定数据 x 1 , … , x N x_1, \dots, x_N x 1 , … , x N (假设独立同分布)和一个带参数的模型 p θ p_\theta p θ ,最大似然估计 (MLE)选择让数据出现的概率最大的参数:
θ ^ = arg max θ ∏ i = 1 N p θ ( x i ) = arg max θ 1 N ∑ i = 1 N log p θ ( x i ) \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) θ ^ = arg θ max i = 1 ∏ N p θ ( x i ) = arg θ max N 1 i = 1 ∑ N log p θ ( x i )
(取对数把乘积变成求和,除以 N N N 不改变最优点。)两个经典结果(03 第 1 部分):
硬币 :p θ ( 正面 ) = θ p_\theta(\text{正面}) = \theta p θ ( 正面 ) = θ ,N N N 次里 k k k 次正面。对数似然 k log θ + ( N − k ) log ( 1 − θ ) k\log\theta + (N-k)\log(1-\theta) k log θ + ( N − k ) log ( 1 − θ ) 在 θ = k / N \theta = k/N θ = k / N 处最大——频率 。抛 50 次出现 13 次正面,MLE 是 0.260(真实值 0.3)。第 1 讲 n-gram 的”数数”就是这个结论。
高斯 :MLE 是样本均值 x ˉ \bar{x} x ˉ 和样本方差 1 N ∑ ( x i − x ˉ ) 2 \frac{1}{N}\sum(x_i - \bar{x})^2 N 1 ∑ ( x i − x ˉ ) 2 。后者有偏 :N = 20 N = 20 N = 20 时重复 2 万次,平均 3.787,而真实方差是 4(理论期望 σ 2 ( N − 1 ) / N = 3.8 \sigma^2 (N-1)/N = 3.8 σ 2 ( N − 1 ) / N = 3.8 )。原因是均值也是从同一批数据估出来的,数据离自己的均值总比离真实均值更近;除以 N − 1 N-1 N − 1 的版本是无偏的(平均 3.987)。
MLE 不保证无偏,但在样本多时有很好的性质(一致、渐近有效)。更重要的是,它和信息论里的量有一个漂亮的联系(§3.4)。
3.2 熵与交叉熵
信息量 (也叫惊奇度,surprisal):一个概率为 p p p 的事件发生时,带来 − log p -\log p − log p 的”意外”。确定的事(p = 1 p = 1 p = 1 )毫不意外;罕见的事很意外。
熵 是平均惊奇度:
H ( p ) = − ∑ x p ( x ) log p ( x ) = E x ∼ p [ − log p ( x ) ] H(p) = -\sum_x p(x)\log p(x) = \mathbb{E}_{x \sim p}[-\log p(x)] H ( p ) = − x ∑ p ( x ) log p ( x ) = E x ∼ p [ − log p ( x )]
03 第 2 部分:公平硬币 1 bit、偏硬币 [0.9, 0.1] 0.469 bit、8 面骰子 3 bit、确定的结果 0 bit。越不确定,熵越大;K K K 个结果时均匀分布的熵最大(log K \log K log K )。熵也是”平均要用多少比特来编码一个结果”的下限(香农的信源编码定理)。
交叉熵 是”数据来自 p p p 、却按 q q q 去预测(或编码)“时的平均惊奇度:
H ( p , q ) = − ∑ x p ( x ) log q ( x ) = E x ∼ p [ − log q ( x ) ] H(p, q) = -\sum_x p(x)\log q(x) = \mathbb{E}_{x \sim p}[-\log q(x)] H ( p , q ) = − x ∑ p ( x ) log q ( x ) = E x ∼ p [ − log q ( x )]
训练分类器和语言模型时用的”交叉熵损失”就是它:p p p 是数据(真实标签),q q q 是模型的预测。第 1 讲的困惑度就是交叉熵的指数。
3.3 KL 散度
K L ( p ∥ q ) = ∑ x p ( 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) KL ( p ∥ q ) = x ∑ p ( x ) log q ( x ) p ( x ) = H ( p , q ) − H ( p )
它是”用 q q q 代替真实的 p p p 时,平均每个样本多付出的惊奇度”。三个性质:
非负 (Gibbs 不等式),等于 0 当且仅当 p = q p = q p = q 。证明只用 Jensen 不等式(对凹函数 log \log log ,E [ log Y ] ≤ log E [ Y ] \mathbb{E}[\log Y] \le \log \mathbb{E}[Y] E [ log Y ] ≤ log E [ Y ] ):
− K L ( p ∥ q ) = E p [ log q ( x ) p ( x ) ] ≤ log E p [ q ( x ) p ( x ) ] = log ∑ x q ( 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 − KL ( p ∥ q ) = E p [ log p ( x ) q ( x ) ] ≤ log E p [ p ( x ) q ( x ) ] = log x ∑ q ( x ) = log 1 = 0
03 随机抽了 1 万对 5 类分布,KL 的最小值是 0.0051,从未为负。
2. 不对称 :p = [ 0.9 , 0.1 ] p = [0.9, 0.1] p = [ 0.9 , 0.1 ] 、q = [ 0.5 , 0.5 ] q = [0.5, 0.5] q = [ 0.5 , 0.5 ] 时 K L ( p ∥ q ) = 0.531 \mathrm{KL}(p \Vert q) = 0.531 KL ( p ∥ q ) = 0.531 bit,K L ( q ∥ p ) = 0.737 \mathrm{KL}(q \Vert p) = 0.737 KL ( q ∥ p ) = 0.737 bit。所以它不是距离(叫”散度”)。
3. 零概率会让它爆炸 :p p p 认为可能、q q q 却分配 0 概率的事件,会让 K L ( p ∥ q ) = ∞ \mathrm{KL}(p \Vert q) = \infty KL ( p ∥ q ) = ∞ (03:K L ( [ 0.5 , 0.5 ] ∥ [ 1 , 0 ] ) = ∞ \mathrm{KL}([0.5, 0.5] \Vert [1, 0]) = \infty KL ([ 0.5 , 0.5 ] ∥ [ 1 , 0 ]) = ∞ )——这就是第 1 讲里不平滑的 n-gram 困惑度无穷大的原因。
两个高斯之间的 KL 有闭式解(练习 3 让你推导):
K L ( N ( μ 1 , s 1 2 ) ∥ N ( μ 2 , s 2 2 ) ) = log s 2 s 1 + s 1 2 + ( μ 1 − μ 2 ) 2 2 s 2 2 − 1 2 \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} KL ( N ( μ 1 , s 1 2 ) ∥ N ( μ 2 , s 2 2 ) ) = log s 1 s 2 + 2 s 2 2 s 1 2 + ( μ 1 − μ 2 ) 2 − 2 1
03 第 4 部分把它和蒙特卡洛估计 E x ∼ p [ log p ( x ) − log q ( x ) ] \mathbb{E}_{x \sim p}[\log p(x) - \log q(x)] E x ∼ p [ log p ( x ) − log q ( x )] (20 万个样本)对照,例如 K L ( N ( 0 , 1 ) ∥ N ( 1 , 1 ) ) = 0.5000 \mathrm{KL}(\mathcal{N}(0,1) \Vert \mathcal{N}(1,1)) = 0.5000 KL ( N ( 0 , 1 ) ∥ N ( 1 , 1 )) = 0.5000 (蒙特卡洛 0.5027)。不对称性也很明显:K L ( N ( 0 , 1 ) ∥ N ( 0 , 2 2 ) ) = 0.318 \mathrm{KL}(\mathcal{N}(0,1) \Vert \mathcal{N}(0, 2^2)) = 0.318 KL ( N ( 0 , 1 ) ∥ N ( 0 , 2 2 )) = 0.318 ,反过来是 0.807——用窄分布去近似宽分布,漏掉了尾部,代价大得多。K L ( N ( μ , σ 2 ) ∥ N ( 0 , 1 ) ) \mathrm{KL}(\mathcal{N}(\mu, \sigma^2) \Vert \mathcal{N}(0, 1)) KL ( N ( μ , σ 2 ) ∥ N ( 0 , 1 )) 正是 VAE 损失里的那一项(第 9 讲)。
3.4 最大似然 = 最小化交叉熵 = 最小化 KL(p_data ‖ p_θ)
把 MLE 的目标改写一下。数据来自(我们看不见的)真实分布 p data p_{\text{data}} p data ,样本平均是期望的估计:
1 N ∑ i log p θ ( x i ) ≈ E x ∼ p data [ log p θ ( x ) ] = − H ( p data , p θ ) = − H ( p data ) − K L ( p data ∥ 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) N 1 i ∑ log p θ ( x i ) ≈ E x ∼ p data [ log p θ ( x )] = − H ( p data , p θ ) = − H ( p data ) − KL ( p data ∥ p θ )
H ( p data ) H(p_{\text{data}}) H ( p data ) 和模型无关,所以
最大化似然 ⟺ 最小化交叉熵 ⟺ 最小化 K L ( p data ∥ p θ ) \textbf{最大化似然} \iff \textbf{最小化交叉熵} \iff \textbf{最小化 } \mathrm{KL}(p_{\text{data}} \,\Vert\, p_\theta) 最大化似然 ⟺ 最小化交叉熵 ⟺ 最小化 KL ( p data ∥ p θ )
03 第 3 部分验证:2000 个样本来自 [ 5 , 3 , 2 , 1 , 1 ] / 12 [5,3,2,1,1]/12 [ 5 , 3 , 2 , 1 , 1 ] /12 ,模型 q θ = s o f t m a x ( θ ) q_\theta = \mathrm{softmax}(\theta) q θ = softmax ( θ ) 从均匀分布出发,用梯度下降(梯度 = q − p ^ = q - \hat{p} = q − p ^ ,第 1 讲练习 4)最小化平均负对数似然。每一步都有 平均 NLL = H ( p ^ ) + K L ( p ^ ∥ q ) H(\hat p) + \mathrm{KL}(\hat p \Vert q) H ( p ^ ) + KL ( p ^ ∥ q ) ;50 步后 KL 降到 0,q q q 等于经验分布,NLL 降到它的下限 H ( p ^ ) = 1.41834 H(\hat p) = 1.41834 H ( p ^ ) = 1.41834 。这就是第 1 讲说的”困惑度有理论下界”:下界是数据自身的熵。
注意 KL 的方向:期望是对数据 取的,所以 MLE 最小化的是前向 KL K L ( p data ∥ p θ ) \mathrm{KL}(p_{\text{data}} \Vert p_\theta) KL ( p data ∥ p θ ) 。方向重要吗?非常重要。
3.5 前向 KL vs 反向 KL:覆盖 vs 寻模
03 第 5 部分:目标 p = 1 2 N ( − 2 , 0.5 2 ) + 1 2 N ( 2 , 0.5 2 ) p = \frac{1}{2}\mathcal{N}(-2, 0.5^2) + \frac{1}{2}\mathcal{N}(2, 0.5^2) p = 2 1 N ( − 2 , 0. 5 2 ) + 2 1 N ( 2 , 0. 5 2 ) 是双峰的,而我们只允许用一个 高斯 q = N ( μ , σ 2 ) q = \mathcal{N}(\mu, \sigma^2) q = N ( μ , σ 2 ) 去拟合它。在网格上搜索最优的 ( μ , σ ) (\mu, \sigma) ( μ , σ ) :
目标 最优 μ 最优 σ q 在山谷 ∣ x ∣ < 1 \lvert x\rvert < 1 ∣ x ∣ < 1 的概率 p 落在 q 的 ±2σ 内 最小化 K L ( p ∥ q ) \mathrm{KL}(p \Vert q) KL ( p ∥ q ) (前向,= MLE) 0.00 2.06 0.372 1.000 最小化 K L ( q ∥ p ) \mathrm{KL}(q \Vert p) KL ( q ∥ p ) (反向) +2.00 0.50 0.023 0.477
(p p p 自己在山谷里只有 0.0225 的概率;p p p 的标准差是 0.25 + 4 = 2.06 \sqrt{0.25 + 4} = 2.06 0.25 + 4 = 2.06 。)
前向 KL (最大似然)选了 μ = 0 \mu = 0 μ = 0 、σ = 2.06 \sigma = 2.06 σ = 2.06 :正好是 p p p 的均值和标准差(矩匹配 )。它覆盖了两个峰 (mode-covering),代价是在 p p p 几乎为 0 的山谷里放了 37% 的概率——从 q q q 采样会得到大量”不像真数据”的点。
反向 KL 选了 μ = 2 \mu = 2 μ = 2 、σ = 0.5 \sigma = 0.5 σ = 0.5 :只盯住一个峰 (mode-seeking),把它拟合得完美,却完全无视另一个峰。(它的 KL 最小值是 0.693 = ln 2 \ln 2 ln 2 :q q q 和右峰完全重合,只差了”右峰只占一半质量”带来的 log 2 \log 2 log 2 。)
为什么? 看被积函数在哪里大:
K L ( p ∥ q ) = E p [ log p − log q ] \mathrm{KL}(p \Vert q) = \mathbb{E}_{p}[\log p - \log q] KL ( p ∥ q ) = E p [ log p − log q ] 在 p p p 的样本 上计算。凡是 p > 0 p > 0 p > 0 而 q ≈ 0 q \approx 0 q ≈ 0 的地方,− log q -\log q − log q 巨大——所以 q q q 必须在 p p p 有质量的每个地方都有质量,宁可铺得很宽。
K L ( q ∥ p ) = E q [ log q − log p ] \mathrm{KL}(q \Vert p) = \mathbb{E}_{q}[\log q - \log p] KL ( q ∥ p ) = E q [ log q − log p ] 在 q q q 的样本 上计算。凡是 q > 0 q > 0 q > 0 而 p ≈ 0 p \approx 0 p ≈ 0 的地方,− log p -\log p − log p 巨大——所以 q q q 绝不能把质量放到 p p p 没有的地方(比如山谷),宁可缩在一个峰里。
这是理解生成模型的一把钥匙 :
最大似然训练的模型(自回归语言模型、VAE、扩散模型的 ELBO)倾向于覆盖所有模式 :不会漏掉数据的任何一部分,但当模型容量不够时,会把概率”抹”到模式之间,样本显得模糊 或出现奇怪的组合(第 9 讲 VAE 的模糊图像)。
GAN 的目标更接近反向 KL / JS 散度:样本清晰,但容易模式崩塌 ——只生成数据的一部分(第 6 讲)。
第 11–12 讲 RLHF 里的 KL 约束 K L ( π θ ∥ π ref ) \mathrm{KL}(\pi_\theta \Vert \pi_{\text{ref}}) KL ( π θ ∥ π ref ) 是反向的:策略可以集中到参考模型的某些高概率区域,但不能跑到参考模型认为不可能的地方。
4. 隐变量与证据下界 · Latent variables and the ELBO
4.1 隐变量模型
隐变量模型 假设数据 x x x 由一个看不见的变量 z z z 生成:先 z ∼ p ( z ) z \sim p(z) z ∼ p ( z ) ,再 x ∼ p ( x ∣ z ) x \sim p(x \mid z) x ∼ p ( x ∣ z ) 。最简单的例子是高斯混合模型 (GMM):z z z 是”属于哪一类”,x ∣ z = k ∼ N ( μ k , σ k 2 ) x \mid z = k \sim \mathcal{N}(\mu_k, \sigma_k^2) x ∣ z = k ∼ N ( μ k , σ 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] π = [ 0.5 , 0.3 , 0.2 ] , μ = [ − 3 , 0 , 4 ] , σ = [ 1 , 0.5 , 1.5 ]
我们只看得到 x x x 。两个基本量:
边缘似然 (marginal likelihood)p ( x ) = ∑ z p ( z ) p ( x ∣ z ) p(x) = \sum_z p(z)\, p(x \mid z) p ( x ) = ∑ z p ( z ) p ( x ∣ z ) :把看不见的 z z z 加掉(§1.1 的求和法则)。
后验 p ( z ∣ x ) = p ( x , z ) / p ( x ) p(z \mid x) = p(x, z)/p(x) p ( z ∣ x ) = p ( x , z ) / p ( x ) :看到 x x x 之后,它来自哪个分量(§1.2 的贝叶斯公式)。EM 里叫”责任”(responsibility)。
04 第 1 部分:x = 0 x = 0 x = 0 时后验几乎全部在 z = 1 z = 1 z = 1 (0.985);x = − 1.0 x = -1.0 x = − 1.0 时 z = 0 z = 0 z = 0 和 z = 1 z = 1 z = 1 的后验分别是 0.453 和 0.544——此时”它属于哪一类”本身就不确定。即使用真实参数,按后验猜 z z z 也只能猜对 97.3%。
在 GMM 里 z z z 只有 3 个取值,求和很容易。但在图像生成模型里,z z z 是几百维的连续向量,p ( x ∣ z ) p(x \mid z) p ( x ∣ z ) 是一个神经网络,p ( x ) = ∫ p ( z ) p ( x ∣ z ) d z p(x) = \int p(z)\, p(x \mid z)\, dz p ( x ) = ∫ p ( z ) p ( x ∣ z ) d z 算不出来 ——既不能直接最大化似然,也不能精确算后验。下面的 ELBO 就是为此而生的。
4.2 Jensen 不等式
对凹函数 f f f (例如 log \log log ),f ( E [ Y ] ) ≥ E [ f ( Y ) ] f(\mathbb{E}[Y]) \ge \mathbb{E}[f(Y)] f ( E [ Y ]) ≥ E [ f ( Y )] :“先平均再取对数”不小于”先取对数再平均”。直觉:log \log log 的曲线向下弯,任意两点连线都在曲线下方。§3.3 已经用它证明了 KL 非负。
4.3 ELBO:两种推导
推导一(Jensen) :引入任意一个关于 z z z 的分布 q ( z ) q(z) q ( z ) (要求在 p ( x , z ) > 0 p(x, z) > 0 p ( x , z ) > 0 的地方 q > 0 q > 0 q > 0 ),
log p ( x ) = log ∑ z p ( x , z ) = log ∑ z q ( z ) p ( x , z ) q ( z ) = log E q [ p ( x , z ) q ( z ) ] ≥ E q [ log p ( x , z ) q ( z ) ] ≡ E L B O ( 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) log p ( x ) = log z ∑ p ( x , z ) = log z ∑ q ( z ) q ( z ) p ( x , z ) = log E q [ q ( z ) p ( x , z ) ] ≥ E q [ log q ( z ) p ( x , z ) ] ≡ ELBO ( q )
它叫证据下界 (Evidence Lower BOund):p ( x ) p(x) p ( x ) 是”证据”(§1.2 贝叶斯公式的分母),ELBO 是它的对数的下界。
推导二(恒等式) :Jensen 只告诉我们”≥“,差多少?对任意 q q q ,
log p ( x ) = E q [ log p ( x ) ] = E q [ log p ( x , z ) p ( z ∣ x ) ] = E q [ log p ( x , z ) q ( z ) ] + E q [ log q ( z ) p ( z ∣ x ) ] = E L B O ( q ) + K L ( 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 ) = E q [ log p ( x )] = E q [ log p ( z ∣ x ) p ( x , z ) ] = E q [ log q ( z ) p ( x , z ) ] + E q [ log p ( z ∣ x ) q ( z ) ] = ELBO ( q ) + KL ( q ( z ) ∥ p ( z ∣ x ) )
第一个等号因为 log p ( x ) \log p(x) log p ( x ) 不依赖 z z z ;第二个等号就是贝叶斯公式 p ( z ∣ x ) = p ( x , z ) / p ( x ) p(z \mid x) = p(x, z)/p(x) p ( z ∣ x ) = p ( x , z ) / p ( x ) 移项;第三个等号是在分子分母同乘 q ( z ) q(z) q ( z ) 后拆开。这是一个恒等式,不是近似 。
04 第 2 部分对 x = − 1.5 x = -1.5 x = − 1.5 (log p ( x ) = − 2.6959 \log p(x) = -2.6959 log p ( x ) = − 2.6959 )试了 5 种 q q q :
q ELBO(q) KL(q ‖ p(z|x)) ELBO + KL 均匀 [1/3, 1/3, 1/3] −5.0090 2.3131 −2.6959 随机 [0.151, 0.254, 0.596] −6.7265 4.0306 −2.6959 错得离谱 [0.01, 0.01, 0.98] −9.4377 6.7418 −2.6959 真实后验 [0.960, 0.039, 0.001] −2.6959 0.0000 −2.6959
这个恒等式告诉我们三件事:
ELBO ≤ log p(x) ,差距恰好是 q q q 和真实后验之间的 KL。q q q 等于后验时下界取到等号。
最大化 ELBO 是一个好的替代目标 :ELBO 变大,要么是 log p ( x ) \log p(x) log p ( x ) 变大了(模型更好地解释了数据),要么是 KL 变小了(q q q 更接近后验)——两者都是我们想要的。
ELBO 只需要 p ( x , z ) p(x, z) p ( x , z ) (模型的联合分布,按生成过程直接写出来),不需要算不动的 p ( x ) p(x) p ( x ) 。
ELBO 还常写成另一种形式(把 p ( x , z ) = p ( x ∣ z ) p ( z ) p(x, z) = p(x \mid z)\, p(z) p ( x , z ) = p ( x ∣ z ) p ( z ) 代入):
E L B O ( q ) = E q [ log p ( x ∣ z ) ] ⏟ 重建项:用 z 解释 x − K L ( 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{ 别离先验太远}} ELBO ( q ) = 重建项:用 z 解释 x E q [ log p ( x ∣ z )] − 正则项: q 别离先验太远 KL ( q ( z ) ∥ p ( z ))
第 9 讲 VAE 的损失函数就是这个式子(取负号),其中第二项用 §3.3 的高斯 KL 闭式解计算。
4.4 EM 算法
如果后验 p ( z ∣ x ) p(z \mid x) p ( z ∣ x ) 能精确算(像 GMM 这样),就可以交替做两步:
E 步 :固定参数 θ \theta θ ,令 q ( z ) = p θ ( z ∣ x ) q(z) = p_\theta(z \mid x) q ( z ) = p θ ( z ∣ x ) 。由 §4.3 的恒等式,此时 KL = 0,ELBO 贴紧 log p θ ( x ) \log p_\theta(x) log p θ ( x ) 。
M 步 :固定 q q q ,对 θ \theta θ 最大化 ELBO。对 GMM,就是把后验 r i k = p ( z i = k ∣ x i ) r_{ik} = p(z_i = k \mid x_i) r ik = p ( z i = k ∣ x i ) 当作”软标签”,按权重重新估计:π k = 1 N ∑ i r i k \pi_k = \frac{1}{N}\sum_i r_{ik} π k = N 1 ∑ i r ik ,μ k = ∑ i r i k x i ∑ i r i k \mu_k = \frac{\sum_i r_{ik}x_i}{\sum_i r_{ik}} μ k = ∑ i r ik ∑ i r ik x i ,σ k 2 = ∑ i r i k ( x i − μ k ) 2 ∑ i r i k \sigma_k^2 = \frac{\sum_i r_{ik}(x_i - \mu_k)^2}{\sum_i r_{ik}} σ k 2 = ∑ i r ik ∑ i r ik ( x i − μ k ) 2 ——如果知道每个点属于哪一类,最大似然就是这样”数”出来的。
为什么似然单调不降? 设第 n n n 轮参数为 θ n \theta_n θ n 。E 步后 E L B O ( q n , θ n ) = log p θ n ( x ) \mathrm{ELBO}(q_n, \theta_n) = \log p_{\theta_n}(x) ELBO ( q n , θ n ) = log p θ n ( x ) ;M 步让 E L B O ( q n , θ n + 1 ) ≥ E L B O ( q n , θ n ) \mathrm{ELBO}(q_n, \theta_{n+1}) \ge \mathrm{ELBO}(q_n, \theta_n) ELBO ( q n , θ n + 1 ) ≥ ELBO ( q n , θ n ) ;而对任意 q q q 都有 log p θ n + 1 ( x ) ≥ E L B O ( q n , θ n + 1 ) \log p_{\theta_{n+1}}(x) \ge \mathrm{ELBO}(q_n, \theta_{n+1}) log p θ n + 1 ( x ) ≥ ELBO ( q n , θ n + 1 ) 。三者连起来,log p θ n + 1 ( x ) ≥ log p θ n ( x ) \log p_{\theta_{n+1}}(x) \ge \log p_{\theta_n}(x) log p θ n + 1 ( x ) ≥ log p θ n ( x ) 。
04 第 3 部分:1000 个样本,从一个糟糕的初始猜测(μ = [ − 1 , 0.5 , 1 ] \mu = [-1, 0.5, 1] μ = [ − 1 , 0.5 , 1 ] 、σ = [ 2 , 2 , 2 ] \sigma = [2, 2, 2] σ = [ 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) p ( x ∣ z ) 是神经网络 不能 学一个编码器 q ϕ ( z ∣ x ) q_\phi(z \mid x) q ϕ ( z ∣ x ) ,用梯度最大化 ELBO 扩散模型(第 7、8 讲) 1000 步加噪的中间结果 x 1 . . x T x_1..x_T x 1 .. x T q q q 是固定的加噪过程,所需的后验有闭式解最大化 ELBO,化简成”预测噪声”
后验算不出来时,退而求其次:让 q q q 来自一个可以调参数的分布族 (例如对角高斯 q ϕ ( z ) = N ( μ ϕ , d i a g ( σ ϕ 2 ) ) q_\phi(z) = \mathcal{N}(\mu_\phi, \mathrm{diag}(\sigma_\phi^2)) q ϕ ( z ) = N ( μ ϕ , diag ( σ ϕ 2 )) ),把 ELBO 同时对模型参数 θ \theta θ 和变分参数 ϕ \phi ϕ 求梯度、一起优化。这叫变分推断 (variational inference,Blei et al. 2018 的综述)。VAE 是它的神经网络版本:用一个神经网络(编码器)直接从 x x x 输出 q q q 的参数(“摊销推断”,amortized inference)。
对 ELBO 中的 E q ϕ [ ⋯ ] \mathbb{E}_{q_\phi}[\cdots] E q ϕ [ ⋯ ] 求关于 ϕ \phi ϕ 的梯度时,期望本身依赖于 ϕ \phi ϕ ——这正是下一节的问题。
5. 蒙特卡洛估计与梯度估计 · Monte Carlo and gradient estimators
5.1 蒙特卡洛估计
期望 E x ∼ p [ f ( x ) ] \mathbb{E}_{x \sim p}[f(x)] E x ∼ p [ f ( x )] 往往算不出闭式解(高维积分)。蒙特卡洛估计 :从 p p p 抽 N N N 个样本,用样本平均代替期望:
E p [ f ( x ) ] ≈ 1 N ∑ i = 1 N f ( x i ) , 标准误差 = S t d ( 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}} E p [ f ( x )] ≈ N 1 i = 1 ∑ N f ( x i ) , 标准误差 = N Std ( f )
它是无偏 的,误差按 1 / N 1/\sqrt{N} 1/ N 下降。05 第 1 部分估计 E [ cos X ] \mathbb{E}[\cos X] E [ cos X ] (X ∼ N ( 0 , 1 ) X \sim \mathcal{N}(0,1) X ∼ N ( 0 , 1 ) ,精确值 e − 1 / 2 = 0.6065 e^{-1/2} = 0.6065 e − 1/2 = 0.6065 ):
N 200 次估计的实际标准差 实际标准差 × √N 10 0.1503 0.475 1,000 0.0142 0.450 100,000 0.0015 0.461
最后一列基本是常数:样本多 100 倍,误差才缩小 10 倍 。好消息是这个速度和维度无关 ——这是蒙特卡洛在高维问题里无可替代的原因。单次估计自己报告的标准误差(样本标准差 / √N)和 200 次重复的实际波动一致,所以不需要重复实验也能知道误差多大。
5.2 重要性采样
要估计一个极小的概率,比如 P ( X > 4 ) = 3.167 × 10 − 5 P(X > 4) = 3.167 \times 10^{-5} P ( X > 4 ) = 3.167 × 1 0 − 5 ,直接采样 1 万次(05 第 2 部分)一个样本都没落进去 :估计值是 0,报告的标准误差也是 0——它甚至不知道自己错了。
重要性采样 (importance sampling):换一个”把样本放在有事发生的地方”的提议分布 q q q ,再用权重修正:
E p [ f ( x ) ] = ∑ x q ( x ) p ( x ) q ( x ) f ( x ) = E q [ 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] E p [ f ( x )] = x ∑ q ( x ) q ( x ) p ( x ) f ( x ) = E q [ f ( x ) q ( x ) p ( x ) ]
用 q = N ( 4 , 1 ) q = \mathcal{N}(4, 1) q = N ( 4 , 1 ) ,1 万个样本里一半落在 x > 4 x > 4 x > 4 ,估计值 3.108 × 10 − 5 3.108 \times 10^{-5} 3.108 × 1 0 − 5 ,相对误差约 2%。权重差异太大时,少数样本主宰估计,可以用有效样本数 E S S = ( ∑ w ) 2 / ∑ w 2 \mathrm{ESS} = (\sum w)^2 / \sum w^2 ESS = ( ∑ w ) 2 / ∑ w 2 诊断(这里 1804)。
GenAI 联系 :第 12 讲的 PPO 用旧策略采样、用比值 π θ ( a ) / π old ( a ) \pi_\theta(a)/\pi_{\text{old}}(a) π θ ( a ) / π old ( a ) 修正,从而复用旧样本——这就是重要性采样;比值离 1 太远时估计不可靠,所以 PPO 要把它裁剪(clip)在 [ 1 − ϵ , 1 + ϵ ] [1-\epsilon, 1+\epsilon] [ 1 − ϵ , 1 + ϵ ] 里。
5.3 对期望求梯度:重参数化
训练 VAE、做强化学习时,要算的是期望的梯度 :∇ μ E z ∼ p μ [ f ( z ) ] \nabla_\mu \mathbb{E}_{z \sim p_\mu}[f(z)] ∇ μ E z ∼ p μ [ f ( z )] 。难点是参数 μ \mu μ 出现在采样分布 里,不能简单地”对样本求导”。
重参数化 (reparameterization / pathwise 估计):把 z z z 写成参数和无关噪声的可导函数,z = μ + σ ε z = \mu + \sigma\varepsilon z = μ + σ ε (§2.1),于是期望变成对 ε \varepsilon ε 取,和参数无关:
∇ μ E z ∼ 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] ∇ μ E z ∼ N ( μ , σ 2 ) [ f ( z )] = ∇ μ E ε ∼ N ( 0 , 1 ) [ f ( μ + σ ε )] = E ε [ f ′ ( μ + σ ε ) ]
梯度可以”穿过”采样传回 μ \mu μ 和 σ \sigma σ ,用自动微分就能算(第 1 讲)。条件是:(1) f f f 可导;(2) 采样能写成这种”参数 + 噪声”的可导形式(连续分布通常可以,离散分布不行)。
5.4 得分函数估计(REINFORCE)与基线
另一种办法不需要 f f f 可导,叫得分函数估计 (score function estimator,也叫 REINFORCE 或 log-derivative trick)。利用 ∇ θ p θ = p θ ∇ θ log p θ \nabla_\theta p_\theta = p_\theta \nabla_\theta \log p_\theta ∇ θ p θ = p θ ∇ θ log p θ :
∇ θ E p θ [ f ( z ) ] = ∑ z f ( z ) ∇ θ p θ ( z ) = ∑ z p θ ( z ) f ( z ) ∇ θ log p θ ( z ) = E p θ [ 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] ∇ θ E p θ [ f ( z )] = z ∑ f ( z ) ∇ θ p θ ( z ) = z ∑ p θ ( z ) f ( z ) ∇ θ log p θ ( z ) = E p θ [ f ( z ) ∇ θ log p θ ( z ) ]
只需要能算 f ( z ) f(z) f ( z ) 的值 和 log p θ ( z ) \log p_\theta(z) log p θ ( z ) 的梯度。对高斯,∇ μ log p = ( z − μ ) / σ 2 \nabla_\mu \log p = (z - \mu)/\sigma^2 ∇ μ log p = ( z − μ ) / σ 2 。
基线 (baseline):因为 E p θ [ ∇ θ log p θ ( z ) ] = ∑ z ∇ θ p θ ( z ) = ∇ θ ∑ z p θ ( 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 E p θ [ ∇ θ log p θ ( z )] = ∑ z ∇ θ p θ ( z ) = ∇ θ ∑ z p θ ( z ) = ∇ θ 1 = 0 ,所以对任何不依赖 z z z 的常数 b b b ,
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] E [ ( f ( z ) − b ) ∇ θ log p θ ( z ) ] = E [ f ( z ) ∇ θ log p θ ( z ) ]
减去基线不改变期望,却能大幅降低方差:f f f 本身可能总是很大(比如奖励总是正的),估计器的噪声主要来自这个”平均水平”;减掉它,只留下”比平均好多少”的信号。
05 第 3 部分(μ = 1 \mu = 1 μ = 1 ,每次估计 100 个样本,重复 2000 次):
函数 估计器 真实梯度 估计的平均 估计的标准差 f ( z ) = z 2 f(z) = z^2 f ( z ) = z 2 得分函数 2.0000 2.0054 0.5377 f ( z ) = z 2 f(z) = z^2 f ( z ) = z 2 得分函数 + 基线 2.0000 2.0015 0.4215 f ( z ) = z 2 f(z) = z^2 f ( z ) = z 2 重参数化 2.0000 2.0020 0.1949 f ( z ) = 1 [ z > 0 ] f(z) = \mathbb{1}[z > 0] f ( z ) = 1 [ z > 0 ] 得分函数 0.2420 0.2425 0.0750 f ( z ) = 1 [ z > 0 ] f(z) = \mathbb{1}[z > 0] f ( z ) = 1 [ z > 0 ] 得分函数 + 基线 0.2420 0.2421 0.0494 f ( z ) = 1 [ z > 0 ] f(z) = \mathbb{1}[z > 0] f ( z ) = 1 [ z > 0 ] 重参数化 0.2420 0.0000 0.0000
对光滑的 z 2 z^2 z 2 ,三种都是无偏的,但重参数化的方差最小 (0.195 vs 0.538):它利用了 f f f 的导数(“往哪边走 f f f 会变大”),得分函数只知道 f f f 的值。这就是 VAE 用重参数化的原因。
对不可导 的 0/1 函数,重参数化错了 :阶跃函数几乎处处导数为 0,可期望 P ( z > 0 ) P(z > 0) P ( z > 0 ) 确实随 μ \mu μ 变化(真实梯度是标准正态密度在 1 处的值 0.242)。得分函数仍然无偏。
基线把得分函数估计的标准差降低了约 20%–35%(0.538 → 0.422,0.075 → 0.049)。
离散变量只能用得分函数。 05 第 4 部分:4 个”动作”的策略 π = s o f t m a x ( θ ) \pi = \mathrm{softmax}(\theta) π = softmax ( θ ) ,奖励 r = [ 1 , 0 , 0.5 , 2 ] r = [1, 0, 0.5, 2] r = [ 1 , 0 , 0.5 , 2 ] 。采样一个离散的 a a a 不是 θ \theta θ 的可导函数,无法”把梯度穿过采样”;而得分函数估计 E [ r ( a ) ∇ θ log π θ ( a ) ] \mathbb{E}[r(a)\, \nabla_\theta \log \pi_\theta(a)] E [ r ( a ) ∇ θ log π θ ( a )] (其中 ∇ θ log s o f t m a x ( θ ) a = o n e h o t ( a ) − π \nabla_\theta \log \mathrm{softmax}(\theta)_a = \mathrm{onehot}(a) - \pi ∇ θ log softmax ( θ ) a = onehot ( a ) − π )与精确梯度一致,加基线 b = E [ r ] b = \mathbb{E}[r] b = E [ r ] 后标准差从 0.170 降到 0.094。
把”动作”换成”语言模型生成的一段回答”(一串离散 token),把 r r r 换成奖励模型的打分,这就是 RLHF 里的策略梯度 (第 11、12 讲);换成”答案对不对”,就是训练推理模型的 RLVR (第 20 讲)。RLHF 里的 advantage、GRPO 用”同一题多个回答的平均分”做基线,都是这一节的基线思想。
6. 马尔可夫链与采样 · Markov chains and sampling
6.1 马尔可夫链与平稳分布
马尔可夫链 :一串随机状态 x 0 , x 1 , x 2 , … x_0, x_1, x_2, \dots x 0 , x 1 , x 2 , … ,下一个状态只依赖当前状态(马尔可夫性):p ( x t + 1 ∣ x 0 , … , x t ) = p ( x t + 1 ∣ x t ) p(x_{t+1} \mid x_0, \dots, x_t) = p(x_{t+1} \mid x_t) p ( x t + 1 ∣ x 0 , … , x t ) = p ( x t + 1 ∣ x t ) 。第 1 讲的 bigram 就是一条马尔可夫链。有限状态时用转移矩阵 P P P 描述,P i j P_{ij} P ij 是从 i i i 转到 j j j 的概率(每行和为 1)。若第 t t t 步的分布是行向量 d t d_t d t ,则 d t + 1 = d t P d_{t+1} = d_t P d 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 ⊤ P^\top P ⊤ 特征值为 1 的特征向量):[0.4565, 0.2826, 0.2609]。一条链跑 10 万天,各天气的时间占比也是它(遍历性 :时间平均 = 分布平均)。收敛是几何级数的:距离每一步大约乘以 P P P 的第二大特征值的绝对值 (这里 0.473)。它越接近 1,链”忘记起点”越慢。(这些结论要求链不可约且非周期,这里满足。)
6.2 MCMC:反过来设计一条链
上面是”给定链,求平稳分布”。马尔可夫链蒙特卡洛 (MCMC)反过来:给定一个想采样的分布 p p p ,设计一条以它为平稳分布的链 ,然后跑足够久,链上的状态就是(近似的)p p p 的样本。
为什么要这么麻烦?因为很多分布我们只知道密度的形状 ,不知道归一化常数:贝叶斯后验 p ( z ∣ x ) ∝ p ( x ∣ z ) p ( z ) p(z \mid x) \propto p(x \mid z)\,p(z) p ( z ∣ x ) ∝ p ( x ∣ z ) p ( z ) (分母算不动)、能量模型 p ( x ) ∝ e − E ( x ) p(x) \propto e^{-E(x)} p ( x ) ∝ e − E ( x ) 。MCMC 只需要密度的比值 ,常数自动约掉。
6.3 Metropolis–Hastings
最简单的 MCMC:从当前的 x x x 提议 x ′ = x + s ε x' = x + s\varepsilon x ′ = x + s ε (s s s 是步长),以概率 min ( 1 , p ( x ′ ) / p ( x ) ) \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) p ( x ) T ( x → x ′ ) = p ( x ′ ) T ( x ′ → x ) ——“从 x x x 流到 x ′ x' x ′ 的概率质量”等于反方向的。对称提议下,设 p ( x ′ ) < p ( 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 ⋅ p ( x ) p ( x ′ ) = g p ( x ′ ) ,右边是 p ( x ′ ) ⋅ g ⋅ 1 p(x') \cdot g \cdot 1 p ( x ′ ) ⋅ g ⋅ 1 ,相等(g g g 是对称的提议密度)。满足细致平衡的链,p p p 就是它的平稳分布(练习 9)。
06 第 2 部分:目标是双峰 1 2 N ( − 3 , 0.7 2 ) + 1 2 N ( 3 , 0.7 2 ) \frac{1}{2}\mathcal{N}(-3, 0.7^2) + \frac{1}{2}\mathcal{N}(3, 0.7^2) 2 1 N ( − 3 , 0. 7 2 ) + 2 1 N ( 3 , 0. 7 2 ) ,从 x = − 3 x = -3 x = − 3 出发跑 2 万步(丢掉前 2000 步”预热”):
步长 接受率 落在右峰的比例(应为 0.5) 在两峰间切换的次数 0.1 0.952 0.000 0 1.0 0.606 0.457 5 3.0 0.329 0.499 923 30.0 0.059 0.500 525
步长太小:几乎每步都接受,但每步只挪一点点,2 万步都没离开起点的峰——链”卡”在一个模式里 ,样本看起来像单峰分布,而且接受率高得让人误以为一切正常。
步长 1.0:只切换了 5 次,右峰比例偏离 0.5,混合不充分。
步长和两峰间距同一量级(3.0)时混合最好。
步长 30:接受率只有 6%,链大部分时间原地不动;但在一维里每次被接受的跳跃都可能落到另一个峰,所以照样混合得不错。在高维 里,随机的大跳跃几乎全被拒绝,这招就失效了。
高维、多峰的分布里,MCMC 混合得极慢。这是扩散模型”从噪声出发、逐步去噪”而不是直接在数据分布上跑 MCMC 的原因之一。
6.4 朗之万动力学:只用得分函数采样
得分函数 (score function)∇ x log p ( x ) \nabla_x \log p(x) ∇ x log p ( x ) :在 x x x 处,往哪个方向走对数密度上升最快。它不需要归一化常数 :∇ x log ( p ~ ( x ) / Z ) = ∇ x log p ~ ( x ) \nabla_x \log(\tilde p(x)/Z) = \nabla_x \log \tilde p(x) ∇ x log ( p ~ ( x ) / Z ) = ∇ x log p ~ ( x ) 。(注意:这里的”得分”是对数据 x x x 求梯度,§5.4 的”得分函数估计”是对参数 θ \theta θ 求梯度,名字相同、对象不同。)
朗之万动力学 (Langevin dynamics)只用得分函数就能采样:
x ← x + η 2 ∇ x log 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) x ← x + 2 η ∇ x log p ( x ) + η ε , ε ∼ N ( 0 , I )
第一项是沿着对数密度往上爬(梯度上升),第二项是随机扰动。步长 η \eta η 足够小、步数足够多时,点的分布收敛到 p p p 。
06 第 3 部分:目标是 8 个高斯(σ = 0.3)排在半径 2 的圆上(prob_lab.ring_of_gaussians,第 6 讲 GAN 的经典玩具数据),4000 个点从 N ( 0 , 3 2 I ) \mathcal{N}(0, 3^2 I) N ( 0 , 3 2 I ) 出发:
样本 到最近中心的平均距离 平均 log p \log p log p 8 个模式各分到的点数 真实样本 0.369 −2.458 472–536 起点 2.171 −42.401 — 朗之万 500 步(η = 0.01) 0.383 −2.519 482–522 只做梯度上升 500 步(无噪声) 0.000 −1.509 — 朗之万 500 步,全部从第 0 个峰出发 0.380 −2.507 5–1692
朗之万 500 步后,样本的统计和真实样本非常接近:只用 ∇ log p \nabla \log p ∇ log p 就采到了正确的分布 。
去掉噪声 ,所有点都挤到了峰顶(平均距离 0.000),平均 log p \log p log p 反而更高——它找到的是”最可能的点”,而不是”分布的样本”。噪声项保证了样本有正确的散布。这个区别(采样 vs 优化 )在生成模型里很要紧:我们要的是多样的样本,不是最可能的那一张图。
峰间混合很慢 :全部从第 0 个峰出发时,500 步后仍有 42.3% 的点留在原峰(应为 12.5%)。和 MCMC 一样,朗之万很难跨越低密度的山谷。
GenAI 联系 :得分模型 / 扩散模型的采样就是朗之万动力学的升级版(第 7、8 讲):(1) 得分函数 ∇ x log p ( x ) \nabla_x \log p(x) ∇ x log p ( x ) 不知道,就用神经网络从数据里学 出来;(2) 为了解决”峰间混合慢”,先在加了大噪声的(模糊的、峰与峰连成一片的)分布上采样,再逐渐降低噪声,一步步细化到清晰的样本。§2.5 的前向加噪过程正是提供了这一串由模糊到清晰的分布。
工具 本讲 后面在哪里 贝叶斯公式、后验 §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 ( x t ∣ x 0 ) q(x_t \mid x_0) q ( x t ∣ x 0 ) ) 高斯相乘 §2.6 第 8 讲(后验 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1} \mid x_t, x_0) q ( x t − 1 ∣ 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
求和法则 (边缘化)和乘积法则 (链式法则)是一切的基础;贝叶斯公式 从”原因 → 结果”的模型反推”结果 → 原因”的后验,分母(证据)要把所有原因加一遍——高维时算不动,这是生成模型麻烦的根源。
独立 ≠ 条件独立 :动词和时间短语在农场语言里不独立(I = 0.0316 bit),但给定主语后条件独立(I = 0)。先验(基础比率)和似然同样重要。
高斯是封闭的积木 :线性变换、独立相加、条件化、相乘都还是高斯。重参数化 x = μ + σ ε x = \mu + \sigma\varepsilon x = μ + σ ε ;Cholesky 采样 x = μ + L ε x = \mu + L\varepsilon x = μ + L ε ;反复”缩小一点 + 加一点噪声”1000 次就把任何数据变成 N ( 0 , 1 ) \mathcal{N}(0, 1) N ( 0 , 1 ) ,而且有闭式解 x t = α ˉ t x 0 + 1 − α ˉ t ε x_t = \sqrt{\bar\alpha_t}x_0 + \sqrt{1-\bar\alpha_t}\varepsilon x t = α ˉ t x 0 + 1 − α ˉ t ε 。
最大似然 = 最小化交叉熵 = 最小化 KL(p_data ‖ p_θ) 。KL 非负、不对称、遇到零概率会爆炸。前向 KL 覆盖所有模式 (矩匹配,会在山谷里放概率),反向 KL 只盯住一个模式 ——这是”VAE 模糊、GAN 模式崩塌”的统一解释。
ELBO 恒等式 log p ( x ) = E L B O ( q ) + K L ( q ∥ p ( z ∣ x ) ) \log p(x) = \mathrm{ELBO}(q) + \mathrm{KL}(q \Vert p(z \mid x)) log p ( x ) = ELBO ( q ) + KL ( q ∥ p ( z ∣ x )) 对任意 q q q 精确成立。似然算不动时最大化 ELBO;后验能精确算时就是 EM(似然单调不降,但有局部最优:10 个起点里 6 个到达最好的解);算不出来时就是变分推断 / VAE。
蒙特卡洛 无偏,误差 ∝ 1 / N 1/\sqrt{N} 1/ N 且与维度无关;罕见事件用重要性采样 。
期望的梯度 有两种估计:重参数化 方差小但要求可导和连续;得分函数 (REINFORCE)只要能算函数值,离散变量只能用它;基线 不改变期望、降低方差。这是 VAE 与 RLHF / RLVR 在技术上的分水岭。
马尔可夫链 收敛到平稳分布,速度由第二大特征值决定;MCMC 只用密度比值采样,但多峰时混合极慢;朗之万动力学 只用得分函数采样,噪声项把”优化”变成”采样”——扩散模型的采样就是它的升级版。
9. 常见误区 · Common pitfalls
“两个变量在生成过程里互不影响,所以它们独立。” 有共同原因时它们是相关的,只是在给定共同原因时条件独立。
“检测器准确率 95%,所以被它标记的 95% 都是对的。” 后验取决于基础比率。
“两个独立的标准差为 1 的噪声相加,标准差是 2。” 是方差相加,标准差是 2 \sqrt{2} 2 。
“KL 散度是两个分布之间的距离。” 它不对称,也不满足三角不等式;方向决定了拟合出来的分布是”覆盖”还是”寻模”。
“最大似然训练出来的模型样本质量最好。” 最大似然最小化的是前向 KL,容量不够时会把概率抹到模式之间;样本质量和似然是两回事。
“ELBO 是 log p(x) 的近似值。” 它是下界,差距恰好是 K L ( q ∥ p ( z ∣ x ) ) \mathrm{KL}(q \Vert p(z \mid x)) KL ( q ∥ p ( z ∣ x )) ;q q q 很差时下界可以很松。
“EM 一定能找到最大似然解。” 它只保证不下降,会停在局部最优;高斯混合还可能退化(某个分量的方差收缩到 0,似然趋于无穷,练习 5)。
“重参数化总比得分函数好。” 它要求 f f f 可导、变量连续;对 0/1 奖励它给出 0,是有偏的。离散 token 上只能用得分函数。
“MCMC 的接受率越高越好。” 步长 0.1 时接受率 95%,链却 2 万步没离开一个峰。
“去掉朗之万的噪声能让样本更好(log p 更高)。” 那样得到的是众数,不是样本:所有点挤到峰顶,多样性消失。
10. 练习 · Exercises
练习 1(贝叶斯)。 用 §1.1 的农场语言:只有 bat、cat、owl、hen 四种动物会出现在 barn,p ( barn ∣ a ) p(\text{barn} \mid a) p ( barn ∣ a ) 分别是 2/11、3/8、1/10、4/10(来自它们的习性表),每种动物的先验是 1/8。(a) 算 p ( barn ) p(\text{barn}) p ( barn ) 。(b) 算 p ( a ∣ barn ) p(a \mid \text{barn}) p ( a ∣ barn ) 。(c) 为什么 hen 的后验最大,尽管 cat 的似然和它差不多?
参考答案
(a) p ( barn ) = 1 8 ( 2 / 11 + 3 / 8 + 1 / 10 + 4 / 10 ) = 1 8 × 1.0568 = 0.1321 p(\text{barn}) = \frac{1}{8}(2/11 + 3/8 + 1/10 + 4/10) = \frac{1}{8} \times 1.0568 = 0.1321 p ( barn ) = 8 1 ( 2/11 + 3/8 + 1/10 + 4/10 ) = 8 1 × 1.0568 = 0.1321 (01 表里的 0.132)。
(b) p ( a ∣ barn ) = p ( barn ∣ a ) ⋅ 1 8 / 0.1321 p(a \mid \text{barn}) = p(\text{barn} \mid a) \cdot \frac{1}{8} / 0.1321 p ( a ∣ barn ) = p ( barn ∣ a ) ⋅ 8 1 /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 不等式证明 K L ( p ∥ q ) ≥ 0 \mathrm{KL}(p \Vert q) \ge 0 KL ( p ∥ q ) ≥ 0 ,并说明等号何时成立。(b) 证明 I ( X ; Y ) ≥ 0 I(X; Y) \ge 0 I ( X ; Y ) ≥ 0 ,等号当且仅当独立。
参考答案
(a) 见 §3.3:− K L = E p [ log ( q / p ) ] ≤ log E p [ q / p ] = log ∑ x : p ( x ) > 0 q ( 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 − KL = E p [ log ( q / p )] ≤ log E p [ q / p ] = log ∑ x : p ( x ) > 0 q ( x ) ≤ log 1 = 0 。Jensen 的等号要求 q / p q/p q / p 在 p p p 的支撑上是常数,再加上两者都归一化,就只能 p = q p = q p = q 。
(b) I ( X ; Y ) = K L ( p ( x , y ) ∥ p ( x ) p ( y ) ) ≥ 0 I(X; Y) = \mathrm{KL}(p(x,y) \Vert p(x)p(y)) \ge 0 I ( X ; Y ) = KL ( p ( x , y ) ∥ p ( x ) p ( y )) ≥ 0 ,由 (a),等号当且仅当 p ( x , y ) = p ( x ) p ( y ) p(x,y) = p(x)p(y) p ( x , y ) = p ( x ) p ( y ) ,即独立。
练习 3(高斯 KL)。 (a) 推导 K L ( N ( μ 1 , s 1 2 ) ∥ N ( μ 2 , s 2 2 ) ) \mathrm{KL}(\mathcal{N}(\mu_1, s_1^2) \Vert \mathcal{N}(\mu_2, s_2^2)) KL ( N ( μ 1 , s 1 2 ) ∥ N ( μ 2 , s 2 2 )) 的闭式解。(b) 特别地,写出 VAE 里的 K L ( N ( μ , σ 2 ) ∥ N ( 0 , 1 ) ) \mathrm{KL}(\mathcal{N}(\mu, \sigma^2) \Vert \mathcal{N}(0, 1)) KL ( N ( μ , σ 2 ) ∥ N ( 0 , 1 )) 。(c) 用 prob_lab.kl_gauss 验证 μ = 1 , σ = 0.5 \mu = 1, \sigma = 0.5 μ = 1 , σ = 0.5 时的值。
参考答案
(a) K L = E p [ log p − log q ] \mathrm{KL} = \mathbb{E}_{p}[\log p - \log q] KL = E p [ log p − log q ] ,代入两个对数密度:
E p [ − log s 1 − ( x − μ 1 ) 2 2 s 1 2 + log s 2 + ( x − μ 2 ) 2 2 s 2 2 ] \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] E p [ − log s 1 − 2 s 1 2 ( x − μ 1 ) 2 + log s 2 + 2 s 2 2 ( x − μ 2 ) 2 ] 。用 E p [ ( x − μ 1 ) 2 ] = s 1 2 \mathbb{E}_p[(x-\mu_1)^2] = s_1^2 E p [( x − μ 1 ) 2 ] = s 1 2 和 E p [ ( x − μ 2 ) 2 ] = s 1 2 + ( μ 1 − μ 2 ) 2 \mathbb{E}_p[(x-\mu_2)^2] = s_1^2 + (\mu_1-\mu_2)^2 E p [( x − μ 2 ) 2 ] = s 1 2 + ( μ 1 − μ 2 ) 2 ,得 log s 2 s 1 − 1 2 + s 1 2 + ( μ 1 − μ 2 ) 2 2 s 2 2 \log\frac{s_2}{s_1} - \frac12 + \frac{s_1^2 + (\mu_1-\mu_2)^2}{2s_2^2} log s 1 s 2 − 2 1 + 2 s 2 2 s 1 2 + ( μ 1 − μ 2 ) 2 。
(b) K L ( N ( μ , σ 2 ) ∥ N ( 0 , 1 ) ) = 1 2 ( μ 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) KL ( N ( μ , σ 2 ) ∥ N ( 0 , 1 )) = 2 1 ( μ 2 + σ 2 − 1 − log σ 2 ) 。
(c) 1 2 ( 1 + 0.25 − 1 − log 0.25 ) = 1 2 ( 0.25 + 1.3863 ) = 0.8181 \frac12(1 + 0.25 - 1 - \log 0.25) = \frac12(0.25 + 1.3863) = 0.8181 2 1 ( 1 + 0.25 − 1 − log 0.25 ) = 2 1 ( 0.25 + 1.3863 ) = 0.8181 ,和 03 第 4 部分最后一行的闭式解 0.8181(蒙特卡洛 0.8182)一致。
练习 4(扩散的前向过程)。 用 DDPM 的线性调度(β \beta β 从 10 − 4 10^{-4} 1 0 − 4 到 0.02,T = 1000 T = 1000 T = 1000 )。(a) 证明:若 V a r ( x t − 1 ) = 1 \mathrm{Var}(x_{t-1}) = 1 Var ( x t − 1 ) = 1 ,则 V a r ( x t ) = 1 \mathrm{Var}(x_t) = 1 Var ( x t ) = 1 。(b) 由 x t = α ˉ t x 0 + 1 − α ˉ t ε x_t = \sqrt{\bar\alpha_t}x_0 + \sqrt{1-\bar\alpha_t}\varepsilon x t = α ˉ t x 0 + 1 − α ˉ t ε ,第 500 步时信号和噪声的系数各是多少?(可以用几行 numpy 算。)(c) 第 1000 步的 α ˉ T \bar\alpha_T α ˉ T 是多少?为什么扩散模型的采样可以从 N ( 0 , 1 ) \mathcal{N}(0, 1) N ( 0 , 1 ) 开始?
参考答案
(a) x t − 1 x_{t-1} x t − 1 和 ε t \varepsilon_t ε t 独立,V a r ( x t ) = ( 1 − β t ) ⋅ 1 + β t ⋅ 1 = 1 \mathrm{Var}(x_t) = (1-\beta_t)\cdot 1 + \beta_t \cdot 1 = 1 Var ( x t ) = ( 1 − β t ) ⋅ 1 + β t ⋅ 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 α ˉ 500 = 0.280 、1 − α ˉ 500 = 0.960 \sqrt{1 - \bar\alpha_{500}} = 0.960 1 − α ˉ 500 = 0.960 :到一半时信号只剩 28%,噪声已经占主导。
(c) α ˉ T ≈ 4.0 × 10 − 5 \bar\alpha_T \approx 4.0 \times 10^{-5} α ˉ T ≈ 4.0 × 1 0 − 5 ,α ˉ T ≈ 0.0064 \sqrt{\bar\alpha_T} \approx 0.0064 α ˉ T ≈ 0.0064 :x T x_T x T 里几乎没有 x 0 x_0 x 0 的信息,它的分布和 N ( 0 , 1 ) \mathcal{N}(0, 1) N ( 0 , 1 ) 几乎一样(02 第 3 部分:相关系数 0.012)。所以生成时直接从 N ( 0 , 1 ) \mathcal{N}(0, 1) N ( 0 , 1 ) 抽一个 x T x_T x T ,再一步步去噪,就相当于从前向过程的终点出发往回走。
练习 5(GMM 的退化解)。 (a) 证明:如果允许某个分量的 σ k → 0 \sigma_k \to 0 σ k → 0 并把它的中心放在某个数据点上,GMM 的似然可以趋于无穷。(b) prob_lab.GMM1D.em_step 是怎样防止这一点的?(c) 这说明了最大似然的什么问题?
参考答案
(a) 设 μ 1 = x 1 \mu_1 = x_1 μ 1 = x 1 ,则 p ( x 1 ) ≥ π 1 N ( x 1 ; x 1 , σ 1 2 ) = π 1 / ( σ 1 2 π ) → ∞ p(x_1) \ge \pi_1 \mathcal{N}(x_1; x_1, \sigma_1^2) = \pi_1/(\sigma_1\sqrt{2\pi}) \to \infty p ( x 1 ) ≥ π 1 N ( x 1 ; x 1 , σ 1 2 ) = π 1 / ( σ 1 2 π ) → ∞ ;其余数据点由其他分量解释,似然有限且不为 0。乘积趋于无穷。
(b) 方差下限 np.maximum(var, 1e-6)(以及 N k N_k N k 的下限 1e-12)。实践中还会加先验(MAP 估计)或在发现退化时重新初始化该分量。
(c) 最大似然在模型过于灵活时会”钻空子”:一个把所有概率质量集中在训练点上的模型,训练似然最高,却完全不能泛化。这和第 1 讲 5-gram 照抄训练句、过拟合是同一类问题;连续密度的似然没有上界,这一点要特别小心。
练习 6(蒙特卡洛的样本量)。 用直接采样估计 p = P ( X > 4 ) ≈ 3.17 × 10 − 5 p = P(X > 4) \approx 3.17 \times 10^{-5} p = P ( X > 4 ) ≈ 3.17 × 1 0 − 5 ,想让相对标准误差达到 10%,大约需要多少个样本?重要性采样只用了 1 万个样本就做到了 2%,相当于节省了多少倍?
参考答案
指示函数的方差是 p ( 1 − p ) p(1-p) p ( 1 − p ) ,标准误差 p ( 1 − p ) / N \sqrt{p(1-p)/N} p ( 1 − p ) / N ,相对标准误差 ( 1 − p ) / ( p N ) \sqrt{(1-p)/(pN)} ( 1 − p ) / ( pN ) 。令它等于 0.1:N = ( 1 − p ) / ( 0.01 p ) ≈ 3.2 × 10 6 N = (1-p)/(0.01p) \approx 3.2 \times 10^6 N = ( 1 − p ) / ( 0.01 p ) ≈ 3.2 × 1 0 6 。要达到 2% 还要再乘 25,约 7.9 × 10 7 7.9 \times 10^7 7.9 × 1 0 7 个样本。重要性采样用 10 4 10^4 1 0 4 个就做到了,节省约 8000 倍。代价是需要一个好的提议分布——在高维里找到它往往很难。
练习 7(基线为什么不改变期望)。 (a) 证明 E p θ [ ∇ θ log p θ ( z ) ] = 0 \mathbb{E}_{p_\theta}[\nabla_\theta \log p_\theta(z)] = 0 E p θ [ ∇ θ log p θ ( z )] = 0 。(b) 如果基线 b b b 依赖于被采样的 z z z 本身,还成立吗?(c) GRPO 用”同一道题的一组回答的平均奖励”做基线,这个基线依赖于当前回答吗?
参考答案
(a) 离散时 ∑ z p θ ( z ) ∇ θ log p θ ( z ) = ∑ z ∇ θ p θ ( z ) = ∇ θ ∑ z p θ ( 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 ∑ z p θ ( z ) ∇ θ log p θ ( z ) = ∑ z ∇ θ p θ ( z ) = ∇ θ ∑ z p θ ( z ) = ∇ θ 1 = 0 ;连续时把求和换成积分。
(b) 不成立:E [ b ( z ) ∇ log p ( z ) ] \mathbb{E}[b(z)\nabla\log p(z)] E [ b ( z ) ∇ log p ( z )] 一般不为 0,会引入偏差。基线可以依赖于”状态”(例如题目、上下文),但不能依赖于被评估的那个动作本身。
(c) 严格说,组平均里包含了当前这个回答自己的奖励,所以有一点依赖;当组大小为 G G G 时,这一项的权重是 1 / G 1/G 1/ G ,会让梯度按 ( G − 1 ) / G (G-1)/G ( G − 1 ) / G 缩小(相当于学习率的微小变化)。也有实现用”除当前回答外的其他回答的平均”(leave-one-out)来得到严格无偏的基线。第 20 讲会再讨论。
练习 8(对 σ 求梯度)。 对 f ( z ) = z 2 f(z) = z^2 f ( z ) = z 2 、z ∼ N ( μ , σ 2 ) z \sim \mathcal{N}(\mu, \sigma^2) z ∼ N ( μ , σ 2 ) :(a) 精确的 ∇ σ E [ f ( z ) ] \nabla_\sigma \mathbb{E}[f(z)] ∇ σ E [ f ( z )] 是多少?(b) 写出重参数化估计和得分函数估计(提示:∇ σ log p = ( z − μ ) 2 σ 3 − 1 σ \nabla_\sigma \log p = \frac{(z-\mu)^2}{\sigma^3} - \frac{1}{\sigma} ∇ σ log p = σ 3 ( z − μ ) 2 − σ 1 )。(c) 改一改 05 的代码,比较两者的方差(μ = 1 \mu = 1 μ = 1 ,σ = 1 \sigma = 1 σ = 1 )。
参考答案
(a) E [ z 2 ] = μ 2 + σ 2 \mathbb{E}[z^2] = \mu^2 + \sigma^2 E [ z 2 ] = μ 2 + σ 2 ,所以 ∇ σ = 2 σ = 2 \nabla_\sigma = 2\sigma = 2 ∇ σ = 2 σ = 2 。
(b) 重参数化:z = μ + σ ε z = \mu + \sigma\varepsilon z = μ + σ ε ,∇ σ f = 2 z ε = 2 ( μ + σ ε ) ε \nabla_\sigma f = 2z\varepsilon = 2(\mu + \sigma\varepsilon)\varepsilon ∇ σ f = 2 z ε = 2 ( μ + σ ε ) ε ,期望 2 σ 2\sigma 2 σ ✓。得分函数:f ( z ) ( ( z − μ ) 2 σ 3 − 1 σ ) f(z)\big(\frac{(z-\mu)^2}{\sigma^3} - \frac{1}{\sigma}\big) f ( z ) ( σ 3 ( z − μ ) 2 − σ 1 ) 。
(c) 自己运行验证:两者的平均都应接近 2;重参数化的方差应明显更小(和第 3 部分对 μ 的结论一样)。这里不给具体数字,以你的运行结果为准。
练习 9(细致平衡 ⇒ 平稳)。 证明:若转移核 T T T 满足 p ( x ) T ( x → x ′ ) = p ( x ′ ) T ( x ′ → x ) p(x)T(x \to x') = p(x')T(x' \to x) p ( x ) T ( x → x ′ ) = p ( x ′ ) T ( x ′ → x ) 对所有 x , x ′ x, x' x , x ′ 成立,则 p p p 是平稳分布,即 ∑ x p ( x ) T ( x → x ′ ) = p ( x ′ ) \sum_x p(x)T(x \to x') = p(x') ∑ x p ( x ) T ( x → x ′ ) = p ( x ′ ) 。
参考答案
∑ x p ( x ) T ( x → x ′ ) = ∑ x p ( x ′ ) T ( x ′ → x ) = p ( x ′ ) ∑ x T ( 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 p ( x ) T ( x → x ′ ) = ∑ x p ( x ′ ) T ( x ′ → x ) = p ( x ′ ) ∑ x T ( x ′ → x ) = p ( x ′ ) ,最后一步因为从 x ′ x' x ′ 出发转到所有状态的概率之和为 1。细致平衡是充分条件,不是必要条件:§6.1 的天气链就不满足细致平衡,但照样有平稳分布。
练习 10(采样 vs 优化)。 06 第 3 部分去掉噪声后,所有点挤到了峰顶,平均 log p \log p log p 是 −1.509,比真实样本的 −2.458 还高。(a) 为什么”平均对数密度更高”反而说明样本不对?(b) 联系第 1 讲:用温度 0 的贪心解码生成文字,类似于朗之万的哪种情况?
参考答案
(a) 真实样本的平均 log p \log p log p 是 − H ( p ) -H(p) − H ( p ) (负熵),它是一个确定的值;样本比它”更可能”,说明它们集中在高密度区域、缺少应有的散布。好的样本要在统计上和真实样本一致,而不是越可能越好。8 个高斯的密度峰值处 log p \log p log p 约为 log 1 8 − log ( 2 π ⋅ 0.09 ) = − 1.509 \log\frac{1}{8} - \log(2\pi \cdot 0.09) = -1.509 log 8 1 − log ( 2 π ⋅ 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 讲开始才大量用到。