变分自编码器(VAE)(二)

上篇文章是VAE的第一部分,主要介绍了VAE的一些相关知识,VAE的由来,还有VAE的主要模型结构之类的。下面介绍的是VAE的公式推导,十分的重要。

三、VAE公式推导

在进行公式推导之前,先介绍一下预备知识。

首先,VAE是一个生成模型,准确的说它是深度概率生成模型。概率生成模型关心样本的分布,对样本分布本身进行建模

其次,VAE是隐变量模型,隐变量模型是存在隐变量z,其中GMM也是一个隐变量模型,GMM中也存在隐变量z。VAE的生成样本是由隐变量z生成的,如VAE原文中的图模型所示:

最后,在公式推导之前,先介绍一下各种符号表示的意义:

公式推导又可以从两个方面来推,两个方面都可以推导出最终结果:

1.正向推导

这个名是我自己起的,不一定正确,先这样叫吧。

首先,我们知道VAE是深度概率生成模型。概率生成模型关心样本的分布,对样本分布本身进行建模。因此,样本分布为P(X),其中X= {​{ x1,x2,x3,...xn }}。目前我们已知的只有一些来自分布P(X)的样本,且我们并不知道P(X)是什么分布,现在我们只能根据一些已知的样本去求样本分布P(X)。显而易见,我们是无法求解的。

这样我们不妨转换一下思路,既然根据已知样本无法直接求解P(X),那么我们做出合理的假设,假设样本X,是由隐变量z产生的。这样一来,P(X)=\int P\(Z)P(X|Z)dz 。这样一来P(X)就有了一个基本的结构。

--------------------------------------------------------题外话----------------------------------------------------------

VAE原文中,对于隐变量z的引入,举了一个关于MNIST的简单例子,如下图,感兴趣的可以自己看看。

----------------------------------------------------------------------------------------------------------------------------

关于隐变量z的分布P(Z),我们也做出了假设,假设它是服从标准正太分布的,即P(Z)~N(0,I)。这里P(Z)不一定非要这样假设,你也可以假设它是其他的分布,那为什么这里要如此假设呢?我觉得有一下两点理由:1.标准正太分布足够简单,并且理论上来说,标准正太分布经过变换可以拟合任意复杂的分布。2.中心极限定理,也称为大数定理。也就是说只要样本足够大,我们都可以看作其是一个正太分布。

关于P(X|Z)我们也假设它服从高斯分布,即P(X|Z)~N(\mu ,\Sigma ),理由如上。

有了合理的假设,我们继续推导P(X),这里用到的思想是极大似然的思想,简单来说就是在理想情况下,现有的样本的概率一定大,概率大的样本更容易被获取。凭借极大似然的思想,我们现有的样本的概率一定大,我们就最大话这个概率P(X),其中X为所有现有的样本的集合。

通常我们会将公式改写成log函数的形式,因为公式推导过程中会出现累乘,用log函数可以将累乘转换为累加,方面推导。并且整体转换为log形式,并不改变其相对大小。在极大似然的计算中我们也是经常使用对数似然来计算。

则我们改写成对数似然的形式:logP(X)=logP(X,Z) - logP(Z|X)=log\frac{P(X,Z)}{q(z)}-log\frac{P(Z|X)}{q(z)}

此时,分别对公式的左右两边求期望E_{q(z)}:

其中,左边:\int q(z)logP(X)dz=logP(X)\int q(z)dz=logP(X)

右边:\int q(z)log\frac{P(X,Z)}{q(z)}dz-\int q(z)log\frac{P(Z|X)}{q(z)}dz=ELBO+KL(q(z)||P(Z|X)))

可以看到,logP(X)=ELBO-KL(q(z)||P(Z|X)))

其中,等式右边最后一项为KL>=0,当q(z)=P(Z|X)时,KL=0。

则logP(X)>=ELBO,我们称ELBO为变分下界。此时,我想最大化P(X),其实可以转化成最大化ELBO。

其中, ELBO也可以继续推导:

ELBO=\int q(z)log\frac{P(X,Z)}{q(z)}dz=\int q(z)log\frac{P(X|Z)P(Z)}{q(z)}dz=\int q(z)logP(X|Z)dz+\int q(z)log\frac{P(Z)}{q(z)}dz=E_{q(z)}logP(X|Z)-KL(q(z)||P(Z))

可以看到,ELBO被分解成两项,第一项属于重构,第二项是一个正则化项。我们将ELBO作为损失函数来训练VAE,因为是最大化ELBO,所以做损失函数的时候,就是-ELBO。

至此,公式算是基本推导完成。那么你可能疑问变分在哪里呢??其实,变分就是我们引入的q(z),我们让q(z)去拟合不可计算的P(Z|X)。那么为什么P(Z|X)不可计算呢???因为P(Z|X)=\frac{P(X,Z)}{P(X)}其中P(X)是我们要求的。这里进一步说,q(z)中的z是由样本得到的,所以q(z)=q(z|x)。我们可以将上面的q(z)都替换成q(z|x)带入公式,这里我们就不写了。

我们用q(z|x)去拟合不可计算的P(Z|X)其实就是变分推断。假如是纯数学的方法,我们进行变分推断的话会有基于平均场的变分推断,SGVI等方法。这里,我们直接用神经网络来拟合,也就是encoder部分,输入样本x,得到均值和方差,然后从这个p(z)中采样一个z值,将z输入到decoder中,生成样本。

2.KL(q(z|x)||P(z|x))

第二种公式推导方法是从变分推断角度来的,VAE原文中就是从这个方向推导的。

公式写起来比较麻烦,我直接粘贴原文了

 最后可以看到,公式5跟我们的推导最后的形式都是一样的,logP(X)=ELBO+KL

四、补充说明

1.VAE是从AE的基础上来的,可以生成与输入类似但不一样的新样本。

2.何为变分?变分其实就是变分推断,我们用q(z|x)去拟合难以得到的p(z|x)。VAE中直接用到了神经网络来实现,也就是VAE中的encoder。

3.为什么要有重参数化技巧?因为在VAE训练过程中,encoder输入的是均值跟方差,我们得到的均值跟方差是确定的值,通过这个均值和方差我们在p(z)中采样z,然后输入到decoder中,最终生成新的样本。在神经网络训练时,我们会通过反向传播来优化神经网络的参数,如果均值跟方差是一个确定的值,那么我们就无法计算梯度,没有办法进行反向传播优化encoder的参数。

基于此,用到了重参数化的技巧,先从一个标准正太分布N(0,I)中采样一个\varepsilon,然后让z=\mu +\Sigma *\varepsilon,如此一来,均值和方差都是变量,我们就可以进行求梯度,然后反向传播优化encoder的网络参数了。

4.说说PCA,经过文章的介绍,可以发现其实AE跟PCA是很像的,只不过PCA本身是用来做矩阵降维的。

  如图,X本身是一个矩阵,通过一个变换W变成了一个低维矩阵c,因为这一过程是线性的,所以再通过一个W^{T}变换就能还原出一个,现在我们要找到一种变换W,使得矩阵X与能够尽可能地一致,这就是PCA做的事情。在PCA中找这个变换W用到的方法是SVD(奇异值分解)算法,这是一个纯数学方法,不再细述,因为在VAE中不再需要使用SVD,直接用神经网络代替。

五、总结

写完之后发现,里面公式推导的字母大小写问题比较严重,有时候用大写字母有时候用小写字母,错误太明显,因为大小写字母代表的意思完全不同。但是写完之后公式直接变图片了,无法重新编辑,在次声明一下,除了大小写的问题,公式的思想和推导是正确的,等以后有时间再改吧。文中用到的图片都是来源于网络,侵权必删。

 

  • 15
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值