欢迎来到《The Turing Times 图灵时报》第三期!
本周有幸请到心有麟熙在斯坦福人工智能实验室的好友Shengjia Zhao博士,为大家介绍他在无监督学习方向的最新研究成果《多层特征的无监督学习》。
在深度学习中一类非常重要的问题是表征学习 (representation learning),即我们希望学到数据的高层的特征 (feature)来帮助我们完成最终的预测,聚类或者其他任务。一类表征学习的非常有效的方法是变分自编码器(Variational Autoencoders, 简称VAE)。
VAE定义了一个条件分布 p(x|z) 来给定隐变量 z 生成数据 x ,我们的希望是 z 能够捕捉到高层的特征,而x能生成对应于这些特征的图片。同时我们也对称地学习一个从 x 到 z 的映射:q(z|x),使得给定 x 我们可以求出对应的特征。
1
◆
更深不一定更好
◆
通常深的网络往往可以学到多层特征(feature hierarchy),也就是说,每一层逐渐表达更高层和抽象的特征。比如对于在ImageNet上面训练的深度卷积网络,我们发现每一层都表达更高层次的特征,例如,低层会表达简单的边缘或者形状,而更高的层会表达一些物体部分或者特征。
神经网络的分层示意图
对于VAE也有很多工作提议也应当逐层生成来学习多层特征:
这样的模型其实是把多个VAE堆叠起来。每一个VAE的输入隐变量z都是上一层VAE的输出x。
但是我们在论文《Learning Hierarchical Features from Generative Models》里说明,这样的结构不一定能带来好处。在很多模型下这样的结构都是多余的,而不能够学到多层特征。
2
◆
一种简单的学习多层特征的方法
◆
事实上有一种非常简单的学习多层特征的方法。我们称之为变分梯形自编码器Variational Ladder Autoencoder (VLAE)。他的原理非常简单,我们假设更复杂和抽象的特征需要更深的网络去表达,所以我们把z分成几个部分:
并且从 z1 到 z_h 和 x 之间的网络逐渐加深。参考下面的示意图:
我们从
生成 x 的过程是先从 z_h 通过一个网络生成 z_h' ,然后和下一层的特征z_(h-1) 结合,然后依次类推只到生成输出 x 。换言之,我们不断的把 z_h, ..., z_1 连接到网络中,但是越往后连接的和 x 之间的网络深度就会越浅。
对于 q(z|x) 也是一样的,我们不断的输出 z_1, ..., z_h ,越早输出的变量和 x 之间的网络深度也会越浅。我们的希望是这样更简单的特征就会被更低层的隐变量,比如 z_1 所表达,而更复杂的特征会被更高层的变量,比如 z_h 所表达。
训练和普通的VAE是一样的。下面是我们的模型学习到的特征。每一个图片都是只改变而不改变其他层的特征,这样根据这些图片不一样的地方我们可以推断这是对应的变量 z_l 表达的特征。下面的图片依次是从左到右改变 z_1 到 z_4 :
SVHN: Street View House Number 实景拍摄门牌号码的数据集
CelebA: 好莱坞明星头像数据集
我们发现低层(离 x 更近的层)学到了简单的特征,比如颜色,而更高的层学到了更复杂的特征,比如图片的整体结构。我们可以比较之前的堆叠的VAE在同样的问题上面学到的特征。很明显VLAE可以学到更加丰富有意义的多层特征。
代码出处:https://github.com/ermongroup/Variational-Ladder-Autoencoder。
原文地址:https://arxiv.org/abs/1702.08396
END
感谢大家支持心有麟熙。还没有关注心有麟熙公众号的同学们请加DrJimFan或者扫下图二维码。
领取专属 10元无门槛券
私享最新 技术干货