对于GAN(生成对抗网络)原理的通俗理解

是这样的,其实对于我个人想法,我是觉得没必要在CSDN这个大牛云集的地方班门弄斧的,但是在我看了几篇对GAN介绍的热门文章之后,我发现它们的内容中总会有一些缺失的地方(就比如说这篇文章提到a,可另一篇文章却只提到了b,而a和b在GAN原理简介中都是需要用到的概念或知识),所以我就厚着脸皮在这有点疲惫的深夜写下我自己的一些总结和看法,如果有不正确的地方,还恳请读了这篇文章的网友们指正。不胜感激!

GAN中的数学推导我是不懂的,所以这篇文章是一个真正的外行在尝试入门时得出的一些总结,希望这篇文章对于情况与我类似的小白们能有那么一点点用处。

GAN(生成对抗网络)的结构

GAN的主要结构包括一个生成器G(Generator)和一个判别器D(Discriminator)

//结构解析
GAN的结构1.生成器(Generator)
1)生成器是一个模型,具体是什么对于我们小白来说是不用去深入了解的。在生成器(Generator)中呢,我们对其输入噪声(其实就是完全无序的数据,没什么规律的),生成器会生成一个新的数据出来(这种数据可以是很多东西,比如声音、图片等,为了叙述更加简单,我就假定生成器输出的是图片(image))。
2)生成器输出的数据实质是“假的”图片(Fake image),因为它是由机器产生的,相对地,训练集(Training set)中的图片是我们人自己给的,所以是“真的”图片。

以上是对生成器的简述

2.判别器(Discriminator)
1)同样,判别器也是一个模型,具体是什么对于我们小白来说也同样不用去深入了解。当我们将一个图片放入判别器中,判别器会对其进行判定,比如,从生成器中来的图片判别器会判定并输出一个接近0的数字,说明它非常可能是假的,而且,越接近0说明这个判别器越“好”。如果是我们人自己给的图片呢,“好”的判别器会立马对其进行判定并输出一个接近1的数字,同样,越接近1说明这个判别器越“好”.那么问题来了,怎么得到一个“好”的判别器呢?下面我解释一下。

以上是对判别器的简述

关于怎么得到“好”的判别器

这里涉及到一个名为“训练”的概念。
对于判别器的训练,是这样的:
我们先固定住生成器中的参数(固定之后生成器对于不同的噪声输入产生的图片是差不多的),在输入噪声之后生成器会产生一张我们图片,我们人工将其标记为“0”,然后我们将这个标记为“0”的图片与我们人自己给的并标记为“1”的图片捆绑在一起形成一个结合体,再把这个结合体放入判别器中进行训练,然后判别器对这个结合体中的“0”图和“1”图分别进行打分(分数在0~1之间),再看得到的分数与它们的标记的接近程度如何(“0”图就看是否接近0,“1”图就看是否接近1),如果判别效果不太好,我们就修改判别器中的参数(调参),再进行很多很多次训练,直到判别器已经能很正确地将“0”图和“1”图判别出来,这样就可以说得到一个“好”的判别器了。那么接下来我们就要讨论如何得到一个好的生成器(Generator)。

关于怎么得到“好”的生成器

在生成器中,所谓的“好”,是指生成器生成的图片,能有很大可能去成功骗过判别器,使判别器对其判断并输出接近“1”的数(当然,输出1的时候说明此时的生成器最“好”),也就是说生成器的欺骗能力越强它就越“好”。那如何对其进行训练呢?我们先将我们已经训练出来的“好”的判别器中的参数固定住(要用判别能力已经很强的判别器才行),再对生成器输入噪声,之后生成器会输出一个图片,我们把这个图片的标记记为1(因为刚开始生成器的欺骗能力是比较弱的,判别器对生成器输出的图片的打分非常接近0,所以我们要把生成器输出的图片标记为1,这样子可以得到一个较大的差值,比如判别器对其打分为0.1,那么差值就为0.9,然后继续训练生成器,这个差值会越来越小),我们把这个图片输入到判别器中,然后判别器就会对其进行判断从而输出一个0~1的数字,刚开始打分肯定是会非常接近0的,所以我们要及时对生成器进行调参,之后再重新在生成器中输入噪声而产生图片,再放到判别器中,判别器又会对其打分,如果分数还是接近0,但会比上一次打分稍微高一些,我们就重复之前的操作,直到判别器对其打分接近“1”。好了,如果我们要得到一个“好”的生成器,这就是它的训练方法。


//如果之后你又想要一个更好的判别器,那就重复上面我提到的训练“好”的判别器的方法,在“好”的生成器的基础上对本来就挺“好”的判别器进行训练,你能得到一个更“好”的判别器,同理,你也可以通过“好”的判别器去对本来就挺“好”的生成器进行训练,你就会得到一个更“好”的生成器。其实这个原理就是生成对抗网络中“对抗”的由来,这就是GAN的独特之处。
//可以看看下面这张图//
我个人认为这张图可以这样子来分析:
如果把update那条线去掉,就可以看做判别器的训练模式图;如果把“真图”那个框去掉,就可以看做生成器的训练模式图。


在这里插入图片描述(Z是噪声)

如果我们既想得到“好”的生成器又想得到“好”的判别器,而一直交叉重复训练生成器和判别器,最终会有这么一个结果——判别器对于输入图像的判别,无论是真图还是假图,都会判断为0.5,0.5刚好介于0与1,此时称之为“纳什平衡”。(听起来很厉害,其实我也不知道是什么,还得查查资料hhhh)。我有个想法,如果你只想得到一个“好”的东西(生成器和判别器二选一),那么在一定的训练之后你得适可而止从而避免达到“纳什平衡”,至于生成器和判别器哪一个会是更“好”的,完全取决于训练者你的想法,你想哪个更“好”,就对它进行更多的训练。

OK,以上。

猜你喜欢

转载自blog.csdn.net/weixin_43655282/article/details/89167806