DCGAN中的DC也就是deep convolution,也就是将对抗生成网络放入到卷积神经网络中(对卷积神经网络不了解的可参考https://zhuanlan.zhihu.com/p/40709115),去实现其功能。或则说将卷积神经网络应用在了我们的对抗生成网络中。在DCGAN中主要有以下五个关键点:
1. 将pooling层convolutions替代,也就是只有卷积层,没有池化层(对于判别模型:由于没有了池化层,我们得容许判别网络学习自己的空间下采样,使其更能合适的去判别输入的数据。对于生成模型:我们是从特征数据生成一张图片(之后再输入到判别网络中去),也就是一个反卷积的过程,在这个过程中,我们需要网络学习自己的空间上采样)
2. 针对传统的GAN生成的数据差异性很小(原因:generator网络将所有的样本都收敛到同一个点了),使用batch normalization来解决初始化差的问题,以及梯度在传播过程中的消失等问题。
3. 在CNN中移除全连接层。
4. 在generator的除了输出层外的所有层使用ReLu,输出层采用tanh。
5. 在discriminator的所有层上使用LeakyReLU。
生成网络构建示例:
首先我们初始化一个100维的向量(噪音向量,其值没有任何意义),首先经过一个[100, 4*4*1024]的神经网络,再将其reshape一下,转化为上图所示的三维结构。再此网络进行反卷积,便可一步一步得到一张64*64*3的图片。如果不了解反卷积可以参考以下博文:https://buptldy.github.io/2016/10/29/2016-10-29-deconv/。简要地来简述卷积与反卷积:
卷积:我们假设图片为4*4的,卷积核为3*3的,步长为1。我们把3×3的卷积核展成一个如下所示的的稀疏矩阵 , 其中非0元素 wi,j表示卷积核的第 i 行和第 j 列。
我们再把4×4的输入特征展成的矩阵,那么,也就是的矩阵乘以的矩阵,最终变为的矩阵,将它重新排列2×2的输出特征就得到最终的结果。
反卷积:反卷积又被称为Transposed(转置) Convolution,为的矩阵,乘以之前卷积过后的矩阵, 将会得到的矩阵,再重新排列一下将会得到的矩阵,从而完成反卷积。
在一些深度学习网络的开源框架中并不是通过这种这个转换方法来计算卷积的,因为这个转换会存在很多无用的0乘操作,Caffe中具体实现卷积计算的方法可参考Implementing convolution as a matrix multiplication。
判别网络构建示例:
其主要就是卷积神经网络判别图像类别的工作。
我的微信公众号名称:深度学习与先进智能决策
微信公众号ID:MultiAgent1024
公众号介绍:主要研究强化学习、计算机视觉、深度学习、机器学习等相关内容,分享学习过程中的学习笔记和心得!期待您的关注,欢迎一起学习交流进步!