图1
-
Batch Normalization。BN可以加速学习和收敛,其将每一层的输入变换到0均值和单位标准差(其实还需要shift 和 scale),这被证明是深度学习中非常重要的加速收敛和减缓过拟合的手段。它可以帮助由于初始化不当而导致的训练困难,可以让梯度flow to deeper layers。实践表明,这对于deep generator的有效learning是至关重要的,可以防止generator将所有的samples变成一个single point,这是GAN训练经常会碰到的问题。实践表明,如果直接将BN应用到all layers,会导致sample震荡和不稳定,所以我们只对生成器的输出层和鉴别器的输入层使用BN。
-
(Leaky)Relu Activation。对于generator,其输出层使用tanh 激活函数,其余层使用relu 激活函数。我们发现如果使用bounded activation可以加速模型的学习,覆盖训练样本的color space。对于discriminator,我们发现使用leaky relu 更好一点,特别是对于生成高分辨率的图片。
总结一下,DCGAN的主要的tricks如下图2所示:
图2
DETAILS OF ADVERSARIAL TRANING(对抗训练的细节)
3.1
概述
文章主要在LSUN数据集,ImageNet 1k以及一个较新的celebA数据集上进行了实验。训练的一些细节如下:
-
image preprocessing。我们没有对图片进行pre-processing,除了将generator的输出变换到[-1,1]。
-
SGD。训练使用mini-batch SGD,batch size = 128。
-
parameters initialize。所有的参数都采用0均值,标准差为0.02的初始化方式。
-
leaky relu。leaky relu 的 \(\alpha\)的取值为0.2。
-
optimizers。我们使用Adam optimizer,并且对参数做了一些fine tuing,我们实验发现默认的学习率为0.001,太高了,我们调整为0.0002。Adam中的momentum term \(\beta_1\)=0.9太高了,会使得训练过程震荡,不稳定,我们将其调整为0.5发现可以使训练过程更加稳定。
3.2
LSUN
overfitting。当生成模型产生的图片质量越来越好的时候,我们就需要考虑overfitting的问题了,即generator有可能只是简单记住训练样本,然后产生类似的输出结果。为了展示DCGAN如何扩展到更大的数据集以及产生更高质量的图片,我们在包含300万训练样本的celebA bedroom datasets 上进行了训练。作者展示了每一轮训练之后采样的结果,表明模型产生的高质量输出不是简单通过记住训练样本而得到的。
去重(deduplication)
为了防止模型过拟合,即模型简单记住输入的特征,然后生成类似的图片。作者还对训练样本进行了去重处理,即去除相似度较高的图片。具体的原理可以参考论文。
3.3
FACES
原始的celebA数据集是从互联网网页上抓取的现代人的人脸数据集。大约包含300张约10000个人的人脸数据。文中对这些数据使用opencv的face detector进行人脸检测,保证得到具有一定高精度的人脸bounding box,最后得到大约35w个face bounding box,然后使用这些face bounding box 进行训练。没有使用data augmentation。
3.4
imagenet-1k
对imagenet-1k的图片使用32x32的min-resized-center-crops进行训练。同样没有进行data augmentation。
对于DCGAN性能的经验验证
4.1
使用DCGAN作为feature extrctor对cifar-10数据进行分类。通常评估非监督表达学习性能的一个常用方法是将它作为特征提取器(feature extrator)应用于监督学习,然后评估linear model 基于这些learned features 的performance。
4.2 对于cifar-10数据集,非监督特征提取一个非常强的baseline是基fine-tuned的k-means模型。为了评估DCGAN在cifar-10上的表现,我们使用imagenet-1k训练DCGAN,然后使用鉴别器的所有卷积features,对每一个layer使用maxpooling 得到一个4x4的spatial grid。然后再将再将这些各层spatial grid展平,连接最后组成一个28672维的向量,然后再送入L2正则化的svm分类器进行分类。注意DCGAN每一个卷积层得到的最大feature maps为512,这个是要低于k-means的,但是由于DCGAN有很多个layers,所以总的feature maps要高于k-means。总体来说,得到的分类结果accuracy为82,8%,要高于所有基于k-means的方法,略低于state-of-art。考虑到我们得到的feature maps并不是通过训练cifar-10得到的,这说明我们通过DCGAN得到的image feature maps具有良好的通用性和泛化能力。