论文题目:UNSUPERVISED REPRESENTATION LEARNING WITH DEEP CONVOLUTIONAL GENERATIVE ADVERSARIAL NETWORKS
- 相关代码
摘要
目前,有监督的卷积网络收获了极大地成功。但是无监督的卷积神经网络受到的关注度就比较低。这篇文章主要是希望可以构建有监督和无监督学习之间的桥梁。文章介绍了一类被称为是深度卷积生成网络的结构,他们有很浅给的结构上的限制并且说明了在无监督学习方面这类网络是很有优势的,并且会通过一系列的任务来体现这类网络的优势。
简介
从大量的无标记图片数据库中学习重复出现的特征是热门研究的方向。在计算机视觉中,我们可以利用大量的无标记数据来学习他们的中间特征,这些学到的特征可以完成分类的任务。本文提出一种通过训练GAN(生成对抗网络)来建立图片的特征,并且之后再利用生成器和判别器中的网络作为有监督学习中的特征提取器。GAN模型提供了一个很好的对于最大化估计的替代手段。GAN模型的训练不是很稳定,明显的表现在生成器生成一些奇怪的图片上;展现GAN学习到了什么特征的可视化研究也很少。
这篇文章的贡献主要有几个方面:
- 提出和评价了卷积对抗生成网络中结构的限制,希望这些限制能帮助GAN结构更稳定地训练。并且命名为DCGAN
- 训练了可以进行图片分类的生成器,和其他无监督分类模型进行比较
- 可视化GAN模型学习到的filter,并且展示了特定的filter可以画出特定的物体
- 展示了生成器有很多有趣的向量计算,可以直接反映在生成的图片上。
Related Work
- 从无标签数据中学习特征表达
- 生成自然的图片(比较像真的的图片)
- 可视化内部CNN层
Approach and Model Architecture
历来将CNN结构用在GAN的模型中生成图片展示的效果都不是很好。这让LAPGAN的作者想到逐步提高生成图片的分辨率使得生成图片的模型更加稳定。我们同样也遇到了将CNN运用在GAN模型中常见的不稳定的问题。然而在一些列的模型探索以后,我们选定了一组模型可以在训练时稳定生成高清晰度的图片。
我们方法的核心是采用和修改最近在CNN结构中提出的改变
- 用带有确定stride参数的卷积层替代池化层,这可以使网络自己去学习适用于自身的下采样的方法。我们在生成器generator中采用这个改变
- 去除卷积网络顶部的全连接层。最强有力的证明是使用平均池化层,我们发现global average pooling会提升模型的稳定性但是会减缓收敛速度。折中的办法是直接用卷积特征连接生成器和判别器的输入和输出层。(?)。GAN网络的第一层,也就是随机 z 向量这一层可以被称作全连接层,因为这只是矩阵的乘法,但是他得出的结果会变形为4维tensor,并且开启以后一堆卷积。对于判别器来讲,最后一层的卷积层会被放入单一的sigmoid方程中作为输出。
- Batch Normalization可以稳定学习过程。但是在每一层增加BN层会导致生成的样本不稳定,所以在生成器的输出和判别器的输入层,我们不会用到BN。
- 在生成器除了输出层职位都用ReLU,在判别器用leaky ReLU会好一些
对抗训练的细节
我们用三个数据库: LSUN, Imagenet,组合人脸作为训练数据,训练了DCGAN模型。
- 对于训练图片 scale到 tanh方程的范围 [-1, 1]
- 所有训练中用size 128 mini-batch的SGD进行梯度下降运算
- 初始化z向量都来自于deviation为0.02的高斯分布
- LeakyReLU中的斜率为0.2
- 利用Adam优化器,momentum设置为0.5
- 学习率设置为0.0002
LSUN
随着由GAN网络生成的图片质量的提高,对于网络是否过拟合的讨论也随之增加。为了说明我们的模型是如何处理更多数据并且生成更高分辨率的图片,我们在LSUN大约三百万张图上做了训练。最近的分析显示了模型学习速度之快和生成图片质量之间的关系。我们展示了训练一次过后的sample,模仿在线学习,显示我们的模型并不是通过过拟合生成高质量图片的。训练的图片没有进行数据增广。
Faces
Faces的数据库是从网上下载了一些包含人的图片。每一个人都做了确认,保证他们是处于现代的人。对于这些图片,通过OpenCV里的人脸detector将脸从图片中识别出来。这些face boxes就被当做是训练数据。同样这部分的图片没有进行数据增广。
ImageNet-1k
我们用了ImageNet数据库中的图片作为无监督学习的图片来源。训练是在大小为 $32\times32$ 尺寸的图片上展开。图片同样没有做数据增广。
Empirical Validation of DCGAN capabilities
Classifying CIFAR-10 using GANs as a feature extractor
常见的评价无监督特征学习的算法就是将他们用作特征提取器用在有监督的数据库中,然后看他表现如何。
在CIFAR-10数据库中,用K-means算法作为单层网络的特征提取器已经可以得到很好的分类结果。当特征map的数量增加到4800的时候,可以达到的准确略为80.6%,若是将它拓展为多层特征学习,那么准确率可以高达82%。为了评价DCGAN学到的特征,我们将模型在ImageNet-1k上进行训练,然后用判别器每一层的卷积特征进行最大池化处理,将每一层生成一个 $4\times4$ 的网格。这些特征然后被展开形成一个 28672 维的向量,然后用 L2-svm分类器进行分类,可以得到准确率为82.8%的结果。DCGAN的结果还是没有直接训练CNN的结果好。另外,因为DCGAN不是在CIFAR-10本来的数据库上训练的,也可以说明该模型真的学到了特征,并且不受训练数据的影响。
Classifiying SVHN digits using GAN as a feature extractor
这部分和上部分的内容差不多,是在另一个数据集上面的测试。如果用DCGAN的判别器做有监督学习,能够得到比较小的test error。另外,我们验证了DCGAN里面的CNN结构并不是模型分类的关键点,因为如果纯训练一个CNN的有监督模型,达到的误差更大。
Investigating and visualizing the internals of the networks
我们从多方面研究了训练的生成器和判别器。我们不做任何 nearest neighbor的搜索。在像素级别或者特征级别的nearest neighbor容易被愚弄,童谣的我们不用log-likelihood标准来评价模型,因为这种标准很弱。
Walking in the latent space
我们做的第一个实验是去理解隐层的样貌。顺着训练中学习到的流我们可以找到一些出现剧烈变化时表现出的训练模型memorization的标志,以及那些信息被破坏了。如果在隐层中探索的过程中,某一层的语义发生了变化(比如增加或减少了某个部分)那么我们可以以此作为模型学习到的相关和有趣的特征。
Visualizing the discriminator features
之前的工作显示了在有监督训练下的CNN网络会学到很有力的特征。特别是对以一些场景而言,CNN网络会学习到一些物体的detector。我们介绍了DCGAN也同样从大量的图片数据库中学到有趣的特征。特别是在卧室的场景中,可以看到学习到了一些床,窗户这样的特征。
Manipulating the generator representation
除了从判别器学习到的特征之外,我们也需要考虑生成器学到了什么。从生成的图片的质量上来讲,生学期学习到了场景一些主要的特征,比如床,窗户,台灯,门还有奢华的家具。为了探索更多的特征的性能,我们做事杨尝试去除生成器中的窗户。
在150个sample中,52个窗户被人为地框起来。在第二高的卷积特征层,应用了logistic regression去预测窗户的特征是否被激活。圈出的窗户盒子内的激活层是正值还是随机值。【这部分是没怎么弄明白是怎么把窗户给搞没有的】
Vector arithmetic on face samples
学习了用在自然语言处理上的对于词向量的操作。这里是直接将加减操作用在Z向量上,最后生成的图片也会产生某种特征上的变化。