AE->VAE->CVAE
首先需要了解自编码器(Autoencoder),自编码器是一种数据压缩方式,它把数据x有损编码为低维的隐变量z,通过对z解码可以重构回x,这是一个确定性过程,在实际中,无法拿来用于生成任意数据。变分自编码器可以解决这个问题。
任何自编码器的目标都是重建原始输入。通常,自编码器首先将输入压缩(降维),然后将其转换回输入的近似值。通常将用于压缩数据的函数称为“编码器”,将用于解压数据的函数称为“解码器”。这些函数可以是神经网络。注意,自编码器包含编码器和解码器两部分。
======================================================
Variational Autoencoder(VAE),变分自编码器(VAE)是一个生成模型,我们希望它生成能够以假乱真,看起来像我们训练集的假样本。VAE将为我们生成一个隐空间(latent space),从中可以对点进行采样。这些点中的任何一个都可以解码为和训练集一样的样本,比如图片。
要想让解码器产生合理的图像,我们需要某种方式来确保解码器准备好将我们提供的所有输入解码为合理的图像。为此,我们需要预先定义解码器应该看到的输入分布。比如正态分布。也就是说,我们需要一个全新的编码器,其产生的隐变量符合某种分布,解码器通过采样可以输出合理的图像。
在传统的自编码器中,编码器从数据中获取一个样本,并返回隐空间中的单个点,然后将其传递到解码器中。在变分自编码器中,编码器会在隐空间中产生概率分布!(注意这个区别)。它输出的隐分布是与隐空间维数相同的高斯分布。编码器产生这些高斯分布的参数(均值,方差)。
上面这张图是很多文章中都会用到的一张图,自编码器输出的是某个确定的值,而变分自编码器输出的是一个概率分布,从而可以生成不同程度的笑。由于可以根据分布采样得到不同的数据,所以变分自编码器具备了生成数据的能力。
GAN vs VAE
同样都是生成模型,区别在于VAE使用概率思想,通过计算生成数据分布与真实数据分布的相似度(kL散度)来判断,但GAN使用神经网络训练一个判别器。
条件变分自编码器(Conditional Variational Autoencoder):
之所以会出现条件变分自编码器在于变分自编码器存在问题,解码器的输出完全依赖于隐空间采样的点,没有办法控制生成特定的数据,比如想要生成一直猫,没有办法把信息传递给变分自编码器。顾名思义,条件变分自编码器就是在变分自编码器的基础上添加额外的条件,这里对编码器和解码器均添加条件,条件是输入的标签信息,比如图像是猫还是狗。