Score SDE:分数生成模型与随机微分方程

定义

Score-based 生成模型(分数生成模型)直接学习数据分布对数密度的梯度——分数(score):

s(x)=∇xlog⁡p(x)s(x) = \nabla_x \log p(x)

它指向概率密度增长最快的方向,是一个向量场。模型 sθ(x)s_\theta(x) 学会这个分数场后,用 Langevin 采样从纯噪声迭代「爬山」生成样本。

SDE 视角(Song et al., 2021)则把离散的加噪过程推广为连续时间的随机微分方程,从而用一套统一框架同时描述 DDPM、Score Matching 等方法——前向是「往数据里注入噪声」的 SDE,反向是「从噪声恢复数据」的反向 SDE。

直观理解

分数 = 指向高密度区域的箭头。

想象数据点分布成一座座「山峰」,分数场就是每个位置指向最近山顶的箭头。只要沿着箭头走,就能从任意位置走到有数据的地方——这就是生成。

但有两个问题:

  1. 真实分数 ∇xlog⁡p(x)\nabla_x\log p(x) 不知道。直接回归会遇到无法计算的 ∇xlog⁡p(x)\nabla_x\log p(x)。解法是 denoising score matching:给数据加噪声后,目标分数就有了闭式解,等价于「学去噪」。
  2. 低密度区域分数估不准。数据稀疏的地方没有样本可供学习,箭头乱指。解法是多尺度噪声扰动:在不同噪声水平下分别学分数,从大噪声(全局结构)到小噪声(细节)层层精化。

关键洞察:DDPM 的「预测噪声」本质就是在学分数。 因为噪声 ϵ\epsilon 和分数只差一个系数:

ϵθ(xt,t)≈−1−αˉt  sθ(xt,t)\epsilon_\theta(x_t, t) \approx -\sqrt{1-\bar\alpha_t}\; s_\theta(x_t, t)

所以 DDPM、Score Matching、SDE 是同一个东西的三种语言——这正是理解 DDIM 和 CFG 的钥匙。

公式推导

1. Score matching:绕开 ∇xlog⁡p(x)\nabla_x\log p(x)

直接最小化 Fisher 散度:

Ep(x)[∥sθ(x)−∇xlog⁡p(x)∥2]\mathbb{E}_{p(x)}\left[\|s_\theta(x) - \nabla_x\log p(x)\|^2\right]

但 ∇xlog⁡p(x)\nabla_x\log p(x) 未知。更实用的做法是 denoising score matching(Vincent, 2011):对数据加高斯噪声 qσ(x~∣x)=N(x~;x,σ2I)q_\sigma(\tilde x\mid x) = \mathcal N(\tilde x; x, \sigma^2 I),此时目标分数有闭式解:

∇x~log⁡qσ(x~∣x)=x−x~σ2\nabla_{\tilde x}\log q_\sigma(\tilde x\mid x) = \frac{x - \tilde x}{\sigma^2}

网络只需学「从带噪样本还原原始样本的方向」,等价于一个去噪自编码器。

2. Langevin 采样:沿分数爬山

有了分数场后,用 Langevin dynamics 迭代采样:

xt+1=xt+ε ∇xlog⁡p(xt)+2ε z,z∼N(0,I)x_{t+1} = x_t + \varepsilon\,\nabla_x\log p(x_t) + \sqrt{2\varepsilon}\, z,\quad z\sim\mathcal N(0,I)

第一项是「爬山」,第二项是随机扰动(避免卡在局部峰)。当 ε→0\varepsilon\to 0、步数足够多时,采样结果服从 p(x)p(x)。实际使用 annealed Langevin:从大噪声的分数逐步切换到小噪声。

3. 与 DDPM 的等价关系

DDPM 中 xt=αˉtx0+1−αˉtϵx_t = \sqrt{\bar\alpha_t}x_0 + \sqrt{1-\bar\alpha_t}\epsilon,由 Tweedie 公式可推得真实分数:

∇xtlog⁡q(xt)=−ϵ1−αˉt\nabla_{x_t}\log q(x_t) = -\frac{\epsilon}{\sqrt{1-\bar\alpha_t}}

所以 DDPM 的网络 ϵθ(xt,t)\epsilon_\theta(x_t,t) 正是分数模型(差一个负系数):

sθ(xt,t)=−ϵθ(xt,t)1−αˉts_\theta(x_t, t) = -\frac{\epsilon_\theta(x_t,t)}{\sqrt{1-\bar\alpha_t}}

这解释了为什么 扩散模型的损失推导 里「学噪声」和「学分数」是等价的。

4. SDE 视角:离散 → 连续

把加噪步数 T→∞T\to\infty、步长 →0\to 0,离散马尔可夫链变成一个连续 SDE(前向):

dx=f(x,t) dt+g(t) dwdx = f(x,t)\,dt + g(t)\,dw

其中 ff 是漂移项,gg 是扩散项,ww 是标准维纳过程。DDPM 的加噪公式对应 Variance Preserving (VP) SDE。

Anderson (1982) 给出了反向 SDE——从噪声恢复数据:

dx=[f(x,t)−g(t)2 ∇xlog⁡pt(x)]dt+g(t) dwˉdx = \left[f(x,t) - g(t)^2\,\nabla_x\log p_t(x)\right]dt + g(t)\,d\bar w

注意反向过程唯一未知的就是分数 ∇xlog⁡pt(x)\nabla_x\log p_t(x)——整个生成问题在 SDE 框架下被归结为「学分数」这一件事。

更妙的是,每条反向 SDE 都对应一条概率流 ODE(probability flow ODE):

dx=[f(x,t)−12g(t)2 ∇xlog⁡pt(x)]dtdx = \left[f(x,t) - \tfrac12 g(t)^2\,\nabla_x\log p_t(x)\right]dt

它采样时没有随机项,可以大步长、确定性采样——这就是 DDIM 的理论来源。

相关