DDIM 是如何加速 DDPM 的?
DDIM 是如何加速 DDPM 的?
1. 核心结论
DDIM 加速 DDPM 的核心思路可以概括为一句话:
DDPM 必须一步一步采样,而 DDIM 可以跳步采样。
DDPM 通常需要从 T=1000 一步步采样到
T=0,每一步都要调用一次神经网络,所以速度很慢。
DDIM 改变了采样方式。它不再严格按照 t -> t-1
的方式走,而是可以从 t 直接跳到更早的时间步,比如
t-20、t-50。因此原本 1000
步的采样过程,可以减少到 50 步甚至更少。
2. DDPM 为什么不能随便跳步?
DDPM 的反向采样过程是一个马尔可夫链:
也就是说,在 DDPM 里,模型每一步只定义了:
如果想从
所以 DDPM 的采样过程被锁定为:
它不能直接从
3. DDIM 的突破:先预测 x0,再跳到任意时间步
DDIM 的关键思路是:
不要只想着从当前时刻走到下一个时刻,而是先从当前带噪图像估计出原始图像 x0,再从这个 x0 重新加噪到目标时间步。
也就是说,DDIM 的一步采样大致分成两步:
其中 t' 可以是 t-1,也可以是
t-20,甚至可以跳得更远。
这就是 DDIM 能跳步的原因。
4. 关键公式:前向加噪公式
DDPM 和 DDIM 都依赖同一个前向加噪公式:
这个公式的含义是:
其中:
是原始干净图像; 是第 步的带噪图像; 是标准正态噪声; 控制原图保留多少; 控制噪声加入多少。
当 t 很小时,
图像还比较干净。
当 t 很大时,
图像几乎变成纯噪声。
5. 是什么?
首先定义一组噪声强度参数
通常它们会从很小的值逐渐变大,例如:
然后定义:
再把它们累乘起来:
所以
直觉上:
- t 越大,
越小,原图信息越少,噪声越多。 - t 越小,
越大,原图信息越多,噪声越少。
6. 为什么预测噪声后可以得到 x0?
因为前向公式是一个线性方程:
在采样时,
神经网络会预测噪声
于是可以直接把公式变形,解出对原图的估计:
这一步不需要额外训练模型,只是代数运算。
不过这个
7. DDIM 是怎么跳步的?
DDIM 拿到
公式可以写成:
其中 t' < t。
如果选择:
如果选择:
所以 DDIM 的采样逻辑可以理解为:
1 | |
这就是 DDIM 能够从 t 直接跳到 t-20
的原因。