深度卷积生成对抗网络DCGAN

382 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 31 天,点击查看活动详情


1. 概述

在原始的GAN[1]中,生成网络GG和判别网络DD使用的都是前馈神经网络MLP。随着深度学习技术的发展,得益于卷积神经网络CNN在图像领域的成功,在DCGAN[2]中尝试将CNN与GAN相结合,用CNN网络替换GAN的生成网络GG和判别网络DD中的MLP,同时在训练的过程中使用了一些技巧来避免模型崩溃和模型不收敛等问题。

2. 算法原理

2.1. DCGAN的优化

相比于GAN,除了将GAN中生成器和判别器中的MLP替换成CNN外,其余的基本不变,DCGAN的价值函数依然为:

minG  maxD  V(D,G)=Expdata(x)[log  D(x)]+Ezpz(z)[log  (1D(G(z)))]\underset{G}{min}\; \underset{D}{max}\; V\left ( D,G \right )=\mathbb{E}_{\boldsymbol{x}\sim p_{data}\left ( \boldsymbol{x} \right )}\left [ log\; D\left ( \boldsymbol{x} \right ) \right ]+\mathbb{E}_{\boldsymbol{z}\sim p_{\boldsymbol{z}}\left ( \boldsymbol{z} \right )}\left [ log\; \left ( 1-D\left ( G\left ( \boldsymbol{z} \right ) \right ) \right ) \right ]

其中,DDGG为卷积神经网络CNN。DCGAN中的CNN相比于一般的CNN主要有如下的不同:

  • 使用卷积操作替换传统CNN模型中的pooling。在判别器中使用strided convolutions,在生成器中使用fractional-strided convolutions
  • 在生成器和判别器中使用batchnorm
  • 移除最后的全连接层
  • 生成器GG中除输出层外都使用ReLU激活函数,输出层使用Tanh激活函数
  • 判别器DD中都使用Leaky ReLU激活函数

2.2. 判别器

判别器网络使用的是一般的CNN网络,LeNet-5网络[5]如下图所示:

LeNet-5网络结构

与上述最普通的CNN网络不同的是:

  • 增加batchnorm
  • 移除了最后的全连接层
  • 使用Leaky ReLU激活函数

2.3. 生成器

注:DCGAN中生成器部分是卷积操作的一个反向过程,文中称为fractionally-strided convolutions,有些论文中称为deconvolutions([2]的作者认为是一种错误的叫法)。

查阅部分资料以及代码实现,通常采用转置卷积(Transposed Convolution)实现这样的一个上采样的过程,通过转置卷积可以生成指定大小的图片,具体过程如下图所示:

在这里插入图片描述

首先将100100维的向量通过投影变换到4×4×10244\times4\times1024的大小,后续通过44个转置卷积,最终生成64×6464\times64的RGB图像。

3. 总结

鉴于CNN模型在图像方面的成功经验,在DCGAN中通过将GAN中的MLP替换成不同的CNN模型,并且对传统的CNN模型进行一些优化,使得生成器能够生成更好的图片。

参考文献

[1] Goodfellow I, Pouget-Abadie J, Mirza M, et al. Generative adversarial nets[J]. Advances in neural information processing systems, 2014, 27.

[2] Radford A, Metz L, Chintala S. Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks[J]. Computer Science, 2015.

[3] GAN学习:GAN/DCGAN原理、公式推导及实践

[4] DCGAN原理解析

[5] yann.lecun.com/exdb/publis…

[6] DCGAN原理及应用

[7] GAN网络之入门教程(四)之基于DCGAN动漫头像生成


开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 31 天,点击查看活动详情