【深度学习】加速采样生成图像——DDIM原理解析
文章目录1、前言2、DDPM回顾及为何不能跳步采样2.1、回顾2.2、为什么DDPM不能跳步采样?2.3、DDPM的困境3、DDIM3.1、马尔可夫假设3.2、跳步采样构造3.3、DDIM的目标函数3.4、求解目标函数3.4.1、设定逆扩散过程3.4.2、求解KL散度3.5、采样方法3.6、方差的选定4、其他细节5、结束6、参考1、前言在上篇文章,我们已经讲了Diffusion扩散模型原理解析,或
文章目录
1、前言
在上篇文章,我们已经讲了Diffusion扩散模型原理解析,或者说,其实不能把它视作是Diffusion,我所讲的内容,其实只是按照里面的第二篇参考论文来的,第二篇论文是Denoising Diffusion Probabilistic Models (arxiv.org),它缩写为DDPM。而今天我们要讲的,是为了解决DDPM中存在的采样慢的问题。解决这个问题的模型被称为Denoising Diffusion Implicit Models,缩写DDIM。
对本篇内容,我不想按照论文里面的顺序来讲,打算从模型本身入手。我看网上大部分文章都是按照论文里面的顺序来讲,这种讲法问题很大。尤其是到了为何DDIM能够跳步采样那一段,什么由于我们去掉马尔可夫假设,所以可以跳步采样?那我想问一下,难道前向过程就没有马尔可夫假设吗?既然前向过程可以跳步,又何来去噪过程是因为马尔可夫假设而无法跳步呢?解释得实在过于牵强了。
Ps:由于本篇文章可供参考的文章很少(至少我没有在网上发现从这个角度去切入的)。对本篇文章,很多的想法皆是对论文的理解解读,我已经看过不下20遍这篇论文了。在文章中,如你觉得有什么不妥之处,还望提出来,谢谢!
2、DDPM回顾及为何不能跳步采样
2.1、回顾
回忆一下,我们是如何推导出DDPM的。我们来简单概括一下
首先,定义前向过程
q
(
x
t
∣
x
t
−
1
)
q(x_t|x_{t-1})
q(xt∣xt−1)为线性高斯加噪,又定义了马尔可夫链。然后,对数据进行极大似然估计。由于有一个概率分布理论不可解,于是我们只能退而求其次,只能够求极大似然的变分下界。也就是这样
log
P
(
x
0
)
≥
∫
log
P
(
x
0
:
T
)
q
(
x
1
:
T
∣
x
0
)
q
(
x
1
:
T
∣
x
0
)
d
x
1
:
T
\log P(x_0)\ge \int\log \frac{P(x_{0:T})}{q(x_{1:T}|x_0)}q(x_{1:T}|x_0)dx_{1:T}
logP(x0)≥∫logq(x1:T∣x0)P(x0:T)q(x1:T∣x0)dx1:T
x
0
x_0
x0表示图像的初始状态。而不等号右边,就是其变分下界
我们利用马尔可夫性质,对变分下界不断推导变化,最终便得到了目标函数
E
q
(
x
1
∣
x
0
)
[
log
P
(
x
0
∣
x
1
)
]
−
∑
t
=
2
T
E
q
(
x
t
∣
x
0
)
[
K
L
(
q
(
x
t
−
1
∣
x
t
,
x
0
)
∣
∣
P
(
x
t
−
1
∣
x
t
)
)
]
−
K
L
(
q
(
x
T
∣
x
0
)
∣
∣
P
(
x
T
)
)
\mathbb{E}_{q(x_1|x_0)}\left[\log P(x_0|x_1)\right]-\sum\limits_{t=2}^T\mathbb{E}_{q(x_t|x_0)}\left[KL(q(x_{t-1}|x_t,x_0)||P(x_{t-1}|x_t))\right]-KL\left(q(x_T|x_0)||P(x_T)\right)
Eq(x1∣x0)[logP(x0∣x1)]−t=2∑TEq(xt∣x0)[KL(q(xt−1∣xt,x0)∣∣P(xt−1∣xt))]−KL(q(xT∣x0)∣∣P(xT))
后来,我们又发现第三项KL散度是完全可以求出来的。所以不需要神经网络去逼近。而真正需要学习参数的,其实只有第一项和第二项。
我们首先推导第二项的 K L 散度 \boxed{\mathbf{我们首先推导第二项的KL散度}} 我们首先推导第二项的KL散度
我们发现
q
(
x
t
−
1
∣
x
t
,
x
0
)
q(x_{t-1}|x_t,x_0)
q(xt−1∣xt,x0)是可以求解的,其期望跟方差为
q
(
x
t
−
1
∣
x
t
,
x
0
)
∼
N
(
x
t
−
1
∣
a
t
(
1
−
α
ˉ
t
−
1
)
x
t
+
α
ˉ
t
−
1
(
1
−
α
t
)
x
0
1
−
α
ˉ
t
,
1
−
α
ˉ
t
−
1
1
−
α
ˉ
t
β
t
I
)
q(x_{t-1}|x_t,x_0)\sim N(x_{t-1}|\frac{\sqrt{a_t}(1-\bar\alpha_{t-1})x_t+\sqrt{\bar\alpha_{t-1}}(1-\alpha_t)x_0}{1-\bar\alpha_t},\frac{1-\bar\alpha_{t-1}}{1-\bar\alpha_t}\beta_tI)
q(xt−1∣xt,x0)∼N(xt−1∣1−αˉtat(1−αˉt−1)xt+αˉt−1(1−αt)x0,1−αˉt1−αˉt−1βtI)
于是,对
P
(
x
t
−
1
∣
x
t
)
P(x_{t-1}|x_t)
P(xt−1∣xt)的参数,使用神经网络去逼近,让两个概率分布尽可能像。
为了推导的方便,我们首先设 P ( x t − 1 ∣ x t ) ∼ N ( x t − 1 ∣ μ θ , Σ θ ) P(x_{t-1}|x_t)\sim N(x_{t-1}|\mu_{\theta},\Sigma_{\theta}) P(xt−1∣xt)∼N(xt−1∣μθ,Σθ), q ( x t − 1 ∣ x t , x 0 ) ∼ N ( x t − 1 ∣ μ ϕ , Σ ϕ ) q(x_{t-1}|x_{t},x_0)\sim N(x_{t-1}|\mu_\phi,\Sigma_\phi) q(xt−1∣xt,x0)∼N(xt−1∣μϕ,Σϕ)
后面经过推导,得到了第二项KL散度的优化表达式
K
L
(
q
(
x
t
−
1
∣
x
t
,
x
0
)
∣
∣
P
(
x
t
−
1
∣
x
t
)
)
=
1
2
σ
t
2
[
∣
∣
μ
ϕ
−
μ
θ
(
x
t
,
t
)
∣
∣
2
]
(1)
KL(q(x_{t-1}|x_t,x_0)||P(x_{t-1}|x_t))=\frac{1}{2\sigma^2_t}\left[||\mu_\phi-\mu_\theta(x_t,t)||^2\right]\tag{1}
KL(q(xt−1∣xt,x0)∣∣P(xt−1∣xt))=2σt21[∣∣μϕ−μθ(xt,t)∣∣2](1)
其中
σ
t
\sigma_t
σt代表的是P分布的
Σ
θ
\Sigma_\theta
Σθ
后来,我们还分别对他进行了另外两种表达,一种是预测
x
0
x_0
x0
K
L
(
q
(
x
t
−
1
∣
x
t
,
x
0
)
∣
∣
P
(
x
t
−
1
∣
x
t
)
)
=
α
ˉ
t
−
1
β
t
2
2
σ
t
2
(
1
−
α
ˉ
t
)
2
[
∣
∣
x
0
−
f
θ
(
x
t
,
t
)
∣
∣
2
]
(2)
KL(q(x_{t-1}|x_t,x_0)||P(x_{t-1}|x_t))=\frac{\bar\alpha_{t-1}\beta_t^2}{2\sigma^2_t(1-\bar\alpha_t)^2}\left[||x_0-f_\theta(x_t,t)||^2\right]\tag{2}
KL(q(xt−1∣xt,x0)∣∣P(xt−1∣xt))=2σt2(1−αˉt)2αˉt−1βt2[∣∣x0−fθ(xt,t)∣∣2](2)
其中,
f
θ
(
x
t
,
t
)
f_\theta(x_t,t)
fθ(xt,t)由神经网络预测
另一种,是预测噪声
K
L
(
q
(
x
t
−
1
∣
x
t
,
x
0
)
∣
∣
P
(
x
t
−
1
∣
x
t
)
)
=
β
t
2
2
σ
t
2
(
1
−
α
ˉ
t
)
α
t
∣
∣
ϵ
t
−
ϵ
θ
(
x
t
,
t
)
∣
∣
2
(3)
KL(q(x_{t-1}|x_t,x_0)||P(x_{t-1}|x_t))=\frac{\beta_t^2}{2\sigma_t^2(1-\bar\alpha_t)\alpha_t}||\epsilon_t-\epsilon_\theta(x_t,t)||^2\tag{3}
KL(q(xt−1∣xt,x0)∣∣P(xt−1∣xt))=2σt2(1−αˉt)αtβt2∣∣ϵt−ϵθ(xt,t)∣∣2(3)
其中,
ϵ
θ
(
x
t
,
t
)
\epsilon_\theta(x_t,t)
ϵθ(xt,t)由神经网络预测
论文最终以式(3)作为优化目标。而后我们发现,对于式(3)的 β t 2 2 σ t 2 ( 1 − α ˉ t ) α t \frac{\beta_t^2}{2\sigma_t^2(1-\bar\alpha_t)\alpha_t} 2σt2(1−αˉt)αtβt2这一部分,都是我们设定的超参数,并不需要优化,所以最终神经网络的损失函数就可以写成 ∣ ∣ ϵ t − ϵ θ ( x t , t ) ∣ ∣ 2 ||\epsilon_t-\epsilon_\theta(x_t,t)||^2 ∣∣ϵt−ϵθ(xt,t)∣∣2。也就只需要最小化它就可以了
这是第二项 K L 散度的,那么对第一项 \boxed{\mathbf{这是第二项KL散度的,那么对第一项}} 这是第二项KL散度的,那么对第一项
我们也发现,可以正比于得到 ∣ ∣ ϵ t − ϵ θ ( x t , t ) ∣ ∣ 2 ||\epsilon_t-\epsilon_\theta(x_t,t)||^2 ∣∣ϵt−ϵθ(xt,t)∣∣2这个优化目标。作者在模型训练的时候,是每个样本只训练一个时刻t,所以最终训练的方式写成这样(左边为训练,右边为采样)
右边的采样步骤 x t − 1 = 1 α t ( x t − 1 − α t 1 − α ˉ t ϵ θ ( x t , t ) ) + σ t z x_{t-1}=\frac{1}{\sqrt{\alpha_t}}\left(x_t-\frac{1-\alpha_t}{\sqrt{1-\bar\alpha_t}}\epsilon_\theta(x_t,t)\right)+\sigma_tz xt−1=αt1(xt−1−αˉt1−αtϵθ(xt,t))+σtz,是 P ( x t − 1 ∣ x t ) P(x_{t-1}|x_t) P(xt−1∣xt)重参数化的结果
2.2、从DDPM的目标函数视角上看,为什么无法跳步采样?
在DDPM里面,我们曾经依据 q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xt∣xt−1)推导出了 q ( x t ∣ x t − 2 ) q(x_t|x_{t-2}) q(xt∣xt−2),进而得到了 q ( x t ∣ x 0 ) q(x_t|x_0) q(xt∣x0)的表达式。通过这种方式,我们不难发现,我们并不需要一次次的加噪。而是可以一步到位。
那么,我们是否可以一步到位去噪呢?由于 P ( x t − 1 ∣ x t ) P(x_{t-1}|x_{t}) P(xt−1∣xt)代表的是去噪,为什么我们不能像前向加噪过程那样,由 P ( x t − 1 ∣ x t ) P(x_{t-1}|x_t) P(xt−1∣xt)推导出 P ( x t − 2 ∣ x t ) P(x_{t-2}|x_t) P(xt−2∣xt)。进而导出 P ( x 0 ∣ x t ) P(x_0|x_t) P(x0∣xt)
**答案是,不行!**我们不妨来试一下
对于
P
(
x
t
−
1
∣
x
t
)
P(x_{t-1}|x_t)
P(xt−1∣xt),我们在DDPM里面重参数化得到
x
t
−
1
=
1
α
t
(
x
t
−
1
−
α
t
1
−
α
ˉ
t
ϵ
θ
(
x
t
,
t
)
)
+
σ
t
z
(4)
x_{t-1}=\frac{1}{\sqrt{\alpha_t}}\left(x_t-\frac{1-\alpha_t}{\sqrt{1-\bar\alpha_t}}\epsilon_\theta(x_t,t)\right)+\sigma_tz\tag{4}
xt−1=αt1(xt−1−αˉt1−αtϵθ(xt,t))+σtz(4)
那么我们同样可以得到
P
(
x
t
−
2
∣
x
t
−
1
)
P(x_{t-2}|x_{t-1})
P(xt−2∣xt−1)的表达式
x
t
−
2
=
1
α
t
−
1
(
x
t
−
1
−
1
−
α
t
−
1
1
−
α
ˉ
t
−
1
ϵ
θ
(
x
t
−
1
,
t
−
1
)
)
+
σ
t
−
1
z
(5)
x_{t-2}=\frac{1}{\sqrt{\alpha_{t-1}}}\left(x_{t-1}-\frac{1-\alpha_{t-1}}{\sqrt{1-\bar\alpha_{t-1}}}\epsilon_\theta(x_{t-1},t-1)\right)+\sigma_{t-1}z\tag{5}
xt−2=αt−11(xt−1−1−αˉt−11−αt−1ϵθ(xt−1,t−1))+σt−1z(5)
把式(4)的
x
t
−
1
x_{t-1}
xt−1,代入到式(5)中,就可以得到
x
t
−
2
x_{t-2}
xt−2和
x
t
x_t
xt的表达式,也就对应
P
(
x
t
−
2
∣
x
t
)
P(x_{t-2}|x_t)
P(xt−2∣xt)。得到
x
t
−
2
=
1
α
t
−
1
(
1
α
t
(
x
t
−
1
−
α
t
1
−
α
ˉ
t
ϵ
θ
(
x
t
,
t
)
)
+
σ
t
z
−
1
−
α
t
−
1
1
−
α
ˉ
t
−
1
ϵ
θ
(
x
t
−
1
,
t
−
1
)
)
+
σ
t
−
1
z
(6)
x_{t-2}=\frac{1}{\sqrt{\alpha_{t-1}}}\left(\frac{1}{\sqrt{\alpha_t}}\left(x_t-\frac{1-\alpha_t}{\sqrt{1-\bar\alpha_t}}\epsilon_\theta(x_t,t)\right)+\sigma_tz-\frac{1-\alpha_{t-1}}{\sqrt{1-\bar\alpha_{t-1}}}\epsilon_\theta(x_{t-1},t-1)\right)+\sigma_{t-1}z\tag{6}
xt−2=αt−11(αt1(xt−1−αˉt1−αtϵθ(xt,t))+σtz−1−αˉt−11−αt−1ϵθ(xt−1,t−1))+σt−1z(6)
不难看到,这就是一个关于
x
t
x_t
xt和
x
t
−
2
x_{t-2}
xt−2的等式,如果我们可以求解这个等式,那么自然就可以由
x
t
x_t
xt跳步采样到
x
t
−
2
x_{t-2}
xt−2。
**但是!我们求不出!!!为什么?**我们式(6)里面,有一个值求不出来,那就是 ϵ θ ( x t − 1 , t − 1 ) \epsilon_\theta(x_{t-1},t-1) ϵθ(xt−1,t−1),这个值是依赖神经网络求出来的,神经网络的输入是 x t − 1 x_{t-1} xt−1和t-1时刻。但是当我们跳步采样时,从 x t x_t xt直接求出 x t − 2 x_{t-2} xt−2,跳过了求出 x t − 1 x_{t-1} xt−1的步骤,那我们就没有 x t − 1 x_{t-1} xt−1,也就不能求出 ϵ θ ( x t − 1 , t − 1 ) \epsilon_\theta(x_{t-1},t-1) ϵθ(xt−1,t−1),更别说求解式(6)了。
因此,我们无法实现跳步采样
2.3、DDPM的困境
首先,DDPM我们不能跳步,而加噪步骤,必须要大,不能减小**(只有加的足够多的噪声,最终时刻才能逼近标准正态分布)**。那么,该怎么办呢?DDIM选择从马尔可夫假设入手
3、DDIM
3.1、马尔可夫假设
我们不妨回忆一下马尔可夫假设
一阶马尔可夫假设:给定 t − 1 时刻的状态, t 时刻仅与 t − 1 时刻有关,与过去的状态无关 \boxed{\mathbf{一阶马尔可夫假设:给定t-1时刻的状态,t时刻仅与t-1时刻有关,与过去的状态无关}} 一阶马尔可夫假设:给定t−1时刻的状态,t时刻仅与t−1时刻有关,与过去的状态无关
也就是说,给定t-1时刻的图像,t时刻的图像仅跟t-1时刻相关,与过去的时刻都无关,数学可以表达为
扩散
q
(
x
t
∣
x
t
−
1
,
x
t
−
2
,
⋯
,
x
0
)
=
q
(
x
t
∣
x
t
−
1
)
q(x_t|x_{t-1},x_{t-2},\cdots,x_0)=q(x_t|x_{t-1})
q(xt∣xt−1,xt−2,⋯,x0)=q(xt∣xt−1)
逆扩散
P
(
x
t
−
1
∣
x
t
,
x
t
+
1
,
⋯
,
x
T
)
=
P
(
x
t
−
1
∣
x
t
)
P(x_{t-1}|x_t,x_{t+1},\cdots,x_T)=P(x_{t-1}|x_t)
P(xt−1∣xt,xt+1,⋯,xT)=P(xt−1∣xt)
由马尔可夫假设,我们将整个扩散链和逆扩散链分解成了这样
q
(
x
1
:
T
∣
x
0
)
=
∏
t
=
1
T
q
(
x
t
∣
x
t
−
1
)
P
(
x
0
:
T
)
=
P
(
x
T
)
∏
t
=
1
T
P
(
x
t
−
1
∣
x
t
)
(7)
q(x_{1:T}|x_0)=\prod\limits_{t=1}^Tq(x_t|x_{t-1})\\P(x_{0:T})=P(x_T)\prod\limits_{t=1}^TP(x_{t-1}|x_{t})\tag{7}
q(x1:T∣x0)=t=1∏Tq(xt∣xt−1)P(x0:T)=P(xT)t=1∏TP(xt−1∣xt)(7)
对这些分解,我们可以理解成,因为有了马尔可夫假设这个**“规则”**,才可以将扩散和逆扩散链分解成这样
那换句话说,是否存在某一种**“规则”**,可以将扩散链分解成这样(冒号等于表示将右边赋值给左边)
q
(
x
1
:
T
∣
x
0
)
:
=
q
(
x
T
∣
x
0
)
∏
t
=
2
T
q
(
x
t
−
1
∣
x
t
,
x
0
)
(8)
q(x_{1:T}|x_0):=q(x_T|x_0)\prod\limits_{t=2}^Tq(x_{t-1}|x_t,x_0)\tag{8}
q(x1:T∣x0):=q(xT∣x0)t=2∏Tq(xt−1∣xt,x0)(8)
这当然是可以存在,马尔可夫假设,是我们假设出来的,我们当然也可以假设出某一种规则,将扩散链分解成式(8)。那你可能要问了,这种规则是什么?是什么其实不重要。
马尔可夫假设只是因为马尔可夫这个人,对这个特殊的规则(当前时刻仅跟上一个时刻有关),进行了命名。如果它没有命名,我们其实也可以表示成:存在某一种规则,将扩散链分解成式(7)
因此,我们完全可以说:存在某一种未被命名的规则,将扩散链分解成式(8)
回过头来,我们为什么要将扩散链分解成式(8)?我的答案是:为了使DDIM的最终损失函数和DDPM的一样,同时也能够跳步采样。
3.2、跳步采样构造
为了简单起见,我们先假设现在只有9个时刻,t=0对应原始图像
对除了0的所有时刻,我记为 S ∈ { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 } S\in\{1,2,3,4,5,6,7,8\} S∈{1,2,3,4,5,6,7,8},并且 A ∈ { 2 , 5 , 8 } A\in \{2,5,8\} A∈{2,5,8}、 B ∈ { 1 , 3 , 4 , 6 , 7 } B\in\{1,3,4,6,7\} B∈{1,3,4,6,7}
也就是说,S包含了所有时刻,A和B是S的子集,分别包含了部分时刻,并且 A + B = S A+B=S A+B=S
此时我们不难发现,对于集合A。时刻与时刻之间,隔着两个时刻,我们需要这种结构,才能实现跳步采样
因此,我们假设有一个规则,可以将扩散链分解成这样
q
(
x
1
:
8
∣
x
0
)
=
q
(
x
8
∣
x
0
)
∏
i
∈
A
q
(
x
i
−
1
∣
x
i
,
x
0
)
∏
j
∈
B
q
(
x
j
∣
x
0
)
(9)
q(x_{1:8}|x_0)=q(x_8|x_0)\prod\limits_{i\in A}q(x_{{i-1}}|x_{i},x_0)\prod\limits_{j\in B}q(x_{{j}}|x_0)\tag{9}
q(x1:8∣x0)=q(x8∣x0)i∈A∏q(xi−1∣xi,x0)j∈B∏q(xj∣x0)(9)
集合A里面,是全部序列S的子序列,里面每个时刻之间都隔着几个时刻。而B代表的是是对A序列关于S集合的补足
那么假如有大T个时刻,式子(9)就可以写成这样
q
(
x
1
:
T
∣
x
0
)
=
q
(
x
T
∣
x
0
)
∏
i
∈
A
q
(
x
i
−
1
∣
x
i
,
x
0
)
∏
j
∈
B
q
(
x
j
∣
x
0
)
q(x_{1:T}|x_0)=q(x_T|x_0)\prod\limits_{i\in A}q(x_{{i-1}}|x_{i},x_0)\prod\limits_{j\in B}q(x_{{j}}|x_0)
q(x1:T∣x0)=q(xT∣x0)i∈A∏q(xi−1∣xi,x0)j∈B∏q(xj∣x0)
其中A不再代表是{2,5,8},而是代表一大串跳步的序列。B也相应的代表其补足
与此同时,也可以存在某一个规则,将逆扩散链分解成这样
P
(
x
0
:
T
)
=
P
(
x
T
)
∏
i
∈
A
P
(
x
i
−
1
∣
x
i
)
∏
j
∈
B
P
(
x
0
∣
x
j
)
P(x_{0:T})=P(x_T)\prod\limits_{i\in A}P(x_{i-1}|x_i)\prod\limits_{j\in B}P(x_0|x_j)
P(x0:T)=P(xT)i∈A∏P(xi−1∣xi)j∈B∏P(x0∣xj)
为什么要这样分解?当然是为了配成和DDPM一样的损失函数。我们来进行一遍推导目标函数即可
3.3、DDIM的目标函数
在DDPM里面,我们是从变分下界之后,才真正需要用到马尔可夫假设来分解。所以,在变分下界之前,DDIM的所有步骤都和DDPM的一样。那么我就从变分下界开始推了
log
P
(
x
0
)
≥
∫
log
P
(
x
0
:
T
)
q
(
x
1
:
T
∣
x
0
)
q
(
x
1
:
T
∣
x
0
)
d
x
1
:
T
=
E
q
[
log
P
(
x
0
:
T
)
q
(
x
1
:
T
∣
x
0
)
]
=
E
q
[
log
P
(
x
T
)
∏
i
∈
A
P
(
x
i
−
1
∣
x
i
)
∏
j
∈
B
P
(
x
0
∣
x
j
)
q
(
x
T
∣
x
0
)
∏
i
∈
A
q
(
x
i
−
1
∣
x
i
,
x
0
)
∏
j
∈
B
q
(
x
j
∣
x
0
)
]
=
E
q
[
log
P
(
x
T
)
q
(
x
T
∣
x
0
)
+
log
∏
i
∈
A
P
(
x
i
−
1
∣
x
i
)
q
(
x
i
−
1
∣
x
i
,
x
0
)
+
log
∏
j
∈
B
P
(
x
0
∣
x
j
)
q
(
x
j
∣
x
0
)
]
=
E
q
[
log
P
(
x
T
)
q
(
x
T
∣
x
0
)
+
∑
i
∈
A
log
P
(
x
i
−
1
∣
x
i
)
q
(
x
i
−
1
∣
x
i
,
x
0
)
+
∑
j
∈
B
log
P
(
x
0
∣
x
j
)
q
(
x
j
∣
x
0
)
]
=
E
q
(
x
T
∣
x
0
)
[
log
P
(
x
T
)
q
(
x
T
∣
x
0
)
]
+
∑
i
∈
A
E
q
(
x
i
−
1
,
x
i
∣
x
0
)
[
log
P
(
x
i
−
1
∣
x
i
)
q
(
x
i
−
1
∣
x
i
,
x
0
)
]
+
∑
j
∈
B
E
q
(
x
j
∣
x
0
)
[
log
P
(
x
0
∣
x
j
)
q
(
x
j
∣
x
0
)
]
=
−
K
L
(
q
(
x
T
∣
x
0
)
∣
∣
P
(
x
T
)
)
−
∑
i
∈
A
E
q
(
x
i
∣
x
0
)
[
K
L
(
q
(
x
i
−
1
∣
x
i
,
x
0
)
∣
∣
P
(
x
i
−
1
∣
x
i
)
)
]
−
∑
j
∈
B
K
L
(
q
(
x
j
∣
x
0
)
∣
∣
P
(
x
0
∣
x
j
)
)
\begin{aligned}\log P(x_0)\ge& \int\log \frac{P(x_{0:T})}{q(x_{1:T}|x_0)}q(x_{1:T}|x_0)dx_{1:T}\\=&\mathbb{E}_q\left[\log \frac{P(x_{0:T})}{q(x_{1:T}|x_0)}\right]\\=&\mathbb{E}_q\left[\log \frac{P(x_T)\prod\limits_{i\in A}P(x_{i-1}|x_i)\prod\limits_{j\in B}P(x_0|x_j)}{q(x_T|x_0)\prod\limits_{i\in A}q(x_{{i-1}}|x_{i},x_0)\prod\limits_{j\in B}q(x_{{j}}|x_0)}\right]\\=&\mathbb{E}_q\left[\log \frac{P(x_T)}{q(x_T|x_0)}+\log\prod\limits_{i\in A}\frac{P(x_{i-1}|x_i)}{q(x_{i-1}|x_i,x_0)}+\log\prod\limits_{j\in B}\frac{P(x_{0}|x_j)}{q(x_j|x_0)}\right]\\=&\mathbb{E}_q\left[\log \frac{P(x_T)}{q(x_T|x_0)}+\sum\limits_{i\in A}\log\frac{P(x_{i-1}|x_i)}{q(x_{i-1}|x_i,x_0)}+\sum\limits_{j\in B}\log\frac{P(x_{0}|x_j)}{q(x_j|x_0)}\right]\\=&\mathbb{E}_{q(x_T|x_0)}\left[\log \frac{P(x_T)}{q(x_T|x_0)}\right]+\sum\limits_{i\in A}\mathbb{E}_{q(x_{i-1},x_{i}|x_0)}\left[\log\frac{P(x_{i-1}|x_i)}{q(x_{i-1}|x_i,x_0)}\right]+\sum\limits_{j\in B}\mathbb{E}_{q(x_j|x_0)}\left[\log\frac{P(x_{0}|x_j)}{q(x_j|x_0)}\right]\\=&-KL(q(x_T|x_0)||P(x_T))-\sum\limits_{i\in A}\mathbb{E_{q(x_i|x_0)}}\left[KL(q(x_{i-1}|x_i,x_0)||P(x_{i-1}|x_i))\right]-\sum\limits_{j\in B}KL(q(x_j|x_0)||P(x_0|x_j))\end{aligned}\nonumber
logP(x0)≥======∫logq(x1:T∣x0)P(x0:T)q(x1:T∣x0)dx1:TEq[logq(x1:T∣x0)P(x0:T)]Eq
logq(xT∣x0)i∈A∏q(xi−1∣xi,x0)j∈B∏q(xj∣x0)P(xT)i∈A∏P(xi−1∣xi)j∈B∏P(x0∣xj)
Eq
logq(xT∣x0)P(xT)+logi∈A∏q(xi−1∣xi,x0)P(xi−1∣xi)+logj∈B∏q(xj∣x0)P(x0∣xj)
Eq
logq(xT∣x0)P(xT)+i∈A∑logq(xi−1∣xi,x0)P(xi−1∣xi)+j∈B∑logq(xj∣x0)P(x0∣xj)
Eq(xT∣x0)[logq(xT∣x0)P(xT)]+i∈A∑Eq(xi−1,xi∣x0)[logq(xi−1∣xi,x0)P(xi−1∣xi)]+j∈B∑Eq(xj∣x0)[logq(xj∣x0)P(x0∣xj)]−KL(q(xT∣x0)∣∣P(xT))−i∈A∑Eq(xi∣x0)[KL(q(xi−1∣xi,x0)∣∣P(xi−1∣xi))]−j∈B∑KL(q(xj∣x0)∣∣P(x0∣xj))
3.4、求解目标函数
为了构造同DDPM一样的训练方式,对任意时刻
1
≤
t
≤
T
1\le t\le T
1≤t≤T,假设都有
q
(
x
t
∣
x
0
)
∼
N
(
x
t
∣
α
ˉ
t
x
0
,
(
1
−
α
ˉ
t
)
I
)
(10)
q(x_t|x_0)\sim N(x_t|\sqrt{\bar\alpha_t}x_{0},(1-\bar\alpha_t)I)\tag{10}
q(xt∣x0)∼N(xt∣αˉtx0,(1−αˉt)I)(10)
其中里面的
α
\alpha
α是我们定义的参数。而
P
(
x
T
)
P(x_T)
P(xT)也和DDPM那里一样,都被设置为标准正太分布。因此,第一项不存在需要学习的参数。我们重点看第二项和第三项
max
(
−
∑
i
∈
A
E
q
(
x
i
∣
x
0
)
[
K
L
(
q
(
x
i
−
1
∣
x
i
,
x
0
)
∣
∣
P
(
x
i
−
1
∣
x
i
)
)
]
−
∑
j
∈
B
K
L
(
q
(
x
j
∣
x
0
)
∣
∣
P
(
x
0
∣
x
j
)
)
)
\max\left(-\sum\limits_{i\in A}\mathbb{E_{q(x_i|x_0)}}\left[KL(q(x_{i-1}|x_i,x_0)||P(x_{i-1}|x_i))\right]-\sum\limits_{j\in B}KL(q(x_j|x_0)||P(x_0|x_j))\right)
max
−i∈A∑Eq(xi∣x0)[KL(q(xi−1∣xi,x0)∣∣P(xi−1∣xi))]−j∈B∑KL(q(xj∣x0)∣∣P(x0∣xj))
请注意
q
(
x
i
−
1
∣
x
i
,
x
0
)
q(x_{i-1}|x_i,x_0)
q(xi−1∣xi,x0)表示的,并不是连续的时刻,里面的
i
i
i来自A里面的元素,是一个跨步的序列。比如我们之前提到的例子
A
∈
{
2
,
5
,
8
}
A\in \{2,5,8\}
A∈{2,5,8},那么当
i
i
i取5,
i
−
1
i-1
i−1就是2。则
q
(
x
i
−
1
∣
x
i
,
x
0
)
q(x_{i-1}|x_i,x_0)
q(xi−1∣xi,x0)表示成
q
(
x
2
∣
x
5
,
x
0
)
q(x_{2}|x_5,x_0)
q(x2∣x5,x0)
此时,我们的目标是最大化这个式子。但问题是,我们在DDPM里面,依赖于马尔可夫假设,是可以计算出
q
(
x
i
−
1
∣
x
i
,
x
0
)
q(x_{i-1}|x_i,x_0)
q(xi−1∣xi,x0)的,也就是(利用马尔可夫假设消去
x
0
x_0
x0)
q
(
x
i
−
1
∣
x
i
,
x
0
)
=
q
(
x
i
∣
x
i
−
1
,
x
0
)
q
(
x
i
−
1
∣
x
0
)
q
(
x
i
∣
x
0
)
=
q
(
x
i
∣
x
i
−
1
)
q
(
x
i
−
1
∣
x
0
)
q
(
x
i
∣
x
0
)
(11)
q(x_{i-1}|x_i,x_0)=\frac{q(x_i|x_{i-1},x_0)q(x_{i-1}|x_0)}{q(x_i|x_0)}=\frac{q(x_i|x_{i-1})q(x_{i-1}|x_0)}{q(x_i|x_0)}\tag{11}
q(xi−1∣xi,x0)=q(xi∣x0)q(xi∣xi−1,x0)q(xi−1∣x0)=q(xi∣x0)q(xi∣xi−1)q(xi−1∣x0)(11)
在DDPM里面,
q
(
x
i
−
1
∣
x
i
,
x
0
)
q(x_{i-1}|x_i,x_0)
q(xi−1∣xi,x0)是可以计算的。但是在DDIM里面,我们依据某种“规则”分解扩散链的时候,显然那个“规则”不是马尔可夫假设,那么对于式(11),我们仍然有一个未知量,那就是
q
(
x
i
∣
x
i
−
1
,
x
0
)
q(x_i|x_{i-1},x_0)
q(xi∣xi−1,x0)。那该怎么办呢?
3.4.1、设定逆扩散过程
答案就是直接设定一个出来(但不能随意设定,我们看到式11,它的值依赖于 q ( x i ∣ x 0 ) 、 q ( x i − 1 ∣ x 0 ) q(x_i|x_0)、q(x_{i-1}|x_0) q(xi∣x0)、q(xi−1∣x0))
这是非常容易理解的 q ( x i − 1 ∣ x t , x 0 ) q(x_{i-1}|x_t,x_0) q(xi−1∣xt,x0)表示逆扩散,既然我们假定了扩散的过程(式子10),那么再假定逆扩散的话,肯定要依据扩散过程来假定,否则两者不一一对应,那都不用训练了,直接开席
我们将其假设成与
x
i
,
x
0
x_{i},x_0
xi,x0相关的表达式,
λ
i
、
k
i
\lambda_i、k_i
λi、ki是待求参数,而
σ
i
\sigma_i
σi是我们指定的
q
(
x
i
−
1
∣
x
i
,
x
0
)
=
N
(
x
i
−
1
∣
k
i
x
i
+
λ
i
x
0
,
σ
i
2
I
)
q(x_{i-1}|x_i,x_0)=N(x_{i-1}|k_ix_i+\lambda_ix_0,\sigma_i^2I)
q(xi−1∣xi,x0)=N(xi−1∣kixi+λix0,σi2I)
重参数化
x
i
−
1
=
k
i
x
i
+
λ
i
x
0
+
σ
i
ϵ
1
(12)
x_{i-1}=k_ix_i+\lambda_ix_0+\sigma_i\epsilon_1\tag{12}
xi−1=kixi+λix0+σiϵ1(12)
同时,依据式(10),我们也可以获得
q
(
x
i
∣
x
0
)
q(x_i|x_0)
q(xi∣x0)的重参数化表达式
x
i
=
α
ˉ
i
x
0
+
(
1
−
α
ˉ
i
)
ϵ
2
(13)
x_i=\sqrt{\bar\alpha_i}x_{0}+\sqrt{(1-\bar\alpha_i)}\epsilon_2\tag{13}
xi=αˉix0+(1−αˉi)ϵ2(13)
把式(13)的
x
i
x_i
xi,代入式(12)可得
x
i
−
1
=
k
i
(
α
ˉ
i
x
0
+
(
1
−
α
ˉ
i
)
ϵ
2
)
+
λ
i
x
0
+
σ
i
ϵ
1
=
(
k
i
α
ˉ
i
+
λ
i
)
x
0
+
k
i
1
−
α
ˉ
i
ϵ
2
+
σ
i
ϵ
1
\begin{aligned}x_{i-1}=&k_i(\sqrt{\bar\alpha_i}x_{0}+\sqrt{(1-\bar\alpha_i)}\epsilon_2)+\lambda_ix_0+\sigma_i\epsilon_1\\=&(k_i\sqrt{\bar\alpha_i}+\lambda_i)x_0+k_i\sqrt{1-\bar\alpha_i}\epsilon_2+\sigma_i\epsilon_1\end{aligned}\nonumber
xi−1==ki(αˉix0+(1−αˉi)ϵ2)+λix0+σiϵ1(kiαˉi+λi)x0+ki1−αˉiϵ2+σiϵ1
同在DDPM里面的一样,将第二和第三项其实可以表示成同一个
k
i
1
−
α
ˉ
i
ϵ
2
+
σ
i
ϵ
1
=
k
i
2
(
1
−
α
ˉ
i
)
+
σ
i
2
ϵ
k_i\sqrt{1-\bar\alpha_i}\epsilon_2+\sigma_i\epsilon_1=\sqrt{k_i^2(1-\bar\alpha_i)+\sigma_i^2}\epsilon
ki1−αˉiϵ2+σiϵ1=ki2(1−αˉi)+σi2ϵ
所以便可得到
x
i
−
1
=
(
k
i
α
ˉ
i
+
λ
i
)
x
0
+
k
i
2
(
1
−
α
ˉ
i
)
+
σ
i
2
ϵ
x_{i-1}=(k_i\sqrt{\bar\alpha_i}+\lambda_i)x_0+\sqrt{k_i^2(1-\bar\alpha_i)+\sigma_i^2}\epsilon
xi−1=(kiαˉi+λi)x0+ki2(1−αˉi)+σi2ϵ
因此
q
(
x
i
−
1
∣
x
0
)
∼
N
(
x
i
−
1
∣
(
k
i
α
ˉ
i
+
λ
i
)
x
0
,
(
k
i
2
(
1
−
α
ˉ
i
)
+
σ
i
2
)
I
)
(14)
q(x_{i-1}|x_0)\sim N(x_{i-1}|(k_i\sqrt{\bar\alpha_i}+\lambda_i)x_0,(k_i^2(1-\bar\alpha_i)+\sigma_i^2)I)\tag{14}
q(xi−1∣x0)∼N(xi−1∣(kiαˉi+λi)x0,(ki2(1−αˉi)+σi2)I)(14)
又因为依据式(10),我们可得出
q
(
x
i
−
1
∣
x
0
)
∼
N
(
x
i
−
1
∣
α
ˉ
i
−
1
x
0
,
(
1
−
α
ˉ
i
−
1
)
I
)
(15)
q(x_{i-1}|x_0)\sim N(x_{i-1}|\sqrt{\bar\alpha_{i-1}}x_{0},(1-\bar\alpha_{i-1})I)\tag{15}
q(xi−1∣x0)∼N(xi−1∣αˉi−1x0,(1−αˉi−1)I)(15)
显然,式(14)和式(15)取等,于是便有
k
i
α
ˉ
i
+
λ
i
=
α
ˉ
i
−
1
k
i
2
(
1
−
α
ˉ
i
)
+
σ
i
2
=
1
−
α
ˉ
i
−
1
k_i\sqrt{\bar\alpha_i}+\lambda_i=\sqrt{\bar\alpha_{i-1}}\\k_i^2(1-\bar\alpha_i)+\sigma_i^2=1-\bar\alpha_{i-1}
kiαˉi+λi=αˉi−1ki2(1−αˉi)+σi2=1−αˉi−1
求解上面这个等式,便得到
k
i
=
1
−
α
ˉ
i
−
1
−
σ
i
2
1
−
α
ˉ
i
;
λ
i
=
α
ˉ
i
−
1
−
α
ˉ
i
(
1
−
α
ˉ
i
−
1
−
σ
i
2
)
1
−
α
ˉ
i
k_i=\sqrt{\frac{1-\bar\alpha_{i-1}-\sigma_i^2}{1-\bar\alpha_i}};\\\lambda_i=\sqrt{\bar\alpha_{i-1}}-\sqrt{\frac{\bar\alpha_i(1-\bar\alpha_{i-1}-\sigma_i^2)}{1-\bar\alpha_i}}
ki=1−αˉi1−αˉi−1−σi2;λi=αˉi−1−1−αˉiαˉi(1−αˉi−1−σi2)
由此,我们便得到
k
i
x
i
+
λ
i
x
0
=
1
−
α
ˉ
i
−
1
−
σ
i
2
1
−
α
ˉ
i
x
i
+
(
α
ˉ
i
−
1
−
α
ˉ
i
(
1
−
α
ˉ
i
−
1
−
σ
i
2
)
1
−
α
ˉ
i
)
x
0
=
1
−
α
ˉ
i
−
1
−
σ
i
2
1
−
α
ˉ
i
x
i
+
α
ˉ
i
−
1
x
0
−
α
ˉ
i
(
1
−
α
ˉ
i
−
1
−
σ
i
2
)
1
−
α
ˉ
i
x
0
=
α
ˉ
i
−
1
x
0
+
1
−
α
ˉ
i
−
1
−
σ
i
2
1
−
α
ˉ
i
(
x
i
−
α
ˉ
i
x
0
)
=
α
ˉ
i
−
1
x
0
+
1
−
α
ˉ
i
−
1
−
σ
i
2
x
i
−
α
ˉ
i
x
0
1
−
α
ˉ
i
\begin{aligned}k_ix_i+\lambda_ix_0=&\sqrt{\frac{1-\bar\alpha_{i-1}-\sigma_i^2}{1-\bar\alpha_i}}x_i+\left(\sqrt{\bar\alpha_{i-1}}-\sqrt{\frac{\bar\alpha_i(1-\bar\alpha_{i-1}-\sigma_i^2)}{1-\bar\alpha_i}}\right)x_0\\=&\sqrt{\frac{1-\bar\alpha_{i-1}-\sigma_i^2}{1-\bar\alpha_i}}x_i+\sqrt{\bar\alpha_{i-1}}x_0-\sqrt{\frac{\bar\alpha_i(1-\bar\alpha_{i-1}-\sigma_i^2)}{1-\bar\alpha_i}}x_0\\=&\sqrt{\bar\alpha_{i-1}}x_0+\sqrt{\frac{1-\bar\alpha_{i-1}-\sigma_i^2}{1-\bar\alpha_i}}(x_i-\sqrt{\bar\alpha_i}x_0)\\=&\sqrt{\bar\alpha_{i-1}}x_0+\sqrt{1-\bar\alpha_{i-1}-\sigma_i^2}\frac{x_i-\sqrt{\bar\alpha_i}x_0}{\sqrt{1-\bar\alpha_i}}\end{aligned}\nonumber
kixi+λix0====1−αˉi1−αˉi−1−σi2xi+
αˉi−1−1−αˉiαˉi(1−αˉi−1−σi2)
x01−αˉi1−αˉi−1−σi2xi+αˉi−1x0−1−αˉiαˉi(1−αˉi−1−σi2)x0αˉi−1x0+1−αˉi1−αˉi−1−σi2(xi−αˉix0)αˉi−1x0+1−αˉi−1−σi21−αˉixi−αˉix0
所以
q
(
x
i
−
1
∣
x
i
,
x
0
)
∼
N
(
x
i
−
1
∣
α
ˉ
i
−
1
x
0
+
1
−
α
ˉ
i
−
1
−
σ
i
2
x
i
−
α
ˉ
i
x
0
1
−
α
ˉ
i
,
σ
i
2
I
)
q(x_{i-1}|x_i,x_0)\sim N(x_{i-1}|\sqrt{\bar\alpha_{i-1}}x_0+\sqrt{1-\bar\alpha_{i-1}-\sigma_i^2}\frac{x_i-\sqrt{\bar\alpha_i}x_0}{\sqrt{1-\bar\alpha_i}},\sigma_i^2I)
q(xi−1∣xi,x0)∼N(xi−1∣αˉi−1x0+1−αˉi−1−σi21−αˉixi−αˉix0,σi2I)
再由
x
i
=
α
ˉ
i
x
0
+
1
−
α
ˉ
i
ϵ
i
→
x
0
=
x
i
−
1
−
α
ˉ
i
ϵ
i
α
ˉ
i
(16)
x_i=\sqrt{\bar\alpha_i}x_{0}+\sqrt{1-\bar\alpha_i}\epsilon_i \rightarrow x_0=\frac{x_{i}-\sqrt{1-\bar\alpha_i}\epsilon_i}{\sqrt{\bar\alpha_i}}\tag{16}
xi=αˉix0+1−αˉiϵi→x0=αˉixi−1−αˉiϵi(16)
把
x
0
x_0
x0代入
q
(
x
i
−
1
∣
x
i
,
x
0
)
q(x_{i-1}|x_i,x_0)
q(xi−1∣xi,x0)里面,便可得到
q
(
x
i
−
1
∣
x
i
,
x
0
)
∼
N
(
x
i
−
1
∣
α
ˉ
i
−
1
x
i
−
1
−
α
ˉ
i
ϵ
i
α
ˉ
i
+
1
−
α
ˉ
i
−
1
−
σ
i
2
ϵ
i
,
σ
i
2
I
)
(17)
q(x_{i-1}|x_i,x_0)\sim N(x_{i-1}|\sqrt{\bar\alpha_{i-1}}\frac{x_{i}-\sqrt{1-\bar\alpha_i}\epsilon_i}{\sqrt{\bar\alpha_i}}+\sqrt{1-\bar\alpha_{i-1}-\sigma_i^2}\epsilon_i,\sigma_i^2I)\tag{17}
q(xi−1∣xi,x0)∼N(xi−1∣αˉi−1αˉixi−1−αˉiϵi+1−αˉi−1−σi2ϵi,σi2I)(17)
事实上,论文里面并不是用的这种方法求解 q ( x i − 1 ∣ x i , x 0 ) q(x_{i-1}|x_i,x_0) q(xi−1∣xi,x0)。而是用到了一个定理,该定理来自机器学习圣经,里面有所证明。但是课本省略了很多的证明步骤。感兴趣的可以看我这篇文章线性动态系统中的概率求解
该定理如下
我们知道
q
(
x
i
−
1
∣
x
0
)
=
∫
q
(
x
i
−
1
∣
x
i
,
x
0
)
q
(
x
i
∣
x
0
)
d
x
i
q(x_{i-1}|x_0)=\int q(x_{i-1}|x_i,x_0)q(x_i|x_0)dx_i
q(xi−1∣x0)=∫q(xi−1∣xi,x0)q(xi∣x0)dxi
将
q
(
x
i
∣
x
0
)
q(x_i|x_0)
q(xi∣x0)当作定理里面的
P
(
x
)
P(x)
P(x),
q
(
x
i
−
1
∣
x
i
,
x
0
)
q(x_{i-1}|x_i,x_0)
q(xi−1∣xi,x0)当作是
P
(
y
∣
x
)
P(y|x)
P(y∣x),而
q
(
x
i
−
1
∣
x
0
)
q(x_{i-1}|x_0)
q(xi−1∣x0)是
P
(
y
)
P(y)
P(y)。然后直接代入公式就可以求出来了。
3.4.2、求解KL散度
不妨再回忆一下我们的目标函数,即最大化下面这两项
max
(
−
∑
i
∈
A
E
q
(
x
i
∣
x
0
)
[
K
L
(
q
(
x
i
−
1
∣
x
i
,
x
0
)
∣
∣
P
(
x
i
−
1
∣
x
i
)
)
]
−
∑
j
∈
B
K
L
(
q
(
x
j
∣
x
0
)
∣
∣
P
(
x
0
∣
x
j
)
)
)
(18)
\max\left(-\sum\limits_{i\in A}\mathbb{E_{q(x_i|x_0)}}\left[KL(q(x_{i-1}|x_i,x_0)||P(x_{i-1}|x_i))\right]-\sum\limits_{j\in B}KL(q(x_j|x_0)||P(x_0|x_j))\right)\tag{18}
max
−i∈A∑Eq(xi∣x0)[KL(q(xi−1∣xi,x0)∣∣P(xi−1∣xi))]−j∈B∑KL(q(xj∣x0)∣∣P(x0∣xj))
(18)
现在,我们知道了
q
(
x
i
−
1
∣
x
i
,
x
0
)
q(x_{i-1}|x_i,x_0)
q(xi−1∣xi,x0)和
q
(
x
j
∣
x
0
)
q(x_j|x_0)
q(xj∣x0)。而对于
P
(
x
i
−
1
∣
x
i
)
P(x_{i-1}|x_i)
P(xi−1∣xi)和
P
(
x
0
∣
x
j
)
P(x_0|x_j)
P(x0∣xj),只需要用神经网络去逼近就可以了。
将
P
(
x
i
−
1
∣
x
i
)
P(x_{i-1}|x_i)
P(xi−1∣xi)的参数假定为式(17),唯一需要改变的是里面
ϵ
i
\epsilon_i
ϵi需要神经网络去预测,所以
P
(
x
i
−
1
∣
x
i
)
∼
N
(
x
i
−
1
∣
α
ˉ
i
−
1
x
i
−
1
−
α
ˉ
i
ϵ
θ
(
x
i
,
i
)
α
ˉ
i
+
1
−
α
ˉ
i
−
1
−
σ
i
2
ϵ
θ
(
x
i
,
i
)
,
σ
i
2
I
)
(19)
P(x_{i-1}|x_i)\sim N(x_{i-1}|\sqrt{\bar\alpha_{i-1}}\frac{x_{i}-\sqrt{1-\bar\alpha_i}\epsilon_\theta(x_i,i)}{\sqrt{\bar\alpha_i}}+\sqrt{1-\bar\alpha_{i-1}-\sigma_i^2}\epsilon_\theta(x_i,i),\sigma_i^2I)\tag{19}
P(xi−1∣xi)∼N(xi−1∣αˉi−1αˉixi−1−αˉiϵθ(xi,i)+1−αˉi−1−σi2ϵθ(xi,i),σi2I)(19)
P
(
x
0
∣
x
j
)
P(x_0|x_j)
P(x0∣xj)可以简单理解为由
x
j
x_j
xj预测
x
0
x_0
x0,我们不妨先对
q
(
x
j
∣
x
0
)
q(x_j|x_0)
q(xj∣x0)进行一些变化
q
(
x
j
∣
x
0
)
∼
N
(
x
j
∣
α
ˉ
j
x
0
,
(
1
−
α
ˉ
j
)
I
)
q(x_j|x_0)\sim N(x_j|\sqrt{\bar\alpha_j}x_{0},(1-\bar\alpha_j)I)
q(xj∣x0)∼N(xj∣αˉjx0,(1−αˉj)I)
由式(16)将
x
0
x_0
x0代换掉
x
0
=
x
j
−
1
−
α
ˉ
j
ϵ
j
α
ˉ
j
x_0=\frac{x_{j}-\sqrt{1-\bar\alpha_j}\epsilon_j}{\sqrt{\bar\alpha_j}}
x0=αˉjxj−1−αˉjϵj
可得
q
(
x
j
∣
x
0
)
∼
N
(
x
j
∣
x
j
−
1
−
α
ˉ
j
ϵ
j
,
(
1
−
α
ˉ
j
)
I
)
q(x_j|x_0)\sim N(x_j|x_{j}-\sqrt{1-\bar\alpha_j}\epsilon_j,(1-\bar\alpha_j)I)
q(xj∣x0)∼N(xj∣xj−1−αˉjϵj,(1−αˉj)I)
所以可以
P
(
x
0
∣
x
j
)
∼
N
(
x
0
∣
x
j
−
1
−
α
ˉ
j
ϵ
θ
(
x
j
,
j
)
α
ˉ
j
,
σ
j
2
I
)
(20)
P(x_0|x_j)\sim N(x_0|\frac{x_{j}-\sqrt{1-\bar\alpha_j}\epsilon_\theta(x_j,j)}{\sqrt{\bar\alpha_j}},\sigma_j^2I)\tag{20}
P(x0∣xj)∼N(x0∣αˉjxj−1−αˉjϵθ(xj,j),σj2I)(20)
到了这里,论文不推导了,直接给出结论,式(18)的优化目标和DDPM一样。其实推导过程直接套用KL散度的公式就可以了。我试过着推导过了,在这里直接给出结论(在忽略常数项的情况下):
K
L
(
q
(
x
i
−
1
∣
x
i
,
x
0
)
∣
∣
P
(
x
i
−
1
∣
x
i
)
)
∝
∣
∣
ϵ
i
−
ϵ
θ
(
x
i
,
i
)
∣
∣
2
(21)
KL(q(x_{i-1}|x_i,x_0)||P(x_{i-1}|x_i)) \propto ||\epsilon_i-\epsilon_\theta(x_i,i)||^2\tag{21}
KL(q(xi−1∣xi,x0)∣∣P(xi−1∣xi))∝∣∣ϵi−ϵθ(xi,i)∣∣2(21)
而对于第二个KL散度,老实说,我算了很多次,最终的优化目标,根本得不到和DDPM一样的(除非我真的算错了。Ps:如果你推导出来了,请务必告诉我,谢谢)
我们现在暂且当作
K
L
(
q
(
x
j
∣
x
0
)
∣
∣
P
(
x
0
∣
x
j
)
)
∝
∣
∣
ϵ
j
−
ϵ
θ
(
x
j
,
j
)
∣
∣
2
(22)
KL(q(x_j|x_0)||P(x_0|x_j))\cancel{\propto} ||\epsilon_j-\epsilon_\theta(x_j,j)||^2\tag{22}
KL(q(xj∣x0)∣∣P(x0∣xj))∝
∣∣ϵj−ϵθ(xj,j)∣∣2(22)
那这一个KL散度无法求出与DDPM一样的损失函数,那该怎么办呢?
以下,我做一些个人看法的推测
我后来又仔仔细细地重看了一遍论文,发现了一个疑似解决方案的点,我们来看它的这一段话
翻译过来大概是这个意思
我理解的意思是,对于变分下界,我们仔细看DDPM的优化目标函数
E
q
(
x
1
∣
x
0
)
[
log
P
(
x
0
∣
x
1
)
]
−
∑
t
=
2
T
E
q
(
x
t
∣
x
0
)
[
K
L
(
q
(
x
t
−
1
∣
x
t
,
x
0
)
∣
∣
P
(
x
t
−
1
∣
x
t
)
)
]
−
K
L
(
q
(
x
T
∣
x
0
)
∣
∣
P
(
x
T
)
)
\mathbb{E}_{q(x_1|x_0)}\left[\log P(x_0|x_1)\right]-\sum\limits_{t=2}^T\mathbb{E}_{q(x_t|x_0)}\left[KL(q(x_{t-1}|x_t,x_0)||P(x_{t-1}|x_t))\right]-KL\left(q(x_T|x_0)||P(x_T)\right)
Eq(x1∣x0)[logP(x0∣x1)]−t=2∑TEq(xt∣x0)[KL(q(xt−1∣xt,x0)∣∣P(xt−1∣xt))]−KL(q(xT∣x0)∣∣P(xT))
很容易就能发现对于不同时刻t,都有一个优化目标。而我们在训练的时候,是一个样本随机优化一个时刻t。
那么我们是否可以理解为,我们只需要让每个时刻都最大化就可以了呢?换句话说,每一个时刻的最大化的总和,就等于上述DDPM目标的最大化。
那是否可以说明,存在一种极端的情况,我们每个时刻都选用不同的神经网络去优化,也就是初始化T个神经网络,网络之间参数不共享(实际上DDPM并不需要这么做,因为每个时刻的优化目标都相同,只需要同一个网络即可),只需要让这T个神经网络优化各自对应的时刻参数,便可达到全局最优。
那么对于DDIM而言,也是一样的。式(18)里面包含了不同时刻的优化目标,我们对每一个时刻都最小化KL散度。那么所有时刻的KL散度总和,便是全局最小。
但我们注意到DDIM的优化目标函数并不相同,那么我们可以对式(21)选择一个神经网络(记为 f 1 f_1 f1)去优化;而对于式(22)选择另一个神经网络去优化(记为 f 2 f_2 f2)。当两个网络都达到最优,那就意味着DDIM达到最优
好,现在我们不难发现, f 1 f_1 f1的优化目标是和DDPM是一样的,但是 f 1 f_1 f1的时刻点是跳步的(里面的值来自集合A,前面提到过)。也就是说,此时 f 1 f_1 f1的优化的时刻,是DDPM优化目标的子序列。那么DDPM收敛时,就意味着 f 1 f_1 f1也收敛(因为DDPM优化全部,而 f 1 f_1 f1优化其中一部分,DDPM全局收敛代表每一个时刻都收敛,也就包括 f 1 f_1 f1的时刻)。
此时我们注意到,我们要实现跳步采样,其实用的 f 1 f_1 f1的那些跳步采样。采用DDPM的训练方法,间接导致 f 1 f_1 f1收敛。那么就没有 f 2 f_2 f2什么事了,因为我们根本不使用 f 2 f_2 f2。也就是说,只需要 f 1 f_{1} f1最优即可,那 f 1 f_1 f1的对应时刻变化已经是最优,而 f 2 f_2 f2是否最优,完全不重要
此时,你是否会有疑惑,那这样的话我们只需要优化 f 1 f_1 f1就可以实现跳步采样了,为什么还要费尽心思优化整个DDPM呢?论文作者针对审稿人的这个问题进行了回答。事实上,这很大程度上加大我所猜测为真的可能性
以上为推测
训练好之后,我们就得到了 P ( x i − 1 ∣ x i ) P(x_{i-1}|x_i) P(xi−1∣xi),而我们提到过 i − 1 i-1 i−1和 i i i之间,是两个不连续的时间序列,存在跳步。
所以,这就是为什么可以采用DDPM的训练方法,又可以跳步采样的原因。只是采样的步骤变了一些。
3.5、采样方法
将式(19)重参数化便可得到采样步骤
x
i
−
1
=
α
ˉ
i
−
1
x
i
−
1
−
α
ˉ
i
ϵ
θ
(
x
i
,
i
)
α
ˉ
i
+
1
−
α
ˉ
i
−
1
−
σ
i
2
ϵ
θ
(
x
i
,
i
)
+
σ
i
z
(23)
x_{i-1}=\sqrt{\bar\alpha_{i-1}}\frac{x_{i}-\sqrt{1-\bar\alpha_i}\epsilon_\theta(x_i,i)}{\sqrt{\bar\alpha_i}}+\sqrt{1-\bar\alpha_{i-1}-\sigma_i^2}\epsilon_\theta(x_i,i)+\sigma_iz\tag{23}
xi−1=αˉi−1αˉixi−1−αˉiϵθ(xi,i)+1−αˉi−1−σi2ϵθ(xi,i)+σiz(23)
其中
z
z
z是一个随机采样的噪声,
α
0
=
1
\alpha_0=1
α0=1
3.6、方差的选定
我们注意到, q x i − 1 ∣ x i , x 0 ) q_{x_{i-1}|x_{i},x_0)} qxi−1∣xi,x0)是我们选定的。之前也说过 σ i \sigma_i σi是我们选定的。当我们除了 i = 1 i=1 i=1,对其他时刻,选定 σ i = 0 \sigma_i=0 σi=0。那么式子(23)的 σ i z = 0 \sigma_iz=0 σiz=0,所以式(23)就是固定的,不再加入随机噪声,作者把这种情况命名为DDIM。
同时,如果我们把,如果我们对所有时刻,都有
σ
i
=
1
−
α
ˉ
i
−
1
1
−
α
ˉ
i
1
−
α
ˉ
t
α
ˉ
i
−
1
\sigma_i=\sqrt{\frac{1-\bar\alpha_{i-1}}{1-\bar\alpha_i}}\sqrt{\frac{1-\bar\alpha_t}{\bar\alpha_{i-1}}}
σi=1−αˉi1−αˉi−1αˉi−11−αˉt
那么此时采样方法就会退化成和DDPM一样,也就是说, q ( x i − 1 ∣ x i , x 0 ) q(x_{i-1}|x_i,x_0) q(xi−1∣xi,x0)会直接变成和DDPM那个一样。文章篇幅太长,不作证明了,不然又发不了了。感兴趣的看参考②。
4、其他细节
对于子序列如何选择(线性和二次),以及插值等一系列的小细节,在论文里面有提到,但论文篇幅实在太长了,破电脑已经开始卡了,就先这样吧
5、结束
本篇文章到此为止,如有问题,还望指出,阿里嘎多!
6、参考
①生成扩散模型漫谈(四):DDIM = 高观点DDPM - 科学空间|Scientific Spaces (kexue.fm)
②去噪扩散隐式模型(Denoising Diffusion Implicit Models,DDIM) (zhangzhenhu.com)
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)