DDIM(Denoising Diffusion Implicit Models)的推导可以理解为:
DDPM 是一种马尔可夫随机反向扩散采样;DDIM 则构造了一族非马尔可夫反向过程,使得可以用更少步数、甚至确定性地从噪声生成样本。
DDPM 回顾
前向过程
DDPM 的前向扩散过程是:
q(xt∣xt−1)=N(xt;αtxt−1,(1−αt)I)
其中:
αt=1−βt
定义:
αˉt=s=1∏tαs
于是可以直接得到:
q(xt∣x0)=N(xt;αˉtx0,(1−αˉt)I)
也就是说:
xt=αˉtx0+1−αˉtϵ
其中:
ϵ∼N(0,I)
这个公式非常重要。它告诉我们:任意时刻的 xt,都可以看成是原始数据 x0 加上一定强度的高斯噪声。
反向过程
DDPM 学习的是:
pθ(xt−1∣xt)
通常设为高斯分布:
pθ(xt−1∣xt)=N(xt−1;μθ(xt,t),σt2I)
训练时,模型通常不直接预测均值 μθ,而是预测噪声:
ϵθ(xt,t)
因为:
xt=αˉtx0+1−αˉtϵ
所以如果模型预测出了噪声 ϵ,我们就可以反推出 x0:
x^0=αˉtxt−1−αˉtϵθ(xt,t)
这个 x^0 在 DDIM 里会非常关键。
DDIM 的核心想法
只要保证每个边缘分布 q(xt∣x0) 不变,就不一定非要使用 DDPM 的马尔可夫前向过程。
q(xt∣x0)=N(xt;αˉtx0,(1−αˉt)I)
回顾一下 DDPM 是怎么训练那个预测噪声的 U-Net 神经网络 ϵθ 的。它的简化版损失函数(Loss function)是这样的:
Lsimple=Et,x0,ϵ[∣∣ϵ−ϵθ(αˉtx0+1−αˉtϵ,t)∣∣2]
仔细观察这个公式,会发现:整个训练过程只需要知道 x0 和 xt 的关系。模型在训练时,是随机抽取一个时间步 t,然后利用边缘分布公式直接算出 xt,接着让网络去猜噪声。它从头到尾都没有涉及到 xt−1 到 xt 这一步一步的单步转移概率 q(xt∣xt−1)。
既然决定模型参数更新的损失函数只关心边缘分布 q(xt∣x0),这就意味着:对于神经网络来说,中间过程是不是马尔可夫的,它根本不在乎,也“看”不到。
因此总结来说,神经网络在训练时,实际上只“看”到了边缘分布,完全没有用到马尔可夫前向过程的具体路径。 只要边缘分布保持一致,我们就可以在不重新训练模型的情况下,直接套用 DDPM 已经训练好的网络参数,去执行 DDIM 自己定义的新反向采样过程。
构造 DDIM 的采样公式
DDIM 定义:
qσ(xt−1∣xt,x0)=N(xt−1;αˉt−1x0+1−αˉt−1−σt2⋅1−αˉtxt−αˉtx0,σt2I)
这个式子看起来有点吓人,但它其实很自然。
因为从前向过程里:
xt=αˉtx0+1−αˉtϵ
所以:
ϵ=1−αˉtxt−αˉtx0
也就是说,给定 xt 和 x0,可以估计出当前噪声方向:
ϵt=1−αˉtxt−αˉtx0
那么 xt−1 自然可以写成:
xt−1=αˉt−1x0+1−αˉt−1ϵ
延伸问题:DDIM 和 DDPM 的采样公式长得几乎一样,为什么一个可以跳步,一个不可以?
但 DDIM 希望保留一点随机性,于是把噪声部分拆成两块:
1−αˉt−1ϵ
拆成:
1−αˉt−1−σt2ϵt+σtz
其中:
z∼N(0,I)
于是得到:
xt−1=αˉt−1x0+1−αˉt−1−σt2ϵt+σtz
这就是 DDIM 的核心采样公式。
在 DDIM 的理论框架中,特别是当它作为确定性采样(σt=0)时,它本质上就是假设整个生成轨迹是由同一个“干净图像 x0”和同一个“全局噪声 ϵ”构成的,不同时间步仅仅是在这两者之间进行不同权重的插值。
实际跳跃采样的过程与公式
在标准的过程中,我们是从 t 步走到 t−1 步。为了实现跳跃采样,我们定义一个更短的时间步子序列 τ=[τ1,τ2,...,τS],其中 S≪T(比如 T=1000,而 S=50)。
假设当前我们在子序列的第 i 步,对应真实时间步 t=τi;我们的目标是直接跳到子序列的下一步,对应真实时间步 s=τi−1(显然 s<t)。
将原公式中的 t−1 替换为 s,我们就得到了 DDIM 跳跃采样的通用公式:
xs=预测的当前 x0αˉs(αˉtxt−1−αˉtϵθ(xt,t))+指向 xs 的方向1−αˉs−σt2⋅ϵθ(xt,t)+σtz
拆解来看,跳跃过程其实只有清晰的三步逻辑:
第一步:基于当前 xt,向远方“预测”全局起点 x0
网络输入当前的图像 xt 和当前时间步 t,预测出当前的噪声 ϵθ(xt,t)。然后利用这个噪声,直接反推出完全干净的图像 x^0:
x^0=αˉtxt−1−αˉtϵθ(xt,t)
第二步:确定目标跳跃点 s 的参数
我们不计算 t−1,而是直接查表找到目标时间步 s(比如 s=t−20)对应的累积噪声系数 αˉs。
第三步:在 x^0 和噪声之间,按 s 的系数重新插值
将上面预测出的 x^0 和网络给出的同一份噪声 ϵθ(xt,t) 重新组合,直接得到跳跃后的状态 xs。如果是确定性采样(σt=0),公式就退化为极度清爽的形式:
xs=αˉsx^0+1−αˉsϵθ(xt,t)
DDIM 和 DDPM 的关系
DDIM 引入参数 σt,用于控制采样随机性。
DDIM 论文中通常写成:
σt=η1−αˉt1−αˉt−11−αˉt−1αˉt
其中:
η∈[0,1]
当:
η=1
时,采样过程接近 DDPM 的随机采样。
当:
η=0
时:
σt=0
于是:
xt−1=αˉt−1x^0+1−αˉt−1ϵθ(xt,t)
其中:
x^0=αˉtxt−1−αˉtϵθ(xt,t)
把 x^0 展开:
xt−1=αˉt−1αˉtxt−1−αˉtϵθ(xt,t)+1−αˉt−1ϵθ(xt,t)
整理:
xt−1=αˉtαˉt−1xt+(1−αˉt−1−αˉtαˉt−11−αˉt)ϵθ(xt,t)
这个式子说明,确定性 DDIM 采样本质上是在沿着模型预测的噪声方向移动。
这时没有随机噪声 z,整个采样过程变成确定性的。
这就是 DDIM 里 “implicit” 的来源:它不是显式的随机马尔可夫扩散过程,而是一个确定性或半确定性的隐式生成过程。
一些问题与理解
-
DDIM 和 DDPM 的采样公式长得几乎一样,为什么一个可以跳步,一个不可以?
既然 DDPM 的采样公式写开之后,里面也包含预测的 x0 和当前的 xt,它们长得几乎一模一样,为什么 DDPM 强行跳步就会崩塌,而 DDIM 就可以任意跳步?
核心区别一:单步系数 βt 与全局系数 αˉt 的紧密绑定
在 DDPM 中,如果我们把逆向采样的均值公式完全展开,用 xt 和预测的 x0 来表示 xt−1,它的公式确实是这样的:
xt−1=1−αˉtαˉt−1βtx0+1−αˉtαt(1−αˉt−1)xt+σtϵ
请注意看这里的系数,它显式地依赖于 βt(即从 t 到 t−1 这仅仅单步添加的噪声大小)。
- DDPM 的困境:这些系数之所以能让分布成立,是因为它的前向过程严格满足马尔可夫链。如果你想跳步(比如从 t 直接跳到 t−10),那么中间的单步 βt 和 αt 就失去了物理意义。你不能直接把整个长公式里的 t−1 强行换成 t−10,因为这样算出来的概率分布不再满足高斯分布的方差叠加原理,数学基础直接崩溃了。
- DDIM 的解耦:DDIM 在推导时,重新设计了前向过程。它根本不定义单步的 xt−1→xt 的马尔可夫关系,而是直接定义了任意时刻 xt 和 xt−1 只要分别满足相对于 x0 的边缘分布即可。因此,DDIM 的公式里完全没有单步的 βt,只有全局累乘的 αˉt 和 αˉt−1。这使得你可以把 t−1 换成任意的前向时间步,公式在数学上依然是严谨且完全成立的。
核心区别二:随机性(Noise)的本质不同
- DDPM(马尔可夫随机漫步):DDPM 在每一步反向采样时,都必须加上一项全新的、独立的随机噪声 σtϵ。这意味着它的反向过程是一条随机漫步(Random Walk)的轨迹。因为每一步都有新的随机性注入,步长(系数)必须极其微小且精确,才能保证这些随机方差在 1000 步后完美抵消并收敛。一旦你把步长放大(跳步),这些没有被精确计算的随机方差就会迅速累积,导致采样分布不匹配、质量明显下降。
- DDIM(确定性轨迹/ODE):当我们在 DDIM 中把随机项系数 σt 设为 0 时,整个采样过程就变成了一个完全确定性的常微分方程(ODE)求解过程。此时,从 xt 到 xt−1 没有任何新随机噪声的引入。它就像是在一条光滑的几何曲线上做数值积分(类似于欧拉法求解微分方程)。在一条确定的曲线上,你步子迈得大一点(跳步采样),顶多只会带来一定的离散化误差(Discretization Error),让最终图像的细节稍微模糊一点,但绝对不会让整个数学结构发生爆炸。
-
DDIM 训练目标为什么和 DDPM 一样?
这是 DDIM 特别漂亮的地方。
DDIM 虽然改变了采样过程,但是它保持了同样的边缘分布:
q(xt∣x0)=N(αˉtx0,(1−αˉt)I)
所以训练时仍然可以随机采样 t,然后构造:
xt=αˉtx0+1−αˉtϵ
让模型预测噪声:
ϵθ(xt,t)
训练目标仍然是:
Lsimple=Et,x0,ϵ[∣ϵ−ϵθ(xt,t)∣2]
也就是说:
DDIM 不需要重新训练模型。它可以直接使用 DDPM 训练好的噪声预测网络。
这也是 DDIM 很实用的原因。
-
从 ODE 角度理解 DDIM
当:
η=0
时,DDIM 是确定性的。给定同一个初始噪声 xT,生成结果完全固定。
这时 DDIM 可以看作是在求解一个概率流 ODE。
直观上:
- DDPM 采样像随机游走;
- DDIM 采样像沿着一条确定轨迹滑下来。
DDPM:
xT→xT−1→⋯→x0
每一步都会加随机噪声。
DDIM:
xT→xt1→xt2→⋯→x0
当 η=0 时,每一步没有额外噪声,因此采样路径是确定性的。
这也解释了为什么 DDIM 支持一种很有用的性质:图像反演。
因为确定性 DDIM 中:
xT↔x0
近似可逆。
这在图像编辑、latent inversion、prompt editing 等任务中非常常见。