目录
0 前言
上一篇博文我们介绍了目前流行的扩散模型基石DDPM
,并且给出了代码讲解,有不了解的小伙伴可以跳转到前面先学习一下。今天我们再来介绍下DDPM
的改进版本。DDPM
虽然对生成任务带来了新得启发,但是他有一个致命的缺点,就是推理速度比较慢,这就导致实际工业应用中很难落地。为了解决这个问题,斯坦福大学提出了他的改进版本,实际上也不算是新的模型,只是一个新的采样方式,加快了模型的推理速度,就是我们今天要介绍的Denoising Diffusion Implicit Models(DDIM),目前流行的一些采样模型,如stable diffusion
,midjourney
等都是基于DDIM的采样方式。下面给出DDIM
的论文和项目地址,官方版的代码是TensorFlow
版本的:
前面讲的DDPM
是一个马尔科夫的过程,而DDIM
是通过去马尔科夫化,但是又和DDPM
有一个同样的训练目标,也就是说如果你已经有一个训练好的DDPM
模型了,你就可以通过DDIM
的这种采样方式来加速已经训练好的DDPM
的采样,所以说DDIM
更像是提出了一个新的采样方式,因为他的训练过程跟DDPM
是一样的,只不过DDIM
改进了采样过程。但是DDIM
的这种采样方式也有一些缺点,虽然加快了模型的推理速度,但是由于DDIM
的整个生成过程是确定性的(deterministic
)过程,这就导致了DDIM
的多样性相比于DDPM
比较差(鱼和熊掌不可兼得)。
这里留两个问题,各位小伙伴们思考一下:
- DDPM既然采样慢是因为T太大了,能不能把T调小?
- 采样慢的第二个原因是必须逐步采样,能不能直接跳着采样?
1 DDIM
之前我们推导DDPM的时候都是基于马尔科夫的性质,即整个采样是按照下面的公式进行的:
p
(
x
t
−
1
∣
x
t
,
x
0
)
∼
M
a
r
k
o
v
(1)
p(x_{t-1}|x_t,x_0) \sim Markov \tag{1}
p(xt−1∣xt,x0)∼Markov(1)
也就是说上面这个采样只能一步一步来,服从马尔科夫性质的,那么我们能不能找到一个不符合马尔科夫的采样公式,像下面这样的:
p
(
x
s
∣
x
k
,
x
0
)
∼
N
o
n
−
M
a
r
k
o
v
,
s
<
k
−
1
(2)
p(x_{s}|x_k,x_0) \sim Non-Markov ,s<k-1 \tag{2}
p(xs∣xk,x0)∼Non−Markov,s<k−1(2)
根据贝叶斯公式,我们可以得出下面的公式:
p
(
x
s
∣
x
k
,
x
0
)
=
p
(
x
k
∣
x
s
,
x
0
)
p
(
x
s
∣
x
0
)
p
(
x
k
∣
x
0
)
(3)
p(x_{s}|x_k,x_0) = \frac{p(x_k|x_s,x_0)p(x_s|x_0)}{p(x_k|x_0)} \tag{3}
p(xs∣xk,x0)=p(xk∣x0)p(xk∣xs,x0)p(xs∣x0)(3)
在DDPM中,根据马尔科夫性质,上面式子中的,
p
(
x
k
∣
x
s
,
x
0
)
,
p
(
x
s
∣
x
0
)
,
p
(
x
k
∣
x
0
)
p(x_k|x_s,x_0),p(x_s|x_0),p(x_k|x_0)
p(xk∣xs,x0),p(xs∣x0),p(xk∣x0)都是已知的。但是,如果此时采样不满足马尔科夫性质了,上面三个概率分布不就都不知道了吗,这时候该怎么办?
回想一下DDPM的训练过程,我们通过
x
0
x_0
x0可以一步生成
x
t
x_t
xt,即满足
p
(
x
t
∣
x
0
)
p(x_t|x_0)
p(xt∣x0),也就是说上面两个式子只有一个是未知的,即
p
(
x
k
∣
x
s
,
x
0
)
p(x_k|x_s,x_0)
p(xk∣xs,x0),这也就回答了我们为什么在前言里面说DDIM实际上是一个采样方法,他的训练也是DDPM。那么还剩下的一项怎么解决?这一项在DDPM 中对应的是
p
(
x
t
∣
x
t
−
1
)
p(x_t|x_{t-1})
p(xt∣xt−1),这一项在训练中根本没用到,训练的时候直接根据
p
(
x
t
∣
x
0
)
p(x_t|x_0)
p(xt∣x0)来加噪,既然这一项没用到,说明他不重要,我们就先不管,那接下来应该怎么办?于是大牛们就开始想办法了,想着如果不知道
p
(
x
k
∣
x
s
,
x
0
)
p(x_k|x_s,x_0)
p(xk∣xs,x0),就没办法计算
p
(
x
s
∣
x
k
,
x
0
)
p(x_{s}|x_k,x_0)
p(xs∣xk,x0),那如果自己假设一个
p
(
x
s
∣
x
k
,
x
0
)
p(x_{s}|x_k,x_0)
p(xs∣xk,x0)分布,这个假设的分布需要满足一定的条件,即
x
T
=
α
T
ˉ
x
0
+
1
−
α
T
ˉ
ε
x_T=\sqrt{\bar{\alpha_T}}x_0+\sqrt{1-\bar{\alpha_T}}\varepsilon
xT=αTˉ
x0+1−αTˉ
ε这个条件仍然是成立的,因为在前向训练的时候用的就是这个公式,你假设一个概率分布总不能违反之前的训练约束对吧。这样的话,问题就变得简单多了。 假设
p
(
x
s
∣
x
k
,
x
0
)
p(x_{s}|x_k,x_0)
p(xs∣xk,x0)的分布如下,直接假设为正态分布:
p
(
x
s
∣
x
k
,
x
0
)
∼
N
(
k
x
0
+
m
x
k
,
σ
2
I
)
(4)
p(x_{s}|x_k,x_0) \sim N(kx_0+mx_k,\sigma^2I) \tag{4}
p(xs∣xk,x0)∼N(kx0+mxk,σ2I)(4)
上面的分布有三个未知数,我们现在要做的就是求出他们,根据参数化技术,采样一个
x
t
−
1
x_{t-1}
xt−1:
x
s
=
k
x
0
+
m
x
k
+
σ
ε
(5)
x_{s}=kx_0+mx_k+\sigma\varepsilon \tag{5}
xs=kx0+mxk+σε(5)
我们刚才说了,该式子是满足
x
t
=
α
t
ˉ
x
0
+
1
−
α
t
ˉ
ε
′
x_t=\sqrt{\bar{\alpha_t}}x_0+\sqrt{1-\bar{\alpha_t}}\varepsilon^{\prime}
xt=αtˉ
x0+1−αtˉ
ε′的,带入求解,可以得出:
x
s
=
k
x
0
+
m
(
α
k
ˉ
x
0
+
1
−
α
k
ˉ
ε
′
)
+
σ
ε
(6)
x_s=kx_0+m(\sqrt{\bar{\alpha_k}}x_0+\sqrt{1-\bar{\alpha_k}}\varepsilon^{\prime})+\sigma\varepsilon \tag{6}
xs=kx0+m(αkˉ
x0+1−αkˉ
ε′)+σε(6)
合并同类项,有
x
s
=
(
k
+
m
α
ˉ
k
)
x
0
+
(
m
1
−
α
ˉ
k
)
ϵ
′
+
σ
ϵ
(7)
x_s=\left(k+m \sqrt{\bar{\alpha}_k}\right) x_0+\left(m \sqrt{1-\bar{\alpha}_k}\right) \epsilon^{\prime}+\sigma \epsilon \tag{7}
xs=(k+mαˉk
)x0+(m1−αˉk
)ϵ′+σϵ(7)
由于
ϵ
,
ϵ
′
\epsilon, \epsilon^{\prime}
ϵ,ϵ′ 都服从标准正态分布,因此两者可合并为同一个正态分布且服从
N
(
0
,
m
2
(
1
−
α
ˉ
k
)
+
σ
2
)
N\left(0, m^2\left(1-\bar{\alpha}_k\right)+\sigma^2\right)
N(0,m2(1−αˉk)+σ2) 。于是上面的式可改写成
x
s
=
(
k
+
m
α
ˉ
k
)
x
0
+
m
2
(
1
−
α
ˉ
k
)
+
σ
2
ϵ
(8)
x_s=\left(k+m \sqrt{\bar{\alpha}_k}\right) x_0+\sqrt{m^2\left(1-\bar{\alpha}_k\right)+\sigma^2} \epsilon \tag{8}
xs=(k+mαˉk
)x0+m2(1−αˉk)+σ2
ϵ(8)
接下来,我们来求解
k
,
m
k, m
k,m ,因为我们必须要满足式
x
t
=
α
t
ˉ
x
0
+
1
−
α
t
ˉ
ε
′
x_t=\sqrt{\bar{\alpha_t}}x_0+\sqrt{1-\bar{\alpha_t}}\varepsilon^{\prime}
xt=αtˉ
x0+1−αtˉ
ε′,因此我们要满足
k
+
m
α
ˉ
k
=
α
ˉ
s
和
m
2
(
1
−
α
ˉ
k
)
+
σ
2
=
1
−
α
ˉ
s
(9)
k+m \sqrt{\bar{\alpha}_k}=\sqrt{\bar{\alpha}_{s}} \text { 和 } m^2\left(1-\bar{\alpha}_k\right)+\sigma^2=1-\bar{\alpha}_{s} \tag{9}
k+mαˉk
=αˉs
和 m2(1−αˉk)+σ2=1−αˉs(9)
通过初等运算,我们可以轻松得出
m
=
1
−
α
ˉ
s
−
σ
2
1
−
α
ˉ
k
和
k
=
α
ˉ
s
−
1
−
α
ˉ
s
−
σ
2
α
ˉ
k
1
−
α
ˉ
k
(10)
m=\frac{\sqrt{1-\bar{\alpha}_{s}-\sigma^2}}{\sqrt{1-\bar{\alpha}_k}} \text { 和 } k=\sqrt{\bar{\alpha}_{s}}-\sqrt{1-\bar{\alpha}_{s}-\sigma^2} \frac{\sqrt{\bar{\alpha}_k}}{\sqrt{1-\bar{\alpha}_k}} \tag{10}
m=1−αˉk
1−αˉs−σ2
和 k=αˉs
−1−αˉs−σ2
1−αˉk
αˉk
(10)
最终,我们可以得到我们新的
p
(
x
s
∣
x
k
,
x
0
)
p(x_{s}|x_k,x_0)
p(xs∣xk,x0)分布,即
p
(
x
s
∣
x
k
,
x
0
)
=
N
(
α
ˉ
s
x
0
+
1
−
α
ˉ
s
−
σ
2
x
k
−
α
ˉ
k
x
0
1
−
α
ˉ
k
,
σ
2
I
)
(11)
p(x_{s}|x_k,x_0)=N\left(\sqrt{\bar{\alpha}_{s}} x_0+\sqrt{1-\bar{\alpha}_{s}-\sigma^2} \frac{x_k-\sqrt{\bar{\alpha}_k} x_0}{\sqrt{1-\bar{\alpha}_k}}, \sigma^2 I\right) \tag{11}
p(xs∣xk,x0)=N(αˉs
x0+1−αˉs−σ2
1−αˉk
xk−αˉk
x0,σ2I)(11)
这就是得到的新的反向生成分布,也就是要去拟合的 “终极目标”。
到这里,不知道给位小伙伴们有没有什么疑问,我们假设的DDIM方法,实际上对应的前向加噪过程已经变了,为什么还能用呢?核心就是因为模型在训练的时候没有用到每一步的训练方式,直接一步到位,也就是说即使之前跟的等式
p
(
x
k
∣
x
s
,
x
0
)
p(x_k|x_s,x_0)
p(xk∣xs,x0)已经发生了变化,但是
p
(
x
t
∣
x
0
)
p(x_t|x_0)
p(xt∣x0)没有变化,模型仍然是能用的,即可以使用DDIM这种方式加速。不得不佩服大牛们是真的厉害。
有了上面的概率分布,我们就可以采样了:
x
s
=
α
ˉ
s
x
0
+
1
−
α
ˉ
s
−
σ
2
x
k
−
α
ˉ
k
x
0
1
−
α
ˉ
k
+
σ
2
ε
(12)
x_s=\sqrt{\bar{\alpha}_{s}} x_0+\sqrt{1-\bar{\alpha}_{s}-\sigma^2} \frac{x_k-\sqrt{\bar{\alpha}_k} x_0}{\sqrt{1-\bar{\alpha}_k}}+ \sigma^2\varepsilon \tag{12}
xs=αˉs
x0+1−αˉs−σ2
1−αˉk
xk−αˉk
x0+σ2ε(12)
其中,上面的式子严格满足
s
<
k
s<k
s<k 。于是,我们就可以从时间序列
{
0
,
.
.
.
,
T
}
\{0,...,T\}
{0,...,T}中随机取一个长度为
l
l
l的升序子序列,通过上面的式子迭代采样
l
l
l次最终得到我们想要的
x
0
x_0
x0。但是,还有一个问题,上面的式子还有一个未知量
σ
2
\sigma^2
σ2怎么办?我们可以想到两种最简单的值,一个就是直接让他等于0,这时候就变成了确定性的过程了,就变成了固定的生成过程了。第二种取值可以直接参考DDPM的取值,即
σ
=
η
1
−
α
t
−
1
ˉ
1
−
α
t
ˉ
β
t
,
η
∈
[
0
,
1
]
\sigma=\eta\sqrt{\frac{1-\bar{\alpha_{t-1}}}{1-\bar{\alpha_t}}\beta_t},\eta \in [0,1]
σ=η1−αtˉ1−αt−1ˉβt
,η∈[0,1],论文中提到,如果令
σ
=
1
−
α
t
−
1
ˉ
1
−
α
t
ˉ
β
t
\sigma=\sqrt{\frac{1-\bar{\alpha_{t-1}}}{1-\bar{\alpha_t}}\beta_t}
σ=1−αtˉ1−αt−1ˉβt
,也就是
η
=
1
\eta=1
η=1,这个过程就变成了马尔科夫的过程了,有兴趣的可以自己证明一下,即证明上面的采样公式的均值和DDPM的均值一样即可(注意脚标换一下:
k
,
s
=
t
,
t
−
1
k,s=t,t-1
k,s=t,t−1)。当
η
=
0
\eta=0
η=0时,就是DDIM,所以说DDIM仅仅是一个采样方式,而当
η
=
0
\eta=0
η=0 时,由于式(11)中唯一具有随机性的
σ
ϵ
\sigma\epsilon
σϵ此时亦为0,因此采样过程不再具有随机性,每个
x
T
x_T
xT对应了确定的(deterministic)
x
0
x_0
x0.
作者在文章中指出,当步数
l
l
l很小时,
η
=
0
\eta=0
η=0效果最好,并且当
η
=
0
\eta=0
η=0时,20步的生成结果与100步的生成结果一致性很强,这是显然的,因为此时模型变为了确定性模型(deterministic),但是这里面值得关注的是,由于当
η
=
0
\eta=0
η=0时,每个
x
T
x_T
xT对应唯一的KaTeX parse error: Expected group after '_' at position 3: x0_̲,这有点类似GAN和VAE,那我们可以认为此时的
x
T
x_T
xT就是一个high-level
的图像编码向量,里面可能蕴涵了大量的信息特征,也许可以用于其他下游任务。最后,作者论述了当
η
=
0
\eta=0
η=0时,式(12)可以写成常微分方程的形式,因此可以理解为模型是在用欧拉法近似从
x
0
x_0
x0到
x
T
x_T
xT的编码函数。
2 总结
我们来总结一下,顺便回答一下上面提出的两个问题。DDPM是根据马尔科夫链建立起来的前向过程-逆向过程,所以他不能通过“跳步”实现图像生成;为了满足
x
T
∼
N
(
0
,
1
)
x_T \sim N(0,1)
xT∼N(0,1),所以
T
T
T不能太小,这就导致了采样速度比较慢。
DDIM通过自己设计的优化了目标
p
(
x
t
−
1
∣
x
t
,
x
0
)
p(x_{t-1}|x_t,x_0)
p(xt−1∣xt,x0),取消了马尔科夫的限制,在不影响DDPM的边界分布(
x
t
=
α
t
ˉ
x
0
+
1
−
α
t
ˉ
ε
x_t=\sqrt{\bar{\alpha_t}}x_0+\sqrt{1-\bar{\alpha_t}}\varepsilon
xt=αtˉ
x0+1−αtˉ
ε)的条件下极大的缩短了采样的步数。所以,训练好的DDPM可以直接拿来通过DDIM的采样方法进行采样,不需要再去训练一次。