Oct 29, 2018 原创文章

  Hello Pytorch 叁 -- 简单理解生成对抗网络(GAN)

GAN网络学习笔记

分享到: 0

请保证您的浏览器支持MathJax插件,以免数学公式无法显示


零和博弈思想

GAN(生产对抗网络,Generative Adversarial Nets)的思想是是一种二人零和博弈思想(two-player game),指参与博弈的各方,在严格竞争下,一方的收益必然意味着另一方的损失,博弈各方的收益和损失相加总和永远为“零”,双方不存在合作的可能。

引申到GAN里面就是可以看成,GAN中有两个这样的博弈者,一个是生成模型(Generator)用来生成一张真实的图片,另一个是判别模型(Discriminator)判别一张图片是生成出来的还是真实存在的。整个博弈的过程,就变成了如下模式:生成模型生成一些图片->判别模型学习区分生成的图片和真实图片->生成模型根据判别模型改进自己,生成新的图片->···· 这个博弈的过程直至生成模型与判别模型无法提高自己——即判别模型无法判断一张图片是生成出来的还是真实的而结束,此时生成模型就会成为一个完美的模型。这种博弈式的训练过程,如果采用神经网络作为模型类型,则被称为生成对抗网络(GAN)

优化目标函数

这里设x为训练样本,z为随机噪声。训练得到的生成模型为G,判别模型为D。G(z)将这个随机噪声转化为与x具有相同数据结构的图像,D(x)为判别结果是0-1范围内的一个实数。

生成模型的目标是让判别模型无法区分真实图片与生成图片,那么整个的优化目标函数如下:

优化方法

对这个最大最小化目标函数,最直观的处理办法就是分别对D和G进行交互迭代,固定G,优化D,一段时间后,固定D再优化G,直到过程收敛。

首先,固定G,优化D:

优化判别模型D的时候,与生成模型G无关,G(z)相当于已经得到的生成样本。当真实样本x(真实样本标签为1)输入的时候,希望得到的判别结果D(x)越接近于1越好,同时目标函数越大越好。对于生成样本G(z)(其标签为0),希望得到的判别结果D(G(z))越接近于0越好,也就是使1-D(G(z))越接近于1越好,而目标函数越大越好。因此将两者同时输入,希望得到的目标函数的和越大越好。

然后,固定D,优化G:

在优化生成模型G的时候,与判别模型D和真实样本x无关,只有生成样本G(z),生成模型G的训练目标是使得判别模型D认为生成样本为真实样本,所以优化目标是使D(G(z))越接近于1越好,但是为了统一成1-D(G(z))的形式,那么只能是最小化目标函数。之后将两个优化模型合并,就变成了最开始的那个最大最小目标函数。

优化过程

真实样本分布、生成样本分布以及判别模型分别是图中的黑线、绿线和蓝线。

在训练开始时(如图a),判别模型是无法很好地区分真实样本和生成样本的。当我们固定生成模型,而优化判别模型时,优化结果如图b所示,可以看出,这个时候判别模型已经可以较好的区分生成数据和真实数据了。第三步是固定判别模型,改进生成模型,试图让判别模型无法区分生成图片与真实图片,优化结果如图c所示,可以看出由模型生成的图片分布与真实图片分布更加接近,这样的迭代不断进行,直到最终收敛,生成分布和真实分布重合(如图d)。


参考资料:

1、最简单易懂的GAN(生成对抗网络)教程:从理论到实践(附代码):https://www.leiphone.com/news/201706/ty7H504cn7l6EVLd.html

2、到底什么是生成式对抗网络GAN? https://www.msra.cn/zh-cn/news/features/gan-20170511

3、Goodfellow I, Pouget-Abadie J, Mirza M, et al. Generative adversarial nets[C]//Advances in neural information processing systems. 2014: 2672-2680.

打赏


感谢您的支持,我会继续努力的!

扫码支持

长按识别二维码或打开支付宝扫一扫 完成打赏
或 使用<支付宝链接>打赏


关闭
相关文章:
Attentive Generative Adversarial Network for Raindrop Removal from A Single Image # , Nov 09, 2018 原创文章
Hello Pytorch 肆 -- 激活函数 # , , Nov 02, 2018 原创文章
Hello Pytorch 贰 -- 常用损失函数 # , , , Oct 20, 2018 原创文章
Hello Pytorch 壹 -- 卷积层原理及实现 # , , Oct 20, 2018 原创文章
Hello Pytorch 零 -- 搭建年轻人的第一个神经网络:LeNet # , , , , Oct 19, 2018 原创文章

分享到: 0