4675 个字词
23 分钟
流模型 Chapter4——基于分数的生成模型 (Score-based Generative Model)
首次发布: 2025-10-12
... 次访问

朗之万去噪分数匹配 (SMLD) 和连续时间 Score-based 模型 (VP-SDE / VE-SDE) 是两种基于分数匹配的生成模型方法。它们通过学习数据分布的分数函数(即对数概率密度的梯度)来生成新样本。

4.1 朗之万去噪分数匹配 (SMLD) —— 静态 Score Matching#

4.1.1 模型概述#

朗之万去噪分数匹配 (Denoising Score Matching with Langevin Dynamics, SMLD) 由 Y. Song and S. Ermon (2019) 提出,是一种基于分数匹配的生成模型。其核心思想是通过在不同噪声水平下学习数据分布的分数函数,结合 Langevin 动力学 (Langevin Dynamics) 进行采样,从而生成高质量样本。

4.1.2 启发源——粒子运动的 Langevin 动力学#

Langevin 方程

Langevin 方程是描述一个粒子在势能场中受随机热扰动的动力学方程。设粒子位置为 xtRdx_t \in \mathbb{R}^d,受到来自势能 U(xt)U(x_t) 的确定性力 xtU(xt)-\nabla_{x_t} U(x_t) 和来自热随机噪声的扰动 2kTdwt\sqrt{2kT}dw_t 的影响,其 Langevin 动力学方程为

dxt=xtU(xt)dt+2kTdwtdx_t = -\nabla_{x_t} U(x_t) dt + \sqrt{2kT}dw_t

其中 dwtdw_t 是标准布朗运动增量,kk 是 Boltzmann 常数,TT 是系统温度。

Langevin 动力学的稳态分布

Langevin 动力学方程定义了粒子在各个时刻位置的概率分布 pt(x)p_t(x),其演化由 Fokker-Planck 方程描述

pt(x)t=x[pt(x)xU(x)]+kTΔxpt(x)\frac{\partial p_t(x)}{\partial t} = \nabla_x \cdot \left[p_t(x) \nabla_x U(x)\right] + kT \Delta_x p_t(x)

其中 Δxpt(x)=xxpt(x)\Delta_x p_t(x) = \nabla_x \cdot \nabla_x p_t(x) 用到了拉普拉斯算子表示。假设该动力学过程存在稳态分布 pss(x)=limtpt(x)p_{ss}(x) = \lim_{t \to \infty}p_t(x),在 tt \to \infty 时可以达到,则必定满足

pt(x)t=0x[pss(x)xU(x)]+kTΔxpss(x)=0\frac{\partial p_t(x)}{\partial t} = 0 \quad \Rightarrow \quad \nabla_x \cdot \left[p_{ss}(x) \nabla_x U(x)\right] + kT \Delta_x p_{ss}(x) = 0

此偏微分方程的解是著名的 Boltzmann-Gibbs 分布

pss(x)=1Zexp(1kTU(x))\boxed{ p_{ss}(x) = \frac{1}{Z} \exp(-\frac{1}{kT}U(x)) }

其中 Z=exp(1kTU(x))dxZ = \int \exp(-\frac{1}{kT}U(x)) dx 是归一化常数。这个解的得出可以通过代入验证。具体过程详见附录 C.2

Boltzmann-Gibbs 分布表明,粒子在势能场 U(x)U(x) 中的稳态分布与势能成指数关系,低势能区域对应高概率密度。通过调节温度 TT,可以控制分布的平滑程度。

4.1.3 数学形式#

能量函数与概率分布

在概率能量模型中,数据分布 pdata(x)p_{data}(x) 通常表示为一个基于势能函数 Udata(x)U_{data}(x) 的形式

pdata(x)=1Zexp(Udata(x))p_{data}(x) = \frac{1}{Z} \exp(-U_{data}(x))

其中 Z=exp(Udata(x))dxZ = \int \exp(-U_{data}(x)) dx 是归一化常数。势能函数 Udata(x)U_{data}(x) 衡量数据点 xx 的“非典型性”,低能量对应高概率。例如,Boltzmann-Gibbs 分布就是这种形式的一个例子。

通过对数梯度变换,可以得到数据分布的对数概率密度的梯度为

xlogpdata(x)=xUdata(x)\nabla_x \log p_{data}(x) = -\nabla_x U_{data}(x)

象征着数据分布的“力场”,指向概率密度增加的方向。我们把这个梯度定义为分数函数 (score function),写作

sdata(x)=xlogpdata(x)=xUdata(x)s_{data}(x) = \nabla_x \log p_{data}(x) = -\nabla_x U_{data}(x)

分数函数形式的 Langevin 动力学

受到概率能量模型的启发,如果可以准确估计出数据分布的分数函数 sdata(x)=xlogpdata(x)s_{data}(x) = \nabla_x \log p_{data}(x),就相当于得到了势能函数 Udata(x)U_{data}(x) 对应的保守力。根据 Langevin 动力学方程,最终方程对应的边缘概率分布 pt(xt)p_t(x_t) 是会收敛到数据分布 pdata(x)p_{data}(x) 的。这样,通过 Langevin SDE 采样,即可实现从先验分布 pprior(x)p_{prior}(x) 到数据分布 pdata(x)p_{data}(x) 的转换。

替换 xU(x)-\nabla_x U(x)xlogpdata(x)\nabla_x \log p_{data}(x),得到分数形式的 Langevin 动力学

dxt=ηt2xtlogpdata(xt)dt+ηtdwt,t=1,,Tdx_t = \frac{\eta_t}{2} \nabla_{x_t}\log p_{data}(x_t) dt + \sqrt{\eta_t} dw_t, \quad t = 1, \ldots, T

其中 ηt\eta_t 是时间相关的步长参数,控制扩散和梯度更新的权重。

去噪分数匹配与目标函数

(i) 初始目标函数

分数匹配的核心在于如何估计数据分布的分数函数 sdata(x)=xlogpdata(x)s_{data}(x) = \nabla_x \log p_{data}(x)。假设我们用一个参数化的神经网络模型 sθ(x)s_\theta(x) 来近似分数函数。我们可以通过最小化如下分数匹配目标函数来训练模型

LSM(θ)=Expdata(x)sθ(x)xlogpdata(x)2\mathcal{L}_{SM}(\theta) = \mathbb{E}_{x \sim p_{data}(x)} \left\| s_\theta(x) - \nabla_x \log p_{data}(x) \right\|^2

然而,直接计算 xlogpdata(x)\nabla_x \log p_{data}(x) 通常是不可行的,因为 pdata(x)p_{data}(x) 的形式未知且难以估计。

(ii) 去噪分数匹配

为了解决这个问题,SMLD 引入了去噪分数匹配 (Denoising Score Matching, DSM) 的概念。对原始数据 zpdata(z)z \sim p_{data}(z) (替换之前的符号 xxzz 以示区分) 添加高斯噪声,得到带噪数据

xσ=z+σϵϵN(0,Id)x_\sigma = z + \sigma\epsilon,\quad \epsilon \sim \mathcal{N}(0, I_d)

其中 σ\sigma 是噪声标准差,控制噪声水平。由此得到带噪数据的条件分布为

qσ(xσz)=N(xσ;z,σ2Id)=12πexp[(xσz)22σ2]q_\sigma(x_\sigma | z) = \mathcal{N}(x_\sigma; z, \sigma^2 I_d) = \frac{1}{\sqrt{2\pi}}\exp\left[-\frac{(x_\sigma - z)^2}{2\sigma^2}\right]

通过积分,得到带噪数据的边缘分布为

qσ(xσ)=qσ(xσz)pdata(z)dzq_\sigma(x_\sigma) = \int q_\sigma(x_\sigma | z) p_{data}(z) dz

(iii) 去噪分数匹配与条件去噪分数匹配的等价性

展开边缘含噪数据分布

xσlogqσ(xσ)=xσqσ(xσz)pdata(z)dzqσ(xσ)=xσqσ(xσz)pdata(z)dzqσ(xσ)=xσlogqσ(xσz)p(zxσ)dz=Ezp(zxσ)[xσlogqσ(xσz)]\begin{aligned} \nabla_{x_\sigma}\log q_\sigma(x_\sigma) &= \frac{\nabla_{x_\sigma}\int q_\sigma(x_\sigma | z)p_{data}(z)dz}{q_\sigma(x_\sigma)} \\ &= \frac{\int \nabla_{x_\sigma}q_\sigma(x_\sigma | z)p_{data}(z)dz}{q_\sigma(x_\sigma)} \\ &= \int \nabla_{x_\sigma}\log q_\sigma(x_\sigma | z) p(z | x_\sigma)dz \\ &= \mathbb{E}_{z \sim p(z | x_\sigma)}\left[\nabla_{x_\sigma}\log q_\sigma(x_\sigma | z)\right] \end{aligned}

得到 Tweedie-Stein 公式

xσlogqσ(xσ)=Ezp(zxσ)[xσlogqσ(xσz)]\nabla_{x_\sigma}\log q_\sigma(x_\sigma) = \mathbb{E}_{z \sim p(z | x_\sigma)}\left[\nabla_{x_\sigma}\log q_\sigma(x_\sigma | z)\right]

设去噪分数匹配的目标函数为

LDSM(θ;σ)=Exσqσ(xσ)[12sθ(xσ)xσlogqσ(xσ)2]\mathcal{L}_{DSM}(\theta; \sigma) = \mathbb{E}_{x_\sigma \sim q_\sigma(x_\sigma)}\left[\frac{1}{2}\left\Vert s_\theta(x_\sigma) - \nabla_{x_\sigma}\log q_\sigma(x_\sigma)\right\Vert^2\right]

展开可以得到

LDSM(θ;σ)=12(Exσsθ(xσ)2+Exσxσlogqσ(xσ)22Exσ[sθ(xσ)xσlogqσ(xσ)])\mathcal{L}_{DSM}(\theta; \sigma) = \frac{1}{2}\left(\mathbb{E}_{x_\sigma}\left\Vert s_\theta(x_\sigma)\right\Vert^2 + \mathbb{E}_{x_\sigma}\left\Vert \nabla_{x_\sigma}\log q_\sigma(x_\sigma)\right\Vert^2 - 2\mathbb{E}_{x_\sigma} \left[s_\theta(x_\sigma)^\top \nabla_{x_\sigma}\log q_\sigma(x_\sigma)\right]\right)

再定义条件去噪分数匹配的目标函数为

LCDSM(θ;σ)=Ezpdata(z),xσqσ(xσz)[12sθ(xσ)xσlogqσ(xσz)2]\mathcal{L}_{CDSM}(\theta; \sigma) = \mathbb{E}_{z\sim p_{data}(z), x_\sigma \sim q_\sigma(x_\sigma | z)}\left[\frac{1}{2}\left\Vert s_\theta(x_\sigma) - \nabla_{x_\sigma}\log q_\sigma(x_\sigma | z) \right\Vert^2 \right]

展开同样可以得到

LCDSM(θ;σ)=Exσqσ(xσ),zp(zxσ)[12sθ(xσ)xσlogqσ(xσz)2]=12(Exσsθ(xσ)2+Exσ,zxσlogqσ(xσz)22Exσ,z[sθ(xσ)xσlogqσ(xσz)])\begin{aligned} \mathcal{L}_{CDSM}(\theta; \sigma) &= \mathbb{E}_{x_\sigma\sim q_\sigma(x_\sigma), z \sim p(z | x_\sigma)}\left[\frac{1}{2}\left\Vert s_\theta(x_\sigma) - \nabla_{x_\sigma}\log q_\sigma(x_\sigma | z) \right\Vert^2 \right] \\ &= \frac{1}{2}\left(\mathbb{E}_{x_\sigma}\left\Vert s_\theta(x_\sigma)\right\Vert^2 + \mathbb{E}_{x_\sigma, z}\left\Vert \nabla_{x_\sigma}\log q_\sigma(x_\sigma | z)\right\Vert^2 - 2\mathbb{E}_{x_\sigma, z} \left[s_\theta(x_\sigma)^\top \nabla_{x_\sigma}\log q_\sigma(x_\sigma | z)\right]\right) \end{aligned}

因为

Exσ,z[sθ(xσ)xσlogqσ(xσz)]=Exσ[sθ(xσ)Ezp(zxσ)[xσlogqσ(xσz)]]=Exσ[sθ(xσ)xσlogqσ(xσ)]\mathbb{E}_{x_\sigma, z} \left[s_\theta(x_\sigma)^\top \nabla_{x_\sigma}\log q_\sigma(x_\sigma | z)\right] = \mathbb{E}_{x_\sigma} \left[s_\theta(x_\sigma)^\top \mathbb{E}_{z \sim p(z | x_\sigma)}\left[\nabla_{x_\sigma}\log q_\sigma(x_\sigma | z)\right]\right] = \mathbb{E}_{x_\sigma}\left[s_\theta(x_\sigma)^\top \nabla_{x_\sigma}\log q_\sigma(x_\sigma)\right]

Exσ,zxσlogqσ(xσz)2Exσxσlogqσ(xσ)2=const\mathbb{E}_{x_\sigma, z}\left\Vert \nabla_{x_\sigma}\log q_\sigma(x_\sigma | z)\right\Vert^2 - \mathbb{E}_{x_\sigma}\left\Vert \nabla_{x_\sigma}\log q_\sigma(x_\sigma)\right\Vert^2 = \text{const}

由此可知,去噪分数匹配的目标函数 LDSM(θ;σ)\mathcal{L}_{DSM}(\theta; \sigma) 和条件去噪分数匹配的目标函数 LCDSM(θ;σ)\mathcal{L}_{CDSM}(\theta; \sigma) 在优化上是等价的

LDSM(θ;σ)=LCDSM(θ;σ)+const\mathcal{L}_{DSM}(\theta; \sigma) = \mathcal{L}_{CDSM}(\theta; \sigma) + \text{const}

因此,我们可以选择更易计算的条件去噪分数匹配目标函数 LCDSM(θ;σ)\mathcal{L}_{CDSM}(\theta; \sigma) 进行优化。

(iv) 去噪分数匹配的渐进收敛性

当噪声水平 σ0\sigma \to 0 时,带噪数据分布 qσ(xσ)q_\sigma(x_\sigma) 渐进收敛到真实数据分布 pdata(x)p_{data}(x)。此时,去噪分数匹配目标函数 LDSM(θ;σ)\mathcal{L}_{DSM}(\theta; \sigma) 也渐进收敛到原始的分数匹配目标函数 LSM(θ)\mathcal{L}_{SM}(\theta)。由此带来的是,含噪分布的分数函数 sθ(xσ)s_\theta(x_\sigma) 也会逐渐逼近真实数据分布的分数函数 xσlogpdata(xσ)\nabla_{x_\sigma}\log p_{data}(x_\sigma)

limσ0LDSM(θ;σ)=LSM(θ)+const\lim_{\sigma \to 0} \mathcal{L}_{DSM}(\theta; \sigma) = \mathcal{L}_{SM}(\theta) + \text{const}limσ0sθ(xσ)=xlogpdata(x)\lim_{\sigma \to 0} s_\theta(x_\sigma) = \nabla_{x}\log p_{data}(x)

因此用去噪分数匹配训练得到的模型 sθ(xσ)s_\theta(x_\sigma),在 σ\sigma 足够小时,可以很好地近似真实数据分布的分数函数。

(v) 最终的目标函数

在实际应用中,我们通常会在多个噪声水平 {σi}i=1L\{\sigma_i\}_{i=1}^L 下训练模型,一方面是为了增强模型的鲁棒性和泛化能力,另一方面是为了实现渐进性。经过适当计算,可以得到

xσlogqσ(xσz)=zxσσ2=ϵσ\nabla_{x_\sigma} \log q_\sigma(x_\sigma | z) = \frac{z - x_\sigma}{\sigma^2} = -\frac{\epsilon}{\sigma}

为了便于模型学习,将 σ\sigma 作为条件输入给神经网络。于是,最终的目标函数为

LDSM(θ)=Eσp(σ),zpdata(z),xσqσ(xσz)[λ(σ)sθ(xσ,σ)xσlogqσ(xσz)2]=Eσp(σ),zpdata(z),ϵN(0,Id)[λ(σ)sθ(z+σϵ,σ)+ϵσ2]\boxed{ \begin{aligned} \mathcal{L}_{DSM}'(\theta) &= \mathbb{E}_{\sigma \sim p(\sigma), z \sim p_{data}(z), x_\sigma \sim q_\sigma(x_\sigma | z)}\left[\lambda(\sigma) \left\Vert s_\theta(x_\sigma, \sigma) - \nabla_{x_\sigma}\log q_\sigma(x_\sigma | z) \right\Vert^2\right] \\ &= \mathbb{E}_{\sigma \sim p(\sigma), z \sim p_{data}(z), \epsilon \sim \mathcal{N}(0, I_d)}\left[\lambda(\sigma)\left\Vert s_\theta(z + \sigma\epsilon, \sigma) + \frac{\epsilon}{\sigma}\right\Vert^2\right] \end{aligned} }

其中 λ(σ)\lambda(\sigma) 是噪声水平 σ\sigma 的权重函数,通常取 λ(σ)=σ2\lambda(\sigma) = \sigma^2

4.1.4 训练过程与推理过程#

训练过程

SMLD 的训练过程旨在学习一个能够估计不同噪声水平下数据分布分数函数的神经网络 sθ(x,σ)s_\theta(x, \sigma)

  1. 数据与噪声
    • 从真实数据分布 pdata(z)p_{data}(z) 中采样一个批次的数据 {zi}\{z_i\}
    • 定义一个噪声水平的几何序列 {σi}i=1L\{\sigma_i\}_{i=1}^L,其中 0<σL<σL1<<σ2<σ10 < \sigma_L < \sigma_{L-1} < \dots < \sigma_2 < \sigma_1σ1\sigma_1 足够大,使得加噪后的数据分布接近高斯分布;σL\sigma_L 足够小,使得加噪后的数据分布接近真实数据分布。
  2. 加噪与目标计算
    • 对于每个数据点 zz,从 {σi}i=1L\{\sigma_i\}_{i=1}^L 中随机选择一个噪声水平 σ\sigma
    • 从标准正态分布 N(0,Id)\mathcal{N}(0, I_d) 中采样一个噪声向量 ϵ\epsilon
    • 生成带噪数据 xσ=z+σϵx_\sigma = z + \sigma\epsilon
    • 此时,我们知道真实的分数是 xσlogqσ(xσz)=ϵσ\nabla_{x_\sigma}\log q_\sigma(x_\sigma | z) = -\frac{\epsilon}{\sigma}
  3. 模型优化
    • 将带噪数据 xσx_\sigma 和噪声水平 σ\sigma 输入到分数模型 sθ(xσ,σ)s_\theta(x_\sigma, \sigma) 中。
    • 计算损失函数,即模型预测分数与真实分数之间的加权均方误差: LDSM(θ)=1Li=1Lσi2Ezpdata(z),ϵN(0,Id)[sθ(z+σiϵ,σi)+ϵσi2]\mathcal{L}_{DSM}'(\theta) = \frac{1}{L}\sum_{i=1}^L \sigma_i^2 \mathbb{E}_{z \sim p_{data}(z), \epsilon \sim \mathcal{N}(0, I_d)}\left[\left\Vert s_\theta(z + \sigma_i\epsilon, \sigma_i) + \frac{\epsilon}{\sigma_i}\right\Vert^2\right]
    • 更新模型参数 θ\theta 以最小化该损失。

推理过程 (退火 Langevin 动力学采样)

训练完成后,模型 sθ(x,σ)s_\theta(x, \sigma) 可以用来生成新样本。这个过程通过模拟一个从高噪声状态向低噪声状态“退火”的 Langevin 动力学过程来实现。

  1. 初始化:从一个简单的先验分布(如均匀分布或高斯分布)中采样初始样本 xLx_L。这个初始样本可以看作是处在最高噪声水平 σ1\sigma_1 下的随机状态。
  2. 退火采样循环:按照预设的噪声水平序列 {σ1,σ2,,σL}\{\sigma_1, \sigma_2, \ldots, \sigma_L\} 从高噪声水平到低噪声水平进行迭代。对于每一个噪声水平 σi\sigma_i
    • Langevin 动力学更新:执行 KK 步 Langevin MCMC 更新。在第 kk 步 (k=1,,Kk=1, \dots, K): xi(k)=xi(k1)+αisθ(xi(k1),σi)+2αiξkx_{i}^{(k)} = x_{i}^{(k-1)} + \alpha_i s_\theta(x_{i}^{(k-1)}, \sigma_i) + \sqrt{2\alpha_i} \xi_k 其中:
      • xi(k1)x_{i}^{(k-1)} 是上一步的样本(对于 k=1k=1,它是在上一个噪声水平 σi1\sigma_{i-1} 结束时得到的样本,即 xi(0)=xi1(K)x_{i}^{(0)} = x_{i-1}^{(K)})。
      • sθ(xi(k1),σi)s_\theta(x_{i}^{(k-1)}, \sigma_i) 是模型在当前样本和噪声水平下预测的分数。
      • αi\alpha_i 是与 σi\sigma_i 相关的步长,通常设置为 αiσi2\alpha_i \propto \sigma_i^2
      • ξkN(0,Id)\xi_k \sim \mathcal{N}(0, I_d) 是一个随机高斯噪声,用于维持随机性。
    • 传递样本:完成 KK 步更新后,将最终得到的样本 xKx_K 作为下一个更低噪声水平 σi+1\sigma_{i+1} 的初始样本。
  3. 输出样本:当完成所有噪声水平的迭代后(即在最低噪声水平 σL\sigma_L 下完成 KK 步更新),最终得到的样本即为生成的结果。

退火过程的直观解释:在高噪声水平下,数据分布平滑且简单,Langevin 动力学可以轻松探索整个样本空间,避免陷入局部最优。随着噪声水平的逐步降低,样本被逐渐“雕琢”和“精炼”,以匹配真实数据分布中更精细的结构和特征,最终生成高质量、高保真度的样本。

4.2 基于 SDE 的分数生成模型 (SGM) —— 动态 Score Matching#

4.2.1 模型概述#

基于 SDE 的分数生成模型 (Score-based Generative Model through Stochastic Differential Equations, SGM) 由 Y. Song et al. (2021) 提出,是对朗之万去噪分数匹配 (SMLD) 的扩展,同时整合了 DDPM。其核心思想是通过构建一个扩散过程的随机微分方程 (SDE),使得数据分布可以通过该 SDE 从一个复杂的目标数据分布逐渐转变为简单的先验分布。通过 Anderson 定理反转该 SDE,从而实现从先验分布到目标数据分布的采样。

4.2.2 求解目标#

逆向 SDE

根据 Anderson 定理,对于一个给定的正向 SDE (tt 从 0 变到 1,对应从 pdata(x0)p_{data}(x_0)pprior(x1)p_{prior}(x_1))

dxt=f(xt,t)dt+g(t)dWt,x0pdata(x0),t[0,1]dx_t = f(x_t, t)dt + g(t)dW_t, \quad x_0 \sim p_{data}(x_0), \quad t \in [0, 1]

而它对应的逆向 SDE (tt 从 1 变到 0 的形式,对应从 pprior(x1)p_{prior}(x_1)pdata(x0)p_{data}(x_0)) 为

dxt=[f(xt,t)g(t)2xtlogpt(xt)](dt)+g(t)dWˉt,x1pprior(x1),t[0,1]dx_t = \left[f(x_t, t) - g(t)^2 \nabla_{x_t} \log p_t(x_t)\right] (-dt) + g(t)d\bar{W}_t, \quad x_1 \sim p_{prior}(x_1), \quad t \in [0, 1]

其中 dWˉtd\bar{W}_t 是逆向时间的维纳过程增量。式中取 dt-dt 是因为时间反转,不过部分文献中为了公式美观也可能会直接写成

dxt=[f(xt,t)g(t)2xtlogpt(xt)]dt+g(t)dWˉt,x1pprior(x1),t[0,1]dx_t = \left[f(x_t, t) - g(t)^2 \nabla_{x_t} \log p_t(x_t)\right] dt + g(t)d\bar{W}_t, \quad x_1 \sim p_{prior}(x_1), \quad t \in [0, 1]

相当于其中的 dt<0dt < 0。不过不管哪种形式,其对应的概率路径 {pt(x)}t[0,1]\{p_t(x)\}_{t\in[0, 1]} 以及方向是一致的。

已知条件与目标

在 SGM 中,正向 SDE 的形式是我们预先定义好的。换句话说,f(xt,t)f(x_t, t)g(t)g(t) 是已知的。那么,既然用逆向 SDE 就可以实现从先验分布 pprior(x1)p_{prior}(x_1) 到目标数据分布 pdata(x0)p_{data}(x_0) 的采样,显然的,问题就转变成了只要能估计出 xtlogpt(xt)\nabla_{x_t} \log p_t(x_t) 就可以实现采样

用一个参数化的神经网络 sθ(xt,t)s_\theta(x_t, t) 来近似 xtlogpt(xt)\nabla_{x_t} \log p_t(x_t),那么逆向 SDE 就变成了

dxt=[f(xt,t)g(t)2sθ(xt,t)]dt+g(t)dWˉt,x1pprior(x1),t[0,1]dx_t = \left[f(x_t, t) - g(t)^2 s_\theta(x_t, t)\right] dt + g(t)d\bar{W}_t, \quad x_1 \sim p_{prior}(x_1), \quad t \in [0, 1]

对应的损失函数为

LSM(θ)=EtU(0,1),xtpt(xt)[λ(t)sθ(xt,t)xtlogpt(xt)2]\mathcal{L}_{SM}(\theta) = \mathbb{E}_{t \sim \mathcal{U}(0, 1), x_t \sim p_t(x_t)}\left[\lambda(t) \left\| s_\theta(x_t, t) - \nabla_{x_t} \log p_t(x_t) \right\|^2 \right]

条件分数匹配

同样的道理,我们不知道 xtlogpt(xt)\nabla_{x_t} \log p_t(x_t) 的形式,因此我们可以使用条件分数匹配 (Conditional Score Matching) 的方法来优化目标函数

LCSM(θ)=EtU(0,1),zpdata(z),xtpt(xtz)[λ(t)sθ(xt,t)xtlogpt(xtz)2]\mathcal{L}_{CSM}(\theta) = \mathbb{E}_{t \sim \mathcal{U}(0, 1), z \sim p_{data}(z), x_t \sim p_t(x_t | z)} \left[\lambda(t) \left\| s_\theta(x_t, t) - \nabla_{x_t} \log p_t(x_t | z) \right\|^2 \right]

同样的方式可以证明 LSM(θ)\mathcal{L}_{SM}(\theta)LCSM(θ)\mathcal{L}_{CSM}(\theta) 在优化上是等价的。这部分证明可以直接参考 SMLD 中的去噪分数匹配与条件去噪分数匹配的等价性部分,因为只要替换掉下标,两个证明过程是一模一样的。

于是最终用于训练的目标函数为

LCSM(θ)=EtU(0,1),zpdata(z),xtpt(xtz)[λ(t)sθ(xt,t)xtlogpt(xtz)2]=EtU(0,1),zpdata(z),ϵN(0,Id)[λ(t)sθ(z+σtϵ,t)+ϵσt2]\boxed{ \begin{aligned} \mathcal{L}_{CSM}(\theta) &= \mathbb{E}_{t \sim \mathcal{U}(0, 1), z \sim p_{data}(z), x_t \sim p_t(x_t | z)}\left[\lambda(t) \left\| s_\theta(x_t, t) - \nabla_{x_t} \log p_t(x_t | z) \right\|^2 \right] \\ &= \mathbb{E}_{t \sim \mathcal{U}(0, 1), z \sim p_{data}(z), \epsilon \sim \mathcal{N}(0, I_d)}\left[\lambda(t) \left\| s_\theta(z + \sigma_t \epsilon, t) + \frac{\epsilon}{\sigma_t} \right\|^2 \right] \end{aligned} }

其中 λ(t)\lambda(t) 是时间相关的权重函数,通常取 λ(t)=g(t)2\lambda(t) = g(t)^2。损失函数中要求 xtlogpt(xtz)\nabla_{x_t} \log p_t(x_t | z) 是已知的,如果取为条件高斯路径 pt(xtz)=N(z,σt2Id)p_t(x_t | z) = \mathcal{N}(z, \sigma_t^2 I_d),那么 xtlogpt(xtz)=ϵσt\nabla_{x_t} \log p_t(x_t | z) = -\frac{\epsilon}{\sigma_t}

训练出参数化的分数函数 sθ(xt,t)s_\theta(x_t, t) 后,就可以通过逆向 SDE 来实现从先验分布 pprior(x1)p_{prior}(x_1) 到目标数据分布 pdata(x0)p_{data}(x_0) 的采样。过程类似 Flow Matching、SMLD 等中的过程,这里不加赘述。

4.2.3 用概率流 ODE 加速 SDE 采样过程#

从 ODE 到 SDE

考虑一个 ODE,形式为

dxtdt=utarget(xt,t),x0pprior(x0),t[0,1]\frac{dx_t}{dt} = u^{target}(x_t, t), \quad x_0 \sim p_{prior}(x_0), \quad t \in [0, 1]

通过 Liouville 方程,我们知道该 ODE 对应了唯一的一条概率路径 {pt(x)}t[0,1]\{p_t(x)\}_{t\in[0, 1]}

pt(x)t=x[pt(x)utarget(x,t)]\frac{\partial p_t(x)}{\partial t} = -\nabla_x \cdot \left[p_t(x) u^{target}(x, t)\right]

事实上,存在无数的 SDE 可以对应有同样的概率路径 {pt(x)}t[0,1]\{p_t(x)\}_{t\in[0, 1]}。例如,一个简单等价 SDE,其形式如下

dxt=[utarget(xt,t)+σt22xtlogpt(xt,t)]dt+σtdWt,x0pprior(x0),t[0,1]dx_t = \left[u^{target}(x_t, t) + \frac{\sigma_t^2}{2}\nabla_{x_t} \log p_t(x_t, t)\right]dt + \sigma_t dW_t, \quad x_0 \sim p_{prior}(x_0), \quad t \in [0, 1]

相关等价性证明可参考附录 A.3

利用 ODE 加速采样

根据上述等价性,给定一个 SDE

dxt=f(xt,t)dt+g(t)dWt,x0pdata(x0),t[0,1]dx_t = f(x_t, t)dt + g(t)dW_t, \quad x_0 \sim p_{data}(x_0), \quad t \in [0, 1]

我们可以用它对应的概率流 ODE

dxt=[f(xt,t)12g(t)2xtlogpt(xt),x0pdata(x0),t[0,1]]dtdx_t = \left[f(x_t, t) - \frac{1}{2}g(t)^2 \nabla_{x_t} \log p_t(x_t), \quad x_0 \sim p_{data}(x_0), \quad t \in [0, 1]\right]dt

简化并加速采样过程。因为 ODE 的采样过程是确定性的,不需要像 SDE 那样每一步都添加随机噪声,从而大大减少了采样步骤。

  • 优点
    • 采样速度更快:由于不需要每一步都添加随机噪声,ODE 的采样过程通常比 SDE 更快。
    • 结果更稳定:ODE 的确定性使得每次采样结果更加一致,减少了随机性带来的波动。
  • 缺点
    • 可能牺牲多样性:由于缺乏随机性,ODE 采样可能会减少生成样本的多样性。
    • 降低的质量:同样是由于缺乏随机性,ODE 采样可能会导致生成样本的质量略有下降。

4.3 扩散与流模型的大一统#

4.3.1 分数匹配生成模型 (SGM) 与 DPPM 的统一性#

当选择条件概率路径为条件高斯分布时

pt(xtz)=N(αtz,βt2Id)p_t(x_t | z) = \mathcal{N}(\alpha_t z, \beta_t^2 I_d)xt=αtz+βtϵ,ϵN(0,Id)x_t = \alpha_t z + \beta_t \epsilon, \quad \epsilon \sim \mathcal{N}(0, I_d)

SGM 的损失函数为

LSGM(θ)=EtU(0,1),zpdata(z),ϵN(0,Id)[λ(t)sθ(αtz+βtϵ,t)+ϵβt2]\mathcal{L}_{SGM}(\theta) = \mathbb{E}_{t \sim \mathcal{U}(0, 1), z \sim p_{data}(z), \epsilon \sim \mathcal{N}(0, I_d)}\left[\lambda(t) \left\| s_\theta(\alpha_t z + \beta_t \epsilon, t) + \frac{\epsilon}{\beta_t} \right\|^2 \right]

DDPM 的损失函数为

LDDPM(θ)=EtUniform(1,T),x0q(x0),ϵN(0,Id)[ϵθ(αtz+βtϵ,t)ϵ2]\mathcal{L}_{DDPM}(\theta) = \mathbb{E}_{t \sim \text{Uniform}(1,T), x_0 \sim q(x_0), \epsilon \sim \mathcal{N}(0,I_d)} \left[ \left\| \epsilon_\theta(\alpha_t z + \beta_t \epsilon, t) - \epsilon\right\|^2 \right]

这两个损失函数是等价的,只需要令

sθ(xt,t)=1βtϵθ(xt,t),λ(t)=βt2\boxed{ s_\theta(x_t, t) = -\frac{1}{\beta_t} \epsilon_\theta(x_t, t), \quad \lambda(t) = \beta_t^2 }

注意这里 DDPM 的条件概率路径是原始论文中的扩展版本,并不是写错了。

4.3.2 分数匹配生成模型 (SGM) 与 Flow Matching 的统一性#

依然是在条件高斯路径下

pt(xtz)=N(αtz,βt2Id)p_t(x_t | z) = \mathcal{N}(\alpha_t z, \beta_t^2 I_d)

流匹配的向量场 ut(x)u_t(x) 让粒子沿着 ODE

dxt=ut(xt)dt,x0pdata(x0),t[0,1]dx_t = u_t(x_t) dt, \quad x_0 \sim p_{data}(x_0), \quad t \in [0, 1]

分数匹配则定义了

st(xz)=xlogpt(xz)=xαtzβt2s_t(x | z) = \nabla_x \log p_t(x | z) = -\frac{x - \alpha_t z}{\beta_t^2}

根据条件向量场的公式

ut(xz)=α˙tz+β˙tβt(xαtz)=α˙tαtx+(βt2α˙tαtβ˙tβt)st(xz)u_t(x | z) = \dot\alpha_t z + \frac{\dot\beta_t}{\beta_t} (x - \alpha_t z) = \frac{\dot\alpha_t}{\alpha_t} x + \left(\beta_t^2\frac{\dot\alpha_t}{\alpha_t} - \dot\beta_t\beta_t\right) s_t(x | z)

根据边缘性定理

ut(x)=ut(xz)p(zx)dz=Ezp(zx)[ut(xz)]u_t(x) = \int u_t(x | z) p(z | x) dz = \mathbb{E}_{z \sim p(z | x)}\left[u_t(x | z)\right]

ut(x)=ut(xz)pt(xz)pdata(z)pt(x)dz=[α˙tαtx+(βt2α˙tαtβ˙tβt)xlogpt(xz)]pt(xz)pdata(z)pt(x)dz=α˙tαtx+(βt2α˙tαtβ˙tβt)xlogpt(x)\begin{aligned} u_t(x) &= \int u_t(x | z) \frac{p_t(x | z)p_{data}(z)}{p_t(x)} dz \\ &= \int \left[\frac{\dot\alpha_t}{\alpha_t} x + \left(\beta_t^2\frac{\dot\alpha_t}{\alpha_t} - \dot\beta_t\beta_t\right) \nabla_x \log p_t(x | z)\right] \frac{p_t(x | z)p_{data}(z)}{p_t(x)} dz \\ &= \frac{\dot\alpha_t}{\alpha_t} x + \left(\beta_t^2\frac{\dot\alpha_t}{\alpha_t} - \dot\beta_t\beta_t \right)\nabla_x \log p_t(x) \end{aligned}

这里用到了交换积分 z\int_z 与求梯度 x\nabla_x

xpt(xz)pdata(z)dz=xpt(xz)pdata(z)dz=xpt(x)\int \nabla_x p_t(x | z)p_{data}(z) dz = \nabla_x \int p_t(x | z)p_{data}(z) dz = \nabla_x p_t(x)

由此得出

ut(x)=α˙tαtx+(βt2α˙tαtβ˙tβt)st(x)\boxed{ u_t(x) = \frac{\dot\alpha_t}{\alpha_t} x + \left(\beta_t^2\frac{\dot\alpha_t}{\alpha_t} - \dot\beta_t\beta_t \right) s_t(x) }

对应学习的网络也满足

uθ(x,t)=α˙tαtx+(βt2α˙tαtβ˙tβt)sθ(x,t)\boxed{ u_\theta(x, t) = \frac{\dot\alpha_t}{\alpha_t} x + \left(\beta_t^2\frac{\dot\alpha_t}{\alpha_t} - \dot\beta_t\beta_t \right) s_\theta(x, t) }

换句话说,对应的 ODE 也可以写作

dxt=[α˙tαtx+(βt2α˙tαtβ˙tβt)sθ(x,t)]dt,x0pdata(x0),t[0,1]dx_t = \left[\frac{\dot\alpha_t}{\alpha_t} x + \left(\beta_t^2\frac{\dot\alpha_t}{\alpha_t} - \dot\beta_t\beta_t \right) s_\theta(x, t)\right] dt, \quad x_0 \sim p_{data}(x_0), \quad t \in [0, 1]

利用 ODE 与 SDE 的等价性 (见附录 A.3),可以得到与 SGM 对应的 SDE 形式

dxt=[α˙tαtx+(βt2α˙tαtβ˙tβt+σt22)sθ(x,t)]dt+σtdwt,x0pdata(x0),t[0,1]dx_t = \left[\frac{\dot\alpha_t}{\alpha_t} x + \left(\beta_t^2\frac{\dot\alpha_t}{\alpha_t} - \dot\beta_t\beta_t + \frac{\sigma_t^2}{2}\right) s_\theta(x, t)\right] dt + \sigma_t dw_t, \quad x_0 \sim p_{data}(x_0), \quad t \in [0, 1]

其中 σt\sigma_t 是任意大于 0 的扩散系数。这就完成了 SGM 与 Flow Matching 的统一。

4.3.3 模型间的差异#

既然 SGM 与 DDPM、Flow Matching 都是等价的,为什么它们实际上的表现差异很大?

  1. Schedule 参数不同:实际上差异大的原因主要在于选取的 schedule 参数是不同的,换句话说,高斯条件概率路径 pt(xtz)=N(αtz,βt2Id)p_t(x_t | z) = \mathcal{N}(\alpha_t z, \beta_t^2 I_d)αt,βt\alpha_t, \beta_t 的选取不同导致了最终的表现差异。DDPM 选取的是线性 schedule 或余弦 schedule,SGM 选取的是例如指数增长的非线性 schedule,Flow Matching 中选取的是最优传输路径。因此实际使用中,三者的表现不同。

  2. 采样策略不同:即使理论路径相同,实际采样需要离散化,步数少或者步长不合理会造成性能差异。

  3. 训练函数不同:训练函数不同对神经网络的影响也很大,尤其是当神经网络容量有限时。这是因为网络本身具有 inductive bias,st(x)s_t(x), ut(x)u_t(x), ϵ\epsilon 各有不同的分布特性,网络可能更适合拟合某一种。

流模型 Chapter4——基于分数的生成模型 (Score-based Generative Model)
https://adalovelemon.github.io/blog/posts/content/coursenotes/generativeai/flowmodels/chapter4/
Author
Ada Lovelemon
Published at
2025-10-12

留言板