博客笔记思路:

3. 现代演拓与算法优化

2. 统一框架:连续时间 SDE

路径 B:分数/能量视角 (Score-based)

路径 A:离散概率视角 (DDPM)

1. 直觉与分类
生成式模型五大类
(自回归/VAE/GAN/流/扩散)

Ho et al. (2020)
马尔可夫链加噪

简化 ELBO
预测噪声 ε

Sohl-Dickstein / Song et al.
分数函数 ∇log p(x)

郎之万动力学 (Langevin)
迭代向高概率区移动

Song et al. (2021) 统一视角
将扩散视为随机微分方程

路径分类:
VP-SDE (DDPM系)
VE-SDE (Score系)

概率流 ODE (Probability Flow)
实现确定性反向演化

Flow Matching
从扩散推广到更通用的向量场
(更直的路径, 更快的收敛)

采样器加速
DPM-Solver, DDIM
(求解 ODE 的数值方法)

条件控制
Classifier-free Guidance
ControlNet / VLA 结合

1. 关于扩散模型的直觉理解

见《Diffusion 扩散模型知识体系梳理(一)》

2. 从 DDPM 的角度看离散 Diffusion

见《Diffusion 扩散模型知识体系梳理(一)》

3. 从 Score-based 的角度再看 Diffusion

见《Diffusion 扩散模型知识体系梳理(二)》

4. 从 SDE 的角度统一

4.1. 理论简介

很好,非常好,相信目前为止,你已经对 DDPM 和 Score-based 这两种处理扩散模型的思路都各自有了一定的认识和见解了,下面我将要分享的是,有一种理论,可以将这两者在数学本质上进行神奇的统一,也就是随机微分方程 Stochastic Differential Equations, SDE 角度的演化 [8]。什么意思呢? 也就是说,无论是离散的 DDPM,还是通过添加不同量级噪声的 Score-Based Model,都可以抽象出一个过程,遵循随机微分方程的演化原则,从样本过渡到纯噪声。用来训练的变量也是 Score Function,损失函数做了类似的调整,采样推理的方法则变成了求解 Reverse SDE。下面我将会详细展开介绍。

4.2. 训练框架的统一

  • 首先,让我们用一种较为统一的方式来描述一下随机微分方程的通用形式,下式表示 Ito SDE (伊藤随机过程): d x = f ( x , t )   d t + g ( t )   d w d\textbf{x} = \mathbf{f}(\textbf{x},t)\,dt + g(t)\,d\textbf{w} dx=f(x,t)dt+g(t)dw 其中 f ( x , t ) \mathbf{f}(\textbf{x},t) f(x,t) 是一个向量值函数,即输出的是一个向量场,表示的是系统演化的漂移系数 Drift Coeffcient。 g ( t ) g(t) g(t) 表示的则是扩散系数 Diffusion Coeffcient,反映掺杂的随机布朗运动的系数函数。

  • 需要注意一点,上述方程的解,是一个预测的时间序列 { x ( t ) } t ∈ [ 0 , T ] \{\textbf{x}(t)\}_{t\in [0,T]} {x(t)}t[0,T],其中关联 NCSN 的思路,可以做出如下类比(注意两者的方向是一致的,都是噪声递增,但起点编号不同:SDE 从 t = 0 t=0 t=0 开始,NCSN 从 i = 1 i=1 i=1 开始):

    • 时间步 t = 0 , 1 , . . . , T t=0,1,...,T t=0,1,...,T → 类比 \xrightarrow{类比} 类比 加噪的量级索引 i = 1 , 2 , . . . , L i=1,2,...,L i=1,2,...,L
    • t t t 时间步的状态概率分布 p t ( x ) p_t(\textbf{x}) pt(x) → 类比 \xrightarrow{类比} 类比 加噪量级为 σ i \sigma_i σi 时刻的概率分布( p 0 ( x ) = p ( x ) p_0(\textbf{x}) = p(\textbf{x}) p0(x)=p(x));
    • 时间序列长度 T → ∞ T\rightarrow\infty T → 类比 \xrightarrow{类比} 类比 噪声的波动性 σ L 2 → ∞ \sigma_L^2 \rightarrow \infty σL2
    • Time-Dependent Score-Based s θ ( x , t ) = ∇ x log ⁡ p t ( x ) s_\theta(\textbf{x},t) = \nabla_{\textbf{x}}\log{p_{t}(\textbf{x})} sθ(x,t)=xlogpt(x) → 类比 \xrightarrow{类比} 类比 Noise-Conditional Score-Based s θ ( x , i ) = ∇ x log ⁡ p σ i ( x ) s_\theta(\textbf{x},i) = \nabla_{\textbf{x}}\log{p_{\sigma_i}(\textbf{x})} sθ(x,i)=xlogpσi(x)
  • 有趣的一点是,SDE 的逆过程也一定是 SDE(这一结论最早由 Anderson [9] 给出),且表达式为,关于这一点的数学推导,见 Appendix C d x = [ f ( x , t ) − g 2 ( t ) ∇ x log ⁡ p t ( x ) ] ⏟ 漂移项 d τ + g ( t ) d w ˉ ⏟ 扩散项 d\mathbf{x} = \underbrace{\left[ \mathbf{f}(\mathbf{x}, t) - g^2(t) \nabla_{\mathbf{x}} \log p_t(\mathbf{x}) \right]}_{\text{漂移项}} d\tau + \underbrace{g(t) d\bar{\mathbf{w}}}_{\text{扩散项}} dx=漂移项 [f(x,t)g2(t)xlogpt(x)]dτ+扩散项 g(t)dwˉ 其中 τ \tau τ 表示逆向时间(从 T T T 回退到 0 0 0), d w ˉ d\bar{\mathbf{w}} dwˉ 是逆向布朗运动。此时我们的 Score-SDE 模型在采样的时候就不需要 Langevin Dynamics 了,而可以直接求解这个 Reverse SDE 即可。

  • 此时,我的模型训练的目标,还是 s θ ( x , t ) = ∇ x log ⁡ p t ( x ) s_\theta(\textbf{x},t) = \nabla_{\textbf{x}}\log{p_{t}(\textbf{x})} sθ(x,t)=xlogpt(x),训练的损失函数为: J ( θ ) = E t ∼ U ( 0 , T ) E p t ( x ) [ λ ( t ) ∥ ∇ x log ⁡ p t ( x ) − s θ ( x , t ) ∥ 2 2 ] , (11) \mathcal{J}(\theta) = \mathbb{E}_{t\sim\mathcal{U}(0,T)}\mathbb{E}_{p_t(\mathbf{x})}\left[\lambda(t)\left\|\nabla_{\mathbf{x}} \log p_t(\mathbf{x}) - \mathbf{s}_\theta(\mathbf{x}, t)\right\|_2^2\right], \tag{11} J(θ)=EtU(0,T)Ept(x)[λ(t)xlogpt(x)sθ(x,t)22],(11) 需要注意的是,此处我们采样的时间是在 ( 0 , T ) (0,T) (0,T) 之间的均匀采样获得,系数 λ ( t ) \lambda(t) λ(t) 满足下面的关系 λ ( t ) ∝ 1 E [ ∣ ∣ ∇ x ( t ) log ⁡ p ( x ( t ) ∣ x ( 0 ) ) ∣ ∣ 2 2 ] \lambda(t)\propto \dfrac{1}{\mathbb{E}[||\nabla_{\text{x}(t)}\log p(\textbf{x}(t)|\textbf{x}(0))||^2_2]} λ(t)E[∣∣x(t)logp(x(t)x(0))22]1 其中有一组概念需要澄清:

    • p t ( x ) p_t(\textbf{x}) pt(x) 是 Marginal Distribution of all real data after adding noise to t t t
    • p ( x ( t ) ∣ x ( 0 ) ) p(\textbf{x}(t)|\textbf{x}(0)) p(x(t)x(0)) 是 Conditional Distribution of x ( t ) \textbf{x}(t) x(t) obtained by gradually adding noise to the real data x ( 0 ) \textbf{x}(0) x(0)

4.3. 如何求解 Reverse SDE

  • 好的,现在我们已经知道了训练的目标和损失函数,接下来最关键的问题就是:训练完成之后,如何利用学到的 s θ ( x , t ) s_\theta(\textbf{x},t) sθ(x,t) 来进行采样生成?答案就是数值求解 Reverse SDE。回顾一下我们的 Reverse SDE: d x = [ f ( x , t ) − g 2 ( t ) ∇ x log ⁡ p t ( x ) ] d t + g ( t ) d w ˉ d\mathbf{x} = \left[ \mathbf{f}(\mathbf{x}, t) - g^2(t) \nabla_{\mathbf{x}} \log p_t(\mathbf{x}) \right] dt + g(t) d\bar{\mathbf{w}} dx=[f(x,t)g2(t)xlogpt(x)]dt+g(t)dwˉ 其中 ∇ x log ⁡ p t ( x ) \nabla_{\mathbf{x}} \log p_t(\mathbf{x}) xlogpt(x) 就用我们训练好的 s θ ( x , t ) s_\theta(\textbf{x},t) sθ(x,t) 来替代。那么问题就变成了:如何数值求解一个 SDE?

  • 最直接的方法是 Euler-Maruyama 方法,这是 SDE 版本的欧拉法。对于一般的 SDE d x = a ( x , t )   d t + b ( t )   d w d\mathbf{x} = \mathbf{a}(\mathbf{x},t)\,dt + b(t)\,d\mathbf{w} dx=a(x,t)dt+b(t)dw,其离散化形式为: x t − Δ t = x t + a ( x t , t )   Δ t + b ( t )   ∣ Δ t ∣   z , z ∼ N ( 0 , I ) \mathbf{x}_{t-\Delta t} = \mathbf{x}_t + \mathbf{a}(\mathbf{x}_t, t)\,\Delta t + b(t)\,\sqrt{|\Delta t|}\,\mathbf{z}, \quad \mathbf{z} \sim \mathcal{N}(0, \mathbf{I}) xtΔt=xt+a(xt,t)Δt+b(t)∣Δt z,zN(0,I) 代入 Reverse SDE 的具体形式,我们得到每一步的更新规则: x t − Δ t = x t + [ f ( x t , t ) − g 2 ( t )   s θ ( x t , t ) ] Δ t + g ( t )   ∣ Δ t ∣   z \mathbf{x}_{t-\Delta t} = \mathbf{x}_t + \left[ \mathbf{f}(\mathbf{x}_t, t) - g^2(t)\, s_\theta(\mathbf{x}_t, t) \right] \Delta t + g(t)\,\sqrt{|\Delta t|}\,\mathbf{z} xtΔt=xt+[f(xt,t)g2(t)sθ(xt,t)]Δt+g(t)∣Δt z t = T t=T t=T(纯噪声)出发,逐步迭代到 t = 0 t=0 t=0(生成样本),这就是最基本的采样流程。其中需要注意的一点是,由于随机项模拟的是维纳过程(Wiener Process/布朗运动),其方差与时间步长 Δ t \Delta t Δt 成正比,因此其标准差(即步长缩放)必须是 ∣ Δ t ∣ \sqrt{|\Delta t|} ∣Δt

  • 当然,Euler-Maruyama 方法的精度是一阶的,步长 Δ t \Delta t Δt 不能太大,否则误差会累积。实践中有几种改进策略:

    1. Predictor-Corrector 方法:Yang Song et al. [8] 在 Score SDE 论文中提出的经典方案。每一步先用数值 SDE 求解器(如 Euler-Maruyama)做一次"预测"(Predictor),然后再用若干步朗之万动力学做"校正"(Corrector),利用当前噪声尺度下的 s θ ( x , t ) s_\theta(\mathbf{x},t) sθ(x,t) 对样本进行微调。这样可以在不增加太多计算量的前提下显著提升生成质量。
    2. 高阶 SDE 求解器:类比 ODE 中的 Runge-Kutta 方法,也可以构造 SDE 的高阶数值格式(如 Milstein 方法),但由于需要计算 score function 的导数,实际应用中并不常见。
    3. 自适应步长:根据当前 score 的变化幅度动态调整 Δ t \Delta t Δt,在 score 变化剧烈的区域用小步长,平坦区域用大步长。
  • 不过,SDE 求解器的一个本质局限在于:每一步都需要注入随机噪声 z \mathbf{z} z,这意味着同一个初始噪声 x T \mathbf{x}_T xT 每次生成的结果都不同,而且随机性的引入也会增加方差,需要更多的步数才能收敛到高质量的样本。这就自然引出了一个问题——能不能去掉随机性,用确定性的方式来采样? 答案是肯定的,这就是下一节要讨论的 Probability Flow ODE。

4.4. 从 SDE 到 Probability Flow ODE

  • 这是 Score SDE 框架中一个极其优雅的结论:对于任意一个 Forward SDE,都存在一个对应的常微分方程(ODE),使得该 ODE 的解在每个时刻 t t t 的边缘分布 p t ( x ) p_t(\mathbf{x}) pt(x) 与原 SDE 完全一致。这个 ODE 被称为 Probability Flow ODE,其形式为: d x d t = f ( x , t ) − 1 2 g 2 ( t ) ∇ x log ⁡ p t ( x ) \frac{d\mathbf{x}}{dt} = \mathbf{f}(\mathbf{x}, t) - \frac{1}{2}g^2(t)\nabla_{\mathbf{x}}\log p_t(\mathbf{x}) dtdx=f(x,t)21g2(t)xlogpt(x) 对比 Reverse SDE: d x = [ f ( x , t ) − g 2 ( t ) ∇ x log ⁡ p t ( x ) ] d τ + g ( t ) d w ˉ d\mathbf{x} = \left[ \mathbf{f}(\mathbf{x}, t) - g^2(t) \nabla_{\mathbf{x}} \log p_t(\mathbf{x}) \right] d\tau + g(t) d\bar{\mathbf{w}} dx=[f(x,t)g2(t)xlogpt(x)]dτ+g(t)dwˉ 可以发现,Probability Flow ODE 的漂移项恰好是 Reverse SDE 漂移项中 score 部分的"一半",同时完全去掉了扩散项(随机噪声)。这个 1 2 \frac{1}{2} 21 系数的来源可以这样理解:回顾 FPE 方程 ∂ p t ∂ t = − ∇ ⋅ ( f p t ) + 1 2 g 2 ( t ) ∇ 2 p t \frac{\partial p_t}{\partial t} = -\nabla \cdot (\mathbf{f} p_t) + \frac{1}{2} g^2(t) \nabla^2 p_t tpt=(fpt)+21g2(t)2pt,其中扩散项 1 2 g 2 ∇ 2 p t \frac{1}{2}g^2 \nabla^2 p_t 21g22pt 可以改写为 − ∇ ⋅ ( − 1 2 g 2 p t ∇ log ⁡ p t ) -\nabla \cdot (-\frac{1}{2}g^2 p_t \nabla \log p_t) (21g2ptlogpt)(利用 ∇ 2 p = ∇ ⋅ ( p ∇ log ⁡ p ) \nabla^2 p = \nabla \cdot (p \nabla \log p) 2p=(plogp))。所以 FPE 等价于连续性方程 ∂ p t ∂ t = − ∇ ⋅ ( v ~   p t ) \frac{\partial p_t}{\partial t} = -\nabla \cdot (\tilde{\mathbf{v}} \, p_t) tpt=(v~pt),其中 v ~ = f − 1 2 g 2 ∇ log ⁡ p t \tilde{\mathbf{v}} = \mathbf{f} - \frac{1}{2}g^2 \nabla \log p_t v~=f21g2logpt,这正是 Probability Flow ODE 的向量场。换言之,SDE 中随机噪声项对概率质量的"扩散"效应,恰好等价于一个确定性的漂移 − 1 2 g 2 ∇ log ⁡ p t -\frac{1}{2}g^2 \nabla \log p_t 21g2logpt,所以去掉随机项后只需保留 score 的一半就能维持相同的边缘分布演化。

![[2c7eabc8c3c4513f88b5c0dfbea966d6.png|800]]

  • 这个 ODE 的意义非常深远:

    1. 确定性采样:给定同一个初始噪声 x T \mathbf{x}_T xT,ODE 的解是唯一确定的,这意味着生成过程是完全可复现的。
    2. 精确的对数似然计算:利用连续正则化流(Continuous Normalizing Flow, CNF [10])的理论,可以通过瞬时变量变换公式(Instantaneous Change of Variables)精确计算 log ⁡ p 0 ( x ) \log p_0(\mathbf{x}) logp0(x) log ⁡ p 0 ( x ( 0 ) ) = log ⁡ p T ( x ( T ) ) + ∫ 0 T ∇ ⋅ f ~ θ ( x ( t ) , t )   d t \log p_0(\mathbf{x}(0)) = \log p_T(\mathbf{x}(T)) + \int_0^T \nabla \cdot \tilde{\mathbf{f}}_\theta(\mathbf{x}(t), t)\,dt logp0(x(0))=logpT(x(T))+0Tf~θ(x(t),t)dt 其中 f ~ θ ( x , t ) = f ( x , t ) − 1 2 g 2 ( t )   s θ ( x , t ) \tilde{\mathbf{f}}_\theta(\mathbf{x},t) = \mathbf{f}(\mathbf{x},t) - \frac{1}{2}g^2(t)\,s_\theta(\mathbf{x},t) f~θ(x,t)=f(x,t)21g2(t)sθ(x,t) 就是 Probability Flow ODE 的向量场。这在 SDE 框架下是做不到的。
    3. 可逆编码:由于 ODE 是可逆的,我们可以将任意数据点 x 0 \mathbf{x}_0 x0 沿正向 ODE 编码到隐空间 x T \mathbf{x}_T xT,再从 x T \mathbf{x}_T xT 解码回来,实现无损的编码-解码。这为图像编辑、插值等下游任务提供了天然的支持。
    4. 高效求解器:ODE 的数值求解比 SDE 成熟得多,可以直接使用 Runge-Kutta、Adams-Bashforth 等经典方法,也可以利用自适应步长控制器(如 dopri5)来自动选择步长,在保证精度的同时最小化函数评估次数(NFE)。
  • 至此,我们可以看到 SDE 框架的全貌:训练时,通过 Denoising Score Matching 学习 s θ ( x , t ) s_\theta(\mathbf{x},t) sθ(x,t)采样时,既可以求解 Reverse SDE(随机采样,多样性更好),也可以求解 Probability Flow ODE(确定性采样,效率更高、支持似然计算)。两条路径殊途同归,共享同一个训练好的 score 模型。


Appendix

Appendix C:Reverse SDE 的局部高斯推导

  1. Fokker-Planck 方程初始条件
    好的,下面我们来由标准的前向 Ito SDE 来推导逆向的随机微分方程,也就是 Reverse SDE: Forward :    d x = f ( x , t ) d t + g ( t ) d w t Reverse :    d x = [ f ( x , t ) − g 2 ( t ) ∇ x log ⁡ p t ( x ) ] d τ + g ( t ) d w ˉ \begin{aligned} \text{Forward}: \;d\mathbf{x} &=\mathbf{f}(\mathbf{x},t)dt+g(t)d\mathbf{w}_t \\ \text{Reverse}:\;d\mathbf{x} &= \left[ \mathbf{f}(\mathbf{x}, t) - g^2(t) \nabla_{\mathbf{x}} \log p_t(\mathbf{x}) \right] d\tau + g(t) d\bar{\mathbf{w}}\end{aligned} Forward:dxReverse:dx=f(x,t)dt+g(t)dwt=[f(x,t)g2(t)xlogpt(x)]dτ+g(t)dwˉ 我们想要得到上述结论,需要重要的一个结论就是 Fokker-Planck 方程 ∂ p t ∂ t = − ∇ ⋅ ( f p t ) + 1 2 g 2 ( t ) ∇ 2 p t \frac{\partial p_t}{\partial t} = -\nabla \cdot (\mathbf{f} p_t) + \frac{1}{2} g^2(t) \nabla^2 p_t tpt=(fpt)+21g2(t)2pt 它反映了边缘概率分布的变化趋势,是构造流场的关键信息。那么我们首先需要构造出边缘概率分布的表达式,考虑一个光滑测试函数 ϕ ( x ) \phi(\textbf{x}) ϕ(x)(通常为紧支集,无穷可微),其中我们把 x ( t ) \textbf{x}(t) x(t) 当成一个随着时间 t t t 变化的随机变量,将其在 p t ( x ) p_t(\textbf{x}) pt(x) 的分布下求期望: E p t ( x ) [   ϕ ( x ( t ) )   ] = ∫ R d ϕ ( x )   p t ( x )   d x \mathbb{E}_{p_t(\textbf{x})}[\,\phi(\textbf{x}(t))\,] = \int_{\mathbb{R}^d}\phi(\textbf{x})\,p_t(\textbf{x})\,d\textbf{x} Ept(x)[ϕ(x(t))]=Rdϕ(x)pt(x)dx 将其对时间求导,可以得到: d d t E p t ( x ) [   ϕ ( x ( t ) )   ] = ∫ R d ϕ ( x )   ∂ p t ( x ) ∂ t   d x \frac{d}{dt}\mathbb{E}_{p_t(\textbf{x})}[\,\phi(\textbf{x}(t))\,] = \int_{\mathbb{R}^d}\phi(\textbf{x})\,\frac{\partial p_t(\textbf{x})}{\partial t}\,d\textbf{x} dtdEpt(x)[ϕ(x(t))]=Rdϕ(x)tpt(x)dx 下面我们主要考虑如何将 ϕ ( x ) \phi(\textbf{x}) ϕ(x) 进行展开,由于 Ito 过程中均为微分项,故考虑 d ϕ d\phi dϕ 展开如下(先考虑标量 Ito Equation): d ϕ ( x ( t ) ) = d ϕ d x d x + 1 2 d 2 ϕ d x 2 ( d x ) 2 + o ( d x ) = d ϕ d x ( f ( x , t ) d t + g ( t ) d w ) + 1 2 d 2 ϕ d x 2 ( f ( x , t ) d t + g ( t ) d w ) 2 \begin{aligned} d\phi(x(t)) &= \frac{d\phi}{dx}dx+\frac{1}{2}\frac{d^2\phi}{dx^2}(dx)^2+o(dx) \\ &=\frac{d\phi}{dx}(f(x,t)dt+g(t)dw)+\frac{1}{2}\frac{d^2\phi}{dx^2}(f(x,t)dt+g(t)dw)^2 \end{aligned} dϕ(x(t))=dxdϕdx+21dx2d2ϕ(dx)2+o(dx)=dxdϕ(f(x,t)dt+g(t)dw)+21dx2d2ϕ(f(x,t)dt+g(t)dw)2 其中需要注意的是,由于布朗运动时间增长的独立性: d w = w ( t + Δ t ) − w ( t ) ∼ N ( 0 , d t ) dw = w(t+\Delta t)-w(t)\sim\mathcal{N}(0,dt) dw=w(t+Δt)w(t)N(0,dt) 也即在期望层面上有: ( d x ) 2 = ( g ( t ) d w ) 2 = g 2 ( t )   d t , 其中 E [ ( d w ) 2 ] = d t (dx)^2 = (g(t)dw)^2 = g^2(t)\,dt,其中\mathbb{E}[(dw)^2] = dt (dx)2=(g(t)dw)2=g2(t)dt,其中E[(dw)2]=dt 此时,将标量 Ito 方程拓展至多维 Ito,满足方程: d ( ϕ ( x ) ) = ∇ x ϕ ⋅ d x + 1 2 ∑ i , j = 1 d ( ∂ 2 ϕ ∂ x i ∂ y i ) d × d   ( d x ) i   ( d x ) ) j d(\phi(\textbf{x})) = \nabla_{\textbf{x}}\phi·d\textbf{x}+\frac{1}{2}\sum^d_{i,j=1}(\frac{\partial^2\phi}{\partial x_i \partial y_i})_{d \times d}\,(d\textbf{x})_i\,(d\textbf{x}))_j d(ϕ(x))=xϕdx+21i,j=1d(xiyi2ϕ)d×d(dx)i(dx))j

  2. 多维 Ito Equation 展开
    其中先关注第一项,代入前向 SDE 后,由于 E ( d w ) = 0 \mathbb{E}(d\textbf{w}) = 0 E(dw)=0,即有 ∇ x ϕ ⋅ d x = ∇ x ϕ ⋅ f   d t + ∇ x ϕ ⋅ g ( t )   d w = ∇ x ϕ ⋅ f   d t \nabla_{\textbf{x}}\phi·d\textbf{x} = \nabla_{\textbf{x}}\phi·\textbf{f}\,dt+\nabla_{\textbf{x}}\phi·g(t)\,d\textbf{w} = \nabla_{\textbf{x}}\phi·\textbf{f}\,dt xϕdx=xϕfdt+xϕg(t)dw=xϕfdt 至于后一项,则同样由布朗运动的性质,由于 g 2 ( t )   d w i   d w j = g 2 ( t )   δ i j   d t g^2(t) \,d\textbf{w}_i\,d\textbf{w}_j = g^2(t)\,\delta_{ij}\,dt g2(t)dwidwj=g2(t)δijdt,将第二项用拉普拉斯算子的形式展开,忽略所有的二阶无穷小量(如 d t d w dtd\textbf{w} dtdw 这类): 1 2 ∑ i , j = 1 d ( ∂ 2 ϕ ∂ x i ∂ y i ) d × d   ( d x ) i   ( d x ) ) j = 1 2 g 2 ( t ) ∇ x 2   ϕ   d t \frac{1}{2}\sum^d_{i,j=1}(\frac{\partial^2\phi}{\partial x_i \partial y_i})_{d \times d}\,(d\textbf{x})_i\,(d\textbf{x}))_j = \frac{1}{2}g^2(t)\nabla^2_\textbf{x}\,\phi\,dt 21i,j=1d(xiyi2ϕ)d×d(dx)i(dx))j=21g2(t)x2ϕdt 所以综上所述,将 d ( ϕ ( x ) ) d(\phi(\textbf{x})) d(ϕ(x)) 对时间积分,得到 ϕ ( x ( t ) ) − ϕ ( x ( 0 ) ) = ∫ 0 t ( ∇ x ϕ ⋅ f   +   1 2 g 2 ( s ) ∇ x 2   ϕ )   d s \phi(\textbf{x}(t)) - \phi(\textbf{x}(0)) = \int_0^t(\nabla_{\textbf{x}}\phi·\textbf{f}\,+\,\frac{1}{2}g^2(s)\nabla^2_\textbf{x}\,\phi)\,ds ϕ(x(t))ϕ(x(0))=0t(xϕf+21g2(s)x2ϕ)ds 等式两边同时求期望后不难发现,由于我们的漂移项与扩散项光滑有界,由富比尼定理可以将积分与期望进行交换,即: E p t [ ϕ ( x ( t ) ) ] = ∫ 0 t ( E p t [ ∇ x ϕ ⋅ f   +   1 2 g 2 ( s ) ∇ x 2   ϕ ] )   d s \mathbb{E}_{p_t}[\phi(\textbf{x}(t))] = \int_0^t(\mathbb{E}_{p_t}[\nabla_{\textbf{x}}\phi·\textbf{f}\,+\,\frac{1}{2}g^2(s)\nabla^2_\textbf{x}\,\phi])\,ds Ept[ϕ(x(t))]=0t(Ept[xϕf+21g2(s)x2ϕ])ds 最后,我们再次求导并代入最开始的关于边缘概率分布的等式 d d t E p t ( x ) [   ϕ ( x ( t ) )   ] = ∫ R d ϕ ( x ) ∂ p t ( x ) ∂ t d x = ∫ R d ( ∇ ϕ ( x ) ⋅ f ( x , t ) + 1 2 g 2 ( t ) ∇ 2 ϕ ( x ) ) p t ( x ) d x \frac{d}{dt}\mathbb{E}_{p_t(\textbf{x})}[\,\phi(\textbf{x}(t))\,] = \int_{\mathbb{R}^d} \phi(\mathbf{x}) \frac{\partial p_t(\mathbf{x})}{\partial t} d\mathbf{x} = \int_{\mathbb{R}^d} \left( \nabla \phi(\mathbf{x}) \cdot \mathbf{f}(\mathbf{x}, t) + \frac{1}{2} g^2(t) \nabla^2 \phi(\mathbf{x}) \right) p_t(\mathbf{x}) d\mathbf{x} dtdEpt(x)[ϕ(x(t))]=Rdϕ(x)tpt(x)dx=Rd(ϕ(x)f(x,t)+21g2(t)2ϕ(x))pt(x)dx

  3. 分部积分与散度定理
    观察上面的等式,我们不难发现,既然测试函数是人为给定的,那么我们就需要想办法把 ϕ \phi ϕ 从散度算子中提出来。很自然地,我们就会想到使用散度定理(严谨定义不在此详细介绍): ∫ Ω ∇ x ⋅ F ( x )   d x = ∫ ∂ Ω F ( x ) ⋅ n ( x )   d S \int_\Omega \nabla_\textbf{x}·\textbf{F}(\textbf{x})\,d\textbf{x} = \int_{\partial\Omega}\textbf{F}(\textbf{x})·\textbf{n}(\textbf{x})\,dS ΩxF(x)dx=ΩF(x)n(x)dS 在此处,由于 ϕ \phi ϕ 是紧支集, ∫ ∂ R d ⋯ d S = 0 \int_{\partial\mathbb{R}^d}\cdots dS = 0 RddS=0,故等式右边恒等于零,于是我们尝试用这个等式进行化简。

    ① 构造向量场 F ( x ) = ϕ ( x ) f ( x , t ) p t ( x ) \textbf{F}(\textbf{x}) = \phi(\textbf{x})\textbf{f}(\textbf{x},t)p_t(\textbf{x}) F(x)=ϕ(x)f(x,t)pt(x),那么分部积分得到 ∇ x ⋅ F = ∇ x ϕ ⋅ ( f p t ) + ϕ ∇ x ⋅ ( f p t ) \nabla_\textbf{x}·\textbf{F} = \nabla_\textbf{x}\phi·(\textbf{f}p_t) + \phi\nabla_\textbf{x}·(\textbf{f}p_t) xF=xϕ(fpt)+ϕx(fpt) 于是有: 0 = ∫ R d ∇ x ⋅ F   d x = ∫ R d ∇ x ϕ ⋅ ( f p t )   d x ⏟ Part   1 + ∫ R d ϕ ∇ x ⋅ ( f p t )   d x 0=\int_{\mathbb{R}^d} \nabla_\textbf{x}·\textbf{F} \,d\textbf{x} = \underbrace{\int_{\mathbb{R}^d} \nabla_\textbf{x}\phi·(\textbf{f}p_t)\,d\textbf{x} }_{\textbf{Part 1}} + \int_{\mathbb{R}^d}\phi \nabla_\textbf{x}·(\textbf{f}p_t)\,d\textbf{x} 0=RdxFdx=Part 1 Rdxϕ(fpt)dx+Rdϕx(fpt)dx
    ② 同样,对于拉普拉斯算子,需要做两次分部积分,令 G ( x ) = p t ( x ) ∇ x ϕ ( x ) ,   H ( x ) = ϕ ( x ) ∇ x p t ( x ) \textbf{G}(\textbf{x}) = p_t(\textbf{x})\nabla_\textbf{x}\phi(\textbf{x}),\,\textbf{H}(\textbf{x}) = \phi(\textbf{x})\nabla_\textbf{x}p_t(\textbf{x}) G(x)=pt(x)xϕ(x),H(x)=ϕ(x)xpt(x),则分部积分得到: ∇ x ⋅ G ( x ) = ∇ x p t ( x ) ∇ x ϕ ( x ) + p t ( x ) ∇ x 2 ϕ ( x ) ∇ x ⋅ H ( x ) = ∇ x ϕ ( x ) ∇ x p t ( x ) + ϕ ( x ) ∇ x 2 p t ( x ) \begin{aligned} \nabla_\textbf{x}·\textbf{G}(\textbf{x}) = \nabla_\textbf{x}p_t(\textbf{x})\nabla_\textbf{x}\phi(\textbf{x}) + p_t(\textbf{x})\nabla^2_\textbf{x}\phi(\textbf{x}) \\ \nabla_\textbf{x}·\textbf{H}(\textbf{x}) = \nabla_\textbf{x}\phi(\textbf{x})\nabla_\textbf{x} p_t(\textbf{x})+\phi(\textbf{x})\nabla^2_\textbf{x}p_t(\textbf{x}) \end{aligned} xG(x)=xpt(x)xϕ(x)+pt(x)x2ϕ(x)xH(x)=xϕ(x)xpt(x)+ϕ(x)x2pt(x) 所以代入散度定理的公式: 0 = ∫ R d p t ∇ x 2 ϕ   d x ⏟ Part   2 + ∫ R d ∇ x p t ⋅ ∇ x ϕ   d x 0 = ∫ R d ∇ x p t ⋅ ∇ x ϕ   d x + ∫ R d ϕ ∇ x 2 p t   d x \begin{aligned} 0 = \underbrace{\int_{\mathbb{R}^d} p_t\nabla^2_\textbf{x}\phi \,d\textbf{x}}_{\textbf{Part 2}} + \int_{\mathbb{R}^d} \nabla_\textbf{x}p_t·\nabla_\textbf{x}\phi\,d\textbf{x} \\ 0 = \int_{\mathbb{R}^d} \nabla_\textbf{x}p_t·\nabla_\textbf{x}\phi\,d\textbf{x} + \int_{\mathbb{R}^d} \phi\nabla^2_\textbf{x}p_t \,d\textbf{x}\end{aligned} 0=Part 2 Rdptx2ϕdx+Rdxptxϕdx0=Rdxptxϕdx+Rdϕx2ptdx 最后,将上述结果,代入期望演化方程,由于测试函数的任意性,被积函数也就相应的必须相等,即可得到 FPE 方程: ∂ p t ∂ t = − ∇ ⋅ ( f p t ) + 1 2 g 2 ( t ) ∇ 2 p t \frac{\partial p_t}{\partial t} = -\nabla \cdot (\mathbf{f} p_t) + \frac{1}{2} g^2(t) \nabla^2 p_t tpt=(fpt)+21g2(t)2pt

  4. 化简得到 Reverse SDE
    首先考虑拉普拉斯算子的另一种等效形式: ∇ ⋅ ( p ∇ log ⁡ p ) = ∇ ⋅ ( p ∇ p p ) = ∇ ⋅ ( ∇ p ) = ∇ 2 p \nabla \cdot (p \nabla \log p) = \nabla \cdot (p \frac{\nabla p}{p}) = \nabla \cdot (\nabla p) = \nabla^2 p (plogp)=(ppp)=(p)=2p 将其代入 FPE 后合并散度算子,即可得到: ∂ p t ∂ t = − ∇ ⋅ [ f p t − 1 2 g 2 ( t ) p t ∇ log ⁡ p t ] \frac{\partial p_t}{\partial t} = -\nabla \cdot \left[ \mathbf{f} p_t - \frac{1}{2} g^2(t) p_t \nabla \log p_t \right] tpt=[fpt21g2(t)ptlogpt] 假设逆向 SDE 的形式为(注意:由于时间反向,符号与正向 FPE 相反): d x = f rev ( x , t ) d t + g ( t ) d w ˉ d\mathbf{x} = \mathbf{f}_{\text{rev}}(\mathbf{x}, t) dt + g(t) d\bar{\mathbf{w}} dx=frev(x,t)dt+g(t)dwˉ 这里的时间 t t t 是从 T T T 回退到 0 0 0。需要注意的是,逆向 SDE 中的扩散系数 g ( t ) g(t) g(t) 与正向相同且符号不变,这是因为扩散项对应 FPE 中的二阶导数项 1 2 g 2 ∇ 2 p t \frac{1}{2}g^2 \nabla^2 p_t 21g22pt,而二阶空间导数在时间反转下不改变符号(它只描述概率质量的局部扩散速率,与时间方向无关),因此逆向过程的随机扰动强度与正向一致。在物理上,逆向演化的概率密度演化满足: ∂ p t ∂ t = + ∇ ⋅ J rev \frac{\partial p_t}{\partial t} = + \nabla \cdot \mathbf{J}_{\text{rev}} tpt=+Jrev 为了使正向和逆向过程描述同一个密度演化过程,必须满足: J rev = − J fwd ,   a.k.a.    f rev p t − 1 2 g 2 ( t ) p t ∇ log ⁡ p t = − ( f p t − 1 2 g 2 ( t ) p t ∇ log ⁡ p t ) \mathbf{J}_{\text{rev}} = -\mathbf{J}_{\text{fwd}},\,\textbf{a.k.a.}\;\mathbf{f}_{\text{rev}} p_t - \frac{1}{2} g^2(t) p_t \nabla \log p_t = - \left( \mathbf{f} p_t - \frac{1}{2} g^2(t) p_t \nabla \log p_t \right) Jrev=Jfwd,a.k.a.frevpt21g2(t)ptlogpt=(fpt21g2(t)ptlogpt) 消去 p t p_t pt 并解出 f rev \mathbf{f}_{\text{rev}} frev f rev = − f + g 2 ∇ log ⁡ p t \mathbf{f}_{\text{rev}} = -\mathbf{f} + g^2 \nabla \log p_t frev=f+g2logpt
    于是此时再代入,即可得到最终版本的 Reverse SDE: d x = [ f ( x , t ) − g 2 ( t ) ∇ x log ⁡ p t ( x ) ] d τ + g ( t ) d w ˉ d\mathbf{x} = \left[ \mathbf{f}(\mathbf{x}, t) - g^2(t) \nabla_{\mathbf{x}} \log p_t(\mathbf{x}) \right] d\tau + g(t) d\bar{\mathbf{w}} dx=[f(x,t)g2(t)xlogpt(x)]dτ+g(t)dwˉ


Reference

[8] Song, Y., Sohl-Dickstein, J., Kingma, D. P., Kumar, A., Ermon, S., & Poole, B. (2021). Score-Based Generative Modeling through Stochastic Differential Equations. ICLR 2021.

[9] Anderson, B. D. O. (1982). Reverse-Time Diffusion Equation Models. Stochastic Processes and their Applications, 12(3), 313–326.

[10] Chen, R. T. Q., Rubanova, Y., Bettencourt, J., & Duvenaud, D. (2018). Neural Ordinary Differential Equations. NeurIPS 2018.

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐