GANs简述(一)Generative Adversarial Nets

0、说在开头

        最近接触到基于机器学习进行入侵检测的项目,加上研讨班上需要面向毕设预开题,在看了最近一些论文之后打算开始小白的GANs之旅,这篇先从Goodfellow在2014年最早提出GANs这一概念的文章说起,讲述一下自己对于GANs框架的一些想法和理解,方便日后回顾,若有错误欢迎大佬指出,初学者可能有些细节讲的不算清楚。

1、现状

 GANs简述(一)Generative Adversarial Nets_第1张图片

        在Goodfellow大神提出GAN以后,关于GANs的研究数量直线上升,如图(图自:GAN-zoo) 那么什么是GANs呢,全称Generative Adversarial Nets,翻译为生成对抗网络。意味着GANs框架可以分为Generative跟Adversarial,即生成跟对抗两个主要思路。

2、Basic Idea

        生成对抗网络主要有两部分组成,分别是生成器G跟判别器D。判别器在本质上其实就是一个二分类模型,根据一定的判别界限,通过这个判别界限去区分样本。如下图,D的输入是来自G的输出G(z)以及真实数据X,D的输出则是一个得分,该得分越高则表明输入属于真实数据集X的概率越大。而生成器是需要在给定的条件内产生数据的分布, 比如高斯分布,需要使得生成的数据拟合该分布。

        GANs简述(一)Generative Adversarial Nets_第2张图片

        图自Recent Progress on Generative AdversarialNetworks (GANs): A Survey

         简而言之,GANs的思路是使用两个模型,生成模型G跟判别模型D,以图像任务为例,判别模型D用于判断输入的图像是否属于真实数据集,生成模型G的任务则是生成尽可能贴近真实数据集的图片,欺骗判别器,让判别器难以判断这张图片的真假,这就是GANs中A所代表的对抗所在。在原文中作者将G比喻成造假钞的人,而D比喻为警察。通过两个模型的对抗训练,两个模型的能力在理论上会越来越强,即生成器能生成越来越真实的数据,而判别器对真假数据的判别能力越来越强,最终两个模型的能力达到一个纳什均衡,即生成器生成的对抗样本以假乱真,判别器的准确率约为0.5,双方的利益都达到最大化,且不再更新自己的策略。

GANs简述(一)Generative Adversarial Nets_第3张图片

        如上图,将生成器比作枯叶蝶,将判别器比作捕食者,一开始枯叶蝶颜色艳丽,捕食者根据学习发现枯叶蝶不是棕色的,所以遇到颜色鲜艳的蝴蝶捕食者可以判断其为枯叶蝶。后来枯叶蝶进化了,将自己进化为棕色,躲避捕食者。而与此同时,捕食者也相应进化,改变自己的判断策略,学习到枯叶蝶可能是没有叶脉纹路的,之后枯叶蝶进一步进化,而捕食者可能又进而更新策略,不断进化。

3、Generation

        生成器输入一些随机分布,然后生成指定的数据,我们可以使用不同的算法使生成器生成不同类型的数据,如图像或者文字。

GANs简述(一)Generative Adversarial Nets_第4张图片

        如图,生成器的基本思想即为输入一个低维的vector向量 生成一个高维的对象,而生成器自身是一个Neural Network(NN),也可以将其理解为一个函数(function)。而输入向量的不同元素可能代表了最终输出数据的不同表现,如下图。

GANs简述(一)Generative Adversarial Nets_第5张图片

4、Discriminator

         判别器理论上是一个二分类模型,对输入数据进行二分类任务,如下图,给来自真实数据库的数据打高分(接近1),给来自生成器的数据打低分(接近0)。

GANs简述(一)Generative Adversarial Nets_第6张图片

5、Algorithm

        GANs模型的目标函数如下:

         首先是maxD,意思是使得判别器能在最大概率区分训练样本,而生成器G的目标则是使得1-D(G(z))最小,即使得D难以区分G根据随机分布z生成的G(z),使得D的loss最大化。我们也可以将log(1-D(G(z)))理解为生成器G的loss。

        GANs模型的训练模式分为几个步骤:

(1)固定生成器G,更新判别器D:

GANs简述(一)Generative Adversarial Nets_第7张图片

        首先在真实数据集中采部分样本, 并标记为1,将根据随机分布输入固定生成器G生成的数据标记为0,对判别器D进行训练,使其能够初步识别真假数据。

(2)固定判别器D,更新生成器G

        将步骤(1)中训练得到的模型作为固定的判别器,生成器不断更新,试图欺骗第一阶段的判器。

GANs简述(一)Generative Adversarial Nets_第8张图片

 (3)重复步骤1、2,得到最终模型

GANs简述(一)Generative Adversarial Nets_第9张图片

        在训练过程中,生成器生成的数据会越来越接近真实数据,在原文中作者给出了理论上的训练效果,如下图:

GANs简述(一)Generative Adversarial Nets_第10张图片 

        对于图a,判别器D刚开始训练,本身能力有限,有波动,只能初步区分生成数据与真实数据。在图b中可以看见判别器D的能力有所提升,能较为明显区分真实与生成数据。对于图c,绿色线与黑色线之间的距离更近,说明生成器在沿着蓝色的线向高处训练,随着训练的持续,作者认为会达到图d的情况,即判别器D已经无法分辨生成数据与真实数据,两个模型达到了纳什均衡,双方策略无法进一步更新。但后续也有研究指出最终情况与作者提出的有区别,判别器D最终并不会完全失去判断能力,而在14年以后也有大量研究使用GANs训练后得到的判别器D执行更加精确的分类任务,如果真如作者想象,判别器D应该无法进一步执行分类任务,在之后的文章我会进一步补充这方面的内容。

6、思考

        最后提出一个思考,并在后续的文章中进一步解释。关于GANs框架,也存在一个和平的比喻,将生成器G比作学生,将判别器D比作老师。

GANs简述(一)Generative Adversarial Nets_第11张图片 

        生成器需要学习如何绘制二次元人物头像,但最开始画出来的图像清晰度不够,或者没有颜色,也无法看出来这是一个人物,此时初代的判别器D告诉生成器,二次元人物应该有两个圈,表示眼睛。生成器进一步学习,画出了黑白的头像,此时判别器D进一步提出,二次元人物应该是彩色的,然后不断重复绘画与提出建议的过程,老师跟学生共同进步。

        基于这个比喻,很自然的我们会想,为什么学生不能自学?而老师知道真正的头像长什么样,为什么老师不能自己画呢?这是我们后续探讨的问题,在下一篇文章中我会争取解释这部分的问题。 

 

你可能感兴趣的:(GANs,python,GAN,机器学习,生成对抗网络)