DDIM(Denoising Diffusion Implicit Models)的推导可以理解为:

DDPM 是一种马尔可夫随机反向扩散采样;DDIM 则构造了一族非马尔可夫反向过程,使得可以用更少步数、甚至确定性地从噪声生成样本。


DDPM 回顾

前向过程

DDPM 的前向扩散过程是:

q(xt∣xt−1)=N(xt;αtxt−1,(1−αt)I)q(x_t \mid x_{t-1}) = \mathcal N \left( x_t; \sqrt{\alpha_t}x_{t-1}, (1-\alpha_t)I \right)

其中:

αt=1−βt\alpha_t = 1-\beta_t

定义:

αˉt=∏s=1tαs\bar\alpha_t = \prod_{s=1}^t \alpha_s

于是可以直接得到:

q(xt∣x0)=N(xt;αˉtx0,(1−αˉt)I)q(x_t\mid x_0) = \mathcal N \left( x_t; \sqrt{\bar\alpha_t}x_0, (1-\bar\alpha_t)I \right)

也就是说:

xt=αˉtx0+1−αˉtϵx_t = \sqrt{\bar\alpha_t}x_0 + \sqrt{1-\bar\alpha_t}\epsilon

其中:

ϵ∼N(0,I)\epsilon \sim \mathcal N(0,I)

这个公式非常重要。它告诉我们:任意时刻的 xtx_t,都可以看成是原始数据 x0x_0 加上一定强度的高斯噪声。

反向过程

DDPM 学习的是:

pθ(xt−1∣xt)p_\theta(x_{t-1}\mid x_t)

通常设为高斯分布:

pθ(xt−1∣xt)=N(xt−1;μθ(xt,t),σt2I)p_\theta(x_{t-1}\mid x_t) = \mathcal N \left( x_{t-1}; \mu_\theta(x_t,t), \sigma_t^2I \right)

训练时,模型通常不直接预测均值 μθ\mu_\theta,而是预测噪声:

ϵθ(xt,t)\epsilon_\theta(x_t,t)

因为:

xt=αˉtx0+1−αˉtϵx_t = \sqrt{\bar\alpha_t}x_0 + \sqrt{1-\bar\alpha_t}\epsilon

所以如果模型预测出了噪声 ϵ\epsilon,我们就可以反推出 x0x_0:

x^0=xt−1−αˉtϵθ(xt,t)αˉt\hat x_0 = \frac{x_t-\sqrt{1-\bar\alpha_t}\epsilon_\theta(x_t,t)} {\sqrt{\bar\alpha_t}}

这个 x^0\hat x_0 在 DDIM 里会非常关键。


DDIM 的核心想法

只要保证每个边缘分布 q(xt∣x0)q(x_t\mid x_0) 不变,就不一定非要使用 DDPM 的马尔可夫前向过程。

q(xt∣x0)=N(xt;αˉtx0,(1−αˉt)I)q(x_t\mid x_0) = \mathcal N \left( x_t; \sqrt{\bar\alpha_t}x_0, (1-\bar\alpha_t)I \right)

回顾一下 DDPM 是怎么训练那个预测噪声的 U-Net 神经网络 ϵθ\epsilon_\theta 的。它的简化版损失函数(Loss function)是这样的:

Lsimple=Et,x0,ϵ[∣∣ϵ−ϵθ(αˉtx0+1−αˉtϵ,t)∣∣2]L_{simple} = \mathbb{E}_{t, x_0, \epsilon} [||\epsilon - \epsilon_\theta(\sqrt{\bar{\alpha}_t}x_0 + \sqrt{1 - \bar{\alpha}_t}\epsilon, t)||^2]

仔细观察这个公式,会发现:整个训练过程只需要知道 x0x_0 和 xtx_t 的关系。模型在训练时,是随机抽取一个时间步 tt,然后利用边缘分布公式直接算出 xtx_t,接着让网络去猜噪声。它从头到尾都没有涉及到 xt−1x_{t-1} 到 xtx_t 这一步一步的单步转移概率 q(xt∣xt−1)q(x_t | x_{t-1})。

既然决定模型参数更新的损失函数只关心边缘分布 q(xt∣x0)q(x_t | x_0),这就意味着:对于神经网络来说,中间过程是不是马尔可夫的,它根本不在乎,也“看”不到。

因此总结来说,神经网络在训练时,实际上只“看”到了边缘分布,完全没有用到马尔可夫前向过程的具体路径。 只要边缘分布保持一致,我们就可以在不重新训练模型的情况下,直接套用 DDPM 已经训练好的网络参数,去执行 DDIM 自己定义的新反向采样过程。

构造 DDIM 的采样公式

DDIM 定义:

qσ(xt−1∣xt,x0)=N(xt−1;αˉt−1x0+1−αˉt−1−σt2⋅xt−αˉtx01−αˉt,σt2I)q_\sigma(x_{t-1}\mid x_t,x_0) = \mathcal N \left( x_{t-1}; \sqrt{\bar\alpha_{t-1}}x_0 + \sqrt{1-\bar\alpha_{t-1}-\sigma_t^2} \cdot \frac{x_t-\sqrt{\bar\alpha_t}x_0} {\sqrt{1-\bar\alpha_t}}, \sigma_t^2 I \right)

这个式子看起来有点吓人,但它其实很自然。

因为从前向过程里:

xt=αˉtx0+1−αˉtϵx_t = \sqrt{\bar\alpha_t}x_0 + \sqrt{1-\bar\alpha_t}\epsilon

所以:

ϵ=xt−αˉtx01−αˉt\epsilon = \frac{x_t-\sqrt{\bar\alpha_t}x_0} {\sqrt{1-\bar\alpha_t}}

也就是说,给定 xtx_t 和 x0x_0,可以估计出当前噪声方向:

ϵt=xt−αˉtx01−αˉt\epsilon_t = \frac{x_t-\sqrt{\bar\alpha_t}x_0} {\sqrt{1-\bar\alpha_t}}

那么 xt−1x_{t-1} 自然可以写成:

xt−1=αˉt−1x0+1−αˉt−1ϵx_{t-1} = \sqrt{\bar\alpha_{t-1}}x_0 + \sqrt{1-\bar\alpha_{t-1}}\epsilon

延伸问题:DDIM 和 DDPM 的采样公式长得几乎一样,为什么一个可以跳步,一个不可以?

但 DDIM 希望保留一点随机性,于是把噪声部分拆成两块:

1−αˉt−1ϵ\sqrt{1-\bar\alpha_{t-1}}\epsilon

拆成:

1−αˉt−1−σt2ϵt+σtz\sqrt{1-\bar\alpha_{t-1}-\sigma_t^2}\epsilon_t + \sigma_t z

其中:

z∼N(0,I)z\sim \mathcal N(0,I)

于是得到:

xt−1=αˉt−1x0+1−αˉt−1−σt2ϵt+σtzx_{t-1} = \sqrt{\bar\alpha_{t-1}}x_0 + \sqrt{1-\bar\alpha_{t-1}-\sigma_t^2} \epsilon_t + \sigma_t z

这就是 DDIM 的核心采样公式。

在 DDIM 的理论框架中,特别是当它作为确定性采样(σt=0\sigma_t = 0)时,它本质上就是假设整个生成轨迹是由同一个“干净图像 x0x_0”和同一个“全局噪声 ϵ\epsilon”构成的,不同时间步仅仅是在这两者之间进行不同权重的插值。


实际跳跃采样的过程与公式

在标准的过程中,我们是从 tt 步走到 t−1t-1 步。为了实现跳跃采样,我们定义一个更短的时间步子序列 τ=[τ1,τ2,...,τS]\tau = [\tau_1, \tau_2, ..., \tau_S],其中 S≪TS \ll T(比如 T=1000T=1000,而 S=50S=50)。

假设当前我们在子序列的第 ii 步,对应真实时间步 t=τit = \tau_i;我们的目标是直接跳到子序列的下一步,对应真实时间步 s=τi−1s = \tau_{i-1}(显然 s<ts < t)。

将原公式中的 t−1t-1 替换为 ss,我们就得到了 DDIM 跳跃采样的通用公式:

xs=αˉs(xt−1−αˉtϵθ(xt,t)αˉt)⏟预测的当前 x0+1−αˉs−σt2⋅ϵθ(xt,t)+σtz⏟指向 xs 的方向x_s = \underbrace{\sqrt{\bar{\alpha}_s} \left( \frac{x_t - \sqrt{1 - \bar{\alpha}_t} \epsilon_\theta(x_t, t)}{\sqrt{\bar{\alpha}_t}} \right)}_{\text{预测的当前 } x_0} + \underbrace{\sqrt{1 - \bar{\alpha}_s - \sigma_t^2} \cdot \epsilon_\theta(x_t, t) + \sigma_t z}_{\text{指向 } x_s \text{ 的方向}}

拆解来看,跳跃过程其实只有清晰的三步逻辑:

第一步:基于当前 xtx_t,向远方“预测”全局起点 x0x_0

网络输入当前的图像 xtx_t 和当前时间步 tt,预测出当前的噪声 ϵθ(xt,t)\epsilon_\theta(x_t, t)。然后利用这个噪声,直接反推出完全干净的图像 x^0\hat{x}_0:

x^0=xt−1−αˉtϵθ(xt,t)αˉt\hat{x}_0 = \frac{x_t - \sqrt{1 - \bar{\alpha}_t} \epsilon_\theta(x_t, t)}{\sqrt{\bar{\alpha}_t}}

第二步:确定目标跳跃点 ss 的参数

我们不计算 t−1t-1,而是直接查表找到目标时间步 ss(比如 s=t−20s = t - 20)对应的累积噪声系数 αˉs\bar{\alpha}_s。

第三步:在 x^0\hat{x}_0 和噪声之间,按 ss 的系数重新插值

将上面预测出的 x^0\hat{x}_0 和网络给出的同一份噪声 ϵθ(xt,t)\epsilon_\theta(x_t, t) 重新组合,直接得到跳跃后的状态 xsx_s。如果是确定性采样(σt=0\sigma_t = 0),公式就退化为极度清爽的形式:

xs=αˉsx^0+1−αˉsϵθ(xt,t)x_s = \sqrt{\bar{\alpha}_s} \hat{x}_0 + \sqrt{1 - \bar{\alpha}_s} \epsilon_\theta(x_t, t)

DDIM 和 DDPM 的关系

DDIM 引入参数 σt\sigma_t,用于控制采样随机性。

DDIM 论文中通常写成:

σt=η1−αˉt−11−αˉt1−αˉtαˉt−1\sigma_t = \eta \sqrt{ \frac{1-\bar\alpha_{t-1}} {1-\bar\alpha_t} } \sqrt{ 1-\frac{\bar\alpha_t}{\bar\alpha_{t-1}} }

其中:

η∈[0,1]\eta \in [0,1]

当:

η=1\eta = 1

时,采样过程接近 DDPM 的随机采样。

当:

η=0\eta = 0

时:

σt=0\sigma_t = 0

于是:

xt−1=αˉt−1x^0+1−αˉt−1ϵθ(xt,t)x_{t-1} = \sqrt{\bar\alpha_{t-1}}\hat x_0 + \sqrt{1-\bar\alpha_{t-1}} \epsilon_\theta(x_t,t)

其中:

x^0=xt−1−αˉtϵθ(xt,t)αˉt\hat x_0 = \frac{x_t-\sqrt{1-\bar\alpha_t}\epsilon_\theta(x_t,t)} {\sqrt{\bar\alpha_t}}

把 x^0\hat x_0 展开:

xt−1=αˉt−1xt−1−αˉtϵθ(xt,t)αˉt+1−αˉt−1ϵθ(xt,t)x_{t-1} = \sqrt{\bar\alpha_{t-1}} \frac{x_t-\sqrt{1-\bar\alpha_t}\epsilon_\theta(x_t,t)} {\sqrt{\bar\alpha_t}} + \sqrt{1-\bar\alpha_{t-1}} \epsilon_\theta(x_t,t)

整理:

xt−1=αˉt−1αˉtxt+(1−αˉt−1−αˉt−1αˉt1−αˉt)ϵθ(xt,t)x_{t-1} = \sqrt{\frac{\bar\alpha_{t-1}}{\bar\alpha_t}}x_t + \left( \sqrt{1-\bar\alpha_{t-1}} - \sqrt{ \frac{\bar\alpha_{t-1}}{\bar\alpha_t} } \sqrt{1-\bar\alpha_t} \right) \epsilon_\theta(x_t,t)

这个式子说明,确定性 DDIM 采样本质上是在沿着模型预测的噪声方向移动。

这时没有随机噪声 zz,整个采样过程变成确定性的。

这就是 DDIM 里 “implicit” 的来源:它不是显式的随机马尔可夫扩散过程,而是一个确定性或半确定性的隐式生成过程。


一些问题与理解

  1. DDIM 和 DDPM 的采样公式长得几乎一样,为什么一个可以跳步,一个不可以?

    既然 DDPM 的采样公式写开之后,里面也包含预测的 x0x_0 和当前的 xtx_t,它们长得几乎一模一样,为什么 DDPM 强行跳步就会崩塌,而 DDIM 就可以任意跳步?

    核心区别一:单步系数 βt\beta_t 与全局系数 αˉt\bar{\alpha}_t 的紧密绑定

    在 DDPM 中,如果我们把逆向采样的均值公式完全展开,用 xtx_t 和预测的 x0x_0 来表示 xt−1x_{t-1},它的公式确实是这样的:

    xt−1=αˉt−1βt1−αˉtx0+αt(1−αˉt−1)1−αˉtxt+σtϵx_{t-1} = \frac{\sqrt{\bar{\alpha}_{t-1}}\beta_t}{1 - \bar{\alpha}_t} x_0 + \frac{\sqrt{\alpha_t}(1 - \bar{\alpha}_{t-1})}{1 - \bar{\alpha}_t} x_t + \sigma_t \epsilon

    请注意看这里的系数,它显式地依赖于 βt\beta_t(即从 tt 到 t−1t-1 这仅仅单步添加的噪声大小)。

    • DDPM 的困境:这些系数之所以能让分布成立,是因为它的前向过程严格满足马尔可夫链。如果你想跳步(比如从 tt 直接跳到 t−10t-10),那么中间的单步 βt\beta_t 和 αt\alpha_t 就失去了物理意义。你不能直接把整个长公式里的 t−1t-1 强行换成 t−10t-10,因为这样算出来的概率分布不再满足高斯分布的方差叠加原理,数学基础直接崩溃了。
    • DDIM 的解耦:DDIM 在推导时,重新设计了前向过程。它根本不定义单步的 xt−1→xtx_{t-1} \to x_t 的马尔可夫关系,而是直接定义了任意时刻 xtx_t 和 xt−1x_{t-1} 只要分别满足相对于 x0x_0 的边缘分布即可。因此,DDIM 的公式里完全没有单步的 βt\beta_t,只有全局累乘的 αˉt\bar{\alpha}_t 和 αˉt−1\bar{\alpha}_{t-1}。这使得你可以把 t−1t-1 换成任意的前向时间步,公式在数学上依然是严谨且完全成立的。

    核心区别二:随机性(Noise)的本质不同

    • DDPM(马尔可夫随机漫步):DDPM 在每一步反向采样时,都必须加上一项全新的、独立的随机噪声 σtϵ\sigma_t \epsilon。这意味着它的反向过程是一条随机漫步(Random Walk)的轨迹。因为每一步都有新的随机性注入,步长(系数)必须极其微小且精确,才能保证这些随机方差在 1000 步后完美抵消并收敛。一旦你把步长放大(跳步),这些没有被精确计算的随机方差就会迅速累积,导致采样分布不匹配、质量明显下降。
    • DDIM(确定性轨迹/ODE):当我们在 DDIM 中把随机项系数 σt\sigma_t 设为 0 时,整个采样过程就变成了一个完全确定性的常微分方程(ODE)求解过程。此时,从 xtx_t 到 xt−1x_{t-1} 没有任何新随机噪声的引入。它就像是在一条光滑的几何曲线上做数值积分(类似于欧拉法求解微分方程)。在一条确定的曲线上,你步子迈得大一点(跳步采样),顶多只会带来一定的离散化误差(Discretization Error),让最终图像的细节稍微模糊一点,但绝对不会让整个数学结构发生爆炸。
  2. DDIM 训练目标为什么和 DDPM 一样?

    这是 DDIM 特别漂亮的地方。

    DDIM 虽然改变了采样过程,但是它保持了同样的边缘分布:

    q(xt∣x0)=N(αˉtx0,(1−αˉt)I)q(x_t\mid x_0) = \mathcal N \left( \sqrt{\bar\alpha_t}x_0, (1-\bar\alpha_t)I \right)

    所以训练时仍然可以随机采样 tt,然后构造:

    xt=αˉtx0+1−αˉtϵx_t = \sqrt{\bar\alpha_t}x_0 + \sqrt{1-\bar\alpha_t}\epsilon

    让模型预测噪声:

    ϵθ(xt,t)\epsilon_\theta(x_t,t)

    训练目标仍然是:

    Lsimple=Et,x0,ϵ[∣ϵ−ϵθ(xt,t)∣2]L_{\text{simple}} = \mathbb E_{t,x_0,\epsilon} \left[ \left| \epsilon-\epsilon_\theta(x_t,t) \right|^2 \right]

    也就是说:

    DDIM 不需要重新训练模型。它可以直接使用 DDPM 训练好的噪声预测网络。

    这也是 DDIM 很实用的原因。

  3. 从 ODE 角度理解 DDIM

    当:

    η=0\eta=0

    时,DDIM 是确定性的。给定同一个初始噪声 xTx_T,生成结果完全固定。

    这时 DDIM 可以看作是在求解一个概率流 ODE。

    直观上:

    • DDPM 采样像随机游走;
    • DDIM 采样像沿着一条确定轨迹滑下来。

    DDPM:

    xT→xT−1→⋯→x0x_T \to x_{T-1} \to \cdots \to x_0

    每一步都会加随机噪声。

    DDIM:

    xT→xt1→xt2→⋯→x0x_T \to x_{t_1} \to x_{t_2} \to \cdots \to x_0

    当 η=0\eta=0 时,每一步没有额外噪声,因此采样路径是确定性的。

    这也解释了为什么 DDIM 支持一种很有用的性质:图像反演。

    因为确定性 DDIM 中:

    xT↔x0x_T \leftrightarrow x_0

    近似可逆。

    这在图像编辑、latent inversion、prompt editing 等任务中非常常见。

Categories