通俗理解对抗生成网络(GAN)核心思想

记得在之前一次例会上,听到师兄谈到对抗生成网络(GAN),由于当时只是偶尔听过便觉得有些意思,查了查一些博客大意都相差不多,但是在当下的应用中也非常广泛,例如最近的利用对抗生成网络(GAN)扩充数据集,解决了数据不足的问题;对抗生成网络(GAN)也被应用在多角度扩充数据集,不仅丰富了数据集而且还能够顺手解决了多角度识别问题。

引言



GAN已经作为一种思想来渗透在ML的其余领域,做出了很多很Amazing的东西。被Yann LeCun评价为近十年最有趣的idea,所以对于相关研究方向的同学而言,gan成了一个必须要学的思想和方法。


通俗理解对抗生成网络(GAN)核心思想




Basic Idea of GAN (Generator)



GAN中包括两个最基本的组件,其中一个就是Generator,对于Image Generation过程来说,你给它一个向量,它输出一个图片(image)。


input: vector


output: image


如下所示:


通俗理解对抗生成网络(GAN)核心思想


对于Sentence Generation来说,你给它一个向量,它输出一个句子(sentence)。


input: vector


output: sentence


如下所示:


通俗理解对抗生成网络(GAN)核心思想


其中我们以image generation过程来仔细说明一下其中过程原理!


实际上Generator就是一个NN网络,输入是一个vector,它的输出是一个高维的向量,比如image是16*16,那么它的输出就是256维的向量。


如图所示:
通俗理解对抗生成网络(GAN)核心思想


其中,输入向量的每一个维度都可以代表输出image的某些特征,比如说第一维度的值,代表着image人物的头发长短。


那么我们在调大input vector的第一维的值的时候,我们可以看到生成的image的头发变长,如下图所示:


通俗理解对抗生成网络(GAN)核心思想


比如说,input vector某一个维度的值大小代表生成image的头发颜色蓝色深浅,调大后,生成的image头发变得更蓝一些:


通俗理解对抗生成网络(GAN)核心思想


或者说,input vector某一个维度的值大小代表生成image的口张开的大小,调大后,生成的image人物中口张的更大一些:


通俗理解对抗生成网络(GAN)核心思想


总而言之,GAN中的Generator就是一个神经网络,丢给它一个输入向量,输出也是一个向量。


在不同的任务中,生成的东西不同,输入向量的每一个维度都代表着输出image的特定特征。


Basic Idea of GAN(Discriminator) 



讲完了Generator之后,我们来看GAN的另一个组件,Discriminator。Discriminator也是一个NN网络,它的输入是Generator的输出或者是真实的image…,输出是一个标量,代表接受的输入的quality有多好,数值越大,代表越好,数值越小,代表越差。




如下图:
通俗理解对抗生成网络(GAN)核心思想


比如给它输入是真实的image,那么经过Discriminator之后应该是输出的标量值很大,代表送入给它的image的质量很高。


通俗理解对抗生成网络(GAN)核心思想


比如给它输入是差的image,那么经过Discriminator之后应该是输出的标量值很小,代表送入给它的image的质量很低。


通俗理解对抗生成网络(GAN)核心思想




Algorithm of GAN



下面我们来介绍一下最基本的gan的训练算法,不够严谨,但是容易接受。




首先,跟任何网络训练一样,我们需要初始化生成器G,和判别器D的参数


通俗理解对抗生成网络(GAN)核心思想


形式化公式就是如下:


通俗理解对抗生成网络(GAN)核心思想
1、然后在每一轮中,首先固定住G,训练D,具体怎么训练呢?


我们任意选取一些向量,送给G,同时从database中挑选出一些数据,使得判别器学会从database挑选出真实的图片打分高,任意选取向量从G中生成的图片,打分低。这样就是在训练判别器:


通俗理解对抗生成网络(GAN)核心思想


形式化公式如下:


通俗理解对抗生成网络(GAN)核心思想


稍微解释一下图片中的公式,训练判别器就是希望它对于真实的图片打分高,生成的图片打分低。而公式中是最大化那个式子,分解来看完全对应文字的解释:
对应真正的图片打分高,也就是最大化如下公式,公式如下:


通俗理解对抗生成网络(GAN)核心思想


2、第二步是固定判别器D,训练生成器G,我们还是任意给定一些向量,这些向量送给G,生成一些图片,然后喂进判别器进行判别。


首先我们的目的是使得生成器能够生成非常真实的图片,对于真正真实的图片来说,判别器的打分是高的,那么也就是说,我们需要训练生成器,使得通过生成器生成出来的图片让判别器打分高,尽可能的迷惑判别器,这样通过生成器生成出来的图片就是接近“真实的”,土话说就是跟真的好像啊。




通俗理解对抗生成网络(GAN)核心思想
形式化公式如下:


通俗理解对抗生成网络(GAN)核心思想


公式解释为:最大化使得判别器对于生成器生成的图片打分。


这里需要注意的是训练生成器的时候,一定要固定判别器的参数,因为在实际实现中,生成器和判别器会构成一个大网络,如果不固定判别器的参数去训练生成器的话。


因为目标是使得最后的得分高,网络这个时候仅仅更新最后一层的参数就能让最后的输出标量非常大,很显然这不是我们希望的,如果固定了判别器后面几个layer,训练前面生成器的参数就能正常学习。


实例



最后李宏毅老师给出了他自己用gan生成二次元头像的实例,下面分别给出训练了不同轮次的生成结果,给大家一个直观的感觉:




通俗理解对抗生成网络(GAN)核心思想
通俗理解对抗生成网络(GAN)核心思想
通俗理解对抗生成网络(GAN)核心思想
通俗理解对抗生成网络(GAN)核心思想


GAN的魅力



可能不少人会有疑问,就是生成一些牛逼的图像有什么用,模型再厉害,我拿一个照相机照出来的难度会比你差,这里解释一下,如果仅仅只能生成见过的图片,确实没有什么厉害的地方,但是如果可以“合理”的生成没有见过的图像,是不是就很有意思呢?如下图,中间的图片就是训练集中重来没有出现:


通俗理解对抗生成网络(GAN)核心思想


它居然自己学到了,在中间参数的时候,头像的转向等等特质,非常的amazing



视频资料如下:
https://www.bilibili.com/video/av23316535from=search&seid=13825323076277645807





-END-

来源:计算机视觉小白的学习记录,本文观点不代表自营销立场,网址:https://www.zyxiao.com/p/54220

发表评论

电子邮件地址不会被公开。 必填项已用*标注

侵权联系
分享本页
返回顶部