← 上一章 | 第5章 / 共14章 | 下一章 → |
到目前为止,我们学习的扩散模型都是在离散时间步上定义的。但如果我们让时间步数趋于无穷,会发生什么?答案是:我们得到了一个更强大、更灵活的数学框架——随机微分方程(Stochastic Differential Equations, SDEs)。Song等人在2021年的工作《Score-Based Generative Modeling through Stochastic Differential Equations》中,将DDPM和NCSN等模型统一在SDE的视角下,开启了连续时间生成建模的新纪元。本章将深入探讨SDE框架,理解其与离散模型的联系,并介绍其对应的反向SDE、概率流ODE和Fokker-Planck方程等核心概念。
想象你在拍摄一个物体从清晰逐渐模糊的过程。如果你每秒拍一张照片,得到的是一个离散的序列;但如果拍摄速度越来越快,最终你会得到一个连续的视频。扩散模型从离散到连续的转变正是这样一个过程。
让我们回顾DDPM的离散前向过程: $x_k = \sqrt{1-\beta_k} x_{k-1} + \sqrt{\beta_k} z_{k-1}, \quad z_{k-1} \sim \mathcal{N}(0, I)$
这个过程有一个美妙的物理类比:想象一滴墨水在水中扩散。每一个时间步,墨水分子都会:
为什么选择 $\sqrt{1-\beta_k}$ 和 $\sqrt{\beta_k}$ 这样的系数?这不是随意的,而是基于深刻的数学考虑:
方差守恒原理:假设 $x_{k-1}$ 的方差为 $\sigma^2$,而 $z_{k-1}$ 是标准正态分布(方差为1)。那么 $x_k$ 的方差为: \(\text{Var}(x_k) = (1-\beta_k)\text{Var}(x_{k-1}) + \beta_k \cdot 1 = (1-\beta_k)\sigma^2 + \beta_k\)
当 $\sigma^2 = 1$ 时,我们得到 $\text{Var}(x_k) = 1$,方差保持不变!这种设计避免了数值不稳定:如果方差不断增长,最终会导致数值溢出;如果方差不断衰减,信号会消失在数值精度中。
信噪比的渐进衰减:定义信噪比(Signal-to-Noise Ratio, SNR)为: \(\text{SNR}_k = \frac{\text{信号强度}}{\text{噪声强度}} = \frac{\bar{\alpha}_k}{1-\bar{\alpha}_k}\)
其中 $\bar{\alpha}k = \prod{i=1}^k (1-\beta_i)$。随着 $k$ 增加,SNR单调递减,最终趋近于0,这意味着数据信号逐渐被噪声淹没。
当 $\beta_k$ 很小时,过程变化缓慢,我们可以用泰勒展开来近似: $\sqrt{1 - \beta_k} \approx 1 - \frac{\beta_k}{2} - \frac{\beta_k^2}{8} + O(\beta_k^3)$
保留一阶项,更新步骤变为: $x_k - x_{k-1} \approx -\frac{\beta_k}{2} x_{k-1} + \sqrt{\beta_k} z_{k-1}$
💡 直觉理解:左边是位置的变化量,右边第一项是一个”向原点的拉力”(因为系数为负),第二项是随机扰动。这就像一个被橡皮筋拴在原点的粒子,在随机力的作用下运动。
这个近似的精度如何?让我们分析误差项:
现在进行时间的连续化。将时间区间 $[0, T]$ 分成 $N$ 份,令 $\Delta t = T/N$,并设 $\beta_k = b(t_k)\Delta t$,其中 $b(t)$ 是噪声调度函数。代入后: $\frac{x(t_k) - x(t_{k-1})}{\Delta t} \approx -\frac{b(t_{k-1})}{2} x(t_{k-1}) + \sqrt{b(t_{k-1})} \frac{z_{k-1}}{\sqrt{\Delta t}}$
这里的关键洞察是:当 $\Delta t \to 0$ 时,
但奇妙的是,这个”爆炸”的项正是白噪声的正确缩放。让我们深入理解这一点:
布朗运动的构造:考虑随机游走 $S_n = \sum_{i=1}^n X_i$,其中 $X_i$ 是独立同分布的随机变量,满足 $\mathbb{E}[X_i] = 0$,$\text{Var}(X_i) = 1$。根据中心极限定理: \(\frac{S_n}{\sqrt{n}} \xrightarrow{d} \mathcal{N}(0, 1)\)
在我们的设定中,$z_i \sim \mathcal{N}(0, 1)$ 是独立的,时间步长为 $\Delta t = T/N$。定义: \(W(t) = \sum_{i=1}^{\lfloor t/\Delta t \rfloor} \sqrt{\Delta t} \cdot z_i\)
当 $\Delta t \to 0$ 时,这个过程收敛到标准布朗运动!
白噪声的数学含义:形式上,白噪声 $\xi(t) = dW_t/dt$ 是布朗运动的”导数”。虽然布朗运动几乎处处不可导,但我们可以在分布意义下理解这个导数:
因此,$z_k / \sqrt{\Delta t}$ 的极限正是白噪声 $\xi(t)$!
最终,我们得到了随机微分方程(SDE): $dx_t = -\frac{b(t)}{2} x_t dt + \sqrt{b(t)} dW_t$
这就是DDPM在连续时间下的极限形式,被称为方差保持(Variance Preserving, VP)SDE。
🎯 为什么叫”方差保持”? 让我们计算方差的演化。使用Itô公式,对于 $V(t) = \mathbb{E}[||x_t||^2]$: \(\frac{dV}{dt} = -b(t)V(t) + d \cdot b(t)\)
其中 $d$ 是数据维度。当 $V(0) = d$(标准化数据)时,稳态解为 $V(\infty) = d$,即方差保持不变!这避免了数值不稳定,是VP-SDE的一大优势。
噪声调度函数 $b(t)$ 的选择:
每种调度都对应着不同的扩散速度和生成质量权衡。
SDE为我们提供了一个统一的语言来描述各种扩散模型。一个通用的前向SDE可以写成: $dx_t = f(x_t, t) dt + g(t) dW_t$
这个方程包含两个关键组件:
定义:SDE家族
1. VP-SDE (Variance Preserving) - 方差保持型
对应DDPM,其形式为: $dx_t = -\frac{1}{2} \beta(t) x_t dt + \sqrt{\beta(t)} dW_t$
其中 $\beta(t)$ 是噪声调度函数。VP-SDE的精妙之处在于:
- 物理直觉:像是一个弹簧振子在粘性介质中的运动,既有回复力($-\frac{1}{2}\beta(t)x_t$),又有随机扰动
- 方差特性:如果 $\mathbb{E}[x_0^Tx_0] = d$($d$ 是数据维度),那么对于适当的 $\beta(t)$,有 $\mathbb{E}[x_t^Tx_t] \approx d$
- 数值稳定性:避免了数值爆炸或消失,特别适合深度网络训练
2. VE-SDE (Variance Exploding) - 方差爆炸型
对应NCSN,其形式为: $dx_t = \sqrt{\frac{d[\sigma^2(t)]}{dt}} dW_t$
注意没有漂移项!这意味着:
- 物理直觉:纯粹的扩散过程,像是热传导或分子扩散
方差演化:$\mathbb{E}[ x_t ^2] = \mathbb{E}[ x_0 ^2] + d\sigma^2(t)$,方差单调增长 - 多尺度特性:通过选择 $\sigma(t) = \sigma_{\min} \left(\frac{\sigma_{\max}}{\sigma_{\min}}\right)^t$,可以覆盖多个噪声尺度
3. sub-VP-SDE - 次方差保持型
这是VP-SDE的改进版本: $dx_t = -\frac{1}{2} \beta(t) x_t dt + \sqrt{\beta(t)(1-e^{-2\int_0^t \beta(s)ds})} dW_t$
- 理论优势:保证了精确的方差守恒,而不是近似
- 实践意义:在长时间演化中更稳定
选择哪种SDE并非随意,而是要考虑数据特性和计算效率:
实践经验分享:
在实际应用中,选择SDE类型往往需要实验验证。以下是一些经验法则:
SDE的数值求解:
在实践中,我们需要离散化SDE来进行数值求解。最简单的是Euler-Maruyama方法: \(x_{t+\Delta t} = x_t + f(x_t, t)\Delta t + g(t)\sqrt{\Delta t} \cdot z_t\)
其中 $z_t \sim \mathcal{N}(0, I)$。PyTorch中的实现通常使用:
torch.randn_like()
生成噪声torch.sqrt()
计算平方根💡 开放问题:
如果前向SDE描述了数据如何被噪声破坏,那么我们如何构建一个反向的过程来从噪声中恢复数据呢?这个问题的答案揭示了扩散模型的深刻数学结构。
想象你在看一段视频:墨水在清水中扩散,从一个集中的墨滴逐渐弥漫开来。现在,如果你倒放这段视频,会看到什么?分散的墨水神奇地聚集回原点!这正是反向SDE要实现的:时间的反演。
但这里有一个关键问题:在物理世界中,扩散是不可逆的(热力学第二定律)。那么数学上如何实现这种”反熵”过程呢?答案是:我们需要额外的信息——分数函数。
定理:Anderson反向时间SDE (1982)
对于前向SDE: $dx = f(x, t)dt + g(t)dW_t, \quad t \in [0, T]$
其对应的反向时间SDE(从时间 $T$ 到 $0$)为: $dx_t = [f(x_t, t) - g(t)^2 \nabla_{x_t} \log p_t(x_t)] dt + g(t) d\bar{W}_t$
其中:
- $d\bar{W}_t$ 是反向时间的布朗运动(独立于前向的 $dW_t$)
- $\nabla_{x_t} \log p_t(x_t)$ 是时刻 $t$ 的分数函数
- $p_t(x)$ 是前向过程在时刻 $t$ 的边缘概率密度
反向SDE的漂移项可以分解为两部分: \(\underbrace{f(x_t, t)}_{\text{原始漂移}} - \underbrace{g(t)^2 \nabla_{x_t} \log p_t(x_t)}_{\text{分数修正项}}\)
原始漂移项:如果只有这一项,时间反演后的过程仍会向同一方向演化(想象一个向下流的河流,倒放视频它还是向下流)
分数修正项:这是使过程真正反向的关键!
🎯 物理类比:想象粒子在一个势能场中运动:
Anderson定理揭示了一个深刻的事实:扩散模型的本质是学习分数函数。这统一了看似不同的两种方法:
它们之间的关系是: \(s_\theta(x_t, t) = -\frac{\epsilon_\theta(x_t, t)}{\sqrt{1 - \bar{\alpha}_t}}\)
这个关系的推导基于一个关键观察:在VP-SDE下,$x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1-\bar{\alpha}_t} \epsilon$,因此:
步骤1:条件分布的分数 给定 $x_0$,$x_t$ 的条件分布是高斯分布: \(p(x_t|x_0) = \mathcal{N}(x_t; \sqrt{\bar{\alpha}_t} x_0, (1-\bar{\alpha}_t)I)\)
其对数和分数为: \(\log p(x_t|x_0) = -\frac{||x_t - \sqrt{\bar{\alpha}_t} x_0||^2}{2(1-\bar{\alpha}_t)} + \text{const}\) \(\nabla_{x_t} \log p(x_t|x_0) = -\frac{x_t - \sqrt{\bar{\alpha}_t} x_0}{1-\bar{\alpha}_t} = -\frac{\epsilon}{\sqrt{1-\bar{\alpha}_t}}\)
步骤2:边缘分数与条件分数的关系 利用贝叶斯定理和分数的性质: \(\nabla_{x_t} \log p(x_t) = \nabla_{x_t} \log \int p(x_t|x_0) p(x_0) dx_0\)
使用重参数化技巧和 denoising score matching 的结果,可以证明: \(\nabla_{x_t} \log p(x_t) = \mathbb{E}_{x_0 \sim p(x_0|x_t)}[\nabla_{x_t} \log p(x_t|x_0)]\)
当神经网络 $\epsilon_\theta$ 能够准确预测噪声时,上述期望可以近似为单点估计,从而得到了DDPM和Score Matching的等价性。
分数函数 $\nabla \log p(x)$ 有着深刻的几何含义:
可视化理解:
低概率区域 ←←←← 分数场 →→→→ 高概率区域
噪声 数据
理论性质:
Stein恒等式:对于光滑函数 $\phi$ 满足一定衰减条件,有 \(\mathbb{E}_{x \sim p}[\nabla \cdot \phi(x) + \phi(x) \cdot \nabla \log p(x)] = 0\) 这是score matching的理论基础。
分数的奇异性:在数据分布的支撑集边界,分数可能不连续甚至无穷大。这解释了为什么需要添加噪声来”平滑”分布。
维度诅咒:在高维空间中,分数函数的估计变得极其困难。扩散模型通过多尺度噪声巧妙地缓解了这个问题。
实践挑战:
⚡ 实现挑战:
SDE的采样过程是随机的,意味着从同一个噪声 $x_T$ 出发,每次得到的 $x_0$ 都会略有不同。这种随机性有时是优点(增加多样性),有时是缺点(难以复现、调试困难)。是否存在一种确定性的路径,也能将噪声映射到数据呢?
想象一条河流中的叶子。每片叶子的轨迹都是随机的(受到涡流影响),但整体的流动模式是确定的。概率流ODE捕捉的正是这种”平均流动”。
定义:概率流ODE
对于SDE:$dx_t = f(x_t, t) dt + g(t) dW_t$
存在唯一的ODE,使得其解的分布与SDE相同: $dx_t = \left[f(x_t, t) - \frac{1}{2} g(t)^2 \nabla_{x_t} \log p_t(x_t)\right] dt$
这个ODE被称为概率流(Probability Flow)ODE。注意:
- 没有随机项 $dW_t$,完全确定性
- 漂移项 = 原始漂移 - (1/2) × 扩散强度 × 分数
- 边缘分布 $p_t(x)$ 与原SDE完全相同
这个结果初看令人惊讶:随机过程和确定性过程怎么会有相同的分布演化?关键在于理解两种不同的视角:
数学上,这两种视角通过Fokker-Planck方程联系起来。SDE和其对应的概率流ODE都满足同一个Fokker-Planck方程,因此具有相同的密度演化。
🎨 可视化理解:
SDE轨迹(多条随机路径): 概率流ODE(确定性流线):
噪声 噪声
↓ ~~~ ↓
↓ ~~ ↓
↓ ~~~ ↓
↓ ~~ ↓
数据 数据
概率流ODE中的修正项 $-\frac{1}{2}g(t)^2\nabla\log p_t$ 从何而来?这里有一个优美的解释:
考虑前向SDE:$dx_t = f(x_t, t)dt + g(t)dW_t$
其对应的Fokker-Planck方程描述了概率密度的演化: \(\frac{\partial p_t}{\partial t} = -\nabla \cdot (f p_t) + \frac{1}{2}g(t)^2 \Delta p_t\)
现在,我们寻找一个ODE $dx_t = v(x_t, t)dt$,使得其密度演化也满足同样的Fokker-Planck方程。对于ODE,密度演化由连续性方程描述: \(\frac{\partial p_t}{\partial t} + \nabla \cdot (v p_t) = 0\)
比较两个方程,我们需要: \(-\nabla \cdot (v p_t) = -\nabla \cdot (f p_t) + \frac{1}{2}g(t)^2 \Delta p_t\)
使用恒等式 $\Delta p_t = \nabla \cdot (\nabla p_t) = \nabla \cdot (p_t \nabla \log p_t)$,得到: \(v p_t = f p_t - \frac{1}{2}g(t)^2 p_t \nabla \log p_t\)
因此: \(v(x_t, t) = f(x_t, t) - \frac{1}{2}g(t)^2 \nabla \log p_t(x_t)\)
这就是概率流ODE的速度场!
在SDE中,随机项 $g(t)dW_t$ 造成了两种效应:
让我们通过一个具体例子理解漂移效应:
例子:一维高斯分布 考虑密度 $p(x) = \frac{1}{\sqrt{2\pi\sigma^2}} e^{-x^2/(2\sigma^2)}$,其分数为: \(\nabla \log p(x) = -\frac{x}{\sigma^2}\)
在 $x > 0$ 区域:
这个净漂移正是由 $-\frac{1}{2}g^2 \nabla \log p$ 项描述的!当 $x > 0$ 时,$\nabla \log p < 0$,所以漂移方向为正,与直觉一致。
概率流ODE揭示了一个深刻的事实:随机性可以被确定性的向量场完全捕捉。这个向量场不仅包含了原始的漂移,还包含了由于随机扩散的不均匀性产生的”有效漂移”。
数学视角:概率流ODE定义了一个保测度的流(measure-preserving flow),将初始分布 $p_0$ 传输到最终分布 $p_T$。这与最优传输理论有深刻联系。
计算视角:概率流ODE提供了一种确定性的采样方法,这带来了许多优势:
确定性采样:从一个 $x_T$ 出发,总能得到完全相同的 $x_0$。这对于需要可复现生成的任务非常有用。
使用高阶求解器,可以用比SDE求解器少得多的步数(例如20-50步 vs 1000步)得到高质量的样本。
精确的似然计算:通过瞬时变量变换公式(instantaneous change of variables),可以精确计算对数似然: \(\log p_0(x_0) = \log p_T(x_T) - \int_0^T \nabla \cdot v(x_t, t) dt\)
其中轨迹 ${x_t}$ 由概率流ODE生成。
概率流ODE可以看作是一种特殊的神经ODE(Neural ODE),其中:
这建立了扩散模型与连续归一化流(Continuous Normalizing Flows)的桥梁,开启了许多研究方向。
🌟 理论空白:SDE和ODE提供了两种不同的采样路径。SDE路径是随机的、高维的,而ODE路径是确定性的、低维的。这两种路径的几何性质有何不同?它们在数据流形上是如何移动的?理解这一点可能有助于设计出更优的采样算法。
SDE和ODE描述了单个数据点(粒子)的轨迹。如果我们想从宏观上描述整个概率密度 $p_t(x)$ 的演化,就需要偏微分方程(Partial Differential Equation, PDE)的语言,这就是Fokker-Planck方程。
想象一大群粒子在流体中运动。每个粒子既受到确定性的流动(漂移),又受到随机的分子碰撞(扩散)。Fokker-Planck方程描述的正是这群粒子的密度如何随时间演化。
定义:Fokker-Planck方程 对于一个SDE $dx = f(x,t)dt + g(t)dW_t$,其概率密度 $p_t(x)$ 的演化遵循Fokker-Planck方程: \(\frac{\partial p_t(x)}{\partial t} = -\nabla \cdot (f(x,t)p_t(x)) + \frac{1}{2} g(t)^2 \Delta p_t(x)\) 其中 $\nabla \cdot$ 是散度算子,$\Delta$ 是拉普拉斯算子。
让我们深入理解这个方程的每一项:
这项描述了由确定性漂移 $f(x,t)$ 引起的概率流动:
物理类比:想象河流中的染料。水流($f$)携带染料($p$)移动,某处的染料浓度变化取决于流入和流出的差额。
这项描述了随机扩散对密度的影响:
物理类比:墨水在静水中扩散,从高浓度区域向低浓度区域自发流动,最终趋于均匀。
从SDE到Fokker-Planck方程的推导基于一个关键思想:粒子守恒。
考虑任意测试函数 $\phi(x)$(光滑且紧支撑),其期望值的演化: \(\frac{d}{dt}\mathbb{E}[\phi(x_t)] = \mathbb{E}\left[\frac{d\phi(x_t)}{dt}\right]\)
使用Itô公式: \(d\phi(x_t) = \nabla\phi \cdot dx_t + \frac{1}{2}\text{tr}(gg^T \nabla^2\phi) dt\) \(= \nabla\phi \cdot f dt + \nabla\phi \cdot g dW_t + \frac{1}{2}g^2 \Delta\phi dt\)
取期望(注意 $\mathbb{E}[dW_t] = 0$): \(\frac{d}{dt}\mathbb{E}[\phi(x_t)] = \mathbb{E}[f \cdot \nabla\phi + \frac{1}{2}g^2 \Delta\phi]\)
另一方面,用密度表示期望: \(\frac{d}{dt}\int \phi(x) p_t(x) dx = \int \phi(x) \frac{\partial p_t}{\partial t} dx\)
因此: \(\int \phi(x) \frac{\partial p_t}{\partial t} dx = \int [f \cdot \nabla\phi + \frac{1}{2}g^2 \Delta\phi] p_t dx\)
使用分部积分(将导数从 $\phi$ 转移到 $p_t$): \(\int \phi \frac{\partial p_t}{\partial t} dx = \int \phi [-\nabla \cdot (fp_t) + \frac{1}{2}g^2 \Delta p_t] dx\)
由于 $\phi$ 是任意的,我们得到Fokker-Planck方程!
考虑VP-SDE:$dx = -\frac{1}{2}\beta x dt + \sqrt{\beta} dW$
Fokker-Planck方程变为: \(\frac{\partial p}{\partial t} = \frac{\beta}{2}\nabla \cdot (xp) + \frac{\beta}{2}\Delta p\)
对于初始条件 $p_0(x) = \delta(x-x_0)$,解为: \(p_t(x) = \mathcal{N}(x; x_0 e^{-\beta t/2}, \frac{1-e^{-\beta t}}{1}I)\)
这正是DDPM中的前向过程!
当 $\frac{\partial p}{\partial t} = 0$ 时,得到稳态Fokker-Planck方程: \(\nabla \cdot (fp_{\infty}) = \frac{1}{2}g^2 \Delta p_{\infty}\)
对于VP-SDE,稳态分布是标准正态分布 $p_{\infty}(x) = \mathcal{N}(0, I)$。
虽然我们通常不直接求解Fokker-Planck方程来训练扩散模型,但理解其数值方法有助于深入理解模型行为:
每种方法都有其优缺点,选择取决于问题的维度、边界条件和精度要求。
Fokker-Planck方程揭示了扩散模型的几个深刻性质:
最大熵原理:扩散过程增加系统的熵,最终达到最大熵分布(高斯分布)
可逆性:知道分数函数 $\nabla \log p_t$ 后,可以反向求解Fokker-Planck方程,实现时间反演
变分原理:Fokker-Planck方程可以看作某个自由能泛函的梯度流: \(\frac{\partial p}{\partial t} = \nabla \cdot \left(p \nabla \frac{\delta \mathcal{F}[p]}{\delta p}\right)\)
其中 $\mathcal{F}[p]$ 是自由能,包含熵和势能项。
与量子力学的联系:通过Wick旋转,Fokker-Planck方程与薛定谔方程相关联,开启了量子-经典对应的研究
🔬 研究线索:Fokker-Planck方程与最优传输理论中的Wasserstein梯度流有深刻联系。扩散模型可以被看作是在概率分布空间中,沿着某种能量泛函的梯度方向进行演化。探索这种几何观点是当前理论研究的一大热点。
本章将我们对扩散模型的理解从离散时间步提升到了连续时间的SDE/PDE框架,这是一个更深刻、更统一的视角。
这个连续时间框架不仅统一了现有的模型,更为未来的创新(如设计新的SDE、开发更快的求解器)提供了无限可能。下一章,我们将探讨另一个优雅的连续时间框架——流匹配(Flow Matching),它从最优传输的视角为生成建模提供了新的思路。