生成式对抗网络是google在2014年提出的一个网络模型,主要灵感来自于二人博弈中的零和博弈,也是目前最火热的非监督深度学习的代表。
13.1 GAN的原理
生成式对抗网络主要解决的问题是如何从训练样本中学习出新样本。生成模型就是负责训练出样本的分布,如果训练样本是图片就生成相似的图片,如果训练样本是文章句子就生成相似的文章句子。判别模型是一个二分类器,用来判断输入样本是真实数据还是训练生成的样本。
生成式对抗网络的优化是一个minimax two-player game问题,它的目的是使生成模型的输出再输入给判别模型时,判别模型很难判断是真实数据还是虚假数据。训练好的生成模型,有能力把一个噪声向量转化成和训练集类似的样本。
具体到每一个生成式对抗网络的模型,有很多种结构,不过整体思路是不变的
读者也可以设计自己的GAN网络架构。我们主要讲解辅助分类器生成式对抗网络的实现
13.2 生成式对抗网络的应用
目前在生成数字和生成人脸图像方面表现都非常好
13.3 生成式对抗网络的实现
本节代码参考 https://github.com/fchollet/keras/blob/master/examples/mnist_acgan.py
https://arxiv.org/abs/1610.09585以 Augustus Odena、 Christopher Olah 和 Jonathon Shlens 的论文《Conditional Image Synthesis With Auxiliary Classifier GANs》 为基础的
通过噪声,让生成模型G生成虚假数据,然后和真实数据一起送到判别模型D当中,判别模型一方面输出这个数据的真/假,另一方面输出这个图片的分类(对MNIST来说就是0-9)