AI机动队
首发于AI机动队
变分自编码器VAE——深度学习第二十章(三)

变分自编码器VAE——深度学习第二十章(三)

继续总结花书第20章,这一篇我们来看另一种常用的生成模型——变分自编码器Variational Autoencoder,简称VAE,主要会结合斯坦福Syllabus | CS 231N中与Generative Model相关的内容来总结。

关于自编码器和变分推断的详细内容可回顾自编码器——深度学习第十四章变分推断——深度学习第十九章。这里也简要回顾一下以方便之后的讨论。

自编码器的结构如下,利用神经网络将输入信息编码到其特征空间,再利用神经网络将这些特征重构为与输入类似的信息。通常特征z相较输入x的维度要小,只包含重要特征。

而为了从模型中生成新的样本,我们只需要从分布 p_{model}(z) 中采样z,再经过解码网络得到样本x,其概率分布表示为 p_{model}(x) = \int p_{model}(z)p_{model}(x|z)dz 。但是这个积分是难以计算的,其后验概率 p_{model}(z|x)=p_{model}(x|z)p_{model}(z)/p_{model}(x) 同样是难以计算的,所以我们就要利用变分近似来求其lower bound,而我们就是利用加码网络 q(z|x) 来近似 p_{model}(z|x)

我们可以作如下推导:

log\ p_{model}(x) = E_{z\sim q(z|x)}log\ p_{model}(x) \\ =E_z[log\frac{p_{model}(x|z)p_{model}(z)}{p_{model}(z|x)}] \\ =E_z[log\frac{p_{model}(x|z)p_{model}(z)}{p_{model}(z|x)}\frac{q(z|x)}{q(z|x)}] \\ =E_z[log\ p_{model}(x|z)] - D_{KL}(q(z|x)||p_{model}(z)) + D_{KL}(q(z|x)||p_{model}(z|x))

由于最后一项 D_{KL}(q(z|x)||p_{model}(z|x))\geq 0 ,所以我们可以得到 log\ p_{model}(x) 的下限

log\ p_{model}(x)\geq E_z[log\ p_{model}(x|z)] - D_{KL}(q(z|x)||p_{model}(z))

其中第一项我们可以通过从加码网络中采样来近似,而第二项由于 q(z|x)p_{model}(z) 我们均可以选取可适的函数使其有闭合的解析形式,也是容易计算的。这两项合起来就是我们之前在变分推断中定义的evidence lower bound,简称ELBO函数,我们可以用梯度上升方法来逐渐优化它。

总结一下,VAE就是在训练时利用加码网络和解码网络利用变分法来极大化evidence lower bound,这样使得 p_{model}(x) 的下限提高,在要利用模型生成样本时则可从解码网络取样得到生成样本。VAE的理论原理比较自然,实现也比较容易,而且中间学习到的特征空间也可以用来迁移到其他的任务,但是虽然它显性的定义了概率分布,但并不是精确的求解概率分布,而是用lower bound来近似其概率分布,所以在做模型评估时不如上一篇总结的PixelRNN/PixelCNN好,而且其生成的样本较之之后要总结的GAN的样本通常要更模糊些,一些例子如下图所示:

当然关于VAE为何生成样本模糊,如何改善VAE的研究仍然很有意义,而且还有将VAE与GAN相结合的研究也可以同时利用二者的优势。下一篇我们就来总结一下生成对抗网络GAN, to be continued。


注:截图来自Ian Goodfellow等合著的Deep Learning一书以及斯坦福Syllabus | CS 231N中与Generative Model相关的讲义,推荐阅读原书和原课程。

编辑于 2018-12-02

文章被以下专栏收录