整套 diffusion 笔记的数学打底。这一讲只放纯数学工具——后面所有概率部分(贝叶斯/变分推断/EM/VAE/DDPM/Score SDE)都会反复用到这里。读完这章你不会立刻看见 diffusion 的样子,但后面公式不再让你卡住。
1. 核心动机:为什么是”扩散”?
2015 年之前,生成模型主要有几条路:
- VAE(2013):用变分下界,但生成质量有限
- GAN(2014):效果好但训练不稳定,没有显式概率
- 自回归模型(PixelRNN 等):生成慢,不适合连续数据
- Normalizing Flow:要求可逆架构,表达力受限
Sohl-Dickstein 想要的是:既有显式概率(像 VAE),训练又稳定,表达力还强。
灵感来自非平衡热力学。考虑一滴墨水滴入水中:
- 正向过程:墨水从有结构(集中一点)逐渐扩散成无结构(均匀分布)。这个过程简单、可解析。
- 逆向过程:让均匀分布的水”凝聚”回一滴墨水。这看起来违反热力学第二定律(熵减),物理上不可能自发发生。但如果我们知道每一步该怎么做(学出来的逆过程),数学上是可以的。
这就是 diffusion model 的核心思想:用一个简单的、可解析的破坏过程,然后学习它的逆过程。
2. 高斯分布的一些性质
一维高斯 $\mathcal{N}(x; \mu, \sigma^2)$ 的密度:
多维高斯 $\mathcal{N}(x; \mu, \Sigma)$ 的密度:
关键性质 —— 高斯的可加性:如果 $x \sim \mathcal{N}(\mu_1, \sigma_1^2)$ 且 $y \mid x \sim \mathcal{N}(ax, \sigma_2^2)$,那么边际 $y \sim \mathcal{N}(a\mu_1, a^2\sigma_1^2 + \sigma_2^2)$。这个性质后面 DDPM 会大量用。
3. KL 散度
衡量两个分布的”差异”:
性质:非负、不对称、$D_{\text{KL}}(q|p) = 0 \iff q = p$。
两个高斯之间的 KL 有闭式解(这个非常重要,后面会反复用):
第 7 节会专门讲为什么”闭式”这件事这么关键。
4. 马尔可夫链
序列 $x_0, x_1, \ldots, x_T$ 满足马尔可夫性:
即”未来只依赖于现在,与过去无关”。联合分布可以分解:
diffusion 的前向加噪过程就是一条马尔可夫链——每一步只看上一步。
5. 蒙特卡洛估计
5.1 问题的起点:期望算不出来
我们经常遇到这种形式:
比如训练损失 $\mathbb{E}_{x \sim p_{\text{data}}}[\mathcal{L}(x; \theta)]$、ELBO、物理里的配分函数、金融里的期权定价……
这些积分大多数情况下没有解析解。维度一高(比如 $x$ 是 1000 维),数值积分(网格法)也完全不可行——计算量随维度指数爆炸,这叫”维度诅咒”。
5.2 蒙特卡洛的核心思想
用样本平均近似期望。
如果我们能从 $p(x)$ 里采样出 $x_1, x_2, \ldots, x_N$(独立同分布),那么:
就这么简单。把”积分”变成”采样后求平均”。
为什么这能行? 两个数学保证:
(1) 大数定律:当 $N \to \infty$,
(2) 中心极限定理:估计的误差服从
也就是误差大约是 $O(1/\sqrt{N})$。这意味着想把误差减半,要 4 倍样本;减到 1/10,要 100 倍样本。慢,但和维度无关 —— 这是蒙特卡洛最神奇的地方,完全打破了维度诅咒。
一个直观例子:估计 π
经典例子。在 $[0,1]^2$ 单位正方形里随机撒点,计算落在四分之一圆 $x^2 + y^2 \leq 1$ 里的比例,乘以 4 就近似 $\pi$。
为什么?因为
撒 $N$ 个点,落在圆里的有 $k$ 个,$\pi \approx 4k/N$。
1 | N=100: π ≈ 3.16 (误差 ~0.02) |
完美体现 $O(1/\sqrt{N})$ 的收敛速度。
5.3 偏差 vs 方差
蒙特卡洛估计有两个关键性质:
(1) 无偏性(unbiased):
估计的期望等于真值。这是好性质——只要采足够多次,平均会对。
(2) 方差:
$N$ 越大方差越小。但如果 $\text{Var}(f(x))$ 本身很大,即使 $N$ 大,单次估计也很不稳。这是 Sohl-Dickstein 原始 ELBO 训练困难的根源——后面 DDPM 那一讲会详细讲。
5.4 在深度学习里 $N=1$ 就够
实际训练里通常 $N = 1$ 就够了——因为我们做随机梯度下降,每个 batch 里有很多 $x$,跨 batch 的随机性已经平均掉了估计噪声。
在 diffusion 里更具体:训练时,对每个数据点 $x_0$:
- 从 ${1, \ldots, T}$ 均匀采一个 $t$
- 从 $q(x_t \mid x_0)$ 采一个 $x_t$
- 计算这一项的损失
这就是用单样本蒙特卡洛估计完整的 ELBO。每次只看一个 $t$,看似很粗,但跨 batch、跨 epoch 平均下来,梯度的期望是对的。
蒙特卡洛会失效的几种情况
理论上 $O(1/\sqrt{N})$ 不依赖维度,看起来无敌。但实际有几个陷阱:
(1) 方差爆炸:如果 $f(x)$ 在 $p(x)$ 下方差极大(比如 $f$ 在 $p$ 的尾部取极大值),需要的 $N$ 可能大到不实用。这激发了重要性采样(importance sampling):换个分布采。
(2) 采样本身困难:能做蒙特卡洛的前提是能从 $p(x)$ 采样。但很多时候我们只知道 $p(x)$ 的非归一化形式 $\tilde{p}(x) \propto p(x)$,没法直接采。这激发了 MCMC(马尔可夫链蒙特卡洛)、Langevin dynamics 等方法——后面讲 score-based model 时会用到这些。
(3) 有偏估计的陷阱:有些量看起来能蒙特卡洛,但其实有偏。最典型的是 $\log \mathbb{E}[X] \neq \mathbb{E}[\log X]$(这正是 Jensen 不等式)。理论上可以蒙特卡洛估计 $p_\theta(x) \approx \frac{1}{N}\sum_i \frac{p_\theta(x, z_i)}{q(z_i \mid x)}$,然后取 $\log$。但这是有偏的(且方差极大),所以我们绕开它,改用 ELBO——ELBO 是无偏估计的(对 $\mathbb{E}_q[\log \cdots]$ 而言),代价是它只是下界不是真值。
5.5 要点
- 蒙特卡洛 = 用样本平均近似期望
- 大数定律保证收敛,中心极限定理给出 $O(1/\sqrt{N})$ 的误差,不依赖维度
- 实际训练里 $N = 1$ 就够,因为 SGD 的批量平均已经在做”更多采样”
- 估计的方差直接决定训练稳定性
- 当不能直接采样时,需要 MCMC、Langevin 等更高级的方法
6. 闭式解
6.1 什么是闭式解?
闭式解(closed-form solution):用有限多个标准运算和函数(加减乘除、根号、指数、对数、三角函数等)直接写出来的精确表达式。
对比的是:
- 数值解:得通过迭代算法逼近(比如牛顿法)
- 采样估计:得通过随机采样平均(比如蒙特卡洛)
举例对比:
| 问题 | 闭式解? | 形式 |
|---|---|---|
| $\int_{-\infty}^\infty x e^{-x^2/2}\, dx$ | ✓ 有 | $= 0$(直接算) |
| $\int_{-\infty}^\infty e^{-x^2/2}\, dx$ | ✓ 有 | $= \sqrt{2\pi}$(高斯归一化) |
| $\int_0^1 e^{-x^2}\, dx$ | ✗ 无 | 只能数值积分(误差函数 erf) |
| 一元二次方程 $ax^2+bx+c=0$ | ✓ 有 | $x = \frac{-b \pm \sqrt{b^2-4ac}}{2a}$ |
| 五次方程通解 | ✗ 无 | 阿贝尔-鲁菲尼定理:不存在根式解 |
直观理解:闭式解 = “可以写在纸上的公式”。
6.2 为什么”闭式”这件事很重要?
机器学习里,”闭式” vs “需要近似”决定了两件实际的事:
1. 计算效率:闭式一行代码,一次浮点运算,$O(1)$ 算完。非闭式要么数值迭代(可能不收敛),要么蒙特卡洛(要采样很多次)。
2. 梯度精确:闭式公式可以直接对参数求导(自动微分一路畅通)。蒙特卡洛估计的梯度本身就有噪声,$N=1$ 时方差大,训练不稳。
所以一个量是不是闭式,直接决定它能不能高效、稳定地参与训练。
6.3 KL 散度和闭式的关系
回忆 KL 的定义:
这是个积分。对一般的 $p, q$,这个积分没有闭式——只能蒙特卡洛估计。
但在某些特殊的分布族之间,这个积分有闭式。最重要的:
高斯之间的 KL(diffusion 的核心)
两个一维高斯 $\mathcal{N}(\mu_1, \sigma_1^2)$ 和 $\mathcal{N}(\mu_2, \sigma_2^2)$:
多维各向同性 $\mathcal{N}(\mu_1, \sigma^2 I)$ 和 $\mathcal{N}(\mu_2, \sigma^2 I)$($d$ 维):
注意! 第二个公式简洁得吓人——当两个分布方差相同时,KL 就是均值之差的平方除以方差。
其他有闭式 KL 的分布族
- 两个伯努利分布
- 两个分类分布(categorical)
- 两个指数分布
- 两个 Dirichlet 分布
- 一般地,任何两个属于同一指数族的分布
但两个不同分布族之间的 KL 通常没有闭式(比如高斯和 Cauchy,或者高斯和混合高斯)。
6.4 这怎么决定了 diffusion 的设计?
DDPM 把 ELBO 改写成
而 $q$ 和 $p_\theta$ 都被设计成高斯——于是直接套高斯 KL 闭式:
最小化它等于最小化 $| \tilde\mu - \mu_\theta |^2$ ——一个干净的均方误差。训练 diffusion 本质上变成了一个回归问题。
后来 DDPM 进一步用重参数化把目标换成噪声 $\epsilon$,得到最终的:
——所有这些干净美丽的形式,根源都是高斯 KL 有闭式。
闭式 vs 蒙特卡洛 vs 数值积分 全景对比
| 方式 | 何时可用 | 误差 | 速度 |
|---|---|---|---|
| 闭式 | 极少数特殊情况(高斯 KL 等) | 0(精确) | 极快 |
| 蒙特卡洛 | 任何能采样的情况 | $O(1/\sqrt{N})$ | 中等(需多次采样) |
| 数值积分 | 低维($\leq 3$ 维)且光滑 | 取决于网格 | 维度高时不可用 |
机器学习里我们的优先级:能闭式就闭式,不能闭式才退而求其次用蒙特卡洛。这就是 diffusion 一直在追求的事。
6.5 要点
- 闭式解:用标准运算和函数直接写出的精确表达式
- 闭式 → 计算快、梯度精确、训练稳定
- 一般 KL 没有闭式,但同分布族之间的 KL 有闭式(高斯之间是最重要的)
- DDPM 改写 ELBO 让每一项变成两个高斯的 KL → 套闭式公式 → 训练目标变成漂亮的 MSE
- 这是为什么 diffusion 选高斯、为什么改写 ELBO 如此关键的根本数学原因
数学打底到这里。下一讲我们用这些工具搭起贝叶斯推断 + 变分推断 + ELBO 的概率骨架,这是后面 EM、VAE、DDPM、Score SDE 共用的母板。