Preliminary
在之前提到的vae模型中,作者将KL散度加入到误差函数之中,将传统的自编码器中一个样本点对应一个z,改成了一个样本点对应一个z的分布q(zx),也就是一个样本点x对应了多个z,误差中的重构误差迫使模型学习到从z到x的重构函数,从而使得模型学习到了一个连续的隐层空间。
vae神奇的地方在于,它对数据特征的高效表达。我们此处用mnist数据作为例子:
令人惊艳的是,vae在隐层空间有一个对数据的压缩特征z的一个聚类。对于mnist来说,这是一种对数字类别的高效表达。很明显的,不同的类别处于空间中的不同位置。
所以产生了一个问题,如果我们用这些特征z来训练一个分类器,效果如何呢?用这些特征z我们可以做什么更进一步的事情呢?这篇文章从一定程度上回答了这些问题。
Models
作者在文中提出了三个模型,其一是Discriminative model,其二是Semi-supervised model,其三是两种模型的结合。
Discriminative model
模型一的构造和vae一致,直接使用Latent feature z来训练分类器,当然也是模型二的基础。
Semi-supervised model
模型二是半监督模型,对于半监督学习来讲,有两个数据集。其一是带标签的数据X=,另外一种便是不带标签的数据X_=。数据的生成过程如下:
对于不带标签的数据,y和z一样被当做隐层变量。作者假设y控制了生成的图片类别,z控制了一些其他的特性,例如书写风格等。
在vae中encoder是q(zx),在semi-vae中encoder可以表示为q(z,yx)。因为文中假设x,y相互独立所以q(z,yx)可以被表示为q(zx)q(yx),前一项是vae中的encoder,后一项可以看做是一个判别器。我们用M1,M2来分别表示Discriminative model和Semi-supervised model的encoder网络,具体如下:
对于此模型的优化目标,需要分成带标签的数据X和不带标签的数据X_来分别讨论。
对于带标签的数据,优化目标如下:
对于不带标签的数据,优化目标如下:
所以对于完整的数据集,只需要整合这两个目标所以就变成了:
我们可以发现,q(yx)只在不带标签的目标中出现,也就是这在这一项 贡献误差。然而这对我们的数据判别器是极其不利的,因为对于X=来说标签数据y可以给我们的判别网络提供一个很重要的误差。所以作者人为把这些误差添加到了整体的目标中。最终的目标变成了:
Stacked generative semi-supervised model
模型三结合了这两个模型。首先我们训练一个普通的vae并得到了一个隐层的表达z1,然后我们直接用学到的表达z1来训练semi-vae。实验结果最终表明,模型三取得了很好的成绩。
领取专属 10元无门槛券
私享最新 技术干货