伟大的GAN(生成对抗网络)
- 前言:以下所有内容是学习过程中产生的,不一定具有Ture可信度,仅供初学者学习参考,如果有不对的地方,敬请指正再批评;所有参考资料均来源于互联网和论文(做了整理,不算抄袭吧)。
- 摘要:主要从警察与造假币者的通俗例子讲解生成对抗网络的基本原理,生成器与判别器的概念,怎么样叫对抗过程?引出在图像生成中所用的生成对抗网络是怎么样的?论文中的原始GAN Loss函数的详细解释,它为什么就写成那么巧妙的样子?怎么训练GAN呢?会存在哪些问题呢?我们怎么知道GAN就训练好了呢?这些问题的答案都会在背后的数学逻辑中全部体现。
- 一、GAN的基本原理
- 二、GAN的Loss函数分析
- 三、GAN的训练
- 四、GAN的稳定状态及其数学推导
- 五、两种原始GAN形式存在的问题
- 六、总结
前言:以下所有内容是学习过程中产生的,不一定具有Ture可信度,仅供初学者学习参考,如果有不对的地方,敬请指正再批评;所有参考资料均来源于互联网和论文(做了整理,不算抄袭吧)。
摘要:主要从警察与造假币者的通俗例子讲解生成对抗网络的基本原理,生成器与判别器的概念,怎么样叫对抗过程?引出在图像生成中所用的生成对抗网络是怎么样的?论文中的原始GAN Loss函数的详细解释,它为什么就写成那么巧妙的样子?怎么训练GAN呢?会存在哪些问题呢?我们怎么知道GAN就训练好了呢?这些问题的答案都会在背后的数学逻辑中全部体现。
一、GAN的基本原理
1.经典的警察与造假币者
- 造假币者按照真实钱币的样子来造假,警察要分辨遇到的钱币是真还是假(造假币者就是生成器G,警察就是判别器D)
- 最初的时候,造假者造假能力不强,警察很容易判别出来;当被警察容易识别出来的时候,造假者就会继续修炼自己的技艺;于此同时,警察也要积累经验提高自己的判别能力;不断的造假,不断的判别,不断的提高自己的能力(这就是一个对抗过程)
- 最后的结果,造假者可以创造出以假乱真的钱币,警察难以区分(造假者已经是一个很好的可以刻画钱币的人)
2.图像生成中的生成对抗网络
生成器:试图生成逼真的图像来欺骗判别器
判别器:试图完美区分真实和虚假的图像
(图片来源于网络课程,名字忘了)
- 其中的生成器和判别器可以看成两个神经网络,全连接和卷积网络等都行,就是平常所见的神经网络;我们输入随机噪声给生成器网络,随机噪声一般是高斯分布或者均匀分布的,你也可以理解成反正输入一个多维向量给生成器网络就行;输入经过生成器网络以后就会被变成一个更高维的向量,也就是我们的生成器输出了一张生成图片,你可以想象成把图片的每个像素点看做向量的每个维度元素,一张图片那么多像素点,不就是个高维向量嘛;把生成器生成的图片输入到判别器网络,也会同时输入真实的图片给判别器,判别器就会对图片进行打分,也就是判别真假,它的目标是尽可能给真实的图片高分,给生成器网络生成的虚假图片低分;这就是图像生成中的生成器与判别器的概念。
- 上图是一个对抗训练的过程。从左向右看,在刚开始也就是v1的时候生成器生成的这些二次元图像是模糊的乱糟糟的,判别器就很容易判断出真实图像与虚假图像了;这时候生成器知道了判别器对自己生成的图像判断很差,那可不行,我需要生成更好的图像去骗过判别器,需要进化,就慢慢进化到了v2,v2能生成比v1更好的图像了;判别器可能判断难度增加了,因为生成器生成的图像跟真实图像越来越像了,它是可以知道自己的判断能力的,不能被生成器欺骗,它也需要进化,尽可能的去区分真实图像和生成器生成的虚假图像…这个过程一直持续下去,相互进化,相互对抗。直到判别器在生成图像与真实图像之间没法判断,换个说法就是判断一张图像是真实图像的概率是1/2的时候,生成对抗网络就达到了理想状态,这时候生成器也可以生成逼真的图像了,可以类比前面的警察与造假币者的案例。(这就是生成对抗网络中对抗以及纳什均衡的含义)
二、GAN的Loss函数分析
- 我们都知道在神经网络中需要训练网络,调整网络的神经元权重参数,这是通过定义Loss函数,并且利用梯度下降和反向传播算法不断优化Loss函数值来实现的,那我们就来看看原始GAN论文中的Loss函数,对它就行分析,利用它是如何训练网络的?它为什么写成这么奇妙的样子?请看下面的Loss函数
- 含义解释:D代表了判别器,G代表了生成器,z代表了输入的随机数据,z服从p(z)分布,x代表输入的真实图像数据,服从p(data)分布,E代表的是期望。对这个公式直观的理解就是我们的判别器想最大化这个函数,也就是前面的max的含义,判别器想要尽可能的区分真实图像和虚假图像,也就是要函数第一项中D(x)的取值尽可能的大,要第二项中D(G(z))尽可能的小,那么1-D(G(z))就会变得尽可能的大,对于整个函数来说不就是变得希望它尽可能的大了嘛,也就是说判别器的优化目标就是最大化这个函数;对于生成器来说,希望自己生成的图像能够得到判别器更好的评价,骗过判别器,就是希望D(G(z))尽可能的大,那么1-D(G(z))就会变得尽可能的小,也就是希望函数的第二项尽可能的小。更好的表诉就是下面所示:
- 有没有觉得这个Loss函数设计得怎么这么奇妙呢?它当初为什么就想到这么写了呢?世上没有无缘无故得爱,请看下面:
三、GAN的训练
- Loss函数解释清楚了,下面就该讲讲如何训练啦,都知道利用梯度下降法或者上升法来让我们的函数朝着极小值或极大值的方向变动。下面来具体看看:
前面已经讲过判别器的目标是最大化目标函数值:
判别器要最大化目标函数值,我们就可以利用梯度上升法就可以了,让函数值沿着梯度的方向不断上升,即权重更新公式为:
这里的E是指的是Loss函数
生成器的目标是最小化目标函数值:
很自然得想到梯度下降法,让目标函数值朝着梯度得反方向变动找到函数极小值,即权重更新公式为:
但是训练的时候,这里存在一个很严重的问题,请看下面这张函数图:
解释一下就是这个函数曲线横轴表示的是D(G(z)),纵轴是log(1-D(G(z))),先看看整个函数曲线的变化趋势,是不是刚开始那一段很平坦啊,然后慢慢的坡度才变得越来越大,D(G(z))表示的是判别器对生成器生成的图像的评价,想一下刚开始的时候我们的生成器生成的图像是很差的,判别器很容易就把它判别为虚假图像,也就是很容易打分为0了,即刚开始的时候是在横坐标靠近0的位置的,对应的不就是这个函数的刚开始很平坦的那一段啊,这样梯度是不是很小啊,这就是梯度由样本信号主导的意思,梯度几乎没有,还怎么训练啊!!!还怎么更新权重啊!!所以这里是不行的,我们对它进行变化一下,变成下面这个样子:
刚才是要最下化,变成这样我们不就可以最大化了嘛,还可以利用梯度上升,那么现在还会存在梯度消失的问题吗?请看下图:
蓝色的是原来的曲线,绿色的是-log(D(G(z)))的曲线,现在再来看函数刚开始的曲线,陡度是不是很大了,没有梯度消失的问题了呀。下面贴出论文中给出的训练步骤:
- 这里分为两个部分,先固定生成器来训练判别器,然后再固定判别器来训练生成器。在实践中k通常取1(我所理解的是我们在写代码的过程中其实没有说去固定谁训练谁,体现的只是一个代码中的输入输出关系而已);首先,输入噪声z服从Pg(z)这个分布,从中取m个样本,真实图像x服从Pdata(x)分布,也是从中采样m个样本,按照梯度上升法更新判别器,就是上面所述的公式,公式含义在之前Loss函数的分析过程中已经讲得很清楚了,之后更新生成器用的是梯度下降法。
四、GAN的稳定状态及其数学推导
已经讲了GAN是怎么训练的,我们就可以找点数据动手开始训练网络了,但是什么时候停下来呢?也就是说怎么样去判断我们的GAN网络训练得好没好,是不是该停下来了?做过一点其它网络训练的可能通常都会去看Loss曲线,Loss曲线一直下降到平坦区域了或许就差不多了,但是GAN呢,看下面这张GAN训练过程中Loss曲线的变化图:
- (图片来自互联网)两条曲线分别表示生成器和判别器的Loss曲线变化,谁对应着哪条线不是那么重要,主要的是我们可以看到Loss曲线是不断的振荡着的,无法再通过看它的变化趋势来判断GAN的训练情况了。
- 先给出GAN训练什么时候达到最好的理想状态的结论,由前面警察和造假币者的故事,以及生成对抗网络对抗过程的分析,我们可以直观的表述GAN最后的理想状态如下:
在作者的论文中是以这样的图来表示的:
- 解释一下这个图就是黑色的点表示的曲线是真实图像的数据分布情况,绿色的是生成器生成的图像数据的分布,蓝色曲线表示的判别器的判别能力,蓝色曲线上的值也就是曲线高低可以看做判别器对生成图像和真实图像的打分,下面的z和x之间的射线表示z的数据分布到x的数据分布的映射,也就是噪声数据分布与真实数据分布之间的映射;在刚开始的时候,判别器对真实数据的打分很高,对生成图像的打分很低,随着学习的进行,生成图像数据分布不断向真实数据分布靠拢,直到两个分布重合,也就是完全一样时,判别器无法判断真实图像和生成图像的真假,噪声数据分布很好的映射到真实数据分布,GAN达到最优,也就是纳什均衡。
- 下面通过一个简单例子解释一下什么是纳什均衡:
纳什均衡对应到我们的图像生成中就是说,我们的生成器和判别器都各自达到了最优,也就是类比上面例子中所说的每个策略对另一个策略都是最佳应对的游戏玩法就是纳什均衡,一句话就是你好我也好。 - 下面对GAN达到纳什均衡背后的数学原理进行一个推导,为什么它能达到纳什均衡?它的纳什均衡就是这样的?
- 上面引入了两个概念KL散度和JS散度,这是衡量两个概率分布差异的指标,如果概率分布完全一样,则取值为0,如果完全不一样则是1,其余介于0到1之间。
- 最优结果就是我们的GAN达到纳什均衡,这时候两个概率分布完全相同,判别器判断正确的概率只有1/2,生成器也达到了最好的状态。解释一下D是怎么来的,判别器不是要最大化函数嘛,积分里面的函数达到最大值不也就是积分的最大值吗,固定了生成器,那么Pg相当于也是固定的一个常数,Pr也是固定的,求函数最大值就是求alogy+blog(1-y)的最大值,求个倒数就可以得出我们的D的值了,也就是最优判别器的值。
- 类比之前那个博弈论的例子,可以在最优判别器的条件下去求我们的最优生成器,过程如下:
这里就已经求得了在公式推导前我们给出的纳什均衡的结果,Djs的最小值为0,也就是两个数据分布重合的时候,那么最小值-2log2自然就求得了,D*带入之前的公式就是1/2。生成器判别器各自达到了最优。
五、两种原始GAN形式存在的问题
- 下面两张图分别反应的就是第一种梯度消失的问题和第二种梯度不稳定的问题:
六、总结
- 介绍了原始GAN的基本原理,图像中的生成对抗网络的原理,原始GAN中Loss函数的分析,训练过程,达到纳什均衡的过程,以及什么是纳什均衡,GAN背后的数学推理,存在的问题,为什么GAN难以训练等。
- 原始GAN的这些问题解决了吗?当然是在不断改进解决的,请自行参考后面的各种GAN,太奇妙了。
- 生成图像的模型只有GAN吗?当然不是,比如还有VAE啊。还有下面这张图啊: