小白仍然努力学习之----------GAN基础知识

GAN,还是读game吧,听起来好听点。  李宏毅还是厉害,讲的深入浅出

一.GAN为什么需要generative与discriminative协作

理解GAN,首先来看看,如果只用generative能不能做生成?

答案是  可以!!!但是,有些缺陷:

    我们想想,如果只用generative来做生成,怎么做呢?就是input一些vector,让net学着去生成和target尽可能像的图片:

小白仍然努力学习之----------GAN基础知识_第1张图片

但是这些input vector怎么来的呢?我们可能希望这些vector具有某些代表的特征,比如第一维代表方向什么的之类,这样net学到的生成才具有可解释性,目的性。为了生成这样的有意义的vector,我们可以使用Auto-Encoder小白仍然努力学习之----------GAN基础知识_第2张图片

使用了Auto-Encoder,我们可以获得有意义的input,这个时候其实Decoder就是我们要的Generator,

小白仍然努力学习之----------GAN基础知识_第3张图片小白仍然努力学习之----------GAN基础知识_第4张图片

可是这样还没有达到我们的效果,因为使用Auto-Encoder之后,generator会学到:看到vector A,产生A图片,看到vector B,产生B图片,但是看到0.5A+0.5B,generator可能就没办法产生好的图片了,因为net是非线性的,很有可能这样就会产生noise,那怎么解决呢?我们可以使用VAE

小白仍然努力学习之----------GAN基础知识_第5张图片

使用VAE之后,net可以学到看到vector A+noise,也会产生好的图片这样。但是这套generator的局限在哪里呢?在于全局性

小白仍然努力学习之----------GAN基础知识_第6张图片

由于只依靠generator,loss function只能考虑到局部的匹配,无法从全局的角度去衡量生成的和真实图的相似度,会导致上图所示的尴尬局面,这不是我们希望的,能解决吗?其实是可以的:

小白仍然努力学习之----------GAN基础知识_第7张图片

理论上讲,要想让模型学会考虑周围的信息从全局来看,只要加深网络,让全连接层更加丰富即可,因此使用VAE+很深的network也是可以获得好的效果的。和GAN相比,VAE要想获得相同的效果,则使用的network需要更深,才能让pixel考虑到周围的信息从全局来衡量。

小白仍然努力学习之----------GAN基础知识_第8张图片

如上图。使用VAE的话,当X很大的时候,network很难学到说:y很大OK,很小也ok,但是介于中间的时候就不好,你会发现使用VAE它还是会生成一些图片介于中间,这就是因为VAE很难考虑pixel与pixel之间的关系,无法学到X很大的时候,Y要很大或者很小这样。

 

那么,只用Discriminator,可以做生成吗?答案是    也可以!!!

Dsicriminator相较于Generator的优势在于,由于generator是一个pixel一个pixel去生成图片,因此很难考虑全局。而Discriminator就可以很好地考虑全局:

小白仍然努力学习之----------GAN基础知识_第9张图片小白仍然努力学习之----------GAN基础知识_第10张图片

那怎么生成呢?就是穷举所有可能的input到discriminator里面看它给哪些高分,就用哪些。这里我们暂且不讨论穷举所有X的可行性,这个后面会说。假设我们可以解这个arg max问题,那么会遇到什么问题呢?那就是Discriminator缺少负样本:

 

小白仍然努力学习之----------GAN基础知识_第11张图片小白仍然努力学习之----------GAN基础知识_第12张图片

由于我们的数据集只有正样本,这样会导致network只会学到说看到什么都给1,这显然不是我们要的,所以我们需要给network喂一些负样本,但是负样本的质量至关重要,如上图2,如果我们给的负样本特别差,那么最后network看到一个没有那么差的样本可能就也会给高分,所以怎么生成好的负样本才是关键。也就是:我们要有好的负样本才能训练一个好的discriminator,而我们要有好的discriminator才能找出好的negative example,这就变成鸡生蛋生鸡的问题了。怎么做?迭代!!!

小白仍然努力学习之----------GAN基础知识_第13张图片

也就是每一轮让Discriminator学着去鉴别正负样本,然后再解arg max问题去获得好的负样本,继续迭代这样。

其实之前有很多人都这么做了,structure learning中有很多方法都是这样,但是为了解arg max的问题,都需要给定一个很强的假设,即数据服从一种分布这样,但这样虽然可以解,但是限制了模型的生成能力。

总结下:

小白仍然努力学习之----------GAN基础知识_第14张图片

而GAN,完美解决上面的两者的问题,将其结合起来,我们使用generator来解那个arg max的问题,解决discriminator的问题,同时由于discriminator可以全局考虑衡量,也完美解决generator的缺点。

小白仍然努力学习之----------GAN基础知识_第15张图片小白仍然努力学习之----------GAN基础知识_第16张图片

你可能感兴趣的:(小白仍然努力学习之----------GAN基础知识)