DCGAN对卷积神经网络的结构作了一些改变,以提升样本的质量和收敛的速度,这些改变有:网络
取消全部pooling层。G网络中使用转置卷积(transposed convolutional layer)进行上采样,D网络中用加入stride的卷积代替pooling。ide
在D和G中均使用batch normalization(让数据更集中,不用担忧太大或者过小的数据,能够稳定学习,有助于处理初始化不良致使的训练问题,也有助于梯度流向更深的网络,防止G崩溃。同时,让学习效率变得更高。)函数
去掉全链接层,而直接使用卷积层链接生成器和判别器的输入层以及输出层,使网络变为全卷积网络学习
G网络中使用ReLU做为激活函数,最后一层使用tanh优化
D网络中使用LeakyReLU做为激活函数spa
DCGAN中的G网络示意:orm
对于BN:blog
(1)把BN用到每一层会致使样本震荡和模型不稳定,不要把BN用到生成器的输出层和判别器的输入层。io
(2)直接用 batch norm 多是有问题的。同一批(batch)里面的数据太过类似,对一个无监督的 GAN 而言,很容易被带偏而误认为它们这些数据都是同样的。也就是说,最终的生成模型的结果会混着同一个 batch 里好多其它特征。这不是咱们想要的形式。能够用RBN或者VBN克服。ast
Reference Batch Norm:
取出一批数据(固定的)看成咱们的参照数据集 R。而后把新的数据 batch 都依据 R 的平均值和标准差来作规范化。
这个方法也有一些问题:若是 R 取得很差,效果也不会好。或者,数据可能被 R 搞得过拟合。换句话说:咱们最后生成的数据可能又都变得跟 R 很像。
Virtual Batch Norm:
这里,咱们依旧是取出 R,可是全部的新数据 x 作规范化的时候,咱们把 x 也加入到 R 中造成一个新的 virtual batch V。并用这个 V 的平均值和标准差来标准化 x。这样就能极大减小 R 的风险。
DCGAN对抗训练细节
训练图像除了缩放到tanh激活函数的[-1,1]范围以外没有通过其余的预处理。全部的模型都是经过小批量随机梯度降低法(mini-batch stochastic gradient descent)进行训练的, 小批量的大小是 128。 全部权重的初始化为均值为 0 和方差为 0.02的正态分布。在LeakyReLU, 全部模型的leak的斜率设置为0.2。以前的 GAN是使用momentum加快训练速度,DCGAN是使用Adam优化程序调整超参数。建议使用的学习率是0.001,过高的话使用0.0002代替。此外,动量项beta1在建议的0.9训练动荡且不稳定,但下降到0.5是有利于模型的稳定。