大白话 | 快速理解扩散模型【DDIM】Denoising Diffusion Implicit Model

本文基本不设语言门槛,只讲大白话,力求让读者快速理解DDIM(Denoising Diffusion Implicit Model)模型。

本文适合谁来学

本文会讲解DDIM的实现思路,但是会基于DDPM的知识来讲。如果你还不了解DDPM,请先自行学习,或阅读博主此前的文章《大白话 | 从生成模型快速理解【扩散模型】Diffusion Model》

本文适合哪些读者:

  1. 如果你已经了解DDPM的数学推理原理(马尔可夫链、前向加噪反向去噪过程),但是完全不了解DDIM模型,那本文很适合你。
  2. 如果你简单了解过DDIM模型,但是有包括但不限于以下几个问题
    • 为什么DDPM模型不可以跳步?
    • DDIM的跳步在数学上是怎么推理得到的?
    • 为什么说DDIM是确定性的?
    • 既然说DDIM是确定性的,为什么跳10步生成和100步的结果清晰度不同?

本文不合适哪些读者:

  1. 希望学习到DDIM模型每一步详细的数学推理过程(本文有数学推理过程,但是部分会省略)。
  2. 希望结合代码来学习DDIM模型的模型结构
  3. 完全不了解扩散模型或者DDPM,或者完全不具备深度学习、概率统计相关知识。

本文参考:

【串讲系列】讲人话-Stable Diffusion全解(原理+代码+公式)之 DDIM + SDXL Turbo

一文带你看懂DDPM和DDIM(含原理简易推导,pytorch代码)



DDIM模型和DDPM模型的最大区别,在于前者可以跳步,后者不可以,导致后者的生成速度较慢。那为什么DDPM要采样很多步,并且还不能跳步呢?

DDPM采样很多步的原因

当设置总步数T为1000的时候,DDPM要老老实实的从纯高斯噪声 x T x_T xT,通过采样+降噪1000次得到我们想要的图片。那么为什么DDPM要采样1000步呢?(当然1001步、2000步、1w步也都可以,但是必须采样很多步)

原因其一:为了保证反向过程为高斯分布

这里首先需要知道一个结论:对于一个连续的扩散过程,它的前向扩散和后向扩散过程,在 β \beta β的变化速率比较小的时候,具有完全相同的函数形式。

这里的 β \beta β就是我们在加噪的时候,使用的那个 β t \beta_t βt。在这个公式中出现的:
x t = 1 − β t ∗ x t − 1 + β t ∗ ε t − 1 x_{t} = \sqrt{1-\beta_{t}}*x_{t-1} + \sqrt{\beta_{t}}*\varepsilon _{t-1} xt=1βt xt1+βt εt1
就是说, β \beta β变化速率比较小的时候,如果正向过程的分布 q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xtxt1)是一个高斯分布,那么反向过程的分布 q ( x t − 1 ∣ x t ) q(x_{t-1}|x_t) q(xt1xt)和正向过程的分布一样,也是一个高斯分布。

我们知道,DDPM中的 β t \beta_t βt会存在变化,在加噪过程中会有一个从0到1的变化。那么如果总步数设置的很少,比如T=10,那么相当于 β t \beta_t βt平均每一次都要变化0.1,那就不满足“当 β \beta β变化速率比较小”这个条件了,反向过程就无法满足高斯分布。所以需要T很大,比如T=1000,而且一次一步, β t \beta_t βt平均每一次都要变化0.001,才可以保证反向过程近似为高斯分布。

当然这其实是一个近似的过程。稍微展开来说就是,根据正向和反向过程的随机微分方程(SDE), β \beta β根据 t t t的导数足够小的时候,可以近似认为 β \beta β是一个常数,这样反向过程SDE中的有一项分数函数的系数 β d t \beta dt βdt可以近似认为是0,此时正向和反向的SDE方程就会具有完全相同的数学结构,那它们的值的分布肯定就是相同的了。

虽然说 β \beta β根据 t t t的导数越小就也可以近似为0,当然即使T=1000,那一项也不是完全为0的,也就是说其实反向过程并不是100%完全的高斯分布,但是这个近似已经足够我们使用了。所以,其实T=10的时候也勉强能近似为高斯分布,但是还不太够用。这一点其实能解答DDIM为什么步数越多越清晰的问题,我们后面会详细讲。

原因其二:DDPM的Loss简化

对于DDPM的Loss,我们在讲DDPM的时候提到过,Loss里的一些项其实是省略掉的,这其中有一项Loss是:
− l o g   p θ ( x 0 ∣ x 1 ) -log \ p_\theta(x_0|x_1) log pθ(x0x1)
那这一项Loss什么时候可以省略呢?我们知道Loss肯定是要最小的,也就是原式的相反数 l o g   p θ ( x 0 ∣ x 1 ) log \ p_\theta(x_0|x_1) log pθ(x0x1)要尽可能大,也就是 p θ ( x 0 ∣ x 1 ) p_\theta(x_0|x_1) pθ(x0x1)要尽可能的大,那么条件概率“当 x 1 x_1 x1发生的时候, x 0 x_0 x0发生的概率”什么时候最大呢?那肯定是 x 1 x_1 x1等于 x 0 x_0 x0的时候最大,并且 x 0 x_0 x0 x 1 x_1 x1越接近,这个概率就越大

于是,当T比较大的时候, x 0 x_0 x0 x 1 x_1 x1比较接近,这一项Loss就可以省略掉。但是当T比较小的时候,这一项Loss就不能省略了,如果我们还用它省略的形式,去让 ε t \varepsilon_t εt ε p r e d \varepsilon_{pred} εpred尽可能接近,就已经不能让此时真正的Loss变小了。所以DDPM需要很多步降噪来省略掉这一项。


DDPM采样不能跳步的原因

DDPM不仅要采样很多步,而且还不能跳步,这是为什么呢?

直接原因:破坏了反向降噪公式

回顾DDPM,在反向降噪过程中,我们用贝叶斯公式,去展开了 q ( x t − 1 ∣ x t , x 0 ) q (x_{t-1} | x_{t},x_0) q(xt1xt,x0),得到了这一项高斯分布的参数 μ \mu μ σ \sigma σ。那如果现在要跳s步,也就是 q ( x t − s ∣ x t , x 0 ) q (x_{t-s} | x_{t},x_0) q(xtsxt,x0),我们看看怎么展开:
q ( x t − s ∣ x t , x 0 ) = q ( x t ∣ x t − s , x 0 ) q ( x t − s ∣ x 0 ) q ( x t ∣ x 0 ) q (x_{t-s} | x_{t},x_0) = \frac{q(x_t|x_{t-s}, x_0)q(x_{t-s}|x_0)}{q(x_t|x_0)} q(xtsxt,x0)=q(xtx0)q(xtxts,x0)q(xtsx0)
这里 q ( x t − s ∣ x 0 ) q(x_{t-s}|x_0) q(xtsx0) q ( x t ∣ x 0 ) q(x_t|x_0) q(xtx0)我们在DDPM中都已经学会了怎么展开,但是 q ( x t ∣ x t − s , x 0 ) q(x_t|x_{t-s}, x_0) q(xtxts,x0)这一项要怎么做呢?对于 s = 1 s=1 s=1的情况, q ( x t ∣ x t − 1 , x 0 ) q(x_t|x_{t-1}, x_0) q(xtxt1,x0),因为我们知道DDPM的扩散过程中,所以每一项都只和它的前一项有关(想一下那个递推公式 x t = 1 − β t ∗ x t − 1 + β t ∗ ε t − 1 x_{t} = \sqrt{1-\beta_{t}}*x_{t-1} + \sqrt{\beta_{t}}*\varepsilon _{t-1} xt=1βt xt1+βt εt1),和其他项都是无关的,所以可以省略 x 0 x_0 x0,即:
q ( x t ∣ x t − 1 , x 0 ) = q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}, x_0) = q(x_t|x_{t-1}) q(xtxt1,x0)=q(xtxt1)
q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xtxt1)根据重参数采样就可以写出来它符合的高斯分布的参数 μ \mu μ σ \sigma σ了。

但是对于 q ( x t ∣ x t − s , x 0 ) q(x_t|x_{t-s}, x_0) q(xtxts,x0),这一项还可以省略 x 0 x_0 x0?当然是不可以了。

根本原因:DDPM是基于马尔可夫链的建模

其实 q ( x t ∣ x t − s , x 0 ) q(x_t|x_{t-s}, x_0) q(xtxts,x0)无法展开的根本原因,就是在于DDPM是一个基于马尔可夫链的建模。什么是马尔可夫链?简单复习一下:

若随机过程满足 p ( x t ∣ x t − 1 , x t − 2 , . . . , x 0 ) = p ( x t ∣ x t − 1 ) p(x_t∣x_{t−1},x_{t−2},...,x_0)=p(x_t∣x_{t−1}) p(xtxt1,xt2,...,x0)=p(xtxt1),则称其具有马尔可夫性,即未来状态仅依赖于当前状态。

也就是未来状态仅依赖当前状态,整个状态推导每一步都是连续的,不可以省略中间的步骤。那么其实就只能得到 q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xtxt1),至于 q ( x t ∣ x t − s ) q(x_t|x_{t-s}) q(xtxts)呢,需要从 q ( x t − s + 1 ∣ x t − s ) q(x_{t-s+1}|x_{t-s}) q(xts+1xts) q ( x t − s + 2 ∣ x t − s + 1 ) q(x_{t-s+2}|x_{t-s+1}) q(xts+2xts+1) ⋯ \cdots 一步步推导,不会存在 q ( x t ∣ x t − s ) q(x_t|x_{t-s}) q(xtxts)的直接公式,也就无法跳步了

那我们知道了对于DDPM,由于不知道 q ( x t ∣ x t − s , x 0 ) q(x_t|x_{t-s}, x_0) q(xtxts,x0),所以是无法求得 q ( x t − s ∣ x t , x 0 ) q(x_{t-s}|x_t, x_0) q(xtsxt,x0)。那有没有一种方法,可以绕开马尔可夫链的设定,来给出符合 q ( x t − s ∣ x t , x 0 ) q(x_{t-s}|x_t, x_0) q(xtsxt,x0)高斯分布的 μ \mu μ σ \sigma σ参数呢?


DDIM

下面我们正式进入DDIM的讲解。

有没有可能绕开马尔可夫链

因为马尔可夫链需要的是前一项和后一项的关系,那我们来观察DDPM中,是否存在并不是前一项和后一项的关系的式子呢?其实是存在的,也就是 q ( x t ∣ x 0 ) q(x_t|x_0) q(xtx0)
q ( x t ∣ x 0 ) = N ( x t ; α t ‾ ⋅ x 0 , ( 1 − α t ‾ ) I ) q(x_t|x_0)=N(x_t;\sqrt{\overline{\alpha _{t}}} \cdot x_0, (1-\overline{\alpha _{t}})I) q(xtx0)=N(xt;αt x0,(1αt)I)
没错,我们在DDPM中,利用 x t x_t xt x t − 1 x_{t-1} xt1的关系,逐步推导过直接得到 x t x_t xt x 0 x_0 x0关系的式子。所以有没有一种可能,我们可以直接利用 q ( x t ∣ x 0 ) q(x_t|x_0) q(xtx0),来推导反向降噪过程,而不使用递推式,从而绕过马尔可夫链呢?

有没有一种可能,利用马尔可夫链来推导 q ( x t − 1 ∣ x t , x 0 ) q (x_{t-1} | x_{t},x_0) q(xt1xt,x0)的高斯分布的 μ \mu μ σ \sigma σ参数仅仅是当 s = 1 s=1 s=1时的特殊方法,而更宽泛的** q ( x t − s ∣ x t , x 0 ) q(x_{t-s}|x_t, x_0) q(xtsxt,x0)还有其他可以通过 x 0 x_0 x0来表示的方式**呢?

有没有一种可能,马尔可夫链,其实可有可无?


重新定义反向降噪

现在的目标很明确了,想求 q ( x t − s ∣ x t , x 0 ) q(x_{t-s}|x_t, x_0) q(xtsxt,x0)。已知的有 q ( x t ∣ x 0 ) q(x_t|x_0) q(xtx0) q ( x t − s ∣ x 0 ) q(x_{t-s}|x_0) q(xtsx0)
q ( x t ∣ x 0 ) = N ( x t ; α t ⋅ x 0 , ( 1 − α t ) I ) q ( x t − s ∣ x 0 ) = N ( x t − s ; α t − s ⋅ x 0 , ( 1 − α t − s ) I ) q(x_t|x_0)=N(x_t;\sqrt{\alpha _{t}} \cdot x_0, (1-{\alpha _{t}})I)\\ q(x_{t-s}|x_0)=N(x_{t-s};\sqrt{\alpha _{t-s}} \cdot x_0, (1-{\alpha _{t-s}})I) q(xtx0)=N(xt;αt x0,(1αt)I)q(xtsx0)=N(xts;αts x0,(1αts)I)
这里把 α \alpha α上面的横线统一省略了,我们将 α \alpha α统一看成一个参数。然后我们把它们都写成重参数采样的形式,并且命名为 ( 1 ) (1) (1)式和 ( 2 ) (2) (2)式:
x t = α t ∗ x 0 + ( 1 − α t ) ∗ ε ⋯ ⋯ ( 1 ) x t − s = α t − s ∗ x 0 + ( 1 − α t − s ) ∗ ε ⋯ ⋯ ( 2 ) x_t = \sqrt{\alpha_t} * x_0 + \sqrt{(1-\alpha_t)} * \varepsilon \cdots \cdots (1) \\ x_{t-s} = \sqrt{\alpha_{t-s}} * x_0 + \sqrt{(1-\alpha_{t-s})} * \varepsilon\cdots\cdots (2) xt=αt x0+(1αt) ε⋯⋯(1)xts=αts x0+(1αts) ε⋯⋯(2)

重参数采样: 假设 ε \varepsilon ε是标准高斯分布,即 ε ∼ N ( 0 , 1 ) \varepsilon \sim N(0,1) εN(0,1),那么如果有 y = σ ∗ ε + μ y=\sigma * \varepsilon + \mu y=σε+μ,则 y ∼ N ( μ , σ 2 ) y \sim N(\mu,\sigma^2) yN(μ,σ2)

我们先大胆假设 q ( x t − s ∣ x t , x 0 ) q(x_{t-s}|x_t, x_0) q(xtsxt,x0)也是一个高斯分布,并且设出它的 μ ( x t , x 0 ) = m ∗ x t + k ∗ x 0 \mu(x_t,x_0) = m*x_t+k*x_0 μ(xt,x0)=mxt+kx0 σ t \sigma_t σt,其中 μ ( x t , x 0 ) \mu(x_t,x_0) μ(xt,x0)是一个关于 x t x_t xt x 0 x_0 x0的线性函数, σ t \sigma_t σt是一个和 x x x无关的参数,即:
q ( x t − s ∣ x t , x 0 ) = N ( μ ( x t , x 0 ) , σ t 2 I ) q(x_{t-s}|x_t, x_0)=N(\mu(x_t,x_0),\sigma_t^2I) q(xtsxt,x0)=N(μ(xt,x0),σt2I)
然后也写出它的重参数采样的形式,并且将 μ ( x t , x 0 ) = m ∗ x t + k ∗ x 0 \mu(x_t,x_0) = m*x_t+k*x_0 μ(xt,x0)=mxt+kx0带入,命名为 ( 3 ) (3) (3)式:
x t − s = m ∗ x t + k ∗ x 0 + σ t ∗ ε ⋯ ⋯ ( 3 ) x_{t-s}=m*x_t+k*x_0+\sigma_t * \varepsilon \cdots \cdots (3) xts=mxt+kx0+σtε⋯⋯(3)
我们现在的目标就是将式子 ( 3 ) (3) (3)凑成 ( 1 ) (1) (1)或者 ( 2 ) (2) (2)的形式,并且求得 k k k m m m两个参数,这样就可以验证我们的猜测, q ( x t − s ∣ x t , x 0 ) q(x_{t-s}|x_t, x_0) q(xtsxt,x0)是一个 μ \mu μ是关于 x t x_t xt x 0 x_0 x0的线性函数的高斯分布了。

怎么凑呢?我们看到 ( 3 ) (3) (3)左侧的部分和 ( 2 ) (2) (2)一致都是 x t − s x_{t-s} xts,于是我们让他们的右侧也尽量一致,我们看到 ( 2 ) (2) (2)的右侧没有 x t x_t xt,于是我们将 ( 1 ) (1) (1)带入 ( 3 ) (3) (3)消去 x t x_t xt
x t − s = m ∗ ( α t ∗ x 0 + ( 1 − α t ) ∗ ε ) + k ∗ x 0 + σ t ∗ ε x_{t-s}=m*(\sqrt{\alpha_t} * x_0 + \sqrt{(1-\alpha_t)} * \varepsilon)+k*x_0+\sigma_t * \varepsilon xts=m(αt x0+(1αt) ε)+kx0+σtε
按照 ( 2 ) (2) (2)的形式,整理成 x 0 x_0 x0 ε \varepsilon ε的形式:
x t − s = ( m ∗ α t + k ) ∗ x 0 + m ∗ ( 1 − α t ) ∗ ε + σ t ∗ ε x_{t-s} = (m*\sqrt{\alpha_t} + k)* x_0 + m*\sqrt{(1-\alpha_t)} * \varepsilon + \sigma_t * \varepsilon xts=(mαt +k)x0+m(1αt) ε+σtε
注意后面这两个 ε \varepsilon ε项是不可以直接合并的,因为这两个 ε \varepsilon ε都是标准高斯的随机变量,它们是独立的。但是我们可以算出来它们合并之后的分布的均值和方差。我们假设他们合并之后的分布为 ε ′ \varepsilon' ε,那这个新的分布的均值应该是原来两个分布的均值之和,方差也是原来两个分布的方差之和,也就是:
x t − s = ( m ∗ α t + k ) ∗ x 0 + ε ′ ε ′ ∼ N ( 0 , m 2 ∗ ( 1 − α t ) + σ t 2 ) x_{t-s} = (m*\sqrt{\alpha_t} + k)* x_0 + \varepsilon' \\ \varepsilon' \sim N (0, m^2 * (1-\alpha_t) + \sigma_t^2) xts=(mαt +k)x0+εεN(0,m2(1αt)+σt2)
那我们把 ( 2 ) (2) (2)式也整理成这个形式:
x t − s = α t − s ∗ x 0 + ε ′ ′ ε ′ ′ ∼ N ( 0 , 1 − α t − s ) x_{t-s} = \sqrt{\alpha_{t-s}} * x_0 + \varepsilon'' \\ \varepsilon'' \sim N (0, 1-\alpha_{t-s}) xts=αts x0+ε′′ε′′N(0,1αts)
这样我们对比这两组式子,让二者 x 0 x_0 x0前面的系数相同,同时高斯分布的均值和方向也相同,就可以得到两个等式:
m ∗ α t + k = α t − s m 2 ∗ ( 1 − α t ) + σ t 2 = 1 − α t − s m*\sqrt{\alpha_t} + k = \sqrt{\alpha_{t-s}} \\ m^2 * (1-\alpha_t) + \sigma_t^2 = {1-\alpha_{t-s}} mαt +k=αts m2(1αt)+σt2=1αts
我们联立就可以解得:
m = 1 − α t − s − σ 2 1 − α t k = α t − s − 1 − α t − s − σ 2 1 − α t α t m = \frac{\sqrt{1-\alpha_{t-s}-\sigma^2}}{\sqrt{1-\alpha_t}}\\ k = \sqrt{\alpha_{t-s}} - \frac{\sqrt{1-\alpha_{t-s}-\sigma^2}}{\sqrt{1-\alpha_t}} \sqrt{\alpha_{t}} m=1αt 1αtsσ2 k=αts 1αt 1αtsσ2 αt
现在得到了 m m m k k k我们的工作其实已经完成了,证明了 q ( x t − s ∣ x t , x 0 ) q(x_{t-s}|x_t, x_0) q(xtsxt,x0)是一个 μ \mu μ是关于 x t x_t xt x 0 x_0 x0的线性函数的高斯分布,并且还求得了这个分布的 μ \mu μ σ \sigma σ,下面只需要将它们带入,得到 x t − s x_{t-s} xts的表达式就可以了。

m m m k k k带入 q ( x t − s ∣ x t , x 0 ) = N ( μ ( x t , x 0 ) , σ t 2 I ) q(x_{t-s}|x_t, x_0)=N(\mu(x_t,x_0),\sigma_t^2I) q(xtsxt,x0)=N(μ(xt,x0),σt2I)也就可以得到:
q ( x t − s ∣ x t , x 0 ) ∼ N ( ( α t − s − 1 − α t − s − σ 2 1 − α t α t ) ∗ x 0 + ( 1 − α t − s − σ 2 1 − α t ) ∗ x t , σ t 2 I ) q(x_{t-s}|x_t, x_0) \sim N((\sqrt{\alpha_{t-s}} - \frac{\sqrt{1-\alpha_{t-s}-\sigma^2}}{\sqrt{1-\alpha_t}} \sqrt{\alpha_{t}})*x_0 + (\frac{\sqrt{1-\alpha_{t-s}-\sigma^2}}{\sqrt{1-\alpha_t}})*x_t,\sigma_t^2I) q(xtsxt,x0)N((αts 1αt 1αtsσ2 αt )x0+(1αt 1αtsσ2 )xt,σt2I)
展开,整理一下得到:
q ( x t − s ∣ x t , x 0 ) ∼ N ( α t − s ∗ x 0 + 1 − α t − s − σ t 2 x t − α t x 0 1 − α t , σ t 2 I ) q(x_{t-s}|x_t, x_0) \sim N(\sqrt{\alpha_{t-s}} *x_0 + \sqrt{1-\alpha_{t-s}-\sigma_t^2} \frac{x_t-\sqrt{\alpha_t}x_0}{\sqrt{1-\alpha_t}},\sigma_t^2I) q(xtsxt,x0)N(αts x0+1αtsσt2 1αt xtαt x0,σt2I)
这也就是最终求得的 q ( x t − s ∣ x t , x 0 ) q(x_{t-s}|x_t, x_0) q(xtsxt,x0)在没有经过马尔可夫链的情况下,得到的关于 x t x_t xt x 0 x_0 x0的表达式。

将它写成重参数采样的形式:
x t − s = α t − s ∗ x 0 + 1 − α t − s − σ t 2 x t − α t x 0 1 − α t + σ t ε ⋯ ⋯ ( 5 ) x_{t-s} = \sqrt{\alpha_{t-s}} *x_0 + \sqrt{1-\alpha_{t-s}-\sigma_t^2} \frac{x_t-\sqrt{\alpha_t}x_0}{\sqrt{1-\alpha_t}} + \sigma_t \varepsilon \cdots \cdots (5) xts=αts x0+1αtsσt2 1αt xtαt x0+σtε⋯⋯(5)
我们还可以继续,像DDPM一样,将由 ( 1 ) (1) (1)得到的关于 x 0 x_0 x0 ε t \varepsilon_t εt关系式:
x 0 = x t − 1 − α t ε t α t ε t = x t − α t x 0 1 − α t x_0 = \frac{x_t - \sqrt{1-\alpha_t}\varepsilon_t}{\sqrt{\alpha_t}} \\ \varepsilon_t = \frac{x_t - \sqrt{\alpha_t}x_0}{\sqrt{1-\alpha_t}} x0=αt xt1αt εtεt=1αt xtαt x0
代入 ( 5 ) (5) (5)式,得到:
x t − s = α t − s ∗ x t − 1 − α t ε t α t + 1 − α t − s − σ t 2 ε t + σ t ε x_{t-s} = \sqrt{\alpha_{t-s}} *\frac{x_t - \sqrt{1-\alpha_t}\varepsilon_t}{\sqrt{\alpha_t}} + \sqrt{1-\alpha_{t-s}-\sigma_t^2} \varepsilon_t + \sigma_t \varepsilon xts=αts αt xt1αt εt+1αtsσt2 εt+σtε
大功告成!这样我们就可以得到一个只用 x t x_t xt ε t \varepsilon_t εt σ t \sigma_t σt来表示的 x t − s x_{t-s} xts

和DDPM一样,在推理过程中,我们用训练好的noise preditor预测得到 ε t \varepsilon_t εt至于noise preditor的训练过程我们可以完全沿用DDPM的流程,甚至直接复用DDPM训练好的noise preditor。 σ t \sigma_t σt是一个参数,我们可以随意设置。而 s s s可以取1到t的所有整数值,所以就可以 x t x_t xt跳步求得 s s s步之前的结果了。



到此为止,DDIM的推理部分就已经讲完了,我们来对比一下DDPM和DDIM中 x t − 1 x_{t-1} xt1的公式:
D D P M : x t − 1 = 1 α t ( x t − ( 1 − α t ) ( 1 − α ˉ t ) ε t ) + β t ∗ 1 − α ˉ t − 1 1 − α ˉ t ∗ ε D D I M : x t − 1 = α t − 1 ∗ x t − 1 − α t ε t α t + 1 − α t − s − σ t 2 ε t + σ t ε DDPM:x_{t-1} = \frac{1}{\sqrt{\alpha_t}}(x_t- \frac{(1-\alpha_t)}{\sqrt{(1-\bar{\alpha}_t)}}\varepsilon_{t}) + \beta_t * \frac{1-\bar{\alpha}_{t-1}}{1-\bar{\alpha}_t} * \varepsilon \\ DDIM:x_{t-1} = \sqrt{\alpha_{t-1}} *\frac{x_t - \sqrt{1-\alpha_t}\varepsilon_t}{\sqrt{\alpha_t}} + \sqrt{1-\alpha_{t-s}-\sigma_t^2} \varepsilon_t + \sigma_t \varepsilon DDPM:xt1=αt 1(xt(1αˉt) (1αt)εt)+βt1αˉt1αˉt1εDDIM:xt1=αt1 αt xt1αt εt+1αtsσt2 εt+σtε
我们发现这两个公式长得不能说完全不一样,但确实是没多少相似的地方,所以DDIM其实是找到了一条新的可以从 x t x_t xt反推回 x t − 1 x_{t-1} xt1甚至是 x t − s x_{t-s} xts的路径,找到了反向去噪过程一个新的解

那这个新的解,会不会有一些DDPM没有的特点呢?

让随机性消失

回看两个公式的对比,我们可以看到一个特点,DDIM的 ε \varepsilon ε前面的系数明显更加简洁,而且它正好是我们之前说可以随机设置的参数 σ t \sigma_t σt。可以随意设置,那我们不妨让 σ t = 0 \sigma_t=0 σt=0,于是见证奇迹的时刻
x t − 1 = α t − 1 ∗ x t − 1 − α t ε t α t + 1 − α t − s ε t x_{t-1} = \sqrt{\alpha_{t-1}} *\frac{x_t - \sqrt{1-\alpha_t}\varepsilon_t}{\sqrt{\alpha_t}} + \sqrt{1-\alpha_{t-s}} \varepsilon_t xt1=αt1 αt xt1αt εt+1αts εt
ε \varepsilon ε消失了!

于是有读者现在就说了:这有什么的?那 σ t \sigma_t σt ε \varepsilon ε前面的系数啊,你让它为0,那 ε \varepsilon ε自然会消失啊,这不是很正常嘛?

慢着,它的消失可能在你的意料之中,但是 ε \varepsilon ε的消失的意义可能在你的意料之外 ε \varepsilon ε在DDPM中其实代表了每一次降噪过程,都需要在标准高斯分布中采集一个样本,DDPM采样1000次的那个”采样“二字,就是这么来的。这每一次采样,都给DDPM带来了随机性(因为你不知道采集的样本是什么样的),但是如果DDIM每一次反向降噪都不随机采样了呢?没错,那随机性就消失了。于是,神奇的事情发生了,DDIM的反向降噪成为了一个确定性的过程!

确定性采样:当描述DDIM的整体生成流程时,当设置 σ t = 0 \sigma_t=0 σt=0时虽然不具有随机性,但是仍可称为“采样”。因为“采样”一词已被广泛用于描述从噪声到数据的生成过程。对 σ t = 0 \sigma_t=0 σt=0时DDIM的采样过程,更严谨的表述是“确定性采样”,以区别于DDPM的随机性采样。

什么意思,就是只要给DDIM提供一个初始的标准高斯噪声 x t x_t xt,再提供一个预测出来的高斯噪声 ε t \varepsilon_t εt它就一定对应一个确定的 x 0 x_0 x0。这是因为在整个生成过程中,没有加入任何其他随机量。但DDPM不是这样的,你提供的 x t x_t xt ε t \varepsilon_t εt一样,每一次降噪由于都加入了从标准高斯分布中采样的 ε \varepsilon ε,DDPM生成的结果都是随机的。

这就会出现两个情况,第一,DDIM无论进行多少次降噪,结果都是相同的,如下图:
image-20250409211341501

可以看到,在采样10次和100次的情况下,DDIM都对应了同一个结果(但是清晰度会不同,这个我们下一节再聊)。那么我们就可以利用DDIM这一个特性,在生成的时候先使用低采样步数看看是不是我们想要的结果,相当于预览,如果是,再用更多的采样步数得到更精细的结果。

第二,我们可以对 x t x_t xt进行插值,得到两个 x t x_t xt不同比例下的融合结果,如下图:

image-20250409212433740

可以看到,中间的图片的样子是左右两幅图片不同程度的叠加。这并不是直接进行的叠加,而是在生成之前,将左右两幅图此前对应的高斯噪声 x t x_t xt按照比例进行融合,由于生成过程是确定性的,相当于每个 x t x_t xt都对应了一个确定的 x 0 x_0 x0(因为训练好的网络对于每个 x t x_t xt所预测的 ε t \varepsilon_t εt也是一样的),所以生成的 x 0 x_0 x0也是融合的。


跳步的问题

那讲了这么多,DDIM的跳步就是十全十美的吗?DDIM的T=10就是比T=1000全方位多快好省么?那也不是的,采样步数也是一分钱一分货,越多越准确的。其实读者也已经发现了,在上一节展示的图片中,10次采样的结果是不如100次采样的结果的。这是为什么呢?

想一想,DDIM在整个推导过程中,有没有什么漏洞?其实是有的,就是首先假设了 q ( x t − s ∣ x t , x 0 ) q(x_{t-s}|x_t, x_0) q(xtsxt,x0)符合高斯分布。在本文的第一章《DDPM为什么要采样很多次》中,就已经写到,当采样次数少,使得不满足“当 β \beta β变化速率比较小”这个条件时,反向过程就无法保证为高斯分布。所以当T=100的时候,DDIM的反向过程的概率分布还可以近似为高斯分布,但是让T=10的时候,反向过程与高斯分布实在是难以近似,所以生成的图像也就会模糊了。


结语

DDIM模型通过新的思路提供了反向生成过程的解,打破了DDPM中马尔可夫链的束缚。

它可以在跳步生成的同时保持生成质量,解决了DDPM模型多步生成速度较慢的问题,同时还带来了确定性采样这一个可以被利用的特点。

DDIM的提出标志着扩散模型从“理论验证阶段”迈入“高效实用阶段”,为后续研究(如Stable Diffusion等大规模生成模型)奠定了效率基础。其核心思想——通过重新设计生成路径实现加速——已成为扩散模型优化的重要范式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值