1. Auto Encoder
AE直接将数据压缩为数值编码的特征,再将数值编码映射到重构数据。由于映射空间不连续,无界,也无明显规律,我们难以要求模型具备“插值”出两个图片之间的形态,例如满月和半月之间的状态。AE更适合用于做图像的压缩和复原,但并不适合生成新的图片。
2. Variational Auto Encoder
在AE中,为什么无法生成出多种多样并且有意义的图像?因为AE的隐空间是直接对图像编码,编码的空间是离散的、无规律的,所以当我们选择原有的 z 1 z_1 z1、 z 2 z_2 z2之间的某一个点 z 1.5 z_{1.5} z1.5时,AE往往无法生成一个有意义的图像。
于是,提出了VAE。VAE的隐空间不直接编码一系列离散的特征值,它的隐空间实际上是一个混合高斯分布,Encoder的输出描述了这样一个复杂分布,Decoder的输出将这种该分布中的一个采样点映射到图像分布。
我们假设,所有的图像数据都满足某种高维的正态分布,每一张图像 x x x 是从它的分布 P ( x ) P(x) P(x) 中采样得到的结果。由于 P ( x ) P(x) P(x)是一个无法知道的分布,我们只能通过某种方式去拟合它,因此考虑混合高斯分布。如下图所示,黑色是真实分布,是复杂的。但是可以用多个正态分布的叠加来拟合真实分布(蓝线)。即: P ( x ) = ∑ m P ( m ) P ( x ∣ m ) P(x)=\sum_m P(m) P(x \mid m) P(x)=∑mP(m)P(x∣m),这里假设有 m m m个正态分布,即每个 m m m为一个高斯组件。这里实际上就是全概率公式。
于是,考虑有一个隐空间
Z
Z
Z,它满足标准高斯分布,每一个
z
z
z是在隐空间分布的一个采样,它能通过Decoder映射到一个图像样本
x
x
x的分布
P
(
x
)
P(x)
P(x) 。即,我们用下面的公式来确定一张图像的分布:
P
(
x
)
=
∫
z
P
(
z
)
P
(
x
∣
z
)
d
z
P(x)=\int_z P(z) P(x \mid z) d z
P(x)=∫zP(z)P(x∣z)dz
这里
P
(
x
∣
z
)
=
N
(
μ
z
,
σ
z
)
P(x|z)=N(\mu_z,\sigma_z )
P(x∣z)=N(μz,σz),这里
μ
z
,
σ
z
\mu_z,\sigma_z
μz,σz是待估计的参数,由Decoder进行预测。
然而,要想准确地得到
P
(
x
)
P(x)
P(x)是不可能的,因为由公式可知,要对所有
z
z
z的取值情况下的
P
(
x
∣
z
)
P(x|z)
P(x∣z)积分才能得到
P
(
x
)
P(x)
P(x),而我们无法提前得知任意
z
z
z下的
P
(
x
∣
z
)
P(x|z)
P(x∣z),样本是有限的。所以,我们通过极大似然估,希望取得所有现有样本点的概率最大:
L
=
∑
x
log
P
(
x
)
L=\sum_x \log P(x)
L=x∑logP(x)
但
L
L
L怎么计算并取最大呢?这里就用到了前面所说的隐变量
z
z
z。我们首先引入
q
(
z
∣
x
)
q(z|x)
q(z∣x),它表示,给定
x
x
x时推测的
z
z
z分布:
log
P
(
x
)
=
∫
z
q
(
z
∣
x
)
log
P
(
x
)
d
z
\log P(x)=\int_z q(z \mid x) \log P(x) d z
logP(x)=∫zq(z∣x)logP(x)dz
这里本质上是对等式左边做的恒等变换。接下来,使用bayes公式进一步变换:
log
P
(
x
)
=
∫
z
q
(
z
∣
x
)
log
P
(
x
)
d
z
=
∫
z
q
(
z
∣
x
)
log
(
P
(
z
,
x
)
P
(
z
∣
x
)
)
d
z
=
∫
z
q
(
z
∣
x
)
log
(
P
(
z
,
x
)
q
(
z
∣
x
)
q
(
z
∣
x
)
P
(
z
∣
x
)
)
d
z
=
∫
z
q
(
z
∣
x
)
log
(
P
(
z
,
x
)
q
(
z
∣
x
)
)
d
z
+
∫
z
q
(
z
∣
x
)
log
(
q
(
z
∣
x
)
P
(
z
∣
x
)
)
d
z
=
∫
z
q
(
z
∣
x
)
log
(
P
(
z
,
x
)
q
(
z
∣
x
)
)
d
z
+
K
L
(
q
(
z
∣
x
)
∣
∣
P
(
z
∣
x
)
)
≥
∫
z
q
(
z
∣
x
)
log
(
P
(
z
,
x
)
q
(
z
∣
x
)
)
d
z
\begin{aligned} & \log P(x)=\int_z q(z \mid x) \log P(x) d z \\ & =\int_z q(z \mid x) \log \left(\frac{P(z, x)}{P(z \mid x)}\right) d z=\int_z q(z \mid x) \log \left(\frac{P(z, x)}{q(z \mid x)} \frac{q(z \mid x)}{P(z \mid x)}\right) d z \\ & =\int_z q(z \mid x) \log \left(\frac{P(z, x)}{q(z \mid x)}\right) d z+\int_z q(z \mid x) \log \left(\frac{q(z \mid x)}{P(z \mid x)}\right) d z\\ & =\int_z q(z \mid x) \log \left(\frac{P(z, x)}{q(z \mid x)}\right) d z + KL(q(z|x)||P(z|x)) \\ & \geq \int_z q(z \mid x) \log \left(\frac{P(z, x)}{q(z \mid x)}\right) d z \end{aligned}
logP(x)=∫zq(z∣x)logP(x)dz=∫zq(z∣x)log(P(z∣x)P(z,x))dz=∫zq(z∣x)log(q(z∣x)P(z,x)P(z∣x)q(z∣x))dz=∫zq(z∣x)log(q(z∣x)P(z,x))dz+∫zq(z∣x)log(P(z∣x)q(z∣x))dz=∫zq(z∣x)log(q(z∣x)P(z,x))dz+KL(q(z∣x)∣∣P(z∣x))≥∫zq(z∣x)log(q(z∣x)P(z,x))dz
在
K
L
(
q
(
z
∣
x
)
∣
∣
P
(
z
∣
x
)
)
KL(q(z|x)||P(z|x))
KL(q(z∣x)∣∣P(z∣x))中,由于
P
(
z
∣
x
)
P(z|x)
P(z∣x)不可知,所以我们使用下界
L
b
L_b
Lb来优化
log
P
(
x
)
\log P(x)
logP(x),
L
b
L_b
Lb越大,
log
P
(
x
)
\log P(x)
logP(x)越大。下面我们进一步变换:
L
b
=
∫
z
q
(
z
∣
x
)
log
(
P
(
z
,
x
)
q
(
z
∣
x
)
)
d
z
=
∫
z
q
(
z
∣
x
)
log
(
P
(
x
∣
z
)
P
(
z
)
q
(
z
∣
x
)
)
d
z
=
∫
z
q
(
z
∣
x
)
log
(
P
(
z
)
q
(
z
∣
x
)
)
d
z
+
∫
z
q
(
z
∣
x
)
log
P
(
x
∣
z
)
d
z
=
−
K
L
(
q
(
z
∣
x
)
∣
∣
P
(
z
)
)
+
∫
z
q
(
z
∣
x
)
log
P
(
x
∣
z
)
d
z
=
−
K
L
(
q
(
z
∣
x
)
∣
∣
P
(
z
)
)
+
E
q
(
z
∣
x
)
[
log
P
(
x
∣
z
)
]
\begin{aligned} & L_b=\int_z q(z \mid x) \log \left(\frac{P(z, x)}{q(z \mid x)}\right) d z \\ & =\int_z q(z \mid x) \log \left(\frac{P(x \mid z) P(z)}{q(z \mid x)}\right) d z \\ & =\int_z q(z \mid x) \log \left(\frac{P(z)}{q(z \mid x)}\right) d z+\int_z q(z \mid x) \log P(x \mid z) d z\\ & = -KL(q(z|x)||P(z)) + \int_z q(z \mid x) \log P(x \mid z) d z\\ & = -KL(q(z|x)||P(z)) + E_{q(z \mid x)}[\log P(x \mid z)] \end{aligned}
Lb=∫zq(z∣x)log(q(z∣x)P(z,x))dz=∫zq(z∣x)log(q(z∣x)P(x∣z)P(z))dz=∫zq(z∣x)log(q(z∣x)P(z))dz+∫zq(z∣x)logP(x∣z)dz=−KL(q(z∣x)∣∣P(z))+∫zq(z∣x)logP(x∣z)dz=−KL(q(z∣x)∣∣P(z))+Eq(z∣x)[logP(x∣z)]
所以就把最大化下界转化为:一方面最小化 K L ( q ( z ∣ x ) ∣ ∣ P ( z ) ) KL(q(z|x)||P(z)) KL(q(z∣x)∣∣P(z)),一方面最大化 E q ( z ∣ x ) [ log P ( x ∣ z ) ] E_{q(z \mid x)}[\log P(x \mid z)] Eq(z∣x)[logP(x∣z)]。一个是约束Encoder的损失,一个是约束Decoder的重构损失。又因为我们假设 P ( z ) = N ( 0 , I ) P(z)=N(0,I) P(z)=N(0,I),所以我们可以吧优化目标提炼为:希望Encoder的输出尽可能靠近标准正态分布,Decoder输出的结果尽可能和原始图像一致。
那么,有个问题:
- 既然KL损失希望Encoder的预测是一个标准正态,Encoder直接简单预测 μ , σ \mu,\sigma μ,σ为0和1不就好了?
实际上并不是这样,因为Encoder和Decoder是同时训练的,Encoder并不单纯收到KL损失的约束,也受到Decoder重构损失的约束。假如网络学到的是Encoder永远输出标准正态,那么Decoder的输出结果理论上几乎不会有区别了,那么重构损失就会很大。在网络的训练过程中,就是在两者之间找平衡。进一步地,可以这么理解:如果没有KL损失,那么VAE退化为类似AE的模型,隐空间的编码会尽量相隔很远,变得离散化,Decoder也就难以根据新的隐变量编码生成新的图像;而有了KL损失,隐空间中不同图像的编码的界限被模糊,使得模型具有了泛化性,当输入的 z z z是新的时,Decoder也能生成出相对合理的新图像。
3. Generative Advesarial Network
GAN的想法比较直接:生成器输入随机向量,Generator对其进行变换(卷积、Transformer等),得到预测的图像(fake)。fake的图像和真实的图像进行混合,送入Discriminator对每张图片进行判别,判断是fake还是real。输出的判别序列和ground truth计算交叉熵损失。
生成器:
L
G
=
H
(
1
,
D
(
G
(
z
)
)
)
生成器:L_G=H(1, D(G(z)))
生成器:LG=H(1,D(G(z)))
判别器损失: L D = H ( 1 , D ( x ) ) + H ( 0 , D ( G ( z ) ) ) 判别器损失:L_D=H(1, D(x))+H(0, D(G(z))) 判别器损失:LD=H(1,D(x))+H(0,D(G(z)))
4. Denoising Diffusion Porbalisitc Model
5. 上述模型的比较
以下是个人理解,如果有不同的想法,欢迎讨论!
- GAN的特征空间,可以理解为常见CV模型的特征空间,生成器是在根据先验重新整合特征,判别器则是一个常见的classifer模型。GAN的训练是一种监督学习。AE的隐空间是图像的直接压缩编码,不具有可解释性,并且是离散的、无明显规律的。这导致如果我们输入全新的隐空间编码,Decoder无法理解,也无法生成有意义的图像。GAN和AE有一定的相似性,他们的生成部分,都是将随机输入,直接转换为一张图片。不同之处在于训练方式,GAN的训练借助判别器,G、D相互监督;AE的训练是无监督的,采用Encoder将图像先编码,再Decoder解码,直接衡量Decoder输出与原图的相似性。
- VAE是AE的升级,它是一种概率模型,认为图像可以被建模为概率分布,采用混合高斯分布作为隐空间设计的理论指导。由于是概率模型,在训练时,相同的输入图像编码得到的z是不确定的,但是在一个值附近波动(高斯分布),所以这保证了x->code->x的映射并不是一一对应的,而是有波动性的。这模糊了不同的图像之间的code的边界,同一个x,可能生成code1也可能生成code2,而code1, code2都有可能生成x也有可能生成x附近的相似图像。因此VAE具有泛化性,对于任意的新的隐编码,Decoder都能对其做出解释,生成有意义的图像。
- DDPM也是基于概率的模型,但与VAE不同的是,它把图像的生成看作是从高斯噪声图逐步去噪的过程,它最大的特点是把图像的生成分解到很多个时间步。GAN生成的结果往往更加锐利、接近原始图像,但缺乏多样性且容易模式崩溃;相比之下,VAE生成的结果具有多样性,但是往往较为模糊、仿佛是多个图像平滑后的结果。DDPM的表现则结合了两者的优点。它通过概率建模保证随机性,通过多步去噪来保证高保真。为什么可以通过多步去噪来实现高保真呢?我的理解是:
- 其一,VAE采用像素级的图像损失,所以VAE会倾向于输出平滑的结果。例如黑底白字,白色的字若整体偏移一个像素,尽管视觉上还是基本一样的,但VAE的重建损失会非常大(因为相当于所有原图为1的地方这里都变成0了),因此,尽量预测为平滑的灰色是一个比较好的平衡。并且KL损失也会进一步加强这种模糊性。相比之下,DDPM尽管也是像素级损失,但它是对噪声的损失,而且只预测一个时间步的噪声,逐步还原出细节,所以可以在很大程度上避免这个问题。
- 其二,我认为是更重要的一点,多步预测概率分布,让相同参数规模的模型,能有更强大的表达能力。例如下图(来自b站up主[大白话AI],如果我们想要一个27:23的概率分布的抽奖箱,我们既可以像红色箱子一样,用50个球,一次抽样完成;但我们也可以只用10个球、多步抽样来实现。这说明随着步数的增加,简单的模型也可以模拟出非常复杂的分布。神经网络模型的参数量数有限的,如果像VAE一样单步对概率建模,其表现能力有限;而DDPM采用很多个时间步来对噪声递进地预测,这使得有限规模的网络能有非常强大的表现能力。所以,DDPM比VAE的能力更加强大。