技术博客

扩散模型的前向过程与 score matching:加噪去噪背后的数学

第 27 / 147 篇 · 2025-04-07 · ai · 扩散模型score matching生成模型

扩散模型(DDPM, Ho et al. 2020)可以看成两个方向相反的过程拼在一起:前向(forward)把数据 $x_0$ 一步一步加高斯噪声,直到 $x_T$ 变成标准正态;反向(reverse)训练一个网络逐步去噪,从纯噪声走回数据。把这两半拼起来的胶水是上一篇的 ELBO,但拆开看,每一半各自有独立的数学内容:前向过程是个精心设计的马尔可夫链,反向训练是一种叫 score matching 的估计技术。

前向过程:为什么选马尔可夫高斯

前向过程定义成马尔可夫链,每一步加少量高斯噪声:

$$ q(x_t\mid x_{t-1})=\mathcal{N}\!\left(\sqrt{1-\beta_t}\,x_{t-1},\ \beta_t I\right), $$

$\beta_t$ 是第 $t$ 步的噪声强度,通常取很小时刻表($10^{-4}$ 量级起步)。写成采样形式就是 $x_t=\sqrt{1-\beta_t}\,x_{t-1}+\sqrt{\beta_t}\,\epsilon$,$\epsilon\sim\mathcal{N}(0,I)$。

关键在两个高斯复合还是高斯,所以整条链可以闭式坍缩:从 $x_0$ 直接跳到任意 $x_t$,

$$ x_t=\sqrt{\bar\alpha_t}\,x_0+\sqrt{1-\bar\alpha_t}\,\epsilon,\qquad \alpha_t=1-\beta_t,\quad \bar\alpha_t=\prod_{s=1}^{t}\alpha_s. $$

推导只需归纳:假设 $x_{t-1}=\sqrt{\bar\alpha_{t-1}}x_0+\sqrt{1-\bar\alpha_{t-1}}\epsilon'$,代入一步加噪,两个独立高斯的线性组合仍是高斯,方差相加恰好凑出 $1-\bar\alpha_t$。这个闭式有两个工程红利:训练时任意时刻 $t$ 的样本可以一步采出,不用真跑 $t$ 步链;且 $\bar\alpha_T\to0$(时刻表的设计保证)使 $q(x_T)\approx\mathcal{N}(0,I)$,给反向过程一个已知的起点分布。

选高斯的深层原因是计算可行性——马尔可夫高斯链有闭式边缘,使 ELBO 里所有条件期望都能解析配平;换成别的噪声族,训练目标立即失去闭式。

ELBO 坍缩成噪声回归

把 $q$ 的马尔可夫结构代入 ELBO,按 $\ln q(x_{t-1}|x_t,x_0)$ 与 $\ln p_\theta(x_{t-1}|x_t)$ 配对整理(DDPM 附录 B 的完整推导,核心技巧是条件化 $x_0$ 后后验也是高斯),会得到一堆 KL 项的求和,每一项都是高斯之间的 KL。两个高斯的 KL 只由均值差决定(方差取 $q$ 的后验方差,作为常数吸收),而 $q(x_{t-1}|x_t,x_0)$ 的均值有闭式:

$$ \tilde\mu_t(x_t,x_0)=\frac{1}{\sqrt{\alpha_t}}\left(x_t-\frac{\beta_t}{\sqrt{1-\bar\alpha_t}}\,\epsilon\right). $$

于是每个 KL 项等价于让网络预测的均值逼近这个由真实噪声 $\epsilon$ 表达的均值。把预测参数化为噪声预测 $\epsilon_\theta(x_t,t)$,整个 ELBO(差一个与 $\theta$ 无关的常数)就是

$$ \mathcal{L}=\sum_{t}\mathbb{E}_{x_0,\epsilon}\left[\left\|\epsilon_\theta\big(\sqrt{\bar\alpha_t}x_0+\sqrt{1-\bar\alpha_t}\epsilon,\ t\big)-\epsilon\right\|^2\right], $$

工程上再简化成随机取一个 $t$ 的单项(DDPM 的简化目标,效果反而更好)。训练扩散模型 = 用 MSE 教网络从加噪图里猜出当初加进去的噪声,这就是 Stable Diffusion 里 UNet 每天的全部工作。

score matching:避开归一化常数的估计

以上是从 ELBO 视角看到的。Song & Ermon (2019) 的 score matching 视角给出同一件事的另一种解释,而且更通用。定义 score 为对数密度的梯度 $s(x)=\nabla_x\ln p(x)$。注意 $\nabla_x\ln p(x)=\nabla_x p(x)/p(x)$,分子分母的归一化常数相消——score 不知道也不需要知道 $p$ 的归一化常数。这把"估计密度"这个带归一化难题的问题,换成了"估计 score"这个逐点回归问题。

难处是 score 对 $x$ 的依赖里有 $\ln q(x_t)$,真值算不出。denoising score matching 的解法:不直接匹配 $q(x_t)$ 的 score,匹配条件分布 $q(x_t|x_0)$ 的 score。对加噪样本 $x_t=\sqrt{\bar\alpha_t}x_0+\sqrt{1-\bar\alpha_t}\epsilon$,条件高斯的 score 是闭式:

$$ \nabla_{x_t}\ln q(x_t|x_0)=-\frac{\epsilon}{\sqrt{1-\bar\alpha_t}}. $$

所以目标 $\mathbb{E}\|s_\theta(x_t,t)+\epsilon/\sqrt{1-\bar\alpha_t}\|^2$ 与 DDPM 的噪声预测目标只差一个时间相关的缩放——DDPM 的网络 $\epsilon_\theta$ 就是在预测(负的)score。两种推导,同一个网络。

朗之万动力学:score 怎样变成采样器

有了 score 怎么采样?朗之万动力学(Langevin dynamics)给出答案:从任意点出发迭代

$$ x\leftarrow x+\frac{\eta}{2}\,\nabla_x\ln p(x)+\sqrt{\eta}\,z,\qquad z\sim\mathcal{N}(0,I), $$

平稳分布恰是 $p$。直觉:$\nabla\ln p$ 指向密度上升最快的方向,是确定性漂移;$\sqrt{\eta}\,z$ 是随机扰动防陷局部。漂移和扩散两项平衡,长时间极限下样本按 $p$ 分布。把 score 换成学到的 $s_\theta$ 就是"annealed Langevin dynamics"——多噪声级别逐级退火采样。

DDPM 的反向链可以看成朗之万动力学的离散化:$\epsilon_\theta$ 给出的方向是 score 方向,一步的方差 $\sqrt{\beta_t}$ 就是朗之万步长里的噪声项。两种采样器(DDPM 的马尔可夫反向链 vs 朗之万迭代)在 score 视角下统一了,后来 DDIM 等加速方法做的正是"换离散化格式"——保持相同的边缘分布,减少离散步数。

扩散过程总览:前向加噪可闭式,反向去噪学 score 前向(固定,不训练) x₀ 数据 清晰图 x_t 中间 半噪声 x_T 纯噪 N(0,I) x_t = √ᾱ_t·x₀ + √(1−ᾱ_t)·ε 闭式:任意 t 一步采样 反向(训练 ε_θ 网络) x_T 纯噪 起点已知 x_t 去噪 ε_θ 给方向 x₀ 生成 清晰图 score:s = ∇ln p = −ε/√(1−ᾱ_t) loss:‖ε_θ(x_t,t) − ε‖² score matching 的目标转换 ∇ln p 消掉归一化常数 → 可回归 朗之万:x ← x + η/2·s + √η·z 收敛到 p

小结

前向过程的马尔可夫高斯链因高斯复合的闭式而可坍缩成单步采样公式,$\bar\alpha_t\to0$ 的设计给出已知终点;ELBO 在高斯假设下化简为噪声预测的 MSE,而 score matching 从另一个入口得到同一目标——网络学的是对数密度梯度,归一化常数自然消失。采样侧,朗之万动力学说明"沿 score 走加小噪声"就以 $p$ 为平稳分布,DDPM 反向链是它的离散化。三个名字(DDPM、score matching、朗之万采样)描述的是同一座桥的桥面、桥墩和通行规则。