emmmmm.....先来一首BGM吧。
VAE的讲解
网络的逻辑输入和输出 这是我为了更加清晰的介绍流程图而设定的(不知专业的词哈)
首先,对于一批数据来说,生成模型的目标就是学习得到一个分布,使得该分布和数据的真是分布很接近,这样一来,我们就可以根据得到的来生成该数据集中到数据,也就是达到了生成数据的目的,这就是生成模型的最终目标。但是,我们无法直接获得这样的,而且,随着的维度的变大,很多的方法例如蒙特卡洛近似就无法使用。既然是概率图的形式,我们可以采用如下的模型来生成--通过引进一个隐层变量,这样,而且我们假设,。其中是网络的输出,是网络拟合的函数。这样我们就可以用过采样得到,输入网络得到最后的(这就是终极目标),再通过近似或者采样等操作生成。但是这个网络太难训练了,因此直接从一个正太分布中采样输入到网络中,其对于网络拟合的的贡献可能为0!这样,如果的维度也很高的话,网络学习的难度就更大了,因此这样的方法不符合实际。
插播一则广告:网络的输出 和 网络的拟合函数是不一样的,而且网络最终的逻辑输出也不一样!例如我们训练一个网络来拟合高斯分布,此时,你网络的输出可能是,但是网络最终拟合的是,但是此时如果也是一个随机变量的话,那么网络最终符合的逻辑输出是。
那么,怎么改进上面的生成模型呢,还是使用隐层变量的话,这时候,我们要保证采样得到的是每个数据专属的变量,它是有利于构建P(X)的,因此我们决定从P(Z|X)中采样,这样一来,是依赖于输出的的,它对于重构出有很高的置信度。那么此时的P(Z|X)会是什么分布呢?当然是高分布!这样,encoder的输出就可以采用KL散度来训练。注意此时和之前的区别!!此时采样后输入到网络中的虽然是,但是这是网络的拟合输出,网络的逻辑输出是,也就是此时的Z是采样于,这是有区别的!逻辑输入就不一样了。这样,网络就变成了下面的例子:
VAE的关键是在隐层的处理,引进了来近似,这样就可以通过采样,来最大化,是网络的逻辑输出。是需要最大化的目标,也就是最大似然。当 每次只进行一次采样的时候,边缘概率,因此要最大化网络拟合的函数(注意是拟合的函数,而不是输出)!!那么,引进了来近似,发生了什么变化??我们采用KL散度来度量这两者之间的关系,可以得到如下的公式:
利用贝叶斯后验概率公式得到:
这样,我们间接得到了,也就是网络的逻辑输出,更是我们想要最大化的目标!,移动一下位置,得到:
利用KL散度的公司,最后变换得到:
(4)中的和我们之前分析的如果只采样一次的时候一样。此时网络的输出是,要使得最大,那么就要使得和很接近,我们假设输出是高斯分布,而且是手动设置很小的值,此时其表达式的对数为
这,,,不就是重构损失吗???。这也太巧合了吧?(其实这里可以参考这篇文章中,阅读完你就知道为什么了。)decoder网络拟合的是,此时该函数的变量是。 训练的时候,X是固定的,训练得到的是,而当用于生成的时候,是固定的,是生成的,因此,训练的时候,寻找使得网络拟合的函数输出最大。这里主要用于区分网络拟合输出的和最大似然的目标之前的关系,通过单次采样之后,整个decoder的逻辑输出是,此时的X是输出的数据,而不是生成的数据!而整个网络的训练不仅仅是这一项,因为中间拟合函数的引进,因此才有了最终的Loss函数。这样才能使得最后重构的X是符合概率分布逻辑流的。
这里再讨论一波所谓的变分下限是什么?由(3)可知道,
而最后一项的是非负数的,因此有
这一项就是传说中的变分下限,因此,最大化一个目标函数的时候,可以通过最大化其下限来实现。此时,误差项的引进就是的省略,我们假设网络足够完美,以至于这一项的KL散度接近零。那么对于这个变分下限,我们如何进行优化呢?这一项中有一个KL散度和一个网络的拟合输出。网络的拟合输出上面分析过,可以通过一次采样近似。最大化该项,只需要调整网络的参数使得网络的输出和X接近即可。另外一项是,这里有两个函数和,由于需要计算KL散度,因此需要明确的形式,我们假设先验概率依旧是正态分布,要使得该项最小,那么我们让Q(Z|X)也向着标准的正态分布靠近,因此我们让网络拟合,也就是网络的输出。这样确实可以使得该项的KL值变小,到这里,我们好像基本实现了变分下限的最优化分析----使得网络的重构最小,使得最小。整体的流程如下:
但是,还有个很重要的,那就是一开始的 ,这一项被省略掉,那么后面的优化能否保证这一项也趋近于零呢?在一篇的tutorial中有推到过程:这样,我们就可以通过优化变分下限,从而实现最终的目的了。
变分贝叶斯主要用与解决无法计算的后验概率的情况,例如本例中的就是无法解决的,通过近似的思想来求解(这就涉及到很多利用函数下限来不断逼近的方法,EM算法就是其中的一种方式,EM算法通过不断的更新其最大值,使得近似函数的下限不断变大最终收敛)。其实这里还有 一个启发,那就是利用网络来拟合各种棘手的函数,这是很好的,而且,通过变分下限等手段,得到最优化目标的其他的表示方式,这是一个很好的例子。
VAE生成模型以及流动逻辑
首先要明确的是,VAE是的后半部分(decoder)是一个生成模型,因为它用于生成一些新的图像。那么生成模型是什么?? 给出维基百科的定义:在概率统计理论中, 生成模型是指能够随机生成观测数据的模型,尤其是在给定某些隐含参数的条件下。它给观测值和标注数据序列指定一个联合概率分布。在机器学习中,生成模型可以用来直接对数据建模(例如根据某个变量的概率密度函数进行数据采样),也可以用来建立变量间的条件概率分布。条件概率分布可以由生成模型根据贝叶斯定理形成。生成模型。
在VAE中,数据在流动的时候,会将其逻辑一起流动到下一个网络中,因此网络的逻辑输出是要考虑变量的先验概率的。VAE的网络结构是
encoder网络的输入是X,网络的拟合的是后验概率的近似值,网络的输出是这两个参数是概率分布函数的参数值。decoder的输入是,采样于,网络的拟合的是,网络的输出是,而手动设定很小。VAE的本意是,如果直接从中采样的话,那么输入到decoder中时候,没有很高的置信度来生成合理的,因此,decoder中的输入应该要充分利用观测数据,也就是从中采样,这样的所采样的具有更高的可信度来生成。同时,由于网络最后拟合的逻辑是,通过MC模拟,可以得到:最后的约等于是采用门特卡罗近似得到的。由于的取值置信度很高, 因此可以只采样一次!,也就是(如果Z的取值使得生成X的置信度不高的话,而且X是一个很高纬度的向量,那么在采用的时候,由于维度太高,要使得每个维度的采样都基本符合真实的分布的话,需要进行巨大数量的采样才能满足,这是不现实的。).
因此,上面的式子其实是,也就是说,网络最后模拟的是P(X)的近似值(因此,网络的输出肯定是要最大化的。。。。)。而且,通过假设最后输出的分布形式(伯努利分布或者是高斯分布),最后生成真实图像的时候,不用再从中采样,有两个原因,一个是采样的话,直接从拟合出的中采样也可以,但是多增加了采样的步骤;二是,由于此时的是手动设置很小,此时的网络输出是高斯分布的均值,和样本的分布基本重合,因此可以直接使用来代表最终需要生成的。
意义:
这篇文章主要是讲解整个VAE的工作流程,以及个步骤为什么works,文章存在很多不合理的地方,欢迎批评指出!VAE的主要贡献是它完美将概率图和深度学习结合起来,使得深度学习称为工具而不是方法。
references
(一篇是tutorial,一篇是原文。主要还是看这2文章)
Tutorial on Variational Autoencoders
Auto-Encoding Variational Bayes
Tutorial - What is a variational autoencoder?
其他的参考文献(参考辅助)
变分自编码器(Variational Auto-Encoder,VAE)
Lecture 13:Generative Models
Introduction to variational autoencoders VAE第二篇
【Learning Notes】变分自编码器(Variational Auto-Encoder,VAE)