引言
在讨论DDPM之前,我们要先对生成模型有一个认识,何为生成模型?从“生成”二字出发,生成模型肯定要能生成样本,并且需要具备多样性、创新性。模型只有从训练数据中学习到数据分布,才能采样生成新样本。所以,生成模型是对训练数据分布建模的模型。既然说到分布,必然和概率挂钩,故DDPM全称是去噪扩散概率模型。
往往谈到深度学习,都会将其视为一个黑盒子,缺乏可解释性;但有时也确实不用深究其到底是如何学习到知识的,一种很淳朴的思想是:哪个环节缺失,就通过深度学习把它学习出来,实现最终目的。比如,缺一个分类器,就搜集数据训练一个;想要有一个模型生成图片,还是搜集数据训练一个;当然,这是一种极简的抽象思维,但至少在概念理解时很有效。
前置知识
本系列文档将对生成模型范式演变进行分析,必然会涉及到大量的公式推导,大部分都是高中数学知识,主要是关于概率论,在此进行一个简单的汇总阐述:
- 马尔可夫过程:只用记住当前状态只依赖于前一状态,只与前一状态有关
- 高斯分布/正态分布:一种连续概率分布,记为
X
∼
N
(
μ
,
σ
2
I
)
X \sim N(\mu, \sigma^2I)
X∼N(μ,σ2I)
- 均值 μ \mu μ::分布的中心点,决定了分布的对称中心
- 标准差 σ \sigma σ:决定了分布的宽度,标准差越大,数据的分散程度越高,曲线越平缓
- 概率密度函数: f ( x ∣ μ , σ 2 ) = 1 2 π σ 2 exp ( − ( x − μ ) 2 2 σ 2 ) f(x|\mu,\sigma^2)=\frac{1}{\sqrt{2\pi\sigma^2}}\exp(-\frac{(x-\mu)^2}{2\sigma^2}) f(x∣μ,σ2)=2πσ21exp(−2σ2(x−μ)2)
- 标准正态分布:均值 μ \mu μ为0,标准差 σ \sigma σ为1的正态分布
- 概率密度函数/PDF:描述连续随机变量的概率分布,表征随机变量在不同值上出现的相对可能性;积分可以计算出随机变量落在某个区间内的概率
- ∫ f ( x ) d x = 1 \int f(x)dx = 1 ∫f(x)dx=1
- P ( a ≤ X ≤ b ) = ∫ a b f ( x ) d x P(a \le X \le b) = \int^b_a f(x)dx P(a≤X≤b)=∫abf(x)dx:表示随机变量 X X X落在 [ a , b ] [a,b] [a,b]之间的概率
- 联合概率:描述两个或多个随机变量同时发生的概率;对于两个随机变量
X
X
X和
Y
Y
Y,它们的联合概率分布被记作
P
(
X
,
Y
)
P(X,Y)
P(X,Y)
- P ( X , Y ) = P ( X ∣ Y ) P ( Y ) = P ( Y ∣ X ) P ( X ) P(X,Y) = P(X|Y)P(Y) = P(Y|X)P(X) P(X,Y)=P(X∣Y)P(Y)=P(Y∣X)P(X)
- P ( X , Y , Z ) = P ( X ∣ Y , Z ) P ( Y , Z ) = P ( X ∣ Y , Z ) P ( Y ∣ Z ) P ( Z ) P(X,Y,Z) = P(X|Y,Z)P(Y,Z) = P(X|Y,Z)P(Y|Z)P(Z) P(X,Y,Z)=P(X∣Y,Z)P(Y,Z)=P(X∣Y,Z)P(Y∣Z)P(Z)
- 边缘概率:当一个概率分布涉及两个或多个随机变量时,对某一个(或几个)随机变量进行"边缘化"处理,得到该(些)随机变量本身的概率分布
- 假设有两个随机变量 X X X和 Y Y Y,它们的联合概率分布为 P ( X , Y ) P(X,Y) P(X,Y),那么 X X X的边缘概率分布就是 P ( X ) = Σ P ( X , Y ) P(X) = Σ P(X,Y) P(X)=ΣP(X,Y),也就是将 Y Y Y从联合概率分布中"边缘化"或"积出"而得到的 X X X自身的概率分布
- 期望:表示随机变量的加权平均值,连续随机变量 E ( X ) = ∫ x f ( x ) d x E(X) = \int x f(x) dx E(X)=∫xf(x)dx, E ( X , Y ) = E ( X ) ∗ E ( Y ) E(X,Y)=E(X)*E(Y) E(X,Y)=E(X)∗E(Y)
- KL散度:表征两个概率分布差异的一种方式,描述一个概率分布相对于另一个概率分布的“信息损失”或“距离”;也可以简单理解为相似性,KL散度越小,相似性越大
- 对于两个连续概率分布
P
(
x
)
P(x)
P(x)和
Q
(
x
)
Q(x)
Q(x)(在相同的定义域上), 从分布
Q
Q
Q到分布
P
P
P的KL散度 D_KL(P||Q) 定义为:
D
K
L
(
P
∣
∣
Q
)
=
∫
p
(
x
)
log
(
p
(
x
)
/
q
(
x
)
)
d
x
D_{KL}(P||Q) = ∫ p(x) \log(p(x) / q(x)) dx
DKL(P∣∣Q)=∫p(x)log(p(x)/q(x))dx
- 积分是在 P ( x ) P(x) P(x)的定义域上进行
- P ( x ) P(x) P(x)是真实概率分布
- Q ( x ) Q(x) Q(x)是近似或模型预测概率分布
- KL散度是非负的,且当且仅当 P ( x ) = Q ( x ) P(x)=Q(x) P(x)=Q(x)时等于0
- KL散度是非对称的,即 D K L ( P ∣ ∣ Q ) ≠ D K L ( Q ∣ ∣ P ) D_{KL}(P||Q) ≠ D_{KL}(Q||P) DKL(P∣∣Q)=DKL(Q∣∣P)
- KL散度在机器学习中用于判断模型的拟合程度,如最大似然估计;最小化KL散度等同于最大化似然函数
- 对于两个单一变量的高斯分布 P ∼ N ( μ 1 , σ 1 2 I ) P \sim N(\mu_1,\sigma_1^2I) P∼N(μ1,σ12I)和 Q ∼ N ( μ 2 , σ 2 2 I ) Q \sim N(\mu_2,\sigma_2^2I) Q∼N(μ2,σ22I), D K L ( P ∣ ∣ Q ) = log σ 2 σ 1 + σ 1 2 + ( μ 1 − μ 2 ) 2 2 σ 2 2 − 1 2 D_{KL}(P||Q) = \log\frac{\sigma_2}{\sigma_1}+\frac{\sigma_1^2+(\mu_1-\mu_2)^2}{2\sigma_2^2}-\frac{1}{2} DKL(P∣∣Q)=logσ1σ2+2σ22σ12+(μ1−μ2)2−21
- 对于两个连续概率分布
P
(
x
)
P(x)
P(x)和
Q
(
x
)
Q(x)
Q(x)(在相同的定义域上), 从分布
Q
Q
Q到分布
P
P
P的KL散度 D_KL(P||Q) 定义为:
D
K
L
(
P
∣
∣
Q
)
=
∫
p
(
x
)
log
(
p
(
x
)
/
q
(
x
)
)
d
x
D_{KL}(P||Q) = ∫ p(x) \log(p(x) / q(x)) dx
DKL(P∣∣Q)=∫p(x)log(p(x)/q(x))dx
- 重参数化:若需要从 N ( μ , σ 2 I ) N(\mu, \sigma^2I) N(μ,σ2I)中随机采样样本 x x x,可以先从标注正态分布 N ( 0 , 1 ) N(0, 1) N(0,1)中随机采样一个值,记为 z z z,再通过 x = σ ∗ z + μ x = \sigma * z + \mu x=σ∗z+μ得到 N ( μ , σ 2 I ) N(\mu, \sigma^2I) N(μ,σ2I)分布中的样本。这样做,可以使得模型训练过程在遇到分布时是连续的,通过对 σ \sigma σ和 μ \mu μ预测,实现对分布的学习。
DDPM是在学什么?
看过DDPM论文或了解过扩散模型的读者应该对上图都不陌生,该图是DDPM论文中对扩散模型过程的直观描述。在DDPM中, x 0 x_0 x0为目标分布中的样本, x T x_T xT是通过对 x 0 x_0 x0中进行T步加噪后的数据。从右到左,是加噪过程,或称为前向过程/正向过程,每一步对上一步数据中随机增加一点噪声,经过T步后,原始图片完全变成一个随机噪声,假设此过程符合标准正态分布,则这一过程可由条件概率 q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xt∣xt−1)表征,是一个马尔可夫过程, x t x_t xt只与 x t − 1 x_{t-1} xt−1有关。
生成过程,是去噪过程,或称为逆向过程,是从随机噪声出发,一步步减少噪声,即从 X T X_T XT到 X 0 X_0 X0的过程,即上图中从左至右;但“去噪”二字是宏观上的理解,实际是基于训练学习到分布进行采样。如果我们只有一批图片数据,但不进行训练,是不可能从随机噪声生成图片的。此时就用到了引言中提到的思维----缺什么,就用深度学习训练什么。DDPM的建模目标就是“如何基于 x t x_t xt预测出 x t − 1 x_{t-1} xt−1”,即一个条件概率分布,记为 p θ ( x t − 1 ∣ x t ) p_{\theta}(x_{t-1}|x_t) pθ(xt−1∣xt),在深度学习公式推导中 θ \theta θ一般表征与训练模型相关的项。
现在我们知道了,DDPM的学习目标就是通过训练使 p θ ( x t − 1 ∣ x t ) p_{\theta}(x_{t-1}|x_t) pθ(xt−1∣xt)趋近于真实数据分布,对训练数据分布进行建模。
加噪过程的慢与快
从真实数据分布采样的数据点
x
0
∼
q
(
x
0
)
x_0 \sim q(x_0)
x0∼q(x0),以T步向样本中逐步添加少量噪声,产生一系列的噪声样本
x
1
,
x
2
,
.
.
.
,
x
T
x_1,x_2,...,x_T
x1,x2,...,xT。每一步加噪过程是随机从一个高斯分布中采样噪声,然后与上一步数据相加,加噪过程中每一步采样噪声的分布的方差由
β
1
,
β
2
,
.
.
.
,
β
T
\beta_1,\beta_2,...,\beta_T
β1,β2,...,βT控制,在DDPM中
β
i
\beta_i
βi是超参数,是人为设置的非训练参数。前面提到,加噪过程是马尔可夫过程,且因为每一步是在上一步数据中增加少量噪声,故认为每一步数据都符合高斯分布,即有以下公式:
q
(
x
t
∣
x
t
−
1
)
=
N
(
x
t
;
1
−
β
t
x
t
−
1
,
β
t
I
)
(1)
q(x_t|x_{t-1}) = N(x_t;\sqrt{1-\beta_t}x_{t-1},\beta_t I) \tag1
q(xt∣xt−1)=N(xt;1−βtxt−1,βtI)(1)
其中
{
β
i
∈
(
0
,
1
)
}
1
T
\{\beta_i \in (0,1)\}_1^T
{βi∈(0,1)}1T,且
β
1
<
β
2
<
,
.
.
.
,
<
β
T
\beta_1<\beta_2<,...,<\beta_T
β1<β2<,...,<βT。公式(1)可以直接理解为,当前步数据
x
t
x_t
xt是由前一步数据
x
t
−
1
x_{t-1}
xt−1和少量噪声组成,即
x
t
=
1
−
β
t
x
t
−
1
+
β
t
ϵ
x_t = \sqrt{1-\beta_t} x_{t-1} + \sqrt{\beta_t} \epsilon
xt=1−βtxt−1+βtϵ,其中
ϵ
∼
N
(
0
,
I
)
\epsilon \sim N(0,I)
ϵ∼N(0,I)。随着步数
t
t
t增加,数据
x
t
x_t
xt逐渐丢失其可区分的特征,当T足够大时,
x
T
x_T
xT最终等价于各项同性的高斯分布。DDPM中T为1000,但一步一步计算很低效,基于马尔可夫过程性质,结合重参数化技巧,能推导出一步到位计算公式,具体过程如下:
基于公式(1),记
α
t
=
1
−
β
t
,
α
ˉ
t
=
∏
1
t
α
i
\alpha_t = 1 - \beta_t, \bar{\alpha}_t=\prod_1^t \alpha_i
αt=1−βt,αˉt=∏1tαi,有:
x
t
=
1
−
β
t
x
t
−
1
+
β
t
ϵ
t
−
1
=
α
t
x
t
−
1
+
1
−
α
t
ϵ
t
−
1
=
α
t
(
α
t
−
1
x
t
−
2
+
1
−
α
t
−
1
ϵ
t
−
2
)
+
1
−
α
t
ϵ
t
−
1
=
α
t
α
t
−
1
x
t
−
2
+
α
t
(
1
−
α
t
−
1
)
ϵ
t
−
2
+
1
−
α
t
ϵ
t
−
1
\begin{align*} x_t & = \sqrt{1-\beta_t} x_{t-1} + \sqrt{\beta_t} \epsilon_{t-1} \\ & = \sqrt{\alpha_t} x_{t-1} + \sqrt{1-\alpha_t} \epsilon_{t-1} \\ & = \sqrt{\alpha_t}(\sqrt{\alpha_{t-1}}x_{t-2}+\sqrt{1-\alpha_{t-1}} \epsilon_{t-2})+ \sqrt{1-\alpha_t} \epsilon_{t-1} \\ & = \sqrt{\alpha_t \alpha_{t-1}}x_{t-2} + \sqrt{\alpha_t (1-\alpha_{t-1})}\epsilon_{t-2}+\sqrt{1-\alpha_t} \epsilon_{t-1} \tag2 \end{align*}
xt=1−βtxt−1+βtϵt−1=αtxt−1+1−αtϵt−1=αt(αt−1xt−2+1−αt−1ϵt−2)+1−αtϵt−1=αtαt−1xt−2+αt(1−αt−1)ϵt−2+1−αtϵt−1(2)
两个高斯分布的线性组合也符合高斯分布,假设有
X
∼
N
(
μ
1
,
σ
1
2
I
)
X \sim N(\mu_1, \sigma_1^2I)
X∼N(μ1,σ12I),
Y
∼
N
(
μ
2
,
σ
2
2
I
)
Y \sim N(\mu_2, \sigma_2^2I)
Y∼N(μ2,σ22I),则
a
X
+
b
Y
∼
N
(
a
μ
1
+
b
μ
2
,
(
a
2
σ
1
2
+
b
2
σ
2
2
)
I
)
aX + bY \sim N(a\mu_1+b\mu_2, (a^2\sigma_1^2+b^2\sigma_2^2)I)
aX+bY∼N(aμ1+bμ2,(a2σ12+b2σ22)I)
即,两个高斯分布之和也符合一个高斯分布。
上述公式(2)中后面两项是两个从高斯分布中采样的噪声项之和,再结合上段阐述的两个高斯分布之和也符合高斯分布,自然而然就可以会联想到将两个噪声项合并。即,有两个高斯分布,
ϵ
t
−
1
∼
N
(
0
,
I
)
\epsilon_{t-1} \sim N(0,I)
ϵt−1∼N(0,I),
ϵ
t
−
2
∼
N
(
0
,
I
)
\epsilon_{t-2} \sim N(0,I)
ϵt−2∼N(0,I),则
α
t
(
1
−
α
t
−
1
)
ϵ
t
−
2
+
1
−
α
t
ϵ
t
−
1
∼
N
(
0
,
(
α
t
(
1
−
α
t
−
1
)
+
1
−
α
t
)
I
)
∼
N
(
0
,
(
α
t
−
α
t
α
t
−
1
+
1
−
α
t
)
I
)
∼
N
(
0
,
(
1
−
α
t
α
t
−
1
)
I
)
\begin{align*} \sqrt{\alpha_t (1-\alpha_{t-1})}\epsilon_{t-2}+\sqrt{1-\alpha_t} \epsilon_{t-1} & \sim N(0,(\alpha_t (1-\alpha_{t-1})+1-\alpha_t)I) \\ & \sim N(0,(\alpha_t-\alpha_t\alpha_{t-1}+1-\alpha_t)I) \\ & \sim N(0,(1-\alpha_t\alpha_{t-1})I) \end{align*}
αt(1−αt−1)ϵt−2+1−αtϵt−1∼N(0,(αt(1−αt−1)+1−αt)I)∼N(0,(αt−αtαt−1+1−αt)I)∼N(0,(1−αtαt−1)I)
故公式(2)中后面两项可以用一个噪声项表示,即
α
t
(
1
−
α
t
−
1
)
ϵ
t
−
2
+
1
−
α
t
ϵ
t
−
1
=
1
−
α
t
α
t
−
1
ϵ
ˉ
t
−
2
\sqrt{\alpha_t (1-\alpha_{t-1})}\epsilon_{t-2}+\sqrt{1-\alpha_t} \epsilon_{t-1} = \sqrt{1-\alpha_t\alpha_{t-1}} \bar{\epsilon}_{t-2}
αt(1−αt−1)ϵt−2+1−αtϵt−1=1−αtαt−1ϵˉt−2
将上式带入公式(2)有
x
t
=
α
t
α
t
−
1
x
t
−
2
+
1
−
α
t
α
t
−
1
ϵ
ˉ
t
−
2
(3)
x_t = \sqrt{\alpha_t \alpha_{t-1}}x_{t-2} + \sqrt{1-\alpha_t\alpha_{t-1}} \bar{\epsilon}_{t-2} \tag3
xt=αtαt−1xt−2+1−αtαt−1ϵˉt−2(3)
通过上述推导,
x
t
x_t
xt从基于
x
t
−
1
x_{t-1}
xt−1和噪声计算转换为可基于
x
t
−
2
x_{t-2}
xt−2和噪声计算,继续按照上述推导步骤,将公式(3)中的
x
t
−
2
x_{t-2}
xt−2由
x
t
−
3
x_{t-3}
xt−3和噪声表示,会将公式(3)转换为以下形式
x
t
=
α
t
α
t
−
1
α
t
−
2
x
t
−
3
+
1
−
α
t
α
t
−
1
α
t
−
2
ϵ
ˉ
t
−
3
x_t = \sqrt{\alpha_t \alpha_{t-1} \alpha_{t-2}}x_{t-3} + \sqrt{1-\alpha_t\alpha_{t-1}\alpha_{t-2}} \bar{\epsilon}_{t-3}
xt=αtαt−1αt−2xt−3+1−αtαt−1αt−2ϵˉt−3
最终会得到
x
t
=
α
t
α
t
−
1
.
.
.
α
1
x
0
+
1
−
α
t
α
t
−
1
.
.
.
α
1
ϵ
ˉ
0
=
α
ˉ
t
x
0
+
1
−
α
ˉ
t
ϵ
ˉ
0
\begin{align*} x_t & = \sqrt{\alpha_t \alpha_{t-1}... \alpha_1}x_0 + \sqrt{1-\alpha_t\alpha_{t-1}...\alpha_1} \bar{\epsilon}_0 \\ & = \sqrt{ \bar{\alpha}_t} x_0 + \sqrt{1- \bar{\alpha}_t} \bar{\epsilon}_0 \tag4 \end{align*}
xt=αtαt−1...α1x0+1−αtαt−1...α1ϵˉ0=αˉtx0+1−αˉtϵˉ0(4)
经过一系列推导,我们得到了公式(4),可以基于
x
0
x_0
x0、时间步
t
t
t和噪声,直接一步到位生成
x
t
x_t
xt,因为
ϵ
ˉ
0
∼
N
(
0
,
I
)
\bar{\epsilon}_0 \sim N(0,I)
ϵˉ0∼N(0,I),基于重参数化技巧,公式(4)与以下概率分布等价,
q
(
x
t
∣
x
0
)
∼
N
(
x
t
;
α
ˉ
t
x
0
,
(
1
−
α
ˉ
t
)
I
)
q(x_t|x_0) \sim N(x_t;\sqrt{ \bar{\alpha}_t} x_0, (1- \bar{\alpha}_t)I)
q(xt∣x0)∼N(xt;αˉtx0,(1−αˉt)I)
如果直接使用公式(1)从 x 0 x_0 x0开始一步一步计算 x t x_t xt,这个过程又慢又麻烦;通过推导,我们得到了公式(4),可以基于 x 0 x_0 x0和步数 t t t直接计算出 x t x_t xt,使得计算过程又快又简洁。
因CSDN正文字数限制,只能拆分为两个文档,后续内容接下文继续。