从头开始GAN【论文】(二) —— DCGAN

上一篇介绍了GAN 的基本原理以及相关的概念和知识点,同时也反映出GAN 的一些缺点,比如说训练不稳定,生成过程不可控,不具备可解释性等。这一篇就来看看GAN 的改进版之一,DCGAN(Deep Convolutional GAN)。

1. 网络结构

从头开始GAN【论文】(二) —— DCGAN_第1张图片

DCGAN 的判别器和生成器都使用了卷积神经网络(CNN)来替代GAN 中的多层感知机,同时为了使整个网络可微,拿掉了CNN 中的池化层,另外将全连接层以全局池化层替代以减轻计算量。

2. 去卷积(反卷积,Deconvolution)

从上图中可以看到,生成器G 将一个100 维的噪音向量扩展成64 * 64 * 3 的矩阵输出,整个过程采用的是微步卷积的方式。作者在文中将其称为fractionally-strided convolutions,并特意强调不是deconvolutions。关于上采样和去卷积等概念,我特意找了一些资料来看看他们的区别是什么,相关内容整理在下面。

上采样和去卷积是同一个概念,它的目的是将经过池化层以后缩小的矩阵扩大到一定的大小,比如说从3 * 3 扩大到5 * 5,如下图所示:

从头开始GAN【论文】(二) —— DCGAN_第2张图片

而去卷积(链接:反卷积)又包含转置卷积和微步卷积,两者的区别在于padding 的方式不同,看看下面这张图片就可以明白了:

从头开始GAN【论文】(二) —— DCGAN_第3张图片

另外还有一个概念叫空洞卷积(Dilated Convolution)。在pixel-wise 目标检测任务上有一个常见的场景就是需要通过去卷积来会恢复经过池化层以后的矩阵大小,先池化再去卷积的过程实际上损失了很多信息,而这个过程的真实目的实际上就是为了通过缩小矩阵size 的方式来增大感受野,那能不能跳过先缩小在增大的过程直接进行感受野放大呢?这个就是所谓的空洞卷积,更详细的内容可以参考这个链接:空洞卷积

从头开始GAN【论文】(二) —— DCGAN_第4张图片

3. 训练方法

DCGAN 的训练方法跟GAN 是一样的,分为以下三步:

(1)for k steps:训练D 让式子【logD(x) + log(1 - D(G(Z)) (G keeps still)】的值达到最大

(2)保持D 不变,训练G 使式子【logD(G(z))】的值达到最大

(3)重复step(1)和step(2)直到G 与D 达到纳什均衡

4. 相比于GAN 的改进

DCGAN 相比于GAN 或者是普通CNN 的改进包含以下几个方面:

(1)使用卷积和去卷积代替池化层

(2)在生成器和判别器中都添加了批量归一化操作

(3)去掉了全连接层,使用全局池化层替代

(4)生成器的输出层使用Tanh 激活函数,其他层使用RELU

(5)判别器的所有层都是用LeakyReLU 激活函数

5. 漫游隐空间

通过使用插值微调噪音输入z 的方式可以导致隐空间结构发生变化从而引导生成图像发生语义上的平滑过度,比如说从有窗户到没窗户,从有电视到没电视等等。

6. 语义遮罩

通过标注窗口,并判断激活神经元是否在窗口内的方式来找出影响窗户形成的神经元,将这些神经元的权重设置为0,那么就可以导致生成的图像中没有窗户。从下图可以看到,上面一行图片都是有窗户的,下面一行通过语义遮罩的方式拿掉了窗户,但是空缺的位置依然是平滑连续的,使整幅图像的语义没有发生太大的变化。

从头开始GAN【论文】(二) —— DCGAN_第5张图片

7. 矢量算法

在向量算法中有一个很经典的例子就是【vector("King") - vector("Man") + vector("Woman") = vector("Queue")】,作者将该思想引入到图像生成当中并得到了以下实验结果:【smiling woman - neutral woman + neutral man = smiling man】

从头开始GAN【论文】(二) —— DCGAN_第6张图片

 

推荐阅读(很nice 的一篇文章):Image Completion with Deep Learning in TensorFlow

推荐参考(超棒的去卷积动图):https://github.com/vdumoulin/conv_arithmetic

你可能感兴趣的:(gan)