DPM-Solver
DPM-Solver & DPM-Solver++
核心地位
DPM-Solver (Lu et al., NeurIPS 2022) 是扩散模型采样加速的集大成者。 它没有使用通用的 ODE 求解器(如 Runge-Kutta),而是针对 Diffusion ODE 的特殊结构(半线性 Semi-linear)设计了专用的求解器。
- 结果: 将高频生成需要的步数从 50-100 步压缩到了 10-20 步。
1. 核心数学原理
1.1 扩散 ODE 的特殊结构
一般的 ODE 是 $dx = f(x, t) dt$。 但 Diffusion ODE(Probability Flow ODE)长这样:
$$ d\mathbf{x}_t = \underbrace{[f(t) \mathbf{x}_t]}_{\text{Linear part}} dt + \underbrace{\frac{g^2(t)}{2\sigma_t} \epsilon_\theta(\mathbf{x}_t, t)}_{\text{Non-linear (Noise) part}} dt $$- 线性部分: $f(t)x_t$,这一项只和 $x_t$ 有线性关系,非常单纯。
- 非线性部分: 包含神经网络预测的噪声 $\epsilon_\theta$。
1.2 解析解与近似 (Semi-Linear ODE)
DPM-Solver 的天才之处在于:既然线性部分如此简单,为什么我们要用数值方法去估算它?直接求解析解不好吗?
通过变量代换(将时间 $t$ 换为对数信噪比 $\lambda_t = \log(\alpha_t/\sigma_t)$),DPM-Solver 推导出了一个精确解公式:
$$ x_{t-1} = \underbrace{e^{-\lambda \Delta t} x_t}_{\text{Exact Linear Evolution}} + \sigma_{t-1} \int_{t}^{t-1} e^{-\lambda s} \epsilon_\theta(x_s, s) ds $$- 第一项(数据项):直接用指数函数算出精确值,完全没有误差。
- 第二项(噪声积分项):只有这一项需要近似。
1.3 泰勒展开 (Taylor Expansion)
为了计算第二项的积分,DPM-Solver 将神经网络输出 $\epsilon_\theta(x_s, s)$ 看作是关于 $\lambda$ 的函数,并进行泰勒展开。
- DPM-Solver-1 (1阶): 假设 $\epsilon_\theta$ 是由 $t$ 到 $t-1$ 是常数。 -> 等价于 DDIM。
- DPM-Solver-2 (2阶): 假设 $\epsilon_\theta$ 随 $\lambda$ 线性变化。利用 $x_t$ 和 $x_{t+1}$ 两个点来拟合斜率。
- DPM-Solver-3 (3阶): 假设是抛物线变化。利用三个点。
2. DPM-Solver++ (改进版)
2.1 为什么要改?
原版 DPM-Solver 针对的是 Unconditional Sampling 或 Noise Prediction 模型。 但在 Stable Diffusion 等大规模模型中,我们通常使用 Classifier-Free Guidance (CFG),并且有时预测的是 $x_0$ (Data Prediction) 而不是噪声 $\epsilon$。 原版 DPM-Solver 在大 CFG Scale 或 Data Prediction 下不稳定。
2.2 改进点
DPM-Solver++ 专门针对 Data Prediction ($x_0$-prediction) 进行了优化。
- 它对 $x_0$ 进行插值积分,而不是对 $\epsilon$。
- 2M (Multistep): 这是最常用的版本。它利用过去的时间步(History)来构建高阶近似,而不像 Singlestep 那样需要在一个 Step 里跑多次模型(费时)。
3. 常见变体速查
| 变体名称 | 解释 | 特点 | 推荐指数 |
|---|---|---|---|
| DPM++ 2M | 2阶 ODE,多步利用历史信息 | 极快,收敛好,SDXL/SD1.5 标配 | ⭐⭐⭐⭐⭐ |
| DPM++ 2M SDE | 2阶 SDE,多步,加了额外噪声 | 画质最细腻,能补全细节 | ⭐⭐⭐⭐⭐ |
| DPM++ 2S a | 2阶 SDE,Ancestral (Singlestep) | 类似 Euler a 的高阶版,更慢但更精准 | ⭐⭐⭐ |
| DPM++ 3M | 3阶 ODE | 理论上更准,但实际容易“过拟合”导致伪影 | ⭐⭐ |
4. 总结
DPM-Solver 的胜利是数学对暴力计算的胜利。 它没有像 Runge-Kutta 那样盲目地把整个 ODE 当黑盒去解,而是剥离了简单的线性部分(直接算精确解),只对困难的非线性部分做近似。这使得它在极少的步数下(10-20步)就能还原出极其精准的分布。