到目前为止,我们学习的扩散模型都是在离散时间步上定义的。但如果我们让时间步数趋于无穷,会发生什么?答案是:我们得到了一个更强大、更灵活的数学框架——随机微分方程(Stochastic Differential Equations, SDEs)。Song等人在2021年的工作《Score-Based Generative Modeling through Stochastic Differential Equations》中,将DDPM和NCSN等模型统一在SDE的视角下,开启了连续时间生成建模的新纪元。本章将深入探讨SDE框架,理解其与离散模型的联系,并介绍其对应的反向SDE、概率流ODE和Fokker-Planck方程等核心概念。
想象你在拍摄一个物体从清晰逐渐模糊的过程。如果你每秒拍一张照片,得到的是一个离散的序列;但如果拍摄速度越来越快,最终你会得到一个连续的视频。扩散模型从离散到连续的转变正是这样一个过程。
让我们回顾DDPM的离散前向过程:
这个过程有一个美妙的物理类比:想象一滴墨水在水中扩散。每一个时间步,墨水分子都会:
-
保持一部分原位置:这对应
$\sqrt{1-\beta_k} x_{k-1}$ 项,表示墨水的"惯性" -
加入随机扰动:这对应
$\sqrt{\beta_k} z_{k-1}$ 项,表示分子的布朗运动
为什么选择
方差守恒原理:假设
当
信噪比的渐进衰减:定义信噪比(Signal-to-Noise Ratio, SNR)为:
其中 $\bar{\alpha}k = \prod{i=1}^k (1-\beta_i)$。随着
当
保留一阶项,更新步骤变为:
💡 直觉理解:左边是位置的变化量,右边第一项是一个"向原点的拉力"(因为系数为负),第二项是随机扰动。这就像一个被橡皮筋拴在原点的粒子,在随机力的作用下运动。
这个近似的精度如何?让我们分析误差项:
-
二阶误差:$O(\beta_k^2)$ 项在实际应用中通常很小。例如,如果
$\beta_k = 0.0001$ (典型值),则二阶误差约为$10^{-8}$ -
累积误差:虽然单步误差很小,但经过
$N$ 步后,累积误差可能达到$O(N\beta_k^2)$ 。这解释了为什么需要足够小的$\beta_k$
现在进行时间的连续化。将时间区间
这里的关键洞察是:当
- 左边收敛到导数
$\frac{dx}{dt}$ - 右边第一项保持不变
- 右边第二项
$\frac{z_{k-1}}{\sqrt{\Delta t}}$ 看起来会爆炸!
但奇妙的是,这个"爆炸"的项正是白噪声的正确缩放。让我们深入理解这一点:
布朗运动的构造:考虑随机游走
在我们的设定中,$z_i \sim \mathcal{N}(0, 1)$ 是独立的,时间步长为
当
白噪声的数学含义:形式上,白噪声
-
$\mathbb{E}[\xi(t)] = 0$ (零均值) -
$\mathbb{E}[\xi(t)\xi(s)] = \delta(t-s)$ (瞬时相关) - 在任意有限时间区间上的积分是高斯分布
因此,$z_k / \sqrt{\Delta t}$ 的极限正是白噪声
最终,我们得到了随机微分方程(SDE):
这就是DDPM在连续时间下的极限形式,被称为方差保持(Variance Preserving, VP)SDE。
🎯 为什么叫"方差保持"? 让我们计算方差的演化。使用Itô公式,对于
其中
噪声调度函数
- 线性调度:$b(t) = \beta_{\min} + t(\beta_{\max} - \beta_{\min})/T$
- 余弦调度:$b(t) = \pi \sin(\pi t/T) / T$(更平滑的过渡)
- 对数调度:针对高分辨率图像设计,在早期阶段噪声增长更慢
每种调度都对应着不同的扩散速度和生成质量权衡。
深入探索:从离散到连续的数学严格性
上述推导虽然直观,但数学上需要更严格的处理:
-
收敛性:需要证明离散过程
${x_k}$ 在某种意义下(如弱收敛)收敛到连续过程${x_t}$ - 唯一性:需要证明极限SDE有唯一解
-
正则性:需要保证系数函数
$b(t)$ 满足某些条件(如Lipschitz连续性)
相关定理包括:
- Donsker不变原理:随机游走收敛到布朗运动
- Stroock-Varadhan定理:离散马尔可夫链收敛到扩散过程
- Wong-Zakai逼近:光滑随机过程逼近白噪声驱动的SDE
研究方向:
- 探索非标准缩放下的极限行为(如重尾噪声)
- 研究时间非均匀离散化的极限
- 分析数值误差的传播和累积
SDE为我们提供了一个统一的语言来描述各种扩散模型。一个通用的前向SDE可以写成:
这个方程包含两个关键组件:
-
漂移系数
$f(x_t, t)$ :描述了数据演化的确定性趋势,像是一个"力场"在引导数据的运动 -
扩散系数
$g(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并非随意,而是要考虑数据特性和计算效率:
-
数据分布的考虑:
- 如果数据天然具有单位方差(如标准化后的图像),VP-SDE是自然选择
- 如果数据分布在多个尺度上(如自然图像的多分辨率结构),VE-SDE可能更合适
-
训练稳定性:
- VP-SDE通常更稳定,因为方差有界
- VE-SDE需要仔细设计
$\sigma(t)$ 的增长速度
-
采样效率:
- VP-SDE的轨迹更"直",可能需要更少的采样步数
- VE-SDE的轨迹更"曲",但可能探索空间更充分
实践经验分享:
在实际应用中,选择SDE类型往往需要实验验证。以下是一些经验法则:
- 图像生成:VP-SDE在大多数情况下表现良好,特别是配合余弦噪声调度
- 音频生成:由于音频信号的动态范围大,VE-SDE可能更合适
- 3D点云:数据分布不均匀,可以考虑自适应的SDE设计
- 分子生成:需要保持物理约束,可能需要特殊设计的SDE
SDE的数值求解:
在实践中,我们需要离散化SDE来进行数值求解。最简单的是Euler-Maruyama方法:
其中
torch.randn_like()生成噪声torch.sqrt()计算平方根- 自适应步长控制提高精度
高级话题:设计新的SDE
SDE的设计空间远不止VP和VE。一些前沿研究方向包括:
-
数据适应型SDE:
- 根据数据的局部几何结构调整
$f$ 和$g$ - 例如:$f(x,t) = -\nabla U(x,t)$,其中
$U$ 是学习到的势能函数
- 根据数据的局部几何结构调整
-
流形上的SDE:
- 当数据位于低维流形上时,标准SDE可能效率低下
- 可以设计保持在流形上的SDE:$dx_t = P_x f(x,t)dt + P_x g(t)dW_t$
- 其中
$P_x$ 是投影到切空间的算子
-
各向异性SDE:
- 让扩散系数依赖于方向:$g(t) \to G(x,t)$(矩阵值函数)
- 可以更好地适应数据的协方差结构
-
时间反演对称性:
- 设计满足某种对称性的SDE,使得前向和反向过程更相似
- 可能导致更高效的采样
PyTorch中相关的工具:
-
torch.nn.functional.normalize- 用于方差归一化 -
torch.autograd- 计算分数函数 -
torchdiffeq- 求解SDE/ODE
💡 开放问题:
- 最优SDE设计:给定数据分布,是否存在某种意义下"最优"的SDE?优化目标可能包括采样效率、训练稳定性、生成质量等。
- SDE的组合:能否在不同时间段使用不同的SDE(如开始用VE探索,后期用VP精调)?
- 离散数据的SDE:如何为文本、图等离散数据设计合适的"连续化"SDE?
练习 5.1:理解SDE的极限过程
-
验证方差保持性质: 对于VP-SDE
$dx_t = -\frac{1}{2}b(t)x_t dt + \sqrt{b(t)}dW_t$ ,证明当$x_0$ 满足$\mathbb{E}[||x_0||^2] = d$ 时,存在合适的$b(t)$ 使得$\mathbb{E}[||x_t||^2] \approx d$ 对所有$t$ 成立。提示:使用Itô公式计算
$d\mathbb{E}[||x_t||^2]$ 。 -
比较不同的噪声调度: 实现并比较三种噪声调度函数:
- 线性:$b(t) = \beta_{\min} + t(\beta_{\max} - \beta_{\min})/T$
- 余弦:$b(t) = \pi \sin(\pi t/T) / T$
- 指数:$b(t) = \beta_{\min} e^{t \log(\beta_{\max}/\beta_{\min})/T}$
分析它们对应的信噪比
$\text{SNR}(t)$ 的衰减曲线。 -
探索极限行为: 考虑离散过程
$x_{k+1} = \sqrt{1-\beta}x_k + \sqrt{\beta}z_k$ ,其中$\beta = b\Delta t$ 。- 当
$\Delta t \to 0$ 时,证明这个过程收敛到VP-SDE - 数值实验:对于不同的
$\Delta t$ ,比较离散过程和连续SDE的轨迹 - 分析收敛速度:误差如何随
$\Delta t$ 变化?
- 当
-
研究扩展:
- 如果噪声不是高斯的(如Lévy噪声),极限过程会是什么?
- 对于非马尔可夫过程(有记忆),如何推导连续时间极限?
- 探索分数布朗运动(fractional Brownian motion)在扩散模型中的应用
如果前向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{分数修正项}}$$
-
原始漂移项:如果只有这一项,时间反演后的过程仍会向同一方向演化(想象一个向下流的河流,倒放视频它还是向下流)
-
分数修正项:这是使过程真正反向的关键!
- 分数
$\nabla \log p_t$ 指向概率密度增加最快的方向 - 系数
$g(t)^2$ 确保修正强度与噪声强度匹配 - 负号使得过程向高概率区域移动
- 分数
🎯 物理类比:想象粒子在一个势能场中运动:
- 前向过程:粒子从势能低处(数据)滚向高处(噪声),同时受到随机扰动
- 反向过程:粒子需要知道"哪里是下坡"(分数函数),才能滚回原处
Anderson定理揭示了一个深刻的事实:扩散模型的本质是学习分数函数。这统一了看似不同的两种方法:
-
DDPM视角:训练网络预测噪声
$\epsilon_\theta(x_t, t)$ -
Score Matching视角:训练网络预测分数
$s_\theta(x_t, t) \approx \nabla \log p_t(x_t)$
它们之间的关系是:
这个关系的推导基于一个关键观察:在VP-SDE下,$x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1-\bar{\alpha}_t} \epsilon$,因此:
步骤1:条件分布的分数
给定
其对数和分数为: $$\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:边缘分数与条件分数的关系
利用贝叶斯定理和分数的性质:
使用重参数化技巧和 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)]$$
当神经网络
分数函数
- 梯度场视角:分数定义了一个向量场,每一点的向量指向概率密度增加最快的方向
-
能量视角:如果定义能量
$E(x) = -\log p(x)$ ,则分数$\nabla \log p(x) = -\nabla E(x)$ 是负能量梯度 - 最优传输视角:分数场定义了将任意分布传输到数据分布的最优路径
可视化理解:
低概率区域 ←←←← 分数场 →→→→ 高概率区域
噪声 数据
理论性质:
-
Stein恒等式:对于光滑函数
$\phi$ 满足一定衰减条件,有$$\mathbb{E}_{x \sim p}[\nabla \cdot \phi(x) + \phi(x) \cdot \nabla \log p(x)] = 0$$ 这是score matching的理论基础。 -
分数的奇异性:在数据分布的支撑集边界,分数可能不连续甚至无穷大。这解释了为什么需要添加噪声来"平滑"分布。
-
维度诅咒:在高维空间中,分数函数的估计变得极其困难。扩散模型通过多尺度噪声巧妙地缓解了这个问题。
实践挑战:
-
数值稳定性:当
$t \to 0$ 时,$1-\bar{\alpha}_t \to 0$,分数可能爆炸 - 边界效应:真实数据往往位于低维流形上,在流形外分数定义不明确
- 多模态分布:分数在模态之间的低密度区域可能指向错误方向
⚡ 实现挑战:
-
分数函数的参数化:
- 直接参数化:$s_\theta(x_t, t)$ 直接输出分数
- 噪声参数化:$\epsilon_\theta(x_t, t)$ 预测噪声,然后转换为分数
- 实践中噪声参数化通常更稳定
-
时间编码:
- 网络需要知道当前时间
$t$ 以给出正确的分数 - 常用方法:正弦编码、可学习的嵌入、FiLM层
- 网络需要知道当前时间
-
数值稳定性:
- 在
$t \approx 0$ 时,分数可能很大(概率集中) - 在
$t \approx T$ 时,分数接近零(接近标准正态) - 需要合适的归一化和数值技巧
- 在
深入探索:反向SDE的推导思路
Anderson定理的证明涉及高深的随机分析,但核心思想可以这样理解:
- Girsanov定理:描述了如何通过改变漂移项来改变概率测度
- 时间反演公式:对于马尔可夫过程,存在时间反演的一般理论
- Doob's h-transform:通过乘以一个正函数来构造新的马尔可夫过程
关键步骤:
- 定义反向时间过程 $\hat{x}s = x{T-s}$
- 使用Bayes定理计算反向转移概率
- 应用Girsanov定理得到反向SDE的形式
这个推导的美妙之处在于,它将看似不可能的任务(时间反演)转化为一个可学习的问题(估计分数函数)。
练习 5.2:推导反向SDE
-
VP-SDE的反向过程: 给定前向VP-SDE:$dx = -\frac{1}{2} \beta(t) x dt + \sqrt{\beta(t)} dW_t$
应用Anderson定理,写出反向SDE:
$dx_t = [-\frac{1}{2} \beta(t) x_t - \beta(t) \nabla_{x_t} \log p_t(x_t)] dt + \sqrt{\beta(t)} d\bar{W}_t$ 简化为:$dx_t = \frac{1}{2} \beta(t) [x_t + 2\nabla_{x_t} \log p_t(x_t)] dt + \sqrt{\beta(t)} d\bar{W}_t$
-
与DDPM的联系: 在DDPM框架下,$x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1-\bar{\alpha}_t} \epsilon$,其中
$\epsilon \sim \mathcal{N}(0, I)$ 。利用这个重参数化,证明:
$\nabla_{x_t} \log p_t(x_t|x_0) = -\frac{\epsilon}{\sqrt{1-\bar{\alpha}_t}}$ - 因此,如果
$\epsilon_\theta(x_t, t) \approx \epsilon$ ,则$s_\theta(x_t, t) = -\frac{\epsilon_\theta(x_t, t)}{\sqrt{1-\bar{\alpha}_t}}$
-
研究思路:
-
光滑性要求:Anderson定理要求
$p_t$ 足够光滑。探索什么条件保证这一点 -
各向异性扩散:当
$g(t) = G(x,t)$ 是矩阵时,反向SDE变为:$dx_t = [f(x_t,t) - \nabla \cdot (G(x_t,t)G(x_t,t)^T) - G(x_t,t)G(x_t,t)^T \nabla \log p_t(x_t)]dt + G(x_t,t)d\bar{W}_t$ - 非马尔可夫情况:如果前向过程有记忆,反向过程会如何变化?
-
光滑性要求:Anderson定理要求
练习 5.3:分数函数的性质探索
-
验证Stein恒等式: 对于标准正态分布
$p(x) = \mathcal{N}(0, I)$ ,验证Stein恒等式:$$\mathbb{E}_{x \sim p}[x \cdot \phi(x) - \nabla \cdot \phi(x)] = 0$$ 其中
$\phi$ 是任意光滑且增长不太快的向量场。 -
分数函数的估计误差: 假设我们有分数的近似
$s_\theta(x) \approx \nabla \log p(x)$ ,定义Fisher散度: $$D_F(p_\theta || p) = \mathbb{E}{x \sim p}[||s\theta(x) - \nabla \log p(x)||^2]$$证明:当使用这个近似分数进行Langevin采样时,稳态分布与真实分布的KL散度受Fisher散度控制。
-
多尺度分数匹配: 考虑不同噪声水平 ${\sigma_i}{i=1}^L$ 下的加噪数据分布 $p{\sigma_i}(x) = \int p(y) \mathcal{N}(x; y, \sigma_i^2 I) dy$。
- 推导
$\nabla \log p_{\sigma_i}(x)$ 与原始分布的关系 - 解释为什么需要多个噪声尺度
- 设计一个加权方案来组合不同尺度的分数
- 推导
-
流形上的分数: 如果数据位于
$d$ 维空间中的$k$ 维流形$\mathcal{M}$ 上($k < d$),分析:- 分数函数在流形上和流形外的行为
- 如何修改分数匹配目标以适应流形结构
- 探索"投影分数":$P_{T_x\mathcal{M}} \nabla \log p(x)$ 的性质
SDE的采样过程是随机的,意味着从同一个噪声
想象一条河流中的叶子。每片叶子的轨迹都是随机的(受到涡流影响),但整体的流动模式是确定的。概率流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完全相同
这个结果初看令人惊讶:随机过程和确定性过程怎么会有相同的分布演化?关键在于理解两种不同的视角:
-
粒子视角(SDE):
- 跟踪单个粒子的随机轨迹
- 每个粒子受到随机力的影响
- 多次运行得到不同结果
-
流体视角(ODE):
- 跟踪概率密度的演化
- 描述"概率流体"的速度场
- 确定性的演化规律
数学上,这两种视角通过Fokker-Planck方程联系起来。SDE和其对应的概率流ODE都满足同一个Fokker-Planck方程,因此具有相同的密度演化。
🎨 可视化理解:
SDE轨迹(多条随机路径): 概率流ODE(确定性流线):
噪声 噪声
↓ ~~~ ↓
↓ ~~ ↓
↓ ~~~ ↓
↓ ~~ ↓
数据 数据
概率流ODE中的修正项
考虑前向SDE:$dx_t = f(x_t, t)dt + g(t)dW_t$
其对应的Fokker-Planck方程描述了概率密度的演化:
现在,我们寻找一个ODE
比较两个方程,我们需要:
使用恒等式
因此:
这就是概率流ODE的速度场!
在SDE中,随机项
- 扩散效应:使分布变宽
- 漂移效应:由于扩散的不均匀性产生的净流动
让我们通过一个具体例子理解漂移效应:
例子:一维高斯分布
考虑密度
在
- 左边(靠近原点)的密度更高
- 扩散使粒子向两边随机移动
- 但由于左边密度高,更多粒子从左边扩散过来
- 净效果:粒子向右漂移
这个净漂移正是由
概率流ODE揭示了一个深刻的事实:随机性可以被确定性的向量场完全捕捉。这个向量场不仅包含了原始的漂移,还包含了由于随机扩散的不均匀性产生的"有效漂移"。
数学视角:概率流ODE定义了一个保测度的流(measure-preserving flow),将初始分布
计算视角:概率流ODE提供了一种确定性的采样方法,这带来了许多优势:
-
确定性采样:从一个
$x_T$ 出发,总能得到完全相同的$x_0$ 。这对于需要可复现生成的任务非常有用。 -
更快的采样:作为ODE,我们可以使用各种现成的高阶数值求解器:
- Euler法:一阶精度,最简单
- Heun法:二阶精度,需要两次函数评估
- RK4:四阶精度,经典选择
- 自适应求解器:如Dormand-Prince,自动调整步长
使用高阶求解器,可以用比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),其中:
- 速度场
$v(x,t)$ 由神经网络参数化 - 网络通过预测分数函数来隐式定义速度场
- 整个系统可以端到端训练
这建立了扩散模型与连续归一化流(Continuous Normalizing Flows)的桥梁,开启了许多研究方向。
🌟 理论空白:SDE和ODE提供了两种不同的采样路径。SDE路径是随机的、高维的,而ODE路径是确定性的、低维的。这两种路径的几何性质有何不同?它们在数据流形上是如何移动的?理解这一点可能有助于设计出更优的采样算法。
练习 5.4:概率流ODE的性质与应用
-
验证概率流ODE保持边缘分布: 对于VP-SDE和其对应的概率流ODE,验证它们在任意时刻
$t$ 的边缘分布$p_t(x)$ 相同。提示:证明两者满足相同的Fokker-Planck方程。
-
似然计算的实现: 使用概率流ODE的瞬时变量变换公式:
$$\log p_0(x_0) = \log p_T(x_T) - \int_0^T \nabla \cdot v(x_t, t) dt$$ 其中
$v(x,t) = f(x,t) - \frac{1}{2}g(t)^2 \nabla \log p_t(x)$ 。- 推导
$\nabla \cdot v(x,t)$ 的表达式 - 说明如何使用神经网络计算这个散度
- 讨论计算复杂度和数值稳定性
- 推导
-
比较不同的ODE求解器: 实现并比较以下求解器在概率流ODE上的表现:
- Euler法(一阶)
- Heun法(二阶)
- RK4(四阶)
分析:
- 不同步数下的生成质量
- 计算时间 vs 质量的权衡
- 数值误差的累积
-
SDE与ODE路径的几何分析: 对于简单的2D数据分布(如双模态高斯混合),可视化并分析:
- SDE的多条随机轨迹
- ODE的确定性流线
- 两者在穿越低密度区域时的行为差异
- 轨迹的曲率和长度统计
-
研究扩展:最优传输视角: 概率流ODE定义了一个传输映射
$T: x_T \mapsto x_0$ 。探索:- 这个映射是否是某种意义下的"最优"?
- 与Monge-Kantorovich最优传输问题的联系
- 如何设计具有最优传输性质的新型ODE?
SDE和ODE描述了单个数据点(粒子)的轨迹。如果我们想从宏观上描述整个概率密度
想象一大群粒子在流体中运动。每个粒子既受到确定性的流动(漂移),又受到随机的分子碰撞(扩散)。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)p_t(x)$ 是概率流密度(probability flux) -
$\nabla \cdot$ 计算流的散度,即净流出量 - 负号表示:流出导致密度减少
物理类比:想象河流中的染料。水流($f$)携带染料($p$)移动,某处的染料浓度变化取决于流入和流出的差额。
这项描述了随机扩散对密度的影响:
-
$\Delta p_t = \sum_i \frac{\partial^2 p_t}{\partial x_i^2}$ 衡量密度的"曲率" - 在密度峰值处,$\Delta p < 0$,密度减少
- 在密度谷底处,$\Delta p > 0$,密度增加
- 总效果:密度被"抹平"
物理类比:墨水在静水中扩散,从高浓度区域向低浓度区域自发流动,最终趋于均匀。
从SDE到Fokker-Planck方程的推导基于一个关键思想:粒子守恒。
考虑任意测试函数
使用Itô公式:
取期望(注意
另一方面,用密度表示期望:
因此:
使用分部积分(将导数从
由于
考虑VP-SDE:$dx = -\frac{1}{2}\beta x dt + \sqrt{\beta} dW$
Fokker-Planck方程变为:
对于初始条件
这正是DDPM中的前向过程!
当
对于VP-SDE,稳态分布是标准正态分布
虽然我们通常不直接求解Fokker-Planck方程来训练扩散模型,但理解其数值方法有助于深入理解模型行为:
- 有限差分法:将空间离散化为网格,用差分近似导数
- 有限元法:使用基函数展开密度,转化为ODE系统
- 粒子方法:用大量粒子的经验分布近似连续密度
- 谱方法:在频域求解,利用快速傅里叶变换
每种方法都有其优缺点,选择取决于问题的维度、边界条件和精度要求。
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梯度流有深刻联系。扩散模型可以被看作是在概率分布空间中,沿着某种能量泛函的梯度方向进行演化。探索这种几何观点是当前理论研究的一大热点。
练习 5.5:Fokker-Planck方程的理解与应用
-
验证解析解: 对于Ornstein-Uhlenbeck过程
$dx = -\gamma x dt + \sigma dW$ :- 写出对应的Fokker-Planck方程
- 验证
$p_t(x) = \mathcal{N}(x; x_0 e^{-\gamma t}, \frac{\sigma^2}{2\gamma}(1-e^{-2\gamma t}))$ 是其解 - 讨论
$t \to \infty$ 时的稳态分布
-
数值求解Fokker-Planck方程: 实现一维Fokker-Planck方程的有限差分求解器:
- 使用中心差分近似空间导数
- 使用显式或隐式时间步进
- 与粒子模拟(求解对应SDE)的结果比较
考虑的测试案例:
- 双井势能:$f(x) = -\nabla U(x)$,其中
$U(x) = (x^2-1)^2$ - 验证稳态分布
$p_\infty(x) \propto e^{-2U(x)/g^2}$
-
熵的演化: 定义Shannon熵
$H[p] = -\int p \log p dx$ 。- 证明:对于Fokker-Planck方程,$\frac{dH}{dt} \geq 0$(熵增原理)
- 什么时候等号成立?
- 计算VP-SDE过程中熵的演化曲线
-
反向Fokker-Planck方程: 推导反向时间SDE对应的Fokker-Planck方程:
- 从反向SDE出发,应用标准推导
- 验证它与前向Fokker-Planck方程的关系
- 解释为什么需要知道分数函数
-
研究扩展:Wasserstein梯度流: Fokker-Planck方程可以写成Wasserstein梯度流的形式:
$$\frac{\partial p}{\partial t} = \nabla \cdot \left(p \nabla \frac{\delta \mathcal{F}[p]}{\delta p}\right)$$ 探索:
- 对于不同的自由能
$\mathcal{F}[p]$ ,得到什么样的演化方程? - 扩散模型对应的自由能是什么?
- 如何设计新的自由能来得到更好的生成模型?
- 对于不同的自由能
练习 5.6:SDE, ODE, PDE的统一视角
综合本章所学,分析三种数学框架的联系:
-
统一框架: 给定前向VP-SDE:$dx = -\frac{1}{2}\beta(t)x dt + \sqrt{\beta(t)}dW$
- 写出对应的概率流ODE
- 写出对应的Fokker-Planck方程
- 验证三者描述同一个概率演化过程
-
计算复杂度分析: 比较三种方法在以下任务上的计算复杂度:
- 生成单个样本
- 计算似然
$p(x)$ - 训练模型参数
考虑维度
$d$ 、时间步数$N$ 、样本数$M$ 的影响。 -
选择指南: 为以下应用场景选择最合适的框架(SDE/ODE/PDE):
- 需要快速生成大量样本
- 需要精确计算似然进行模型选择
- 需要理论分析收敛性
- 需要可解释的生成过程
- 需要编辑已有样本
-
创新思考:
- 能否设计一个在不同阶段使用不同框架的混合算法?
- 如何利用PDE的理论洞察改进SDE/ODE的数值算法?
- 是否存在其他数学框架可以描述扩散过程?
本章将我们对扩散模型的理解从离散时间步提升到了连续时间的SDE/PDE框架,这是一个更深刻、更统一的视角。
- 从离散到连续:我们展示了当时间步数趋于无穷时,离散的DDPM和NCSN过程如何自然地收敛到连续的SDE。
-
反向时间SDE:我们学习了Anderson定理,它揭示了反向去噪过程的核心是学习分数函数
$\nabla_{x_t} \log p_t(x)$ ,从而将DDPM和分数匹配统一起来。 - 概率流ODE:我们发现每个SDE都对应一个确定性的ODE,它不仅能实现更快的采样,还能进行精确的似然计算。
- Fokker-Planck方程:我们引入了描述概率密度演化的PDE,为宏观理论分析提供了工具。
这个连续时间框架不仅统一了现有的模型,更为未来的创新(如设计新的SDE、开发更快的求解器)提供了无限可能。下一章,我们将探讨另一个优雅的连续时间框架——流匹配(Flow Matching),它从最优传输的视角为生成建模提供了新的思路。