在上一篇《基于流的深度生成模型》中详解介绍了有关流的生成模型理论和方法。目前为止,基于GAN生成模型,基于VAE的生成模型,以及基于flow的生成模型它们都可以生成较高质量的样本,但每种方法都有其局限性。GAN在对抗训练过程中会出现模式崩塌和训练不稳定的问题;VAE则严重依赖于目标损失函数;流模型则必须使用专门的框架来构建可逆变换。本文主要介绍关于扩散模型,其灵感来自于非平衡热力学。它们定义了扩散步骤的马尔可夫链,将随机噪声缓慢地添加到数据中,然后学习逆向扩散过程以从噪声中构造所需的数据样本。 与VAE或流模型不同,扩散模型是通过固定过程学习的,并且中间的隐变量与原始数据具有高维数维度。

给定从真实数据分布
x
0
∼
q
(
x
)
{\bf{x}}_0\sim q({\bf{x}})
x0∼q(x)中采样的数据点,在一个前向扩散过程,在
T
T
T步里逐步向样本中添加少量高斯噪声,从而产生一系列噪声样本
x
1
,
⋯
,
x
T
{\bf{x}}_1,\cdots,{\bf{x}}_T
x1,⋯,xT,其步长由方差计划
{
β
t
∈
(
0
,
1
)
}
t
=
1
T
\{\beta_t\in(0,1)\}_{t=1}^T
{βt∈(0,1)}t=1T来控制,则有
q
(
x
t
∣
x
t
−
1
)
=
N
(
x
t
;
1
−
β
x
t
−
1
,
β
t
I
)
q
(
x
1
:
T
∣
x
0
)
=
∏
t
=
1
T
q
(
x
t
∣
x
t
−
1
)
q({\bf{x}}_t|{\bf{x}}_{t-1})=\mathcal{N}({\bf{x}}_t;\sqrt{1-\beta}{\bf{x}}_{t-1},\beta_t {\bf{I}})\quad q({\bf{x}}_{1:T}|{\bf{x}}_0)=\prod_{t=1}^Tq({\bf{x}}_t|{\bf{x}}_{t-1})
q(xt∣xt−1)=N(xt;1−βxt−1,βtI)q(x1:T∣x0)=t=1∏Tq(xt∣xt−1)在扩散过程进行的时候,随着时长步长
t
t
t的增大,数据样本
x
0
{\bf{x}}_0
x0逐渐失去其可区分的特征。最终,当
T
→
∞
T\rightarrow \infty
T→∞,
x
T
{\bf{x}}_T
xT等价于各向同性高斯分布(各向同性的高斯分布即球形高斯分布,特指的是各个方向方差都一样的多维高斯分布,协方差为正实数与单位矩阵相乘)。

上述过程的一个很好的特性是可以使用重新参数化技巧以封闭形式在任意时间步长
t
t
t对
x
t
{\bf{x}}_t
xt进行采样。 令
α
t
=
1
−
β
t
\alpha_t=1-\beta_t
αt=1−βt和
α
ˉ
t
=
∏
i
=
1
T
α
i
\bar{\alpha}_t=\prod_{i=1}^T \alpha_i
αˉt=∏i=1Tαi,进而则有:
x
t
=
α
t
x
t
−
1
+
1
−
α
t
z
t
−
1
=
α
t
α
t
−
1
x
t
−
2
+
1
−
α
t
α
t
−
1
z
ˉ
t
−
2
=
⋯
=
α
ˉ
t
x
0
+
1
−
α
ˉ
t
z
q
(
x
t
∣
x
0
)
=
N
(
x
t
;
α
ˉ
t
x
0
,
(
1
−
α
ˉ
t
)
I
)
xt=√αtxt−1+√1−αtzt−1=√αtαt−1xt−2+√1−αtαt−1ˉzt−2=⋯=√ˉαtx0+√1−ˉαtzq(xt|x0)=N(xt;√ˉαtx0,(1−ˉαt)I)
Langevin动力学是物理学中的一个概念,用于对分子系统进行统计建模。结合随机梯度下降,随机梯度朗之万动力学可以仅使用马尔可夫更新链中的梯度 ∇ x log p ( x ) \nabla_{\bf{x}} \log p({\bf{x}}) ∇xlogp(x)从概率密度 p ( x ) p({\bf{x}}) p(x)生成样本: x t = x t − 1 + ϵ 2 ∇ x log p ( x t − 1 ) + ϵ z t , z t ∼ N ( 0 , I ) {\bf{x}}_t={\bf{x}}_{t-1}+\frac{\epsilon}{2}\nabla_{\bf{x}} \log p({\bf{x}}_{t-1})+\sqrt{\epsilon}{\bf{z}}_t,\quad {\bf{z}}_t\sim\mathcal{N}({\bf{0}},{\bf{I}}) xt=xt−1+2ϵ∇xlogp(xt−1)+ϵzt,zt∼N(0,I)其中 ϵ \epsilon ϵ为步长。当 T → ∞ T\rightarrow \infty T→∞时, ϵ → 0 \epsilon\rightarrow 0 ϵ→0, x {\bf{x}} x_T则等于真实概率密度 p ( x ) p({\bf{x}}) p(x)。与标准SGD相比,随机梯度Langevin动力学将高斯噪声注入到参数更新中,以避免陷入到局部最小值中。
如果将上述过程进行反转并从概率分布
q
(
x
t
−
1
∣
x
t
)
q({\bf{x}}_{t-1}|{\bf{x}}_t)
q(xt−1∣xt)中进行采样,则能够从高斯噪声输入
x
T
∼
N
(
0
,
I
)
{\bf{x}}_T\sim \mathcal{N}({\bf{0}},{\bf{I}})
xT∼N(0,I)中重新构造真实样本。需要注意的是如果
β
t
\beta_t
βt足够小,
q
(
x
t
−
1
,
x
t
)
q({\bf{x}}_{t-1},{\bf{x}}_t)
q(xt−1,xt)也将是高斯分布。但这需要使用整个数据集进行估计,因此需要学习一个模型
p
θ
p_\theta
pθ来近似这些条件概率,以便进行反向扩散过程
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
)
)
p_\theta({\bf{x}}_{0:T})=p({\bf{x}}_T)\prod_{t=1}^T p_\theta({\bf{x}}_{t-1}|{\bf{x}}_t)\quad p_\theta({\bf{x}}_{t-1}|{\bf{x}}_t)=\mathcal{N}({\bf{x}}_{t-1};\boldsymbol{\mu}_\theta({\bf{x}}_t,t),{{\bf{\Sigma}}_\theta({\bf{x}}_t,t)})
pθ(x0:T)=p(xT)t=1∏Tpθ(xt−1∣xt)pθ(xt−1∣xt)=N(xt−1;μθ(xt,t),Σθ(xt,t))当条件为
x
0
{\bf{x}}_0
x0时,反向条件概率是容易估计处理的:
q
(
x
t
−
1
∣
x
t
,
x
0
)
=
N
(
x
t
−
1
;
μ
(
x
t
,
x
0
)
,
β
~
t
I
)
q({\bf{x}}_{t-1}|{\bf{x}}_t,{\bf{x}}_0)=\mathcal{N}({\bf{x}}_{t-1};\boldsymbol{\mu}({\bf{x}}_t,{\bf{x}}_0),\tilde{\beta}_t{\bf{I}})
q(xt−1∣xt,x0)=N(xt−1;μ(xt,x0),β~tI)使用贝叶斯法则可以得到
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
)
∝
exp
[
−
1
2
(
(
x
t
−
α
t
x
t
−
1
)
2
β
t
+
(
x
t
−
1
−
α
ˉ
t
−
1
x
0
)
2
1
−
α
ˉ
t
−
1
−
(
x
t
−
α
ˉ
t
x
0
)
2
1
−
α
ˉ
t
)
]
=
exp
[
−
1
2
(
x
t
2
−
2
α
t
x
t
x
t
−
1
+
α
t
x
t
−
1
2
β
t
+
x
t
−
1
2
−
2
α
ˉ
t
−
1
x
0
x
t
−
1
+
α
ˉ
t
−
1
x
0
1
−
α
ˉ
t
−
1
−
(
x
t
−
α
ˉ
t
x
0
)
2
1
−
α
ˉ
t
)
]
=
exp
[
−
1
2
(
(
α
t
β
t
+
1
1
−
α
ˉ
t
−
1
)
x
t
−
1
2
−
(
2
α
t
β
t
x
t
+
2
α
ˉ
t
−
1
1
−
α
ˉ
t
−
1
x
0
)
x
t
−
1
+
C
(
x
t
,
x
0
)
)
]
q(xt−1|xt,x0)=q(xt|xt−1,x0)q(xt−1|x0)q(xt|x0)∝exp[−12((xt−√αtxt−1)2βt+(xt−1−√ˉαt−1x0)21−ˉαt−1−(xt−√ˉαtx0)21−ˉαt)]=exp[−12(x2t−2√αtxtxt−1+αtx2t−1βt+x2t−1−2√ˉαt−1x0xt−1+ˉαt−1x01−ˉαt−1−(xt−√ˉαtx0)21−ˉαt)]=exp[−12((αtβt+11−ˉαt−1)x2t−1−(2√αtβtxt+2√ˉαt−11−ˉαt−1x0)xt−1+C(xt,x0))]
当需要学习一个神经网络来逼近反向扩散过程中的条件概率分布
p
θ
(
x
t
−
1
∣
x
t
)
=
N
(
x
t
−
1
;
μ
θ
(
x
t
,
t
)
,
Σ
θ
(
x
t
,
t
)
)
p_\theta({\bf{x}}_{t-1}|{\bf{x}}_t)=\mathcal{N}({\bf{x}}_{t-1};\boldsymbol{\mu}_\theta({\bf{x}}_t,t),{\bf{\Sigma}}_\theta({\bf{x}}_t,t))
pθ(xt−1∣xt)=N(xt−1;μθ(xt,t),Σθ(xt,t))时,即想训练
μ
θ
\boldsymbol{\mu}_\theta
μθ预测
μ
~
t
=
1
α
t
(
x
−
β
t
1
−
α
ˉ
t
z
t
)
\tilde{\boldsymbol{\mu}}_t=\frac{1}{\sqrt{\alpha_t}}\left({\bf{x}}-\frac{\beta_t}{\sqrt{1-\bar{\alpha}_t}}{\bf{z}}_t\right)
μ~t=αt1(x−1−αˉtβtzt)。 因为
x
t
{\bf{x}}_t
xt在训练时可用作输入,可以重新参数化高斯噪声项,以使其从时间步长
t
t
t的输入
x
t
{\bf{x}}_t
xt中预测
z
t
{\bf{z}}_t
zt:
μ
θ
(
x
t
,
t
)
=
1
α
t
(
x
t
−
β
t
1
−
α
ˉ
t
z
θ
(
x
t
,
t
)
)
x
t
−
1
=
N
(
x
t
−
1
;
1
α
t
(
x
t
−
β
t
1
−
α
ˉ
t
z
θ
(
x
t
,
t
)
)
,
Σ
θ
(
x
t
,
t
)
)
μθ(xt,t)=1√αt(xt−βt√1−ˉαtzθ(xt,t))xt−1=N(xt−1;1√αt(xt−βt√1−ˉαtzθ(xt,t)),Σθ(xt,t))
Song和Ermon等人提出了一种基于分数的生成建模方法,其中样本是通过Langevin动力学使用分数匹配估计的数据分布梯度生成的。每个样本 x \bf{x} x的密度概率得分定义为其梯度 ∇ x log p ( x ) \nabla_{\bf{x}}\log p({\bf{x}}) ∇xlogp(x)。训练一个分数网络 s θ : R D → R D s_\theta:\mathbb{R}^D\rightarrow\mathbb{R}^D sθ:RD→RD来估计它。为了在深度学习设置中使用高维数据使其可扩展,有研究建议使用去噪分数匹配(向数据添加预先指定的小噪声)或切片分数匹配。Langevin动力学可以仅使用迭代过程中的分数从概率密度分布中采样数据点 ∇ x log p ( x ) \nabla_{\bf{x}}\log p({\bf{x}}) ∇xlogp(x)。然而,根据流形假设,大多数数据预计集中在低维流形中,即使观察到的数据可能看起来只是任意高维。由于数据点无法覆盖整个空间 R D \mathbb{R}^D RD,因此对分数估计产生了负面影响。在数据密度低的区域,分数估计不太可靠。添加一个小的高斯噪声使扰动的数据分布覆盖整个空间后,分数评估网络的训练变得更加稳定。 Song和Ermon等人通过用不同级别的噪声扰动数据来改进它,并训练一个噪声条件评分网络来共同估计所有扰动数据在不同噪声级别下的分数。
参数化
β
t
\beta_t
βt的过程中,Ho等人将前向方差被设置为一系列线性增加的常数,从
β
1
=
1
0
−
4
\beta_1=10^{-4}
β1=10−4到
β
T
=
0.02
\beta_T=0.02
βT=0.02。与
[
−
1
,
1
]
[-1,1]
[−1,1]之间的归一化图像像素值相比,它们相对较小。在此设置下实验中的扩散模型生成了高质量的样本,但仍然无法像其他生成模型那样实现具有竞争力。Nichol和Dhariwal等人提出了几种改进技术来帮助扩散模型获得更低的NLL。 其中一项改进是使用基于余弦的方差计划。调度函数的选择可以是任意的,只要它在训练过程的中间提供一个近线性的下降和围绕
t
=
0
t=0
t=0和
t
=
T
t=T
t=T的细微变化
β
t
=
c
l
i
p
(
1
−
α
ˉ
t
α
t
−
1
,
0.999
)
α
ˉ
t
=
f
(
t
)
f
(
0
)
w
h
e
r
e
f
(
t
)
=
cos
(
t
/
T
+
s
1
+
s
⋅
π
2
)
\beta_t=\mathrm{clip}(1-\frac{\bar{\alpha}_t}{\alpha_{t-1}},0.999)\quad \bar{\alpha}_t=\frac{f(t)}{f(0)} \quad \mathrm{where}\text{ } f(t)=\cos(\frac{t/T+s}{1+s}\cdot \frac{\pi}{2})
βt=clip(1−αt−1αˉt,0.999)αˉt=f(0)f(t)where f(t)=cos(1+st/T+s⋅2π)其中当
t
=
0
t=0
t=0时小偏移量
s
s
s是为了防止
β
t
\beta_t
βt接近时太小。
参数化
Σ
θ
{\bf{\Sigma}}_\theta
Σθ的过程中,Ho等人选择固定
β
t
\beta_t
βt为常量,而不是使它们可学习并设置
Σ
θ
(
x
t
,
t
)
=
σ
t
2
I
{\bf{\Sigma}}_\theta({\bf{x}}_t,t)=\sigma^2_t{\bf{I}}
Σθ(xt,t)=σt2I, 其中
σ
t
\sigma_t
σt是不可学习的。实验发现学习对角方差
Σ
θ
{\bf{\Sigma}}_\theta
Σθ会导致训练不稳定和样本质量下降。Nichol和Dhariwal等人提出将学习
Σ
θ
(
x
t
,
t
)
{\bf{\Sigma}}_\theta({\bf{x}}_t,t)
Σθ(xt,t)作为
β
\beta
β和
β
~
t
\tilde{\beta}_t
β~t之间的插值,通过模型预测混合向量
v
{\bf{v}}
v,则有:
Σ
θ
(
x
t
,
t
)
=
exp
(
v
log
β
t
+
(
1
−
v
)
log
β
~
t
)
{\bf{\Sigma}}_\theta({\bf{x}}_t,t)=\exp({\bf{v}}\log \beta_t+(1-{\bf{v}})\log\tilde{\beta}_t)
Σθ(xt,t)=exp(vlogβt+(1−v)logβ~t)简单的目标
L
s
i
m
p
l
e
L_{\mathrm{simple}}
Lsimple并不依赖于
Σ
θ
{\bf{\Sigma}}_\theta
Σθ。为了增加依赖性,他们构建了一个混合目标
L
h
y
b
r
i
d
=
L
s
i
m
p
l
e
+
λ
L
V
L
B
L_{\mathrm{hybrid}}=L_{\mathrm{simple}}+\lambda L_{\mathrm{VLB}}
Lhybrid=Lsimple+λLVLB,其中
λ
=
0.001
\lambda=0.001
λ=0.001很小并且停止在
μ
θ
\boldsymbol{\mu}_\theta
μθ的梯度,以便
L
V
L
B
L_{\mathrm{VLB}}
LVLB仅指导
Σ
θ
{\bf{\Sigma}}_\theta
Σθ的学习。可以观察到,由于梯度噪声,优化
L
V
L
B
L_{\mathrm{VLB}}
LVLB是非常困难的,因此他们建议使用具有重要性采样的时间平均平滑版本。
通过遵循反向扩散过程的马尔可夫链从DDPM生成样本非常慢,可能长达一个或几千个步骤。从DDPM中采样
50000
50000
50000个大小为
32
×
32
32\times32
32×32的图像大约需要
20
20
20小时,但从Nvidia 2080 Ti GPU上的GAN中采样不到一分钟。一种简单的方法是运行跨步抽样计划,每一步都进行抽样更新,以减少中间的采样过程。对于另一种方法,需要重写
q
σ
(
x
t
∣
x
t
,
x
0
)
q_\sigma({\bf{x}}_t|{\bf{x}}_t,{\bf{x}}_0)
qσ(xt∣xt,x0)以通过所需的标准偏差
σ
t
\sigma_t
σt进行参数化:
x
t
−
1
=
α
ˉ
t
−
1
x
0
+
1
−
α
ˉ
t
−
1
z
t
−
1
=
α
ˉ
t
−
1
x
0
+
1
−
α
ˉ
t
−
1
−
σ
t
2
z
t
+
σ
t
z
=
α
ˉ
t
−
1
x
0
+
1
−
α
ˉ
t
−
1
−
σ
t
2
x
t
−
α
ˉ
t
x
0
1
−
α
ˉ
t
+
σ
t
z
q
σ
(
x
t
−
1
∣
x
t
,
x
0
)
=
N
(
x
t
−
1
;
α
ˉ
t
−
1
x
0
+
1
−
α
ˉ
t
−
1
−
σ
t
2
x
t
−
α
ˉ
t
x
0
1
−
α
ˉ
t
,
σ
t
2
I
)
xt−1=√ˉαt−1x0+√1−ˉαt−1zt−1=√ˉαt−1x0+√1−ˉαt−1−σ2tzt+σtz=√ˉαt−1x0+√1−ˉαt−1−σ2txt−√ˉαtx0√1−ˉαt+σtzqσ(xt−1|xt,x0)=N(xt−1;√ˉαt−1x0+√1−ˉαt−1−σ2txt−√ˉαtx01−ˉαt,σ2tI)
在ImageNet数据上训练生成模型时,通常会生成以类标签为条件的样本。为了明确地将类别信息纳入扩散过程,Dhariwal和Nichol对噪声图像 x t {\bf{x}}_t xt训练了一个分类器 f ϕ ( y ∣ x t , t ) f_\phi(y|{\bf{x}}_t,t) fϕ(y∣xt,t),并使用梯度 ∇ x log f ϕ ( y ∣ x t , t ) \nabla_{{\bf{x}}} \log f_{\phi}(y|{\bf{x}}_t,t) ∇xlogfϕ(y∣xt,t)来引导扩散采样过程朝向目标类别标签 y y y。消融扩散模型 (ADM) 和带有附加分类器引导的模型 (ADM-G) 能够获得比当前最好生成模型(BigGAN)更好的结果。此外,Dhariwal和Nichol等人通过对UNet架构进行一些修改,显示出比具有扩散模型的GAN更好的性能。模型架构修改包括更大的模型深度/宽度、更多注意力头、多分辨率注意力、用于上/下采样的BigGAN残差块、残差连接重新缩放和自适应组归一化 (AdaGN)。