去噪技术(去噪扩散概率模型(DDPM)的简单理解)
图1 DDPM 无条件控制生成的图像 。 这些不是真实的人 、地方 、动物或物体 。
前言
扩散模型最近在图像生成领域取得了巨大的成功 ,类似 OpenAI 的 DALL-E 2 ,Google 的 Imagen ,以及 Stability AI 最近发行的能够达到商业级绘画目的的 Stable Diffusion 等 ,都是基于扩散模型来进行图像生成的 。本文对知乎上各位大佬对于扩散模型(特别是 DDPM)的讲解进行了融合 ,带领大家深入浅出理解扩散和逆扩散过程 。
数学基础
先验概率和后验概率先验概率:根据以往经验和分析得到的概率 。它往往作为由因求果问题中的因出现 ,如
q
(
X
t
∣
X
t
−
1
)
q(X_{t}|X_{t-1})
q(Xt∣Xt−1)后验概率:是指在得到结果的信息后重新修正的概率 。是执果寻因问题中的因 ,如
p
(
X
t
−
1
∣
X
t
)
p(X_{t-1}|X_{t})
p(Xt−1∣Xt) KL 散度对于两个单一变量的高斯分布的
p
p
p 和q
q
q 而言 ,它们的 KL 散度为:K
L
(
p
,
q
)
=
l
o
g
σ
2
σ
1
+
σ
1
2
+
(
μ
1
−
μ
2
)
2
2
σ
2
2
−
1
2
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}
KL(p,q)=logσ1σ2+2σ22σ12+(μ1−μ2)2−21 参数重整化若希望从高斯分布
N
(
μ
,
σ
2
)
N(\mu, \sigma^{2})
N(μ,σ2) 中采样 ,可以先从标准分布N
(
,
1
)
N(0, 1)
N(0,1) 采样出z
z
z ,再得到σ
∗
z
+
μ
\sigma*z+\mu
σ∗z+μ ,这就是我们想要的采样结果 。这样做的好处是将随机性转移到了z
z
z 这个常量上 ,而σ
\sigma
σ 和μ
\mu
μ 则当作仿射变换网络的一部分 。模型介绍
模型总览图2 DDPM 是经过训练以逐渐去除噪声数据的参数化马尔可夫链 。我们估计生成过程的参数 。
DDPM 主要分为两个过程:
forward 加噪过程(从右往左) reverse 去噪过程(从左往右)加噪过程是指向数据集中的真实图像逐步加入高斯噪声,而去噪过程是指对加了噪声的图片逐步去噪 ,从而还原出真实图像 。加噪过程满足一定的数学规律 ,不需要学习,而去噪过程则采用神经网络模型来学习 。这样一来 ,神经网络模型就可以从一堆杂乱无章的噪声图片中生成真实图片了。
扩散过程 逐步加噪给定初始数据分布
x
∼
q
(
x
)
x_{0} \sim q(x)
x0∼q(x) ,我们定义一个前向扩散过程(forward diffusion process):我们向数据分布中逐步添加高斯噪声 ,加噪过程持续T
T
T 次 ,产生一系列带噪声的图片x
1
,
.
.
.
,
x
T
x_{1},...,x_{T}
x1,...,xT 。在由x
t
−
1
x_{t-1}
xt−1 加噪至x
t
x_{t}
xt 的过程中 ,噪声的标准差/方差是以一个在区间(
,
1
)
(0, 1)
(0,1) 内的固定值β
T
\beta_{T}
βT 来确定的 ,均值是以固定值β
T
\beta_{T}
βT 和当前时刻的图片数据x
t
−
1
x_{t-1}
xt−1 来确定的 。以上描述的加噪过程可以写成公式:q
(
x
1
:
T
∣
x
)
:
=
∏
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
)
q(x_{1:T|x_{0}}):=\prod_{t=1}^{T}q(x_{t}|x_{t-1}), \quad q(x_{t}|x_{t-1}) := \mathcal N(x_{t};\sqrt{1-\beta_{t}}x_{t-1},\beta_{t}\mathbf{I})
q(x1:T∣x0):=t=1∏Tq(xt∣xt−1),q(xt∣xt−1):=N(xt;1−βtxt−1,βtI)上式的意思是:由
x
t
−
1
x_{t-1}
xt−1得到x
t
x_{t}
xt的过程 ,满足分布N
(
x
t
;
1
−
β
t
x
t
−
1
,
β
t
I
)
\mathcal N(x_{t};\sqrt{1-\beta_{t}}x_{t-1}, \beta_{t}\mathbf{I})
N(xt;1−βtxt−1,βtI) ,因此噪声只由β
T
\beta_{T}
βT和x
t
−
1
x_{t-1}
xt−1来确定 ,是一个固定值而不是一个可学习的过程。因此 ,只要有了x
x_{0}
x0 ,并且提前确定每一步的固定值β
1
,
.
.
.
,
β
T
\beta_{1},...,\beta_{T}
β1,...,βT ,我们就可以推出任意一部的加噪数据x
1
,
.
.
.
,
x
T
x_{1},...,x_{T}
x1,...,xT 。值得注意的是,这里的加噪过程是一个马尔科夫链过程 ,即当前状态的概率只与上一时刻有关 。 加噪结果随着
t
t
t 的不断增大 ,最终原始数据x
x_{0}
x0 会逐步失去它的特征 。最终当T
→
∞
T\rightarrow\infty
T→∞时,x
T
x_{T}
xT趋近于一个各向同性的高斯分布 。从视觉上看 ,就是将原本一张完好的照片加噪很多步后 ,图片几乎变成了一张完全时噪声的图片 。 任意时刻x
t
x_{t}
xt的计算逐步加噪过程中 ,我们其实并不需要一步步地从
x
,
x
1
,
.
.
.
x_{0},x_{1},...
x0,x1,... 去迭代得到x
t
x_{t}
xt 。事实上 ,我们可以直接从x
x_{0}
x0 和固定值序列{
β
T
∈
(
,
1
)
}
t
=
1
T
\{ \beta_{T}∈(0, 1)\}_{t=1}^{T}
{βT∈(0,1)}t=1T直接计算得到:q
(
x
t
∣
x
)
=
N
(
x
t
;
α
t
‾
x
,
(
1
−
α
t
‾
)
I
)
q(x_{t}|x_{0}) = \mathcal N(x_{t};\sqrt{\overline{\alpha_{t}}}x_{0}, (1-\overline{\alpha_{t}})\mathbf{I}) \\
q(xt∣x0)=N(xt;αtx0,(1−αt)I)上式中 ,
α
t
=
1
−
β
t
\alpha_{t}=1-\beta_{t}
αt=1−βt ,α
t
‾
=
∏
i
=
1
T
α
i
\overline{\alpha_{t}}=\prod_{i=1}^T\alpha_{i}
αt=∏i=1Tαi ,中间推导过程不再罗列 。 逆扩散过程如果我们能够将上述过程转换方法 ,即从
q
(
x
t
−
1
∣
x
t
)
q(x_{t-1}|x_{t})
q(xt−1∣xt)中采样 ,那么我们就可以从一个随机的高斯分布N
(
,
I
)
\mathcal N(0, \mathbf{I})
N(0,I)中重建出一个真实的原始样本 ,也就是从一个完全杂乱无章的噪声图片中得到一张真实图片 。但是 ,由于需要从完整数据集中找到数据分布 ,我们没办法简单地预测q
(
x
t
−
1
∣
x
t
)
q(x_{t-1}|x_{t})
q(xt−1∣xt),因此需要学习一个模型p
θ
p_{\theta}
pθ来近似模拟这个条件概率 ,从而运行逆扩散过程 。p
θ
(
x
:
T
)
:
=
p
(
x
T
)
∏
t
=
1
T
p
θ
(
x
t
−
1
∣
x
t
)
,
p
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!