论文地址:Generator Adversarial Network
GAN(Generative Adversarial Network)是由两部分组成,一个是生成器(Generator),一个是判别器(Discriminator)两者处于一种博弈的状态。
生成器的作用是用来生成图片,判别器的作用是用来对输入的图片进行判断是Generator生成的图片还是数据集中真实的图片。
一、训练目标
注:上述目标函数根据交叉熵推出。
1、将判别器对生成图片以及真实图片的识别最大化
2、生成图片与真实训练图片最小化
注:损失函数
问:为什么是二分之一
答:(个人理解,论文也没详细说明)交叉熵的二分类中,大部分将对数函数的参数解释成应该是类别的label,真实图片的label应该是1,生成图片的label应该是0。但是我的理解是,那个参数是概率,而不是label,我们的目标是将生成图片分布无限逼近与真实图片的分布,所以当两者无限逼近的时候,分类器已经开始瞎猜了,所以概率都是二分之一
二、训练过程:
1、给与两者初始参数值,首先固定生成器,训练Discriminator,进行K次迭代,输入的数据是Generator生成的图片以及数据集中真实的图片,直到Discriminator能够准确的分辨出两者
2、固定判别器,进行Generator的训练,输入随机噪声,将输出结果作为Discriminator的输入,直到Generator生成的图片无法被Discriminator准确的分辨,也就是Discriminator的分类的准确率达到了0.5,开始进行瞎猜。
注:GAN的结构图
注:训练过程图像
蓝色是Discriminator的分类概率
黑色是真实图像的分布
绿色图像是生成图像的分布
z—x表示生成图像到真实图像的拟合
三、算法流程
算法流程图
四、优缺点(转载)
优点:
1、GNs是一种以半监督方式训练分类器的方法,可以参考我们的NIPS paper和相应代码.在你没有很多带标签的训练集的时候,你可以不做任何修改的直接使用我们的代码,通常这是因为你没有太多标记样本.我最近也成功的使用这份代码与谷歌大脑部门在深度学习的隐私方面合写了一篇论文
2、G的参数更新不是直接来自数据样本,而是使用来自D的反向传播
理论上,只要是可微分函数都可以用于构建D和G,因为能够与深度神经网络结合做深度生成式模型
3、GANs可以比完全明显的信念网络(NADE,PixelRNN,WaveNet等)更快的产生样本,因为它不需要在采样序列生成不同的数据.
4、模型只用到了反向传播,而不需要马尔科夫链
5、相比于变分自编码器, GANs没有引入任何决定性偏置( deterministic bias),变分方法引入决定性偏置,因为他们优化对数似然的下界,而不是似然度本身,这看起来导致了VAEs生成的实例比GANs更模糊.
6、相比非线性ICA(NICE, Real NVE等,),GANs不要求生成器输入的潜在变量有任何特定的维度或者要求生成器是可逆的.
7、相比玻尔兹曼机和GSNs,GANs生成实例的过程只需要模型运行一次,而不是以马尔科夫链的形式迭代很多次.
缺点:
1、训练GAN需要达到纳什均衡,有时候可以用梯度下降法做到,有时候做不到.我们还没有找到很好的达到纳什均衡的方法,所以训练GAN相比VAE或者PixelRNN是不稳定的,但我认为在实践中它还是比训练玻尔兹曼机稳定的多.
2、它很难去学习生成离散的数据,就像文本
3、相比玻尔兹曼机,GANs很难根据一个像素值去猜测另外一个像素值,GANs天生就是做一件事的,那就是一次产生所有像素, 你可以用BiGAN来修正这个特性,它能让你像使用玻尔兹曼机一样去使用Gibbs采样来猜测缺失值。
4、可解释性差,生成模型的分布 Pg(G)没有显式的表达