内容简介:GAN其实本质就是由两个网络组成,一个为我们熟知的判别网络,还有一个为生成网络;GAN的最终目标就是通过使用判别器,能够使生成器生成我们需要的图像;通常我们我们将生成网络简写为G,将辨别网络称为D。G主要接受一个噪音,并且生成伪造的数据,塞给D进行辨别,由D进行辨别,理想状态下,D会成功的鉴别出来G生成的数据为假。这时,G会进行改进,进一步的将噪音伪造成真实数据的样子,塞给D鉴别;
一、基本原理:
GAN其实本质就是由两个网络组成,一个为我们熟知的判别网络,还有一个为生成网络;GAN的最终目标就是通过使用判别器,能够使生成器生成我们需要的图像;
通常我们我们将生成网络简写为G,将辨别网络称为D。
G主要接受一个噪音,并且生成伪造的数据,塞给D进行辨别,由D进行辨别,理想状态下,D会成功的鉴别出来G生成的数据为假。这时,G会进行改进,进一步的将噪音伪造成真实数据的样子,塞给D鉴别;
同时,D也会学习如何鉴别出G的造假技巧,从而能够将G生成的假图片甄别出来;可以看出,这就是一个动态的过程,其最终的目的是D无法鉴别出G生成的数据是真的还是假的;
二、基本原理:
GAN网络的一大特点就是可以使用噪音,学习到真实的数据分布,从而模拟出真实数据的数据分布;
下面是GAN的目标函数:
对于GAN网络,我们采用的是交替训练,也就是先固定住一个网络,去训练另一个网络;
我们先固定G训练D,从而有:
对于这个式子,我们希望他越大越好。在理想状态下,真实的数据辨别成1,而G生成的数据,也就是G(z),应该辨别成0;
观察这个式子我们可以发现,如果真实数据x或者生成数据是G(z)被分类错一个,这个式子的最终值都会变成负无穷,所以这就可以看出有很大的优化空间去是这个式子的值最大;
接下来我们固定D训练G,会得到以下式子:
对于这个式子,我们的目的是使其最小化。对于该式的第一项,可以在这个时候理解成一个常数项,第二项才是影响这个式子值的关键;
G的目的是希望D将他生成的数据错认为是真的,所以应该有D(G(z))=1,此时第二项为负无穷,满足式子的最小值要求;
我们所说的GAN网络可以很好的学习真实数据的分布,所以在训练中,如果固定网络G不动,训练D,所以会有最优结果:
其中右边代表的概率分别是真实数据的分布以及学习数据的分布,随着学习的分布趋于真实的数据分布,该式子的值会到达0.5,到此时,G、D网络都达到平衡状态,两个网络无法进一步更新。
三、损失函数:
损失函数的定义可以说是GAN网络的关键;
对于判别器的损失函数,大多都采用如下式子定义:
该式子是一个标准的交叉熵损失函数;这里使用交叉熵可以有效的衡量真实数据的分布和学习生成有效的分布的差距,归根到底就是统计学中散度的计算(该概念后续会进行总结)。对于生成起来说,我们期望D的交叉熵越小越好;
对于生成网络的损失函数,有两种形式:
第一种是采用零和博弈。零和博弈从通俗理解就是拼个你死我活,你赚了我必然亏,我亏了多少你就赚多少;此时,G的代价函数就变为:
此时,我们训练的目的就是能够使的生成器和判别器达到一个平衡点,也就是鞍点,使得两者达到平衡;
但是关键点在于,这个方法理论上是可行,但是实践使用很糟糕;因为当判别器训练到一定程度,完全有把握的拒绝生成样本时,生成器的梯度就会消失,这里可以近似的认为生成模型和源数据你和之后,求导结果都为(1/2)'=0;
所以,就有第二博弈形式:非饱和博弈;
也就是将G的代价函数变为:
从而使得D完美之后,G还可以继续优化。详细的数学推导这里先不给出,后续补充;
以上所述就是小编给大家介绍的《关于GAN的个人理解》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 个人理解Vue和React区别
- 关于KMP算法的一些个人理解
- redis个人理解----hyperloglog(golang实现)
- 个人对vue中生命周期的理解
- redis个人理解4--hash对象的存储
- redis个人理解3---redis的事件驱动源码分析
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。