变分自编码器(一)——基本原理简介

自编码器

常用于数据压缩算法和特征提取算法

  • 包含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),因此求边际似然函数的最大值转化成为求变分下界的最大值
根据极大似然法,得到

其中

下面对变分下界进行推导
\begin{eqnarray*} \mathcal{L}(\theta, \phi;x) &=& E_{q(z|x)}[-\log q(z|x)+\log p(x,z)] \\ &=& E_{q(z|x)}[-\log q(z|x)+\log (p(x|z)p(z))]\\ &=& -E_{q(z|x)}[\log q(z|x)+p(z)] + E_{q(z|x)}[\log p(x|z)]\\ &=& -D_{KL}[q(z|x)||p(z)] + E_{q(z|x)}[log p(x|z)] \tag{4}\\ \end{eqnarray*}
下一部分将推导如何估计变分下界

重参数化技巧(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,下面推导主要用到了
\begin{eqnarray*} -D_{KL}[q(z|x)||p(z)] &=& -\int q(z|x)\log \frac{q(z|x)}{p(z)}\\ &=& -\int q(z|x)\log q(z|x)dz +\int q(z|x)\log {p(z)}dz\\ &=& \int \mathcal{N}(z;\mu,\sigma^{2})\log \mathcal{N}(z;0,I)dz - \int \mathcal{N}(z;\mu,\sigma^{2})\log \mathcal{N}(z;\mu,\sigma^2)dz \\ &=& -\frac{J}{2}\log (2\pi) -\frac{1}{2}\sum^J_{j=1}(\mu_j^2+\sigma_j^2)-(-\frac {J}{2}\log (2\pi) - \frac{1}{2} \sum^J_{j=1}(1+\log \sigma_j^2))\\ &=& \frac{1}{2}\sum^J_{j=1}(1 + log ((\sigma_j^2))- (\mu_j^2)- (\sigma_j^2)) \tag{5} \end{eqnarray*}
现在变分下界中只剩下第二项生成模型需要计算,在原文中,作者假设生成模型p(x|z)是高斯分布(连续)或者伯努利分布(离散),首先考虑离散形式的分布伯努利分布,此时

从而可以计算出

对于高斯分布有

其中是前述后验概率产生的均值和方差,从而可以计算出

通常在使用的时候,会固定方差为一个常数 ,此时

到这里是不是很眼熟?这不是均方差(MSE)吗?

总结,对于二值数据,采用伯努利分布,decoder采用sigmoid函数进行激活,交叉熵为损失函数;对于连续数据,则采用高斯分布,用MSE作为损失函数,注意此时对应的是方差固定的情况!!!

  • AEVB算法


    变分自编码器(一)——基本原理简介_第1张图片
    AEVB算法

总结及反思

变分自编码器(一)——基本原理简介_第2张图片
变分自编码器架构

回到最初理论推导中的几个疑问

  • 为什么采样出的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

你可能感兴趣的:(变分自编码器(一)——基本原理简介)