DDIM 是什么?扩散模型采样为什么慢,如何加速?
简化版
扩散采样要重复执行去噪网络,延迟约随函数评估次数(NFE)增长。DDIM 构造与 DDPM 共享边缘加噪分布和训练目标的非马尔可夫过程;采样可选稀疏时间步,并在 η=0 时形成确定性更新,因此能复用已训练模型减少 NFE。20–50 步只是常见历史配置,不保证跨模型质量。DPM-Solver 类数值求解器与蒸馏/一致性方法则进一步改变求解或训练方式。
详细版
慢的根源
原始 DDPM 祖先采样按相邻时间步运行,每步需要网络前向;经典设置可有很多步。实践也可对 DDPM 时间表做 respacing,只是大步长会改变误差与质量,因此“DDPM 绝对不能跳步”不准确。
DDIM 的两个改造
- 共享训练目标 + 可调随机性:DDIM 从共享
q(x_t|x_0)边缘的非马尔可夫构造得到采样更新,可直接复用常见 DDPM 噪声预测器。把随机项系数设为 0 时,给定初始噪声、条件和确定性算子,更新是确定的。 - 跳步采样:正因为不再是逐步马尔可夫,DDIM 可以在时间上取一个稀疏子序列(如从 1000 步里取 50 步)直接跳着走,大幅减少前向次数。
DDIM 单步(确定性)
x₀_pred = ( x_t − √(1-ᾱ_t)·ε_θ(x_t,t) ) / √ᾱ_t # 先估计干净图
x_{t-1} = √ᾱ_{t-1}·x₀_pred + √(1-ᾱ_{t-1})·ε_θ(x_t,t) # 再按下一步的噪声水平重构
DDIM 的额外好处
- 确定性便于复现:还需固定模型、条件、时间表、数值 kernel 等环境。
- 便于反演与轨迹编辑:DDIM inversion 是近似过程,重建误差受模型和步数影响。
- 可减少 NFE:质量保持程度必须用目标 checkpoint 和任务实测。
更强的加速谱系
- DPM-Solver / DPM-Solver++:把反向过程看成常微分方程(ODE),用高阶数值解法,10–20 步出图。
- 蒸馏 / 一致性模型(Consistency Models、LCM、SDXL-Turbo):把多步过程蒸馏进网络,1–4 步生成,逼近实时。
完整版教学
记忆钩子:扩散模型题沿着加噪学会还原、采样逐步去噪、条件控制方向、速度质量取舍这条线讲,答案就不会散。
一、把慢的原因说透
扩散采样的耗时 ≈ 步数 × 单步网络前向成本。要加速只有两条路:减少步数 或 降低单步成本。
- 降低单步成本 → Latent Diffusion(在小的潜空间跑)、更轻的网络。
- 减少步数 → DDIM、DPM-Solver、蒸馏。
原始 DDPM 离散反向链通常在完整时间表上运行;减少步数会放大离散误差。DDIM 给出另一族更新,使稀疏子序列有清晰公式,但不是说任何 DDPM respacing 都在数学上被禁止。
二、DDIM 的关键:训练目标不变,采样过程可换
DDIM 最精妙的地方在于一个观察:DDPM 的训练损失 L_simple 只依赖前向的边缘分布 q(x_t|x₀),并不依赖前向是不是马尔可夫。 也就是说,只要保证「任意时刻 x_t 的分布」和 DDPM 一致,反向过程可以另设计一族。
DDIM 就构造了这样一族非马尔可夫的前向/反向过程,它们共享同一个 q(x_t|x₀),因此:
- 可以直接用 DDPM 训练好的网络,无需重训(这点非常重要,是它能即插即用的原因);
- 采样公式有随机性参数 η;
η=0为确定性 DDIM。在完整且匹配的时间表/方差设定下某些选择可对应 DDPM 式随机性,但不能笼统说任意跳步下η=1就等于原始 DDPM。
三、逐句读懂 DDIM 采样公式
DDIM(η=0)单步分两小步理解:
第一步:从当前带噪图和预测噪声,反解出对干净图的估计
x₀_pred = ( x_t − √(1-ᾱ_t)·ε_θ(x_t,t) ) / √ᾱ_t
第二步:按"下一个时间步 s 的噪声水平"重新组装
x_s = √ᾱ_s·x₀_pred + √(1-ᾱ_s)·ε_θ(x_t,t)
直觉:先大胆猜出最终的干净图 x₀_pred,再把它”退回”到目标噪声水平。因为这里 s 可以不是 t-1,而是任意更小的时间步,所以能跳步。整个过程没有随机项(η=0),故确定。
四、确定性带来的三个实用能力
- 可复现:固定
x_T种子就固定结果,方便调试和产品化。 - 可控插值实验:固定确定性轨迹便于研究初始潜变量插值,但输出是否语义平滑不是保证;随机采样也可在固定随机变量后进行可控比较。
- 图像编辑/反演:DDIM inversion 可近似把图像映射到噪声轨迹,再改条件生成;它不是真正无损逆变换,强 CFG 与模型误差都会影响重建。
五、加速方法全景对比
| 方法 | 思路 | 典型步数 | 是否需重训 |
|---|---|---|---|
| DDPM | 随机马尔可夫逐步 | 1000 | — |
| DDIM | 非马尔可夫、确定性、跳步 | 20–50 | 否(复用) |
| DPM-Solver++ | 把反向当 ODE,高阶数值解 | 10–20 | 否(复用) |
| 蒸馏(Progressive/Guided) | 学生网络学多步的合并 | 4–8 | 是(蒸馏) |
| 一致性模型 / LCM | 学”任意点直接映射到 x₀” | 1–4 | 是(蒸馏/专训) |
| 对抗蒸馏(SDXL-Turbo/ADD) | 蒸馏+GAN 判别器保锐利 | 1–4 | 是 |
一条演进主线:DDIM/DPM-Solver 靠”更聪明地解同一个反向过程”来减步(免重训);蒸馏/一致性模型靠”重新训练网络学会大步跳”来把步数压到个位数(需重训)。
六、怎样用 NFE—质量曲线选择采样器
假设同一 checkpoint、同一 1,000 条提示上,50 步 DDIM 的 FID 为 12.0、平均耗时 2.5 秒,20 步为 13.4/1.1 秒,10 步为 18.7/0.6 秒。20 步相对 50 步节省约 56% 时间,但 FID 变差 1.4;是否接受取决于延迟 SLA、人工偏好与文本一致性,不能只说“20 步接近 1000 步”。
比较时应以 NFE 而非 UI 中模糊的“steps”统一成本,并固定模型、分辨率、CFG、seed 集合和时间步调度。至少报告图像质量/人评、提示遵循、多样性、重建或编辑指标以及 P50/P95 延迟;蒸馏模型还要与其专用采样器配对,不能换一个 scheduler 后直接横比。
七、常见误区与追问
- 误区:DDIM 要重新训练模型。 不用,它复用 DDPM 训好的网络,只改采样过程。
- 误区:步数越少越好。 步数太少(如 DDIM 用 5 步)质量会下降;每种采样器都有质量/速度的权衡点。
- 追问:DDIM 为什么适合跳步? 它为共享边缘分布的非马尔可夫构造推导了跨稀疏时间点更新;原始 DDPM 全步链也可 respacing,但误差与采样分布不同。
- 追问:确定性采样牺牲了什么? 牺牲了每次采样的随机多样性(同噪声必同图),但换来可复现、可插值、可编辑。要多样性可调 η>0 或换初始噪声。
- 追问:LCM/Turbo 为什么能一步出图? 它们通过蒸馏/一致性训练,让网络学会「从任意噪声点直接预测干净图」,把上百步的迭代压缩进一次前向。
八、加强记忆
DDIM 记「共享 DDPM 训练目标、换一族采样更新、η=0 可确定、可用稀疏时间步」。它减少 NFE,却不保证固定 20–50 步保持质量;反演也只是近似。DPM-Solver 类方法改进数值求解,蒸馏/一致性方法通过额外训练压缩步数。选型要画 NFE—质量—延迟曲线,并区分“给定环境可复现”和“数学上无随机项”。