前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >变分自编码器(VAEs)

变分自编码器(VAEs)

作者头像
用户1908973
发布2018-07-24 17:48:31
3.6K0
发布2018-07-24 17:48:31
举报
文章被收录于专栏:CreateAMindCreateAMind

GAN专题结束了,按照计划,继续介绍生成模型。除了GAN,还有一类很有名生成模型variational auto-encoder(VAE,变分自编码器)。接下来的几期里面,我打算系统地了解一下VAEs。

为此,先从VAE的起源说起,本期要解读的文章是VAE的开山之作,它于2013年由Diederik P.Kingma和Max Welling提出[1]。2016年Carl Doersch写了一篇VAEs的tutorial[2],对VAEs做了更详细的介绍,比文献[1]更易懂。这篇读书笔记基于文献[1]。

PS: 获取更好的阅读体验,以及模型的推导,请移步知乎专栏,点击文末的阅读原文可以查看(鉴于微信公众号编辑器的限制,以后发送的文章将不会包含太多的公式、推导信息,详细的推导都请移步知乎专栏查看):

https://zhuanlan.zhihu.com/p/25401928?refer=academic-interests

VAE简介

我们来看一下VAE是怎样设计的。

上图是VAE的图模型。我们能观测到的数据是 x,而 x 由隐变量 z 产生,由 z -> x 是生成模型,记为

,从自编码器(auto-encoder)的角度来看,就是解码器;而由 x -> z 是识别模型(recognition model)

,类似于自编码器的编码器。

VAEs现在广泛地用于生成图像,当生成模型训练好了以后,我们就可以用它来生成图像了。与GANs不同的是,我们是知道图像的密度函数(PDF)的(或者说,是我们设定的),而GANs我们并不知道图像的分布。

VAE模型

首先,假定所有的数据都是独立同分布的(i.i.d),两个观测不会相互影响。我们要对生成模型

做参数估计,利用对数最大似然法,就是要最大化下面的对数似然函数:

利用贝叶斯推理,可以得到

其中,

经过改写,还可以写成

L称为对数似然函数的变分下界。一般来说,直接优化对数似然函数是不可行的,因此转而优化它的下界L。根据上述的两种形式,可以得到两种近似模型:

以及

实际试验时,如果样本量N很大,我们一般采用minibatch的方法进行学习,对数似然函数的下界可以通过minibatch来估计:

于是,利用随机梯度下降算法(SGD)或者Adam算法,可以训练得到参数θ和φ,此算法称为AEVB算法:

上面给的AEVB算法是一个算法框架,只有给定了

分布的形式以及

,我们才能启动算法。实际应用中,作者取

根据样本是实值还是二元数据进行选择,若样本为二元数据,则选择

若样本是实值数据,则选择

实验中,作者选择多层感知器(MLP)对

进行拟合,具体来说,

,参数为

,若样本为二元数据,则

若样本为实值数据,则

,参数为

根据以上假设的分布,不难计算

其中,

至此,VAE模型就完整了。

从auto-encoder的角度理解VAE

最后,我们从auto-encoder的角度来理解VAE,下图给出了VAE训练的时候的网络结构(以实值样本为例,注意下面两个图中的 ε 节点并不是bias!而是噪声变量,它的维数与 z 相同。):

训练好了以后,生成样本采用下面的网络结构:

VAE实验效果

作者在Frey face数据集和MNIST数据集上进行实验,实验得到的数据流形分布如下图所示,可以看出,VAE能够捕捉到图像的结构变化(倾斜角度、圈的位置、形状变化、表情变化等)。这也是VAE的一个好处,它有显式的分布,能够容易地可视化图像的分布。GANs虽然不具有显式的图像分布,但是可以通过对隐变量的插值变化来可视化图像的分布(参见公众号往期文章“DCGAN: 一类稳定的GANs”

VAE在不同维数的隐变量空间(z)下生成手写数字的效果如下:

可以看出,采用MLP也能产生效果还不错的数字,有趣的是,隐变量维数较低时,生成的图像笔画清晰,但是带有较大的噪声(模糊);隐变量维数高时,生成的数字部分笔画不清晰,但噪声小。

VAE代码和资源

VAEs网上的代码很多,下面给了三个基于原始论文[1]的代码,作者修改了激活函数和优化方法以取得更好的收敛性。第四个代码是caffe版本,基于文献[2]。

Tensorflow版本:https://github.com/y0ast/VAE-TensorFlow

Torch版本:https://github.com/y0ast/VAE-Torch

Theano版本:https://github.com/y0ast/Variational-Autoencoder

Caffe版本:https://github.com/cdoersch/vae_tutorial

了解详细推导,请移步知乎专栏:https://zhuanlan.zhihu.com/p/25401928?refer=academic-interests

参考文献

[1]. Kingma D P, Welling M.Auto-Encoding Variational Bayes[J]. stat, 2014, 1050: 10.

[2]. DOERSCH C. Tutorial on VariationalAutoencoders[J]. stat, 2016, 1050: 13.

[3]. Blei, David M.,"Variational Inference." Lecture from Princeton, https://www.cs.princeton.edu/courses/archive/fall11/cos597C/lectures/variational-inference-i.pdf.

学术兴趣小组 公众号授权转载

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-02-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CreateAMind 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档