赞
踩
变分自动编码器(VAE) 结合了自动编码器和变分推断的思想。它主要包括编码器和解码器两个部分。
VAE能够学习数据的潜在表示,并生成具有相似分布的新样本。在训练过程中,VAE的目标是最大化数据的边际似然,同时使潜在表示与先验分布(通常是高斯分布)的KL散度最小化。
生成对抗网络(GAN): 由生成器和判别器组成。
在训练过程中,生成器和判别器相互对抗、相互提升,最终使得生成器能够生成逼真的数据,判别器则很难区分真假数据。
流模型(Flow-based Models) 是一类生成模型,旨在学习数据的概率分布以生成新的样本。
P ( A , B , C ) = P ( C ∣ B , A ) P ( B , A ) = P ( C ∣ B ) P ( B ∣ A ) P ( A ) P ( B , C ∣ A ) = P ( B ∣ A ) P ( C ∣ B ) P(A,B,C)=P(C|B,A)P(B,A)=P(C|B)P(B|A)P(A)\\ P(B,C|A)=P(B|A)P(C|B) P(A,B,C)=P(C∣B,A)P(B,A)=P(C∣B)P(B∣A)P(A)P(B,C∣A)=P(B∣A)P(C∣B)
扩散模型(Diffusion Model)是一种新兴的生成式模型,其首先向数据分布中逐步添加随机噪声到预设的先验分布,然后通过学习其逆过程来重建新的数据样本。通常而言,扩散模型具有三种生成范式:
文章提出的扩散概率模型(diffusion probabilistic models)是使用变分推理训练的参数化马尔可夫链,以在有限时间后生成与数据匹配的样本。
前向过程是加噪的过程,前向过程中图像 x t x_t xt只和上一时刻的 x t − 1 x_{t-1} xt−1有关, q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xt∣xt−1)表示的就是前向过程。
扩散模型的前向过程是有具体的表达式可以计算的,满足:
后向过程是去噪的过程,公式表达为 q ( x t − 1 ∣ x t ) q(x_{t-1}|x_t) q(xt−1∣xt)。DDPM的后向过程是利用神经网络 P θ ( x t − 1 ∣ x t ) P_\theta(x_{t-1}|x_t) Pθ(xt−1∣xt)来拟合 q ( x t − 1 ∣ x t ) q(x_{t-1}|x_t) q(xt−1∣xt)。
马尔可夫链的前向过程是有具体的表达式可以计算的,后向过程是利用神经网络来学习的。因此模型训练主要集中在后向过程(逆扩散过程)。训练扩散模型的目标是学习正向的反过程,也就是训练概率分布 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1}|x_t) pθ(xt−1∣xt),通过沿着马尔科夫链向后遍历,可以重新生成新的数据 x 0 x_0 x0。
从数学表达式来看,训练生成模型的过程就是最大似然估计的过程,即对
p
θ
(
x
0
)
p_\theta(x_0)
pθ(x0)的最大似然估计进行优化,论文给出了负对数似然的上界表达式:
训练算法:
采样算法:
由于在前向过程中,单步转移概率定义为关于
x
t
−
1
x_{t-1}
xt−1的高斯分布,均值和协方差是
x
t
−
1
x_{t-1}
xt−1和
β
t
\beta_t
βt的函数,即:
可以利用重参数化技巧,将其改写成下面的式子:(就可以很直观的看到前向过程的噪声是怎么加的)
重参数化技巧:从高斯分布 N ( μ , σ 2 ) N(\mu,\sigma^2) N(μ,σ2)中采样一个噪声 ε \varepsilon ε,等价于先从标准正态分布 N ( 0 , 1 ) N(0,1) N(0,1)中采样得到一个噪声 z z z,然后乘以标准差 σ \sigma σ之后加上均值 μ \mu μ。在本文中, x t x_t xt是从高斯分布 N ( 1 − β t x t − 1 , β t I ) N(\sqrt{1-\beta_t}x_{t-1},\beta_tI) N(1−βt xt−1,βtI)中采样出的噪声,因此可以得到下边的式子。
所以可以知道前向过程中得到的每一步的数据是怎样的。
由上一个证明可以知道:
x
t
=
1
−
β
t
x
t
−
1
+
β
t
z
t
−
1
x_t=\sqrt{1-\beta_t}x_{t-1}+\sqrt{\beta_t}z_{t-1}
xt=1−βt
xt−1+βt
zt−1,此时我们令
α
t
=
1
−
β
t
\alpha_t=1-\beta_t
αt=1−βt,即可进行如下推导:
再次根据重参数化技巧,可以得到任意时刻的
x
t
x_t
xt满足如下的高斯分布:(当
T
T
T足够大时,
x
T
x_T
xT可以认为服从一个标准正态分布。)
DDPM的后向过程是利用神经网络
P
θ
(
x
t
−
1
∣
x
t
)
P_\theta(x_{t-1}|x_t)
Pθ(xt−1∣xt)来拟合
q
(
x
t
−
1
∣
x
t
)
q(x_{t-1}|x_t)
q(xt−1∣xt)。
在论文中,作者把条件概率
p
θ
(
x
t
−
1
∣
x
t
)
p_\theta(x_{t-1}|x_t)
pθ(xt−1∣xt)的方差直接取成了
β
t
\beta_t
βt,而不是上面的需要网络估计的
Σ
θ
(
x
t
,
t
)
Σ_θ(x_t, t)
Σθ(xt,t),所以在下面对于逆转过程的概率分布
q
(
x
t
−
1
∣
x
t
)
q(x_{t-1}|x_t)
q(xt−1∣xt)的解析形式的求解,只需要估计均值即可。
虽然我们无法得到逆转过程的概率分布
q
(
x
t
−
1
∣
x
t
)
q(x_{t-1}|x_t)
q(xt−1∣xt),但是如果知道
x
0
x_0
x0,
q
(
x
t
−
1
∣
x
t
,
x
0
)
q(x_{t-1}|x_t, x_0)
q(xt−1∣xt,x0)就可以直接写出:
利用贝叶斯公式可以进行如下推导:
结合马尔可夫公式可以求得均值和方差:
由于
x
0
x_0
x0和
x
t
x_t
xt之间的关系已知,所以可以进一步将均值化简为:
因此,在给定
x
0
x_0
x0 的条件下,后验条件高斯分布的均值只和超参数、
x
t
x_t
xt、
ε
t
ε_t
εt 有关,方差只与超参数有关。通过以上的方差和均值,就可以得到
q
(
x
t
−
1
∣
x
t
,
x
0
)
q(x_{t-1}|x_t, x_0)
q(xt−1∣xt,x0)的解析形式。
在训练阶段,DDPM通过最大化训练数据的似然来学习扩散过程的参数。训练是通过优化负对数似然的常见变分界限来执行的:
DDPM的本质作用,就是学习训练数据的分布,产出尽可能符合训练数据分布的真实图片。所以DDPM的目标就是:使得生成的图片尽可能符合训练数据分布。而求两个分布之间的相似性,我们自然而然想到了KL散度。因此DDPM的目标函数应该为: a r g m i n θ K L ( P d a t a ∣ ∣ P θ ) argmin_{\theta}KL(P_{data}||P_{\theta}) argminθKL(Pdata∣∣Pθ)
对这个目标函数进行转换:
此时目标函数就变成了
a
r
g
m
i
n
θ
∏
i
=
1
m
P
θ
(
x
i
)
argmin_{\theta} \prod_{i=1}^m P_{\theta}(x_i)
argminθ∏i=1mPθ(xi),而这个的本质就是使得连乘中的每一项最大,也就是使得
l
o
g
P
θ
(
x
i
)
logP_{\theta}(x_i)
logPθ(xi)最大。因此也就有了文章中的负对数似然的上界表达式。
KL 散度是一种不对称统计距离度量,用于衡量一个概率分布 P 与另外一个概率分布 Q 的差异程度。由于KL散度具有恒大于等于0的性质,因此:
进一步可以对上式的交叉熵的上界进行化简:
如果有两个分布 p,q 都是高斯分布,则他们的KL散度为:
第二项 L t − 1 L_{t-1} Lt−1中的两个分布都是高斯分布,而且这两个分布的方差全是常数,和优化无关,所以其实优化目标就是两个分布均值的二范数:
分布 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)是网络期望拟合的目标分布,均值用网络估计,方差设置成了和 β t \beta_t βt有关的常数。
由于
x
t
x_t
xt是
μ
θ
\mu_\theta
μθ的输入,其他量是常数,所以未知量为
ε
\varepsilon
ε,此时可以将
μ
θ
(
x
t
,
t
)
\mu_\theta(x_t,t)
μθ(xt,t)定义为:
这样就可以不用网络直接预测
μ
θ
(
x
t
,
t
)
\mu_\theta(x_t,t)
μθ(xt,t),而是用网络
ε
θ
(
x
t
,
t
)
\varepsilon_\theta(x_t,t)
εθ(xt,t)先预测噪声
ε
\varepsilon
ε,然后带入到表达式计算出预测的均值。
最终作者经过这样一番推导之后得到了如下的L2 loss:
网络的输入是一张和噪声线性组合的图片,然后要估计出来这个噪声:
我们的目标是希望通过一个高斯分布来逼近逆扩散过程中的每一步,然而通过证明可以发现后验的扩散条件概率 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)与其越接近越好。
参考:
54、Probabilistic Diffusion Model概率扩散模型理论与完整PyTorch代码详细解读
【生成模型】DDPM概率扩散模型(原理+代码)
DDPM交叉熵损失函数推导
DDPM(Denoising Diffusion Probabilistic Models)扩散模型简述
扩散模型(Diffusion Model)奠基之作:DDPM 论文解读
一文解释 Diffusion Model (一) DDPM 理论推导
深入浅出扩散模型(Diffusion Model)系列:基石DDPM(人人都能看懂的数学原理篇)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。