变分自编码器(VAE)是一种十分流行的生成模型,它使用深度学习技术来生成与训练数据相似的新数据,顾名思义,那它至少应该能跟变分和自编码器扯上点关系,因此要理解VAE,先去理解自动编码器的概念会有所帮助。
自编码器(AE)
自动编码器是一种神经网络,它通过无监督的方式学习一个恒等函数,可以将输入数据编码为低维空间表示,并且可以从该低纬表示解码回原始数据。这是通过学习最小化原始数据和重构数据之间的差异来实现的。
Autoencoder的目的是从数据中通过自监督的方式学习出一种特征表示(特征编码),再用于其他的任务,通常也用于特征降维。以下是它的网络结构:
压缩和解压
显而易见的,AE的神经网络试图学习一个编码过程 将原始的输入编码为低维空间的,以及学习一个解码过程将低维空间的向量还原回 ,因为的维度比低,那势必极可能会有信息的损失,为了尽可能的从 还原回 ,那么必然将尽可能的存储最为关键的信息,因此在一些需要低纬特征的场景,可以使用来表达的特征,并且最终的编码器可以用作对原始数据的有损压缩和解压缩。
去噪用法
如果我们的网络参数规模很大的话,模型很有可能会有过拟合的问题,一个显而易见的方法就是对训练数据进行增强(当然还有很多其他方法这里就先不提了),比如我们可以通过对输入数据添加一些随机噪声或随机遮盖,得到一些并非那么完整的输入样本,而标签使用原始的,这样就可以获得更大的训练集从而避免过拟合。这样以来,也使得AE获得了一个新的技能,即对噪声数据进行简单的去噪。
为何不能用于生成
显然,这里的都是从训练数据集合编码来的,因此尽管的维度比小很多,但潜在编码的分布依然只取决于训练数据的分布,这就导致潜在状态空间的分布并不是连续的,于是如果我们随机生成一个潜在编码,那么它很有可能根本不在我们原来的空间分布之内,因此无法解码出类似于原始数据的结果。
变分自编码器(VAE)
实际上VAE的思想根植于变分贝叶斯和概率图模型,而与AutoEncoder并没多大关系,但是从深度学习的视角看,它们的网络结构确实较为相似,我们可以先从深度学习模型的角度来看一下VAE是怎么训练的。
深度学习视角
与AE类似,VAE也由编码器、潜在表示、解码器组成,不同的是,VAE不再试图将原始的输入映射到一个固定的低维向量,而是映射到一个概率分布,我们假设是高斯分布,那么就相当于让神经网络去学习一个均值函数,一个标准差函数 ,便得到了潜在编码的先验分布,从这个分布可以采样得到潜在编码,然后让神经网络去学习解码器,从潜编码生成与输入类似的,整体结构如下图所示:
观察这个结构,训练过程非常好理解,不过这损失函数怎么来的并不是很显然,这个我们稍后再解释,直观的看增加这个KL散度的正则项显然具有防止VAE退化为普通AE的作用,因为网络训练时为了尽量减小重构误差,将必然使得方差逐渐被降到0。
重参数技巧
如果你根据上述的网络来结构,使用tensorflow或者pytorch之类的框架来实现VAE网络,会遇到一个问题,就是采样这个过程并不可导,就没法进行误差反向传播了。此时就该用到这个重参数技巧(reparametrisation trick)了,其实这是高斯分布的一个性质:
如果且与都是实数,那么。
根据这个性质,我们可以从标准高斯分布采样一个,就可以根据上述性质得到:
通过这个技巧,让整个参数优化的梯度下降过程成为可能。
变分推断视角
如果只看VAE的神经网络结构,我们不禁会疑惑到底是什么样的脑洞才会想出这种东西,并且之前还有很多细节没无法解释。下面我们沿着这个想法的源头,从变分推断的角度再来看一下VAE是怎么来的。
我们使用概率模型来重新描述上述的编码和解码过程。假定潜在空间编码向量遵从参数为的先验概率分布,那么解码生成过程就是似然,因为我们希望解码器能够生成与真实数据类似的,就意味着最大化所有生成数据的概率,那么我们要学习的最优参数将满足:
为了方便,我们可以添加一个对数转为对数似然:
一般我们假定潜在空间的自然分布是已知的分布,于是我们可以将表示为以为条件的全概率形式:
显然,想要获得所有可能的再做累加是不可能完成的,于是我们要在这个基础上加一个条件限定的近似,即只考虑当给定输入数据的情况下的,这也就是我们希望学习的编码器,其中是网络参数。因此,整个过程可以直观的表示成如下图的概率推断形式:
损失函数
我们可以使用KL散度来衡量两个分布的差异,因此保证与接近,我们可以通过最小化,将其展开:
左右变换一下,就得到了我们最终所需的方程:
非常直观,方程的左边正是我们的优化目标,最大化似然,最小化两个分布的KL散度,于是VAE的损失函数可以定义为:
在变分贝叶斯方法中,这个损失函数通常被称为variational lower bound(变分下届)或者是evidence lower bound(ELBO,证据下届),这是因为KL散度总是大于0,因此有:, 即通过最小化损失,我们正在最大化生成真实数据样本概率的下界。
根据上面假设以上分布都是高斯分布,代入高斯分布的公式,并引入上述用神经网络来拟合的, 最小化上述损失等价于:
其中 是与参数无关的常数的省略表示,观察上式,恰好与深度学习视角中的那个损失函数对上了,也说明了这个损失函数是这么来的,并不需要什么清奇的脑洞。
小结
根据定义, 是一个标准的高斯分布,因此与AutoEncoder不同,VAE的潜在编码空间是连续的,因此可以通过无条件随机采样的 来生成数据样本 。VAE这种使用神经网络来拟合概率分布的做法非常有用,在后来的很多模型中发挥重要作用。

Loading Comments...