ODE
ODE in Diffusion Models (Probability Flow ODE)
核心地位
在 Diffusion Model 的发展史中,ODE (常微分方程) 的引入是一个重要的转折点。也就是从这里开始,我们不再把扩散模型仅仅看作一个“加噪-去噪”的随机过程,而是看作一个连续流 (Continuous Flow) 过程。
- SDE: 随机行走,每一步都有新的噪声注入。
- ODE: 确定性轨迹,一旦起点确定,终点就唯一确定。
1. Probability Flow ODE (概率流 ODE)
1.1 理论基础
宋飏 (Song Yang) 等人在 ICLR 2021 的论文中证明了一个震撼的结论: 对于任意一个扩散 SDE,都存在一个对应的 ODE,它们的边缘分布 $p_t(\mathbf{x})$ 在任何时刻 $t$ 都是完全一样的。
这个 ODE 被称为 Probability Flow ODE (PF-ODE)。
1.2 公式推导
如果原 SDE 是:
$$ d\mathbf{x} = \mathbf{f}(\mathbf{x}, t) dt + g(t) d\mathbf{w} $$那么对应的 PF-ODE 就是:
$$ d\mathbf{x} = \underbrace{\left[ \mathbf{f}(\mathbf{x}, t) - \frac{1}{2}g(t)^2 \nabla_\mathbf{x} \log p_t(\mathbf{x}) \right]}_{\text{速度场 Velocity Field } v_t(x)} dt $$- 注意观察:这个 ODE 的右边这一大坨,其实就是 Flow Matching 中试图直接学习的向量场 (Vector Field) $v_t$。
- 在传统的 Diffusion 中,我们需要先学 Score $\nabla \log p$,然后代入上式算出一个等效的速度场。
2. 为什么我们需要 ODE?
既然 SDE 也能生成图像,为什么还要搞个 ODE?
2.1 确定性与可逆性 (Inversion)
这是最关键的特性。
- SDE: 从 $x_0$ 加噪到 $x_T$ 是随机的;回来也是随机的。你没法简单地通过反向运行 SDE 来找回原来的噪声。
- ODE: 轨迹是唯一的。
- DDIM Inversion: 我们可以把一张现有的图片 $x_0$,沿着 ODE 轨迹反向推到 $t=T$,得到其对应的唯一初始噪声 $x_T$。
- 应用: 利用这个 $x_T$,我们可以做精准的图片编辑(如 Pix2Pix-Zero),修改提示词后再正向生成回来,能保持原图的构图及物体位置基本不变。
2.2 采样加速 (Efficiency)
SDE 就像醉汉走路,因为有随机噪声干扰,步长不能太大。 ODE 是平滑的曲线。我们可以利用数学界研究了几百年的 ODE Solver (数值求解器) 技术:
- Runge-Kutta: 高阶方法。
- DPM-Solver: 专门针对扩散 ODE 优化的求解器。
- 结果: SDE 可能需要 1000 步,而利用高阶 ODE Solver,可以在 10-25 步内生成高质量图像。
2.3 似然计算 (Likelihood)
SDE 很难计算数据的确切似然值 (Model Likelihood)。 利用 ODE 的 瞬时变量变换公式 (Instantaneous Change of Variables formula),我们可以精确计算模型分配给数据的 Log-Likelihood。这对于理论研究和评估模型泛化能力很重要。
3. 常见误区
3.1 ODE 采样 vs SDE 采样
- DDIM 本质上就是上述 PF-ODE 的一个离散化特例 (Euler Discretization)。它是确定性的。
- DDPM 是 SDE 的离散化。它是随机的。
3.2 ODE 生成的图更好吗?
不一定。
- SDE (Euler a): 对于纹理、毛发等随机高频细节,SDE 往往能生成得更自然。
- ODE (DDIM/DPM++): 构图更稳,但有时会产生“油画感”或过于平滑(Plasticy),因为模型倾向于取平均。
4. 进化终点:Flow Matching
既然 PF-ODE 这么好,但把它算出来需要先定义 SDE、漂移项、扩散项,还要学 Score,太麻烦了。 Flow Matching 的思路就是:既然最后都要在这个 ODE 向量场上跑,为什么不直接训练网络去拟合这个 ODE 的速度场 $v_t$ 呢? 于是就跳过了 SDE 的中间商,直接进入了 ODE 建模时代。