论文全称:《Generative Adversarial Nets》
论文地址:https://arxiv.org/pdf/1406.2661.pdf
论文全称:《UNSUPERVISED REPRESENTATION LEARNING WITH DEEP CONVOLUTIONAL GENERATIVE ADVERSARIAL NETWORKS》
论文地址:https://arxiv.org/pdf/1511.06434.pdf
论文代码:
pytorch MNIST :https://colab.research.google.com/github/smartgeometry-ucl/dl4g/blob/master/gan.ipynb
pytorch Celeb-A Faces dataset:https://pytorch.org/tutorials/beginner/dcgan_faces_tutorial.html
TensorFlow Celeb-A Faces dataset:https://github.com/carpedm20/DCGAN-tensorflow
目录
首先这里有两篇论文,第一篇是2014年Lan Goodfellow首次提出的GAN的框架,这个时候还只是用多层感知机,第二篇是2016年Facebook AI Research 提出的DCGANs,在前一篇的基础上使用了深度卷积神经网络。
GAN的原理
GAN主要分为两个网络,一个是G(Generator)生成网络,一个是D(Discriminator)判别网络。
他们的作用分别是:
G:利用随机的vector z生成一张图片,即为G(z)。
D:判别图片是否为真实图片。如果为1,就代表100%是真实的图片,而输出为0,就代表不可能是真实的图片。
在训练过程中,生成网络G的目标就是尽量生成真实的图片去欺骗判别网络D。而D的目标就是尽量把G生成的图片和真实的图片分别开来。这样,G和D构成了一个动态的“博弈过程”。
最后博弈的结果是什么?在最理想的状态下,G可以生成足以“以假乱真”的图片G(z)。对于D来说,它难以判定G生成的图片究竟是不是真实的,因此D(G(z)) = 0.5。
这样我们的目的就达成了:我们得到了一个生成式的模型G,它可以用来生成图片。
接下来我们看看D和G究竟需要怎么博弈去逼近我们想要的结果呢?
公式分析:
-
整个式子由两项构成。x表示真实图片,z表示输入G网络的vector,而G(z)表示G网络生成的图片。
-
D(x)表示D网络判断真实图片是否真实的概率(因为x就是真实的,所以对于D来说,这个值越接近1越好)。而D(G(z))是D网络判断G生成的图片的是否真实的概率。
-
G的目的:上面提到过,D(G(z))是D网络判断G生成的图片是否真实的概率,G应该希望自己生成的图片“越接近真实越好”。也就是说,G希望D(G(z))尽可能得大,这时V(D, G)会变小。因此我们看到式子的最前面的记号是min_G。
-
D的目的:D的能力越强,D(x)应该越