DCGAN原理介绍
我们知道深度学习中对图像处理应用最好的模型是CNN,那么如何把CNN与GAN结合?DCGAN是这方面最好的尝试之一(论文地址:[1511.06434] Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks)
卷积神经网络在有监督学习中的各项任务上都有很好的表现,但在无监督学习领域,却比较少。本文介绍的算法将有监督学习中的CNN和无监督学习中的GAN结合到了一起。
DCGAN的原理和GAN是一样的,这里就不在赘述(GAN网络提出了理论,具体的G,D实现可以我们自己来定)。DCGAN把上述的G和D换成了两个卷积神经网络。D可以理解为一个分类的卷积网络。G则是一个全卷积网络。但不是直接换就可以了,DCGAN对卷积神经网络的结构做了一些改变,以提高样本的质量和收敛的速度,这些改变有:
G网络中使用转置卷积(transposed convolutional layer)进行上采样,D网络中用strided convolutions来替代空间池化(pooling)。
除了生成器模型的输出层和判别器模型的输入层,在网络其它层上都使用了Batch Normalization,使用BN可以稳定学习,有助于处理初始化不良导致的训练问题。
去掉FC层,使网络变为全卷积网络
G网络中使用ReLU作为激活函数,最后一层使用tanh
D网络中使用LeakyReLU作为激活函数
DCGAN的generator网络结构:
那么具体说一下DCGAN的网络模型:
(1)G网络:100 z->fc layer->reshape ->deconv+batchNorm+RELU(4) ->tanh 64x64
(2)D网络(版本1):conv+batchNorm+leakyRELU (4) ->reshape -> fc layer 1-> sigmoid
D网络(版本2):conv+batchNorm+leakyRELU (4) ->reshape -> fc layer 2-> softmax
G网络使用4层反卷积,而D网络使用了4层卷积。基本上G网络和D网络的结构正好是反过来的。那么D网络最终的输出有两种做法,一种就是使用sigmoid输出一个0到1之间的单值作为概率,另一种则使用softmax输出两个值,一个是真的概率,一个是假的概率。两种方法本质上是一样的。
上面是DCGAN的生成网络模型的架构,对于LSUN,Imagenet-1k大小的数据集,我们可以使用这个架构,但并不是说对于任何数据集,都可以,比如,更大,或者更小的,那对应的卷积架构就需要进行改变。比如,对于mnist数据集,G和D的网络架构都相应地减小了,否则不能拟合,产生不了好的结果(亲测)。
那对于判别模型的话,就是5层卷积层网络。对与生成模型的,我们可以看到,从开始的Noise采样100维度,到最后生成了64x64x3的图片,经过了“de-convolution”层,实质是transport convolution 或者up-sampling convolution。下一节介绍下什么是反卷积层。
“反卷积”—上采样卷积
本节详细介绍下反卷积的由来。
反卷积,英文decovolution。根据wiki的定义,其实是对卷积的逆向操作,也就是通过将卷积的输出信号,经过反卷积可以还原卷积的输入信号,还原的不仅仅是shape,还有value。
但是深度学习中的所讲的反卷积实质是transport convolution。只是从2010年一篇论文[11]将其叫做了deconvolution,然后才有了这个名字。
那为什么叫做transport(转置)?
因为“反卷积”存在于卷积的反向传播中。其中反向传播的滤波器矩阵,是前向传播(卷积)的转置,所以,这就是它的名字的由来。只不过我们把反向传播的操作拿到了前向传播来做,就产生了所谓的反卷积一说。但是transport-convolution只能还原信号的大小,不能还原其value,所以,不能叫做反卷积。
训练细节
预处理环节,将图像scale到tanh的[-1, 1]。- mini-batch训练,batch size是128.
- 所有的参数初始化由(0, 0.02)的正态分布中随即得到
- LeakyReLU的斜率是0.2.
- 虽然之前的GAN使用momentum来加速训练,DCGAN使用调好超参的Adam optimizer。
- learning rate=0.0002
- 将momentum参数beta从0.9降为0.5来防止震荡和不稳定。
在改善生成图像模型样本视觉质量的同时,也增加了对于训练样本的记忆和过拟合的关注。为证实我们的模型规模在更多的数据和跟高的分辨率怎样生成,我们在LSUN卧室数据集包含一个小的超过300万的训练样本上训练了一个模型。最近Hardt等人的分析表明怎样快速学习模型和泛化能力有着直接的联系。模仿在线学习,如图2所示展示了训练一次的样本,除了手链后的样本,我们显示来自一个周期的训练样本,模仿在线学习,以及收敛后的样本(图3所示),作为论证,我们的模型不是通过简单过拟合/记忆训练例子产生高质量的样本。图像没有用到数据增强。
——删除重复数据
为进一步降低生成器记忆输入样本的可能性(图 2),我们进行了一个简单的删除重复图像的过程。我们在训练样本的32*32下采样中心采样拟合了一个3072-128-3072去噪差正则化RELU自编码。
参考:
https://blog.csdn.net/stdcoutzyx/article/details/53872121
https://blog.csdn.net/u011534057/article/details/54845673
来源:CSDN
作者:furuit
链接:https://blog.csdn.net/fu6543210/article/details/80427374