跳转到内容

DDIM — 把扩散模型 1000 步采样压到 50 步

是什么

DDIM(Denoising Diffusion Implicit Models,去噪扩散隐式模型)是 Stanford 的 Jiaming Song 等人在 2020 年提出的扩散采样方法。它解决一件具体的事:ddpm 出图要 1000 步,太慢了。DDIM 让你只跑 50 步就出几乎一样质量的图,而且不用重训模型

日常类比:

ddpm 像爬一条 1000 级的楼梯下楼,每级都要踏实落脚。DDIM 发现这楼梯其实可以跳着下——隔 20 级踩一脚,落地一样稳,时间省 20 倍。更妙的是楼梯还是同一个楼梯,不用重新搭(不用重训权重)。

DDIM 是当今所有扩散图像/视频生成默认采样器的祖师爷——Stable Diffusion、DALL-E 2、Midjourney、Sora 用的 DPM-Solver、PLMS 等都是 DDIM 这一脉派生。

为什么重要

不理解 DDIM,下面这些事都解释不通:

  • 为什么 Stable Diffusion 出一张图只要几秒——DDPM 原版要跑 1000 次神经网络前向,DDIM 把它压到 20-50 次
  • 为什么 img2img / inpainting / 隐空间插值能做——DDPM 采样每步注入随机噪声,结果是不可逆的;DDIM 给了一条确定性的反向路径,让”编辑”成为可能
  • 为什么扩散模型能和 score-based-2020 / 概率流 ODE 视角统一——DDIM 的 sigma=0 极限就是 ODE 的 Euler 离散
  • 为什么后来的 flow matching、rectified flow、consistency models 都把 DDIM 当基线——它是第一条把扩散从”随机过程”开向”确定性 ODE”的路

核心要点

DDIM 的三个洞察,按重要性排:

  1. 训练目标只看边缘分布,不看路径ddpm 训练让神经网络学 q(x_t | x_0) 这个边缘分布上的去噪。这个边缘分布并不强制反向过程必须 Markov——只要边缘对,反向怎么走都行。这是整篇文章的钥匙。

  2. 构造非 Markov 反向过程。论文把反向过程写成一族由参数 sigma 控制的高斯过程。sigma 取 DDPM 那个值时,退回 ddpm;sigma=0 时,反向变成完全确定——给同一个起点 x_T 永远出同一张图。这就是 DDIM。

  3. 可以跳步采样。因为反向不是 Markov,从 x_T 直接跳到 x_{t-k} 不需要中间每一步。论文实测 50 步质量逼近 1000 步,10 步还能用。

加一句关键事实:DDIM 不需要重训。它和 DDPM 共用同一组权重,只换采样器。

实践案例

案例 1:50 步 vs 1000 步质量对比

CIFAR-10 上 DDPM 1000 步 FID 约 3.17。DDIM 50 步 FID 约 4.67,100 步约 4.04,几乎追平。CelebA 64×64 上 DDIM 100 步 FID 约 6.53,1000 步 DDPM 约 3.26。代价小、收益大,是 2020 年扩散模型上线生产的关键一步。

直观感受一下数量级:原版 DDPM 出一张 256×256 图要 1000 次 U-Net 前向,A100 上约 30 秒。DDIM 50 步同质量约 1.5 秒。这不是”优化”,是数量级的差距,决定了扩散能不能进消费级产品。

案例 2:x_T 隐空间插值

确定性带来一个免费的好东西:插值。给两张猫图片 A、B,分别反向编码出对应的 x_T^A 和 x_T^B(DDIM 反向是确定的,可以从 x_0 反推 x_T)。然后做 spherical lerp(slerp,球面插值):

x_T = sin((1-t)*theta)/sin(theta) * x_T_A + sin(t*theta)/sin(theta) * x_T_B

把 t 从 0 滑到 1,每个 t 解码一张图,得到 A 慢慢变成 B 的连续过渡。这就是后来所有扩散应用里”风格混合""语义滑块”的底层机制。在 GAN 时代这叫 latent walk,DDIM 把它免费送给了扩散模型。

案例 3:跳步采样的代码骨架

# DDPM: 1000 步全跑
for t in reversed(range(1000)):
x = ddpm_step(x, t)
# DDIM: 50 步等间隔
steps = list(range(0, 1000, 20)) # [0, 20, 40, ..., 980]
for i in reversed(range(len(steps))):
t_now = steps[i]
t_prev = steps[i-1] if i > 0 else -1
x = ddim_step(x, t_now, t_prev, eta=0.0) # eta=0 就是确定性 DDIM

eta 参数控制 sigma 大小:eta=1 退回 DDPM,eta=0 是 DDIM,中间值混合。实践常用 eta=0 + 50 步。

每一步 ddim_step 内部做的事,用一句话总结:先用神经网络从 x_t 估出去噪后的 x_0_hat,再按公式把 x_0_hat 和 t_prev 时间点该有的噪声重新拼起来得到 x_{t_prev}。这种”先估终点再回退”的思路,比 DDPM 的”逐级走一步”在数学上更接近 ODE 求解器。

案例 4:DDIM 反演(inversion)

确定性还有一个反向用法:给一张真实图 x_0,反推它对应的 x_T。把 DDIM 公式倒着跑一遍即可,每步用神经网络估当前噪声然后加回去。这条 x_T 就成了这张图的”扩散种子”。改一下 prompt(在条件扩散里)再正向解码,就得到一张保留原图结构、改变内容的新图——这正是 img2img 和 prompt-to-prompt 编辑的底层机理。

踩过的坑

  1. 确定性导致多样性下降。eta=0 时同一个 x_T 永远出同一张图。要批量生成多样样本就采样不同的 x_T。如果要在确定路径上稍微注入随机性,取 eta=0.2 左右是常见折中。

  2. 子序列间隔影响低步数质量。论文比较了 linear(等间隔)和 quadratic(前密后疏)两种取法。步数低于 20 时 quadratic 明显更好,50 步以上两者差不多。Stable Diffusion 默认 quadratic。

  3. DDIM 只改采样,不改训练。常见误解是以为 DDIM 是个新模型。其实它和 ddpm 共用权重——你拿 DDPM 训好的权重,换成 DDIM 采样器即可。这也是它能在生产里零成本替换的原因。

  4. 插值用 lerp(线性)会让范数缩水。x_T 是高斯白噪声,模长服从特定分布。中点做线性插值会把 ‖x_T‖ 拉小,落到分布外,解码质量崩。必须用 slerp(球面插值)保持范数。

  5. Implicit 这个名字容易误导。论文叫 implicit probabilistic model 是因为它不写显式似然——只定义了一个生成器(确定性映射)。这跟 GAN 的 implicit 是同一种用法,跟编程里的 implicit 完全无关。

  6. eta 不是越小越好。eta=0 在 50 步以上是甜点,但在低于 20 步时质量明显塌——确定性放大了离散误差。低步数下要么换 DPM-Solver 这类高阶求解器,要么稍微调高 eta 用随机性”抹平”离散化误差。

  7. 训练时仍按完整 1000 步加噪。常见误解:“既然采样只 50 步,能不能训练时也只用 50 步?“答案是不行——DDIM 的边缘分布对应 1000 步前向扩散,缩短前向会改变 q(x_t|x_0),模型学不到对的去噪函数。前向训练时间表不动,反向采样可跳——这是 DDIM 的边界。

适用 vs 不适用场景

适用

  • 已训好的扩散模型想加速推理(图像、视频、音频)——直接换 DDIM 采样器
  • 需要确定性的任务:img2img、inpainting、视频帧间一致性、隐空间插值
  • 把扩散接进 ODE 求解器(DPM-Solver、Heun、RK4)——sigma=0 时本质就是 ODE 离散化

不适用

  • 需要严格的概率密度估计(如似然评估)——DDIM 的”隐式”指它放弃了显式似然
  • 步数压到极致(1-4 步)——这时要用 consistency-models 或蒸馏方法,DDIM 还是基于 ODE,几步内误差大
  • 期望多样性高于一切——确定性会牺牲多样性,需要随机采样时仍要 eta>0

历史小故事(可跳过)

  • 2015 年:Sohl-Dickstein 等人提出 diffusion probabilistic models,理论漂亮但效果差,几乎没人接。
  • 2020 年 6 月:UC Berkeley 的 Ho 等人发 ddpm,把扩散做到图像 SOTA,但采样要 1000 步,慢得没法用。
  • 2020 年 10 月:Stanford 的 Jiaming Song 等三人发 DDIM,距 DDPM 仅 4 个月。同期 Yang Song(同名不同人)的 score-based-2020 给出概率流 ODE 视角。两条线殊途同归。
  • 2021-2022 年:DPM-Solver、PLMS、Heun 等高阶 ODE 求解器在 DDIM 之上把步数压到 10-20。
  • 2022 年:Stable Diffusion 公开发布,默认采样器就是 DDIM 派生。整个生成式 AI 的产品化爆发,靠的就是这条加速路径。
  • 2023 年:Consistency Models、Rectified Flow 把步数继续压到 1-4,但所有人都把 DDIM 当起点和参照系——它定义了”扩散加速”这个研究方向的基线。

学到什么

  1. 训练目标和采样路径可以解耦。这是 DDIM 最深的思想——不动权重,只换推理算法,性能涨 20 倍。后来很多工作(蒸馏、ODE 求解器、consistency)都是在这个发现上继续推。
  2. 随机过程 → 确定性 ODE 是一条值得走的路。一旦确定,编辑、插值、反演、和 ODE 工具链全部解锁。
  3. 第一性原理:先问”训练目标到底约束了什么”——只约束边缘分布,那反向过程就有自由度。这种”找出题目里没写的自由度”是研究的核心动作。
  4. 快不是工程问题,是认知问题。DDIM 不靠并行、不靠 GPU、不靠剪枝——它靠重新看清问题结构。理论价值百倍于实现复杂度。
  5. 接口稳定的好处。DDIM 和 DDPM 共用权重 = 共用接口。这让生产系统可以热替换采样器而不动训练管线,这是后续 DPM-Solver 等十几种采样器能快速普及的关键。

延伸阅读

关联

  • ddpm —— DDIM 的训练范式来源;权重共用,只换采样
  • score-based-2020 —— 同期的概率流 ODE 视角,与 DDIM sigma=0 等价
  • stable-diffusion —— 默认采样器是 DDIM 派生
  • dit —— Diffusion Transformer 也用 DDIM 类采样器
  • consistency-models —— 在 DDIM 之上进一步把步数压到 1-4
  • flow-matching —— 把 DDIM 的 ODE 视角推广,绕开 SDE 直接学速度场

反向链接

  • ddpm —— DDPM — Denoising Diffusion Probabilistic Models
  • dit —— DiT — Diffusion Transformer
  • edm-2022 —— EDM — 把扩散模型的训练配方一次拆清楚