自编码器
常用于数据压缩算法和特征提取算法
- 包含Encoder and Decoder, 若用和表示对应的映射为
目标函数是为了拟合一个恒等函数
变分自编码器
如何将其变化成为自编码器的形式
如何理解和
如何保证采样出的Z能够对应还原到原来的X
变分下界的推导,SGVB估计的原理
基本概念
-
KL散度(相对熵):用于衡量两个概率分布p(x)和q(x)之间的差异性,定义为
具有非负性,仅当p(x)=q(x)时,KL散度为0 -
Monte Carlo采样: 期望可以表示为
如果通过从p中随机抽取n个样本来近似s,并得到一个经验平均值,那么根据大数定律,样本均值会收敛到真实的均值。
基本假设
- 假设有一批数据样本,用X来表示,如果想得到X的分布p(X),但是数据量不足够大时,估计的是不够准确的 ,那么可以将分布形式改一改,引入隐变量Z,这样可以得到:
此处是离散形式,引入一个隐变量Z之后,比如,然后得到X相对于随机变量Z的条件分布。如果可以实现,则是从标准正态分布中进行采样一个z,然后基于z去计算产生一个X,从而可以得到X的分布。
理论推导
基于上述假设,亟需解决的问题是如何估计隐变量z以及各分布中的参数
- 估计参数最自然的想法是采用极大似然估计,但是目前存在两个问题:
- 通过等式 估计无法做到
- 真实的后验分布也没办法计算
改变策略:既然我估计不了计算不出来,那我自己生成一个!
引入概率分布来逼近真实的后验分布,那么如何逼近呢? 对的!KL散度
记
因此
根据KL散度的非负性,可以知道
称为变分下界(variational lower bound),因此求边际似然函数的最大值转化成为求变分下界的最大值
根据极大似然法,得到
其中
下面对变分下界进行推导
下一部分将推导如何估计变分下界
重参数化技巧(reparameterization)
由于q(z|x)是后验分布,如果采用Monto Carlo方法进行采样估计真实分布,由于采样这个操作是不可导的,也不好在模型中进行描述,因此此处采用一个重参数化的技巧,已知 ,那么可以引入一个新的分布, 称为辅助变量,这样在采用Monto Carlo估计的时候,就能保证他是可导的。(有疑问没关系,下面拿高斯分布的重参数技巧举例大家就会更明白一些)
随机梯度变分贝叶斯(SGVB)估计
对于上述的变分下界,我们采用重参数化技巧及Monto Carlo估计得到
其中
因此,我们可以根据式(3)得到第一个版本的随机梯度变分贝叶斯估计,即
其中
但实际上,变分下界(4)中的第一项往往是可以直接求出来的,因此可以只对第二项进行Monto Carlo估计,从而得到第二个版本的SGVB估计.
本部分确定了变分下界的计算方式,也就是说,可进行计算,而最大似然估计进行求解转化为对变分下界去求最大值即可,此时保证了我们生成的后验分布q(z|x)能够尽可能地接近真实分布p(z|x)
具体形式
首先,对于开头的假设,隐变量服从 ,并且在此假设生成的后验分布为多元高斯分布,即
此时,(4)中的第一项可以先计算出来,假设z的维度为J,下面推导主要用到了
现在变分下界中只剩下第二项生成模型需要计算,在原文中,作者假设生成模型p(x|z)是高斯分布(连续)或者伯努利分布(离散),首先考虑离散形式的分布伯努利分布,此时
从而可以计算出
对于高斯分布有
其中是前述后验概率产生的均值和方差,从而可以计算出
通常在使用的时候,会固定方差为一个常数 ,此时
到这里是不是很眼熟?这不是均方差(MSE)吗?
总结,对于二值数据,采用伯努利分布,decoder采用sigmoid函数进行激活,交叉熵为损失函数;对于连续数据,则采用高斯分布,用MSE作为损失函数,注意此时对应的是方差固定的情况!!!
-
AEVB算法
总结及反思
回到最初理论推导中的几个疑问
- 为什么采样出的Z能够对应还原出X
由于前面后验概率编码过程中,假设的是相对于每一个x都有对应的高斯分布,因此,数据集中每一个样本都有专有的高斯分布 - 换个角度看变分下界
变分自编码器从结构上是对每个样本生成对应的高斯分布,然后采样进行恢复,首先一般的编码器目标函数是想要重构的X和原来的X差别尽量小,但是由于是重新采样过的,也就是说方差可以看成是噪声的强度,我们肯定希望噪声越小越好,但是这样就会退化成普通的自编码器,而变分自编码器中(5)式只有当趋近于0,趋近于1的时候会最小,此时保证了噪声强度趋近于1,保证了生成能力,此时后验分布 趋近于 - 为什么Mini-batch Version中采样一次就足够了?
事实上会运行多个epoch,每次的隐变量都是随机生成的,因此当epoch足够多的时候,可以保证采样的充分性。
参考自
苏剑林. (2018, Mar 18). 《变分自编码器(一):原来是这么一回事 》及二三
《Auto-Encoding Variational Bayes》
https://blog.csdn.net/NeutronT/article/details/78086340