Diffusion 扩散模型知识体系梳理(三)
Diffusion 扩散模型知识体系 Part 3
博客笔记思路:
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(θ)=Et∼U(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,z∼N(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 不能太大,否则误差会累积。实践中有几种改进策略:
- 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) 对样本进行微调。这样可以在不增加太多计算量的前提下显著提升生成质量。
- 高阶 SDE 求解器:类比 ODE 中的 Runge-Kutta 方法,也可以构造 SDE 的高阶数值格式(如 Milstein 方法),但由于需要计算 score function 的导数,实际应用中并不常见。
- 自适应步长:根据当前 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 ∂t∂pt=−∇⋅(fpt)+21g2(t)∇2pt,其中扩散项 1 2 g 2 ∇ 2 p t \frac{1}{2}g^2 \nabla^2 p_t 21g2∇2pt 可以改写为 − ∇ ⋅ ( − 1 2 g 2 p t ∇ log p t ) -\nabla \cdot (-\frac{1}{2}g^2 p_t \nabla \log p_t) −∇⋅(−21g2pt∇logpt)(利用 ∇ 2 p = ∇ ⋅ ( p ∇ log p ) \nabla^2 p = \nabla \cdot (p \nabla \log p) ∇2p=∇⋅(p∇logp))。所以 FPE 等价于连续性方程 ∂ p t ∂ t = − ∇ ⋅ ( v ~ p t ) \frac{\partial p_t}{\partial t} = -\nabla \cdot (\tilde{\mathbf{v}} \, p_t) ∂t∂pt=−∇⋅(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~=f−21g2∇logpt,这正是 Probability Flow ODE 的向量场。换言之,SDE 中随机噪声项对概率质量的"扩散"效应,恰好等价于一个确定性的漂移 − 1 2 g 2 ∇ log p t -\frac{1}{2}g^2 \nabla \log p_t −21g2∇logpt,所以去掉随机项后只需保留 score 的一半就能维持相同的边缘分布演化。
![![[2c7eabc8c3c4513f88b5c0dfbea966d6.png|800]]](https://i-blog.csdnimg.cn/direct/8e223f4988a6495e80a575cd6f640de2.png)
-
这个 ODE 的意义非常深远:
- 确定性采样:给定同一个初始噪声 x T \mathbf{x}_T xT,ODE 的解是唯一确定的,这意味着生成过程是完全可复现的。
- 精确的对数似然计算:利用连续正则化流(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))+∫0T∇⋅f~θ(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 框架下是做不到的。
- 可逆编码:由于 ODE 是可逆的,我们可以将任意数据点 x 0 \mathbf{x}_0 x0 沿正向 ODE 编码到隐空间 x T \mathbf{x}_T xT,再从 x T \mathbf{x}_T xT 解码回来,实现无损的编码-解码。这为图像编辑、插值等下游任务提供了天然的支持。
- 高效求解器: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 的局部高斯推导
-
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 ∂t∂pt=−∇⋅(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)∂t∂pt(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=1∑d(∂xi∂yi∂2ϕ)d×d(dx)i(dx))j -
多维 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=1∑d(∂xi∂yi∂2ϕ)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)∂t∂pt(x)dx=∫Rd(∇ϕ(x)⋅f(x,t)+21g2(t)∇2ϕ(x))pt(x)dx -
分部积分与散度定理
观察上面的等式,我们不难发现,既然测试函数是人为给定的,那么我们就需要想办法把 ϕ \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 ∫Ω∇x⋅F(x)dx=∫∂ΩF(x)⋅n(x)dS 在此处,由于 ϕ \phi ϕ 是紧支集, ∫ ∂ R d ⋯ d S = 0 \int_{\partial\mathbb{R}^d}\cdots dS = 0 ∫∂Rd⋯dS=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) ∇x⋅F=∇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=∫Rd∇x⋅Fdx=Part 1 ∫Rd∇xϕ⋅(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} ∇x⋅G(x)=∇xpt(x)∇xϕ(x)+pt(x)∇x2ϕ(x)∇x⋅H(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 ∫Rdpt∇x2ϕdx+∫Rd∇xpt⋅∇xϕdx0=∫Rd∇xpt⋅∇xϕ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 ∂t∂pt=−∇⋅(fpt)+21g2(t)∇2pt -
化简得到 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 ∇⋅(p∇logp)=∇⋅(pp∇p)=∇⋅(∇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] ∂t∂pt=−∇⋅[fpt−21g2(t)pt∇logpt] 假设逆向 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 21g2∇2pt,而二阶空间导数在时间反转下不改变符号(它只描述概率质量的局部扩散速率,与时间方向无关),因此逆向过程的随机扰动强度与正向一致。在物理上,逆向演化的概率密度演化满足: ∂ p t ∂ t = + ∇ ⋅ J rev \frac{\partial p_t}{\partial t} = + \nabla \cdot \mathbf{J}_{\text{rev}} ∂t∂pt=+∇⋅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.frevpt−21g2(t)pt∇logpt=−(fpt−21g2(t)pt∇logpt) 消去 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+g2∇logpt
于是此时再代入,即可得到最终版本的 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.
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)