这篇文章将带你从本质上理解DDPM的原理,从更高维度上弄清楚DDPM和DDIM的关系以及为什么DDIM可以加速而DDPM却不行
DDPM的总结
前向过程中,原始图像 x 0 x_0 x0被逐步加噪,最终会近似于一个标准正态分布,反向过程则尝试去模拟前向过程的逆过程,通过一步步去噪,将一个随机在标准正态分布上采样的 x T x_T xT转变为真实图像 x 0 x_0 x0
前向过程被设计成高斯马尔可夫过程,
x
t
x_t
xt的概率分布只与
x
t
−
1
x_{t-1}
xt−1有关,且这一概率分布为高斯分布,用公式描述即:
{
q
(
x
1
:
T
∣
x
0
)
:
=
∏
t
=
1
T
q
(
x
t
∣
x
t
−
1
)
q
(
x
t
∣
x
t
−
1
)
:
=
N
(
x
t
;
1
−
β
t
x
t
−
1
,
β
t
I
)
)
\left\{ \begin{array}{ll} q(x_{1:T}|x_0):= \prod_{t=1}^{T}q(x_t|x_{t-1}) \\ q(x_t|x_{t-1}):=N(x_t;\sqrt{1-\beta_t}x_{t-1},\beta_{t}I)) \end{array} \right.
{q(x1:T∣x0):=∏t=1Tq(xt∣xt−1)q(xt∣xt−1):=N(xt;1−βtxt−1,βtI))
反向过程(模型预测的过程)也是高斯马尔可夫过程,公式描述为:
{
p
θ
(
x
0
:
T
)
:
=
p
(
x
T
)
∏
t
=
1
T
p
θ
(
x
t
−
1
∣
x
t
)
p
θ
(
x
t
−
1
∣
x
t
)
:
=
N
(
x
t
−
1
;
μ
θ
(
x
t
,
t
)
,
Σ
θ
(
x
t
,
t
)
)
)
\left\{ \begin{array}{ll} p_{\theta}(x_{0:T}):=p(x_T) \prod_{t=1}^{T}p_{\theta}(x_{t-1}|x_t) \\ p_{\theta}(x_{t-1}|x_t):=N(x_{t-1};\mu_{\theta}(x_t,t),\Sigma_{\theta}(x_t,t))) \end{array} \right.
{pθ(x0:T):=p(xT)∏t=1Tpθ(xt−1∣xt)pθ(xt−1∣xt):=N(xt−1;μθ(xt,t),Σθ(xt,t)))
为了最大化似然函数,作者通过琴生不等式将其转化为最小化 L (ELBO)
−
log
p
θ
(
x
0
)
≤
E
q
[
−
log
p
θ
(
x
0
:
T
)
q
(
x
1
:
T
∣
x
0
)
]
=
E
q
[
−
log
p
(
x
T
)
−
∑
t
≥
1
log
p
θ
(
x
t
−
1
∣
x
t
)
q
(
x
t
∣
x
t
−
1
)
]
=
:
L
- \log p_\theta(x_0) \leq \mathbb{E}_q \left[ - \log \frac{p_\theta(x_{0:T})}{q(x_{1:T} | x_0)} \right] = \mathbb{E}_q \left[ - \log p(x_T) - \sum_{t \geq 1} \log \frac{p_\theta(x_{t-1} | x_t)}{q(x_t | x_{t-1})} \right] =: L
−logpθ(x0)≤Eq[−logq(x1:T∣x0)pθ(x0:T)]=Eq[−logp(xT)−t≥1∑logq(xt∣xt−1)pθ(xt−1∣xt)]=:L
通过数学变化,L可以写为这种形式:
L
=
E
q
[
D
K
L
(
q
(
x
T
∣
x
0
)
∥
p
(
x
T
)
)
+
∑
t
>
1
D
K
L
(
q
(
x
t
−
1
∣
x
t
,
x
0
)
∥
p
θ
(
x
t
−
1
∣
x
t
)
)
−
log
p
θ
(
x
0
∣
x
1
)
]
L = E_q[ D_{KL}(q(x_T | x_0) \parallel p(x_T)) + \sum_{t > 1} D_{KL}(q(x_{t-1} | x_t, x_0) \parallel p_\theta(x_{t-1} | x_t)) - \log p_\theta(x_0 | x_1)]
L=Eq[DKL(q(xT∣x0)∥p(xT))+t>1∑DKL(q(xt−1∣xt,x0)∥pθ(xt−1∣xt))−logpθ(x0∣x1)]
这意味着最小化似然函数等价于使真实的后验分布
q
(
x
t
−
1
∣
x
t
,
x
0
)
q(x_{t-1} | x_t, x_0)
q(xt−1∣xt,x0)和模型预测的分布
p
θ
(
x
t
−
1
∣
x
t
)
p_\theta(x_{t-1} | x_t)
pθ(xt−1∣xt)尽可能相似
前期工作已经证明,直接去拟合后验分布还是太难了
但是我们有:
q
(
x
t
−
1
∣
x
t
,
x
0
)
=
q
(
x
t
∣
x
t
−
1
,
x
0
)
q
(
x
t
−
1
∣
x
0
)
q
(
x
t
∣
x
0
)
=
q
(
x
t
∣
x
t
−
1
)
q
(
x
t
−
1
∣
x
0
)
q
(
x
t
∣
x
0
)
q(x_{t-1}|x_t,x_0)=\frac{q(x_t|x_{t-1},x_0)q(x_{t-1}|x_0)}{q(x_t|x_0)}=\frac{q(x_t|x_{t-1})q(x_{t-1}|x_0)}{q(x_t|x_0)}
q(xt−1∣xt,x0)=q(xt∣x0)q(xt∣xt−1,x0)q(xt−1∣x0)=q(xt∣x0)q(xt∣xt−1)q(xt−1∣x0)
我们可以得出,后验分布同样是一个高斯分布
q
(
x
t
−
1
∣
x
t
,
x
0
)
=
N
(
x
t
−
1
;
μ
~
t
(
x
t
,
x
0
)
,
β
~
t
I
)
w
h
e
r
e
μ
~
t
(
x
t
,
x
0
)
:
=
α
ˉ
t
−
1
β
t
1
−
α
ˉ
t
x
0
+
α
t
(
1
−
α
ˉ
t
−
1
)
1
−
α
ˉ
t
x
t
;
β
~
t
:
=
1
−
α
ˉ
t
−
1
1
−
α
ˉ
t
β
t
q(x_{t-1} \mid x_t, x_0) = \mathcal{N} \left( x_{t-1}; \tilde{\mu}_t (x_t, x_0), \tilde{\beta}_t I \right)\\ where\ \ \tilde{\mu}_t (x_t, x_0) := \sqrt{\frac{\bar{\alpha}_{t-1} \beta_t}{1 - \bar{\alpha}_t}} \, x_0 + \sqrt{\frac{\alpha_t (1 - \bar{\alpha}_{t-1})}{1 - \bar{\alpha}_t}} \, x_t;\ \ \tilde{\beta}_t := \frac{1 - \bar{\alpha}_{t-1}}{1 - \bar{\alpha}_t} \, \beta_t
q(xt−1∣xt,x0)=N(xt−1;μ~t(xt,x0),β~tI)where μ~t(xt,x0):=1−αˉtαˉt−1βtx0+1−αˉtαt(1−αˉt−1)xt; β~t:=1−αˉt1−αˉt−1βt
由于方差是一个超参数,设定反向过程的方差和前向过程一样时,可以得到:
D
K
L
(
q
(
x
t
−
1
∣
x
t
,
x
0
)
∥
p
θ
(
x
t
−
1
∣
x
t
)
)
=
1
2
σ
t
2
∥
μ
~
t
(
x
t
,
x
0
)
−
μ
θ
(
x
t
,
t
)
∥
2
+
C
=
β
t
2
2
σ
t
2
α
t
(
1
−
α
ˉ
t
)
∥
ϵ
−
ϵ
θ
(
α
ˉ
t
x
0
+
1
−
α
ˉ
t
ϵ
,
t
)
∥
2
D_{KL}(q(x_{t-1} | x_t, x_0) \parallel p_\theta(x_{t-1} | x_t)) =\frac{1}{2\sigma_t^2} \| \tilde{\mu}_t (x_t, x_0) - \mu_\theta (x_t, t) \|^2+C\\=\frac{\beta_t^2}{2\sigma_t^2 \alpha_t (1 - \bar{\alpha}_t)} \left\| \epsilon - \epsilon_\theta \left( \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon, t \right) \right\|^2
DKL(q(xt−1∣xt,x0)∥pθ(xt−1∣xt))=2σt21∥μ~t(xt,x0)−μθ(xt,t)∥2+C=2σt2αt(1−αˉt)βt2
ϵ−ϵθ(αˉtx0+1−αˉtϵ,t)
2
于是作者得出结论最小化
−
l
o
g
p
θ
(
x
0
)
-log p_{\theta}(x_0)
−logpθ(x0)就等价于最小化:
L
simple
(
θ
)
:
=
E
t
,
x
0
,
ϵ
[
(
ϵ
−
ϵ
θ
(
α
ˉ
t
x
0
+
1
−
α
ˉ
t
ϵ
,
t
)
)
2
]
L_{\text{simple}}(\theta) := \mathbb{E}_{t, x_0, \epsilon} \left[ \left( \epsilon - \epsilon_\theta \left( \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon, t \right) \right)^2 \right]
Lsimple(θ):=Et,x0,ϵ[(ϵ−ϵθ(αˉtx0+1−αˉtϵ,t))2]
据此,作者提出了训练和采样算法
为什么反向过程是高斯-马尔可夫过程
很多博客和视频在遇到这个问题时,解释为因为前向过程是高斯马尔可夫过程,所以反向过程过也肯定是。这里让我迷惑了很久,总觉得这两者似乎没有必然的因果关系
其实阅读论文就可以知道,模型的反向过程是被作者人为定义成这样的。换言之,事实上反向过程是高斯马尔可夫过程这一事件,跟前向过程是什么,没有本质联系。
作者是出于某种考量而将其定义成这样的,搞清楚了这个关系,才能进行接下来的探究
那接下来的问题就是,模型的反向过程为什么要被设计成这样呢
最直接的理由就是,会让模型训练变得简单。
设计成马尔可夫链:
我们的最终目标是最小化 − l o g p ( x 0 ) -log p(x_0) −logp(x0),如果抛弃马尔可夫链这一先验知识,那么 p θ ( x 0 : T ) ≠ p ( x T ) ∏ t = 1 T p θ ( x t − 1 ∣ x t ) p_{\theta}(x_{0:T})\neq p(x_T) \prod_{t=1}^{T}p_{\theta}(x_{t-1}|x_t) pθ(x0:T)=p(xT)∏t=1Tpθ(xt−1∣xt),则公式(3)的推导就不成立,以公式(3)为基础的后续所有推导就都不成立了
设计成高斯分布:
公式(7)的推导的前提条件是, q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1} | x_t, x_0) q(xt−1∣xt,x0)和 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1} | x_t) pθ(xt−1∣xt)都得是高斯分布,这样才能将KL散度的计算转化为对均值差的计算,从而将对分布的拟合转化为更简单的对噪声的拟合
那么这么设计可行吗?我们知道,最终的目标是用模型预测的分布
p
θ
(
x
)
p_{\theta}(x)
pθ(x)去拟合真实分布
q
(
x
)
q(x)
q(x),而不必完全等价于真实分布,就像给你二维平面上一系列点,让你去用函数拟合这些点,你可以用复杂的多项式,指数函数去拟合,当然也可以用简单的y=kx+b来拟合,只要拟合效果好就行,所以也许真实的反向过程有着其他的特殊结构,但是我们将模型的反向过程设置成马尔可夫链也可以去逼近其真实的结构,达到一样的采样效果。而对于设计成高斯分布,作者在原文中说到,a large T allows the reverse process to be close to a Gaussian
,说明高斯分布也是一个很成功的近似手段
模型已经得到预测的噪声,为什么不能一步去噪生成图片
最直接的原因就是,效果不好。我们在训练模型的时候,只是尽可能的让训练目标MSE接近于零,但并不能让其等于零,所以说模型每次的预测都是有一定偏差的。我们可以想象这样一个场景,现在让你去山上的一个小木屋,你此刻很难知道小木屋的确切位置,但你知道山在你的北边,所以你先往北边走,等走到山脚下的时候在给你一次选择的机会,此时你只知道小木屋大概在山顶,于是你只好向山顶继续走,等到了山顶,你又有了一次预测的机会,此时你看到你的左边不远处生气了一缕炊烟,于是你预测小木屋大概在你的左边,等你走到小木屋附近的时候,你已经看到小木屋了,你又有了一次预测的机会,此时你可以准确的预测出小木屋的位置,他就在你的正前方。
虽然实践中做不到一步生成,但只要模型设计足够精巧,模型参数量以指数形式增长,模型理论上还是可以学到从标准正态分布 N ( x ) N(x) N(x)到 q ( x ) q(x) q(x)的一步到位的映射模式的
DDPM不能加速的根本原因在哪里
也就是说我们为什么要一步步采样,可不可以跳步采样
我们需要重新梳理一遍刚刚的过程,我们发现模型自始自终只做了一件事情,那就是拟合 x t x_t xt到 x 0 x_0 x0之间的噪声 ϵ \epsilon ϵ,之后的事情跟模型就没有任何关系了
由于前向过程被定义为高斯马尔可夫,所以我们有
q
(
x
t
∣
x
0
)
=
N
(
x
t
;
α
ˉ
t
x
0
,
(
1
−
α
ˉ
t
)
I
)
x
0
=
x
t
−
1
−
α
ˉ
t
ϵ
α
ˉ
t
q(x_t | x_0) = \mathcal{N} \left( x_t; \sqrt{\bar{\alpha}_t} x_0, (1 - \bar{\alpha}_t) I \right)\\ x_0=\frac{x_t-\sqrt{1- \bar \alpha_t}\epsilon}{\sqrt{\bar \alpha_t}}
q(xt∣x0)=N(xt;αˉtx0,(1−αˉt)I)x0=αˉtxt−1−αˉtϵ
所以我们可以根据公式(9)从
x
t
x_t
xt和
ϵ
\epsilon
ϵ中拟合出近似的
x
ˉ
0
\bar x_0
xˉ0,只要
x
ˉ
0
\bar x_0
xˉ0足够准确,我们有理由相信,以
q
(
x
t
−
1
∣
x
t
,
x
0
)
q(x_{t-1}|x_t,x_0)
q(xt−1∣xt,x0)相同的分布进行采样,即将公式(6)中的
x
0
x_0
x0替换为
x
ˉ
0
\bar x_0
xˉ0后进行采样,这得到的
x
ˉ
t
−
1
\bar x_{t-1}
xˉt−1足够接近
x
t
−
1
x_{t-1}
xt−1
前向过程设置成高斯马尔可夫链,这使得 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt−1∣xt,x0)这个分布很容易得到,但是类似于 q ( x t − 2 ∣ x t , x 0 ) q(x_{t-2}|x_t,x_0) q(xt−2∣xt,x0)这样的跳步的分布,则很难获得。这就意味着,根据 x t x_t xt和 x 0 x_0 x0,我们只能估计 x t − 1 x_{t-1} xt−1的分布,只能对 x t − 1 x_{t-1} xt−1进行采样,所以我们不能跳步,也就不能加速采样
DDIM抛弃马尔可夫链
我们发现,之所以不能跳步,是因为在前向过程是马尔可夫过程的时候, q ( x s ∣ x t , x 0 , s < t − 1 ) q(x_{s}|x_t,x_0,s<t-1) q(xs∣xt,x0,s<t−1)很难获得,那么是否可以找到另一种前向过程,使得 q ( x s ∣ x t , x 0 , s < t − 1 ) q(x_{s}|x_t,x_0,s<t-1) q(xs∣xt,x0,s<t−1)可以被直接计算得到呢?另外,DDPM的效果这么好,这证明他的训练方式确实是有效的,那么我们是否可以让我们找到的分布也契合DDPM的训练方式呢
DDIM的作者通过深入观察DDPM的训练方式,他发现其损失函数只关心 q ( x t ∣ x 0 ) q(x_t|x_0) q(xt∣x0)的分布,而与 x 0 x_0 x0是怎么一步步变为 x t x_t xt的没有关系,所以我们新的前向过程只要满足边缘分布与马尔可夫的边缘分布 q ( x t ∣ x 0 ) q(x_t|x_0) q(xt∣x0)一致就行
DDIM的一大贡献就是抛弃了前向过程中马尔可夫的约束,从更宏观的角度重述了前向过程
DDIM视角下的前向过程和反向过程
作者首先定义了前向过程的联合分布
q
σ
(
x
1
:
T
∣
x
0
)
q_{\sigma}(x_{1:T}|x_0)
qσ(x1:T∣x0)为如下形式
作者推导证明了这样的联合分布的边缘分布
q
(
x
t
∣
x
0
)
q(x_t|x_0)
q(xt∣x0) 是符合预期的,值得注意的是,在证明的过程中,
σ
t
\sigma_t
σt被消去了,也就是说,
σ
t
\sigma_t
σt的不同取值不会影响到边缘分布
我们模型的反向过程依旧设计为高斯马尔可夫过程,作者通过重新推导在这一前向过程下 l o g p θ ( x ) log p_\theta(x) logpθ(x)的ELBO,从另一个角度证明了这一前向过程下的优化目标和马尔可夫过程下的目标是一样的,可以复用DDPM的训练结果
DDIM的采样方式及其与DDPM的关系
我们可以看到,DDIM本身是没有加速效果的,他只是从一个更泛化的角度重新表述采样过程
x
t
−
1
=
α
t
−
1
(
x
t
−
1
−
α
t
ϵ
θ
(
x
t
)
(
t
)
α
t
)
⏟
“predicted
x
0
”
+
1
−
α
t
−
1
−
σ
t
2
ϵ
θ
(
t
)
(
x
t
)
⏟
“direction pointing to
x
t
”
+
σ
t
ϵ
t
⏟
random noise
x_{t-1} = \underbrace{\sqrt{\alpha_{t-1}} \left( \frac{x_t - \sqrt{1 - \alpha_t} \epsilon_\theta(x_t)^{(t)}}{\sqrt{\alpha_t}} \right)}_{\text{“predicted } x_0 \text{”}} + \underbrace{\sqrt{1 - \alpha_{t-1} - \sigma_t^2} \epsilon_\theta^{(t)}(x_t)}_{\text{“direction pointing to } x_t \text{”}} + \underbrace{\sigma_t \epsilon_t}_{\text{random noise}}
xt−1=“predicted x0”
αt−1(αtxt−1−αtϵθ(xt)(t))+“direction pointing to xt”
1−αt−1−σt2ϵθ(t)(xt)+random noise
σtϵt
不同的
σ
t
\sigma_t
σt的取值会导致不同的前向过程和对应的反向过程
当
σ
t
=
1
−
α
t
−
1
1
−
α
t
1
−
α
t
α
t
−
1
\sigma_t=\sqrt{\frac{1 - \alpha_{t-1}}{1 - \alpha_t}} \quad \sqrt{\frac{1 - \alpha_t}{\alpha_{t-1}}}
σt=1−αt1−αt−1αt−11−αt时,前向过程就成为了马尔可夫链,采样过程就是DDPM,
当
σ
t
=
0
\sigma_t=0
σt=0时,作者将其命名为DDIM采样,此时前向过程和反向过程都变成确定性的了,在前向过程中,这意味着给定
x
0
x_0
x0和
x
t
x_t
xt,
x
t
−
1
x_{t-1}
xt−1的分布从高斯分布退化成了
x
t
−
1
=
α
t
−
1
x
0
+
1
−
α
t
−
1
x
t
−
α
t
x
0
1
−
α
t
x_{t-1}=\sqrt{\alpha_{t-1}}x_0+\sqrt{1-\alpha_{t-1}}\frac{x_t-\sqrt{\alpha_{t}}x_0}{\sqrt{1-\alpha_{t}}}
xt−1=αt−1x0+1−αt−11−αtxt−αtx0
加速方式
作者在附录C.1中基于新的前向过程,推导出了跳步采样的公式
q
σ
,
τ
(
x
τ
i
−
1
∣
x
τ
i
,
x
0
)
=
N
(
α
τ
i
−
1
x
0
+
1
−
α
τ
i
−
1
−
σ
τ
i
2
⋅
x
τ
i
−
α
τ
i
x
0
1
−
α
τ
i
,
σ
τ
i
2
I
)
q_{\sigma, \tau} (x_{\tau_i-1} | x_{\tau_i}, x_0) = \mathcal{N} \left( \sqrt{\alpha_{\tau_i-1}} x_0 + \sqrt{1 - \alpha_{\tau_i-1} - \sigma_{\tau_i}^2} \cdot \frac{x_{\tau_i} - \sqrt{\alpha_{\tau_i}} x_0}{\sqrt{1 - \alpha_{\tau_i}}}, \sigma_{\tau_i}^2 \mathbf{I} \right)
qσ,τ(xτi−1∣xτi,x0)=N(ατi−1x0+1−ατi−1−στi2⋅1−ατixτi−ατix0,στi2I)
这里的 x τ i x_{\tau_i} xτi就是从 x t x_t xt序列中跳步提取出来的
一些感想
DDPM和DDIM的关系就像是这样的:你想用电脑完成一个很复杂的计算,但是房间里却停电了,你经过一步步排查和推导,发现是电闸跳了,于是你下去修好了电闸,用你的电脑完成了计算(DDPM);过了不久之后,就有人发现,你修好的是整栋楼的总电闸,这使得整栋楼的每间屋子都有电了,于是他在这些房间中,找到了一台性能更高的电脑,用更快的时间完成了计算(DDIM)
DDIM的论文是值得反复研读的,他不仅提出了前向过程的泛化结构和加速采样过程,也在文章中详尽的讨论了采样过程中的
σ
t
\sigma_t
σt对采样的影响,做了许多对比实验。另外这篇文章论证了,模型的采样过程事实上等价于用Eluer积分法求解下边的常微分方程,这给diffusion提供了更有力的理论支撑
d
x
(
t
)
=
ϵ
(
t
)
θ
(
x
(
t
)
σ
2
+
1
)
d
σ
(
t
)
dx(t) = \epsilon(t)_\theta \left( \frac{x(t)}{\sqrt{\sigma^2 + 1}} \right) d\sigma(t)
dx(t)=ϵ(t)θ(σ2+1x(t))dσ(t)