一文搞懂变分自编码器(VAE, CVAE)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一文搞懂变分自编码器(VAE, CVAE)相关的知识,希望对你有一定的参考价值。

参考技术A

变分自编码器与对抗生成网络类似,均是为了解决数据生成问题而生的 。在自编码器结构中,通常需要一个输入数据,而且所生成的数据与输入数据是相同的。但是通常希望生成的数据具有一定程度的不同,这需要输入随机向量并且模型能够学习生成图像的风格化特点,因此在后续研究中以随机化向量作为输入生成特定样本的对抗生成网络结构便产生了。变分自编码器同样的以特定分布的随机样本作为输入,并且可以生成相应的图像,从此方面来看其与对抗生成网络目标是相似的。但是变分自编码器不需要判别器,而是使用编码器来估计特定分布。总体结构来看与自编码器结构类似,但是中间传递向量为特定分布的随机向量, 这里需要特别区分:编码器、解码器、生成器和判别器

先假设一个隐变量Z的分布,构建一个从Z到目标数据X的模型,即构建 ,使得学出来的目标数据与真实数据的概率分布相近

VAE的结构图如下:

VAE对每一个样本 匹配一个高斯分布,隐变量 就是从高斯分布中采样得到的。对 个样本来说,每个样本的高斯分布假设为 ,问题就在于如何拟合这些分布。VAE构建两个神经网络来进行拟合均值与方差。即 ,拟合 的原因是这样无需加激活函数

此外,VAE让每个高斯分布尽可能地趋于标准高斯分布 。这拟合过程中的误差损失则是采用KL散度作为计算,下面做详细推导:

VAE与同为生成模型的GMM(高斯混合模型)也有很相似,实际上VAE可看成是GMM的一个 distributed representation 的版本。GMM是有限个高斯分布的隐变量 的混合,而VAE可看成是无穷个隐变量 的混合, VAE中的 可以是高斯也可以是非高斯的

原始样本数据 的概率分布:

假设 服从标准高斯分布,先验分布 是高斯的,即 。 是两个函数, 分别是 对应的高斯分布的均值和方差,则 就是在积分域上所有高斯分布的累加:

由于 是已知的, 未知,所以求解问题实际上就是求 这两个函数。最开始的目标是求解 ,且希望 越大越好,这等价于求解关于 最大对数似然:

而 可变换为:

到这里我们发现,第二项 其实就是 和 的KL散度,即 ,因为KL散度是大于等于0的,所以上式进一步可写成:

这样就找到了一个下界(lower bound),也就是式子的右项,即:

原式也可表示成:

为了让 越大,目的就是要最大化它的这个下界

回顾 :

显然,最大化 就是等价于最小化 和最大化 。

第一项,最小化KL散度 :前面已假设了 是服从标准高斯分布的,且 是服从高斯分布 ,于是代入计算可得:

对上式中的积分进一步求解, 实际就是概率密度 ,而概率密度函数的积分就是1,所以积分第一项等于 ;而又因为高斯分布的二阶矩就是 ,正好对应积分第二项。又根据方差的定义可知 ,所以积分第三项为-1

最终化简得到的结果如下:

第二项,最大化期望 。也就是表明在给定 (编码器输出)的情况下 (解码器输出)的值尽可能高

重参数技巧

最后模型在实现的时候,有一个重参数技巧,就是想从高斯分布 中采样 时,其实是相当于从 中采样一个 ,然后再来计算 。这么做的原因是,采样这个操作是不可导的,而采样的结果是可导的,这样做个参数变换, 这个就可以参与梯度下降,模型就可以训练了

在条件变分自编码器(CVAE)中,模型的输出就不是 了,而是对应于输入 的任务相关数据 ,不过套路和VAE是一样的,这次的最大似然估计变成了 ,即::

则 ELBO(Empirical Lower Bound) 为 ,进一步:

网络结构包含三个部分:

以上是关于一文搞懂变分自编码器(VAE, CVAE)的主要内容,如果未能解决你的问题,请参考以下文章

VAE 变分自编码器

VAE 变分自编码器

机器学习-白板推导系列(三十二)-变分自编码器(VAE,Variational AutoEncoder)

pytorch 笔记:VAE 变分自编码器

pytorch 笔记:VAE 变分自编码器

变分自编码器(Variational Autoencoder, VAE)通俗教程