机器学习

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

2019-05-30  本文已影响0人  长安逸魂

自编码器

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

变分自编码器

如何将其变化成为自编码器的形式
如何理解\mu\sigma
如何保证采样出的Z能够对应还原到原来的X
变分下界的推导,SGVB估计的原理

基本概念

基本假设

理论推导

基于上述假设,亟需解决的问题是如何估计隐变量z以及各分布中的参数

改变策略:既然我估计不了计算不出来,那我自己生成一个!
引入概率分布q_{\phi}(z|x)来逼近真实的后验分布,那么如何逼近呢? 对的!KL散度
\begin{eqnarray*} D_{KL}[q(z|x)||p(z|x)] &= &\int_{q(z|x)}q(z|x)\log \frac{q(z|x)}{p(z|x)}\\ &=&E_{q(z|x)}[log q(z|x)-\log p(z|x)]\\ &=&E_{q(z|x)}[log q(z|x)-\log p(x,z)]+\log p(x) \tag{2}\\ \end{eqnarray*}

\mathcal{L}(\theta, \phi;x)=E_{q(z|x)}[-log q(z|x)+\log p(x,z)] \tag{3}
因此
\log p(x)=\mathcal{L}(\theta, \phi;x) + D_{KL}[q(z|x)||p(z|x)]
根据KL散度的非负性,可以知道
\log p(x)\geq \mathcal{L}(\theta, \phi;x)
\mathcal{L}(\theta, \phi;x)称为变分下界(variational lower bound),因此求边际似然函数的最大值转化成为求变分下界的最大值
根据极大似然法,得到
\log p(X)=\sum^N_{i=1}\log p(x^{(i)})
其中
\log p(x^{(i)})=\mathcal{L}(\theta, \phi; x^{(i)}) + D_{KL}[q(z|x^{(i)})||p(z|x^{(i)}) ]
下面对变分下界进行推导
\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方法进行采样估计真实分布,由于采样这个操作是不可导的,也不好在模型中进行描述,因此此处采用一个重参数化的技巧,已知 z \sim q_\phi(z|x),那么可以引入一个新的分布z = g_{\phi}(\epsilon, x), \epsilon称为辅助变量,这样在采用Monto Carlo估计的时候,就能保证他是可导的。(有疑问没关系,下面拿高斯分布的重参数技巧举例大家就会更明白一些)

随机梯度变分贝叶斯(SGVB)估计

对于上述的变分下界,我们采用重参数化技巧及Monto Carlo估计得到
E_{q(z|x^{i})}[f(z)]=E_{p(\epsilon)}[f(g_\phi(\epsilon, x^{(i)}))]\simeq\frac{1}{L}\sum^L_{l=1}f(g_\phi(\epsilon^{(l)},x^{(i)}))
其中 \epsilon^{(l)} \sim p(\epsilon)
因此,我们可以根据式(3)得到第一个版本的随机梯度变分贝叶斯估计\tilde{ \mathcal{L}}^A(\theta, \phi, x^{(i)}),即
\tilde{ \mathcal{L}}^A(\theta, \phi, x^{(i)})=\frac{1}{L}\sum^L_{l=1}\log p(x^{(i)},z^{(i,l)})-\log q(z^{(i,l)}| x^{(i)})
其中 z^{(i,l)}=g_\phi(\epsilon^{(i.l)},x^{(i)}),~~\epsilon^{(l)}\sim p(\epsilon)
但实际上,变分下界(4)中的第一项往往是可以直接求出来的,因此可以只对第二项进行Monto Carlo估计,从而得到第二个版本的SGVB估计.
\tilde{ \mathcal{L}}^B(\theta, \phi, x^{(i)})=-D_{KL}(q(z|x^{(i)})||p(z))+\frac{1}{L}\sum^L_{i=1}(\log p(x^{(i)}|z^{(i,l)}))

本部分确定了变分下界的计算方式,也就是说,\mathcal{L}可进行计算,而最大似然估计进行求解转化为对变分下界去求最大值即可,此时保证了我们生成的后验分布q(z|x)能够尽可能地接近真实分布p(z|x)

具体形式

首先,对于开头的假设,隐变量服从 p(Z) \sim \mathcal{N}(z; 0,I),并且在此假设生成的后验分布q(z|x)为多元高斯分布,即
\log q_\phi(z|x^{(i)})=\log \mathcal{N}(z;\mu^{(i)},\sigma^{2(i)}I)
此时,(4)中的第一项可以先计算出来,假设z的维度为J,下面推导主要用到了E(X^2)= \mu^2 + \sigma^2
\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)是高斯分布(连续)或者伯努利分布(离散),首先考虑离散形式的分布伯努利分布,此时
p(x|z) = \Pi^D_{k=1}(\rho_{(k)}(z))^{x(k)}(1- \rho_{(k)})^{1-x(k)}
从而可以计算出
-\ln p(x|z) = \sum^D_{k=1}[-x_{(k)}\ln \rho_{(k)}(z)- (1-x_{(k)})\ln (1- \rho_{(k)}(z))]
对于高斯分布有
p(x|z) = \frac{1}{\Pi^D_{i=1}\sqrt{2\pi \sigma_{(k)}^2(z)}} e^{(-\frac{1}{2}||\frac{x-\mu(z)}{\sigma(z)}||^2)}
其中\mu(z),\sigma(z)是前述后验概率产生的均值和方差,从而可以计算出
-\ln p(x|z) =\frac{1}{2} ||\frac{x-\mu(z)}{\sigma(z)}||^2 + \frac{D}{2}\ln 2\pi + \frac{1}{2}\sum^D_{k=1}ln \sigma^2_{(k)}(z)
通常在使用的时候,会固定方差为一个常数 \sigma^2,此时
-\ln q(x|z) \sim \frac{1}{2}||\frac{x-\mu(z)}{\sigma}||^2
到这里是不是很眼熟?这不是均方差(MSE)吗?

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

总结及反思

变分自编码器架构

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

参考自
苏剑林. (2018, Mar 18). 《变分自编码器(一):原来是这么一回事 》及二三
《Auto-Encoding Variational Bayes》
https://blog.csdn.net/NeutronT/article/details/78086340

上一篇 下一篇

猜你喜欢

热点阅读