一、自编码器(AutoEncoder)
自编码器的目标是重建原始输入。
编码器从数据中获取一个样本,并返回隐空间中的单个点,然后将其传递到解码器中。
如果你的目标只是重构输入,则标准自动编码器已经可以满足你的需求,但它不能作为生成模型使用,如果为解码器选择随机输入
V
’
V’
V’,
V
’
V’
V’可能与解码器以前见过的任何输入都很不一样(此处的输入不是原始输入图像,而是由编码器产生的对原始图像的编码,即隐空间),解码器不一定能产生合理的图像。
二、变分自编码器(Variational AutoEncoder)
下面的文章中讲述的非常清晰:
https://zhuanlan.zhihu.com/p/34998569
编码器会在隐空间中产生概率分布,它输出的隐分布是与隐空间维数相同的高斯分布。编码器产生这些高斯分布的参数(均值,方差)。
具体来说,给定一个真实样本
X
k
X_k
Xk,我们假设存在一个专属于
X
k
X_k
Xk的分布
p
(
Z
∣
X
k
)
p(Z|X_k)
p(Z∣Xk)(后验分布),并进一步假设这个分布是(独立的、多元的)正态分布。为什么要强调“专属”呢?因为我们后面要训练一个生成器
X
=
g
(
Z
)
X=g(Z)
X=g(Z),希望能够把从分布
p
(
Z
∣
X
k
)
p(Z|X_k)
p(Z∣Xk)采样出来的一个
Z
k
Z_k
Zk还原为
X
k
X_k
Xk。这时候每一个
X
k
X_k
Xk都配上了一个专属的正态分布,才方便后面的生成器做还原(即减少真实样本与生成样本之间的差距)。这就是下图中每个样本都有专属的均值与方差的原因,这也对应了前面我们所说的变分自编码器会为每个样本产生一个概率分布。
因此,我们有一个编码器,它接收图像并在隐空间中产生概率分布,而解码器则在隐空间中获取点并返回生成的图像。
隐空间的结构:
对于decoder来说,希望从 Z Z Z能够解码出原输入 X X X,但是 Z Z Z的随机性会使得decoder难以做到这一点,所以训练阶段,模型会自动的减小方差,使得 Z Z Z的随机性减小从而利于decoder的解码工作。为了防止这种情况发生,实际中我们会希望 Z Z Z的均值接近0,方差接近1,也就是标准正态分布。因此,使用Kullback-Leibler散度(Kullback-Leibler divergence)作为 l o s s loss loss,衡量 Z Z Z的分布与标准正态分布的近似程度,让所有的 p ( Z k ∣ X ) p(Z_k|X) p(Zk∣X)接近标准正态分布。
用重参数技巧(Reparametrization Trick)训练VAE:
由于 Z Z Z是从 N ( μ , σ 2 ) N(\mu, \sigma^2) N(μ,σ2)中采样得到的,而随机采样过程并不可导,因此难以优化(即不能进行反向传播)。先从 N ( 0 , I ) N(0, I) N(0,I)中采样一个 ε \varepsilon ε,然后 Z = ε ∗ σ + μ Z=\varepsilon*\sigma+\mu Z=ε∗σ+μ,这样,随机性就来自于这个标准正态分布,相当于我们给方差乘上了一个随机噪声,采样过程就可以不参与求导了。因此,可以使用反向传播对VAE进行端到端训练。但是,由于仍然存在随机性因素,因此训练过程称为随机梯度变化贝叶斯(stochastic gradient variational Bayes,SGVB),而不是被称为随机梯度下降。
三、条件变分自编码器(Conditional Variational Autoencoder)
到目前为止,我们已经创建了可以重现其输入的自编码器,以及可以生成合理的手写数字图像的解码器。但是,解码器无法按需生成特定数字的图像。这就产生了条件变分自编码器(CVAE),它的编码器和解码器都有额外的输入。
在训练时,数字(标签信息)被提供给编码器和解码器。在这种情况下,它将表示为一个one-hot向量。要生成特定数字的图像,只需将该数字与从标准正态分布中采样的隐空间中的随机点一起馈入解码器即可。即使输入相同的点以产生两个不同的数字,该过程也将正确运行,因为系统不再依赖于隐空间来编码要处理的数字(标签信息)。相反,潜在空间对其他信息进行编码,例如笔划宽度或数字被写入的角度(此处我的理解是:隐空间原来编码所有输入信息,输出完全依赖于隐空间提供的采样点信息,现在在解码器处提供了标签信息,那么隐空间就编码其他信息了,相当于把标签信息从隐空间分离表征(disentangled)了,小小见解,欢迎指正)。
通过固定标签并从隐空间中随机采样一些点,输入到解码器中所产生的标签数字的不同版本。下面的图像网格,同一数字的样式不同,但是每行中的所有图像都具有相同的数字。
四、GAN
GAN包括判别器D与生成器G,喂入数据训练之后,GAN的目标是通过训练使得G能够生成逼真的样本,而D能够准确的判断出一个样本是真实样本还是G所生成出来的假样本,在这种对抗的训练下,G的造假能力和D的打假能力都会不断提高。GAN的优化过程如下:
具体可参考:
https://zhuanlan.zhihu.com/p/72195907