计算机视觉课程的阅读作业,要求提交slides。
参考资料:
2 Tutorial - What is a variational autoencoder? – Jaan Altosaar
3 Variational Autoencoders Explained
4 变分自编码器(一):原来是这么一回事 - 科学空间|Scientific Spaces
1 背景
1.1 应用场景
VAE被广泛用于多媒体生成,包括图像生成,音频合成等。
1.2 要解决的问题
我们现在期望用一个网络来生成猫的图片,我们可以使用如下图所示的结构,该网络由一些反卷积层(一种上采样方法,其输出比输入的维数更高)构成,输入是全1的向量,通过训练,我们可以最小化网络的输出与目标图片的均方误差。这样,当我们将全1向量输入训练好的网络后,就能得到这张猫的图片,也就是说,这张图片的信息已被存储在网络的参数中。
但是我们不满足于此,我们还希望能生成更多的图片,甚至是训练集外的图片。为了完成这样的任务,显然输入向量不能再是唯一的全1向量了,我们需要更多的输入向量。一个简单的解决方法是,输入随机选择的实向量,对应不同的训练集图片,比如,用[3.3, 4.5, 2.1, 9.8] 表示猫的图片,用[3.4, 2.1, 6.7, 4.2] 表示狗的图片。这种随机选择输入向量的方式显然是不够好的。因为输入向量和目标图片没有任何因果关系,除了已经储存过的图片,我们不知道如何选择输入向量,去产生新的图片。
标准自编码器给出了一种产生输入向量的方法:既然人工选择输入向量很困难,我们让神经网络帮我们做这件事。如下图所示,在标准自编码器中,先由encoder将原始图片变换为低维的隐变量,再由decoder将隐变量还原为原始图片。这里的隐变量也就是刚才提到的输入向量。此时,隐变量是由原始图片经过编码生成的,一定程度上具备了因果关系,但是我们仍然很难根据训练得到的隐变量去生成新的图片,因为我们没有对隐变量进行任何约束,图片对应的隐变量分布可能是任意的。
2 VAE方法
2.1 主要思路
为了解决生成新图片的问题,我们需要对自编码器进行改进。
1文指出,VAE的主要目的是为数据的隐变量加上先验;3文指出,VAE区别传统自编码器的一个重要特征是,它将隐变量限制为一个标准正态分布。以上两种说法是吻合的。
当然,4文指出,VAE的核心假设是p(Z|X)(后验分布)是正态分布,这一点确实有道理,但是通过计算可以发现,此时,隐变量的分布确实也是标准正态分布。因此,本文不深究VAE的初衷到底是哪一种。
至此,我们可以说,VAE对于上述问题的解决方案就是,限制encoder生成的隐变量都服从正态分布,且尽可能逼近标准正态分布。此时,生成一幅新图片将变得很简单,只需要从标准正态分布中采样出一个隐变量,再将隐变量输入decoder即可。
VAE的结构如下图所示:
我们可以看到, 在VAE中,encoder不再直接生成隐变量Z,转而生成一个分布qphi(Z|Xi),隐变量由qphi(Z|Xi)采样得到。3文指出,这种做法除了能使我们生成随机的隐变量,而且提高了网络的泛化能力。
为了提高网络的泛化能力,即要求网络能很好地生成训练集之外的图片,要得到训练集外的图片,就要求decoder输入的隐变量与训练中所得到的不同,此时,可以看做是隐变量产生了噪声。即我们希望decoder对输入的噪声具有鲁棒性,如果encoder输出的只有均值那一项,则VAE退化为标准自编码器,decoder对输入噪声没有鲁棒性;但是encoder能同时输出均值mu和方差sigma^2时,相当于在训练过程中为decoder的输入加上了方差为sigma^2的噪声(且由于qphi(Z|Xi)要尽量靠近标准正态分布(方差为1),这就克服了自编码器天然的“惰性”,即网络很容易将方差学习为0)。
因此,在训练阶段,decoder为了减小训练误差,就必须学会克服噪声的干扰。从而使训练好的decoder具有良好的鲁棒性。
但是上述泛化能力与减小网络的训练误差是相互矛盾的,因为假如没有“qphi(Z|Xi)要尽量靠近标准正态分布(方差为1)”这一约束,网络会趋向于将方差学习为0,因为噪声的存在会增加网络拟合的难度。因此,在实际应用中,我们需要权衡网络能达到的训练精度以及隐变量逼近正态分布的程度。这种权衡,也正是机器学习算法经常遇到的训练误差和泛化能力的权衡。对应损失函数中的重建误差和正则化项。我们将通过x得到分布qphi(z|x)再得到z的这一过程看做是编码器,而通过z还原x的这一过程,也就是从分布ptheta(x|z)中得出x的过程,看做是解码器。ptheta(z) 表示z的先验分布,在VAE中,ptheta(z) 被设置为标准正态分布。
由上述推导可知,正则化项需要刻画qphi(Z|Xi)与标准正态分布(先验分布ptheta(z))的相似度,VAE使用了KL散度来度量,即上式中的第一项,简单说,KL散度可以用来度量两个分布的逼近程度,且KL散度越小,两个分布越接近。上式中的第二项是decoder的输出是原数据点的对数似然,再求期望,这就对应重建误差(该似然越大,说明decoder产生原始数据的可能性越大,即重建误差越小),即最大化decoder输出原数据点的可能性,相当于最小化重建误差。需要注意的是,我们的优化目标为最大化上述L。
2.2 概率视角
接下来我们用更数学化的语言描述VAE。
生成模型的目的是要求解数据与隐变量间的联合密度,即p(x,z),有p(x,z)=p(x∣z)p(z),此时,生成过程变为:
先产生zi~p(z),再产生xi~p(x|z),这就需要估计隐变量的分布p(z),而p(z)=p(z∣x)p(x),但p(z|x)通常难以计算,因此,VAE引入另外一个参数phi和对应的分布qphi(z|x),以估计p(z|x),记p(z|x)的参数为theta,则p(z|x)可写为ptheta(z|x)。
参数phi和theta就是深度网络模型中各个神经网络单元的参数,也就是我们要优化的参数。优化模型中参数phi和theta的过程如下,注意这里引入了变分下限:
这里应用了变分推断的技巧,等式左侧是数据集内某一条数据出现的概率的对数,是一个无法被计算的常数,等式右侧第一项KL散度表示qphi(z|x)对ptheta(z|x)的逼近程度,是我们想要优化(最小化)的对象,第二项往往被称作evidence lower bound (ELBO,变分下限)。优化的目标是使变分下限最大,这样在等式左侧不变的情况下,KL散度就能取到最小。
经过推导,变分下限又可写为如下形式,与之前得到的式子相同。
2.3 关于Reparameterization trick
1文中将Reparameterization trick(下称RT)的目的描述为:从分布中采样这个操作是无法求偏导的,利用BP算法优化模型的时候,梯度将无法计算。 即:RT是我们在实现模型时使用的技巧。
即下图中的一般采样无法求导,而RT采样可以对mu和sigma求导,在笔者看来,encoder为了得到一个正态分布,必然是通过生成其均值和标准差(即正态分布的两个参数)来实现的。不同之处在于,在一般采样中,得到均值和标准差后,很自然的,从均值和标准差这两个参数确定的正态分布中采样得到z即可,但由于采样过程的存在,计算梯度时将无法求偏导;因此,在RT采样中,将正态分布N(mu,sigma^2)重新参数化为mu和sigma(也是Reparameterization trick 名字的由来),encoder产生到mu和sigma即可,此时z可对mu和sigma求偏导。
3 实验
原论文在人脸和手写数字集上进行了实验,下面的图是在标准正态分布采样得到z后,输入decoder得到的结果,可见VAE能生成与原数据集类似的新图片。
4 结论
提出了一种生成模型——变分自编码器
从实验结果看,该方法能较好地解决图片生成问题。