深度学习——GAN(生成网络)损失函数解析

      生成网络(GAN)是近年来很火的课题,原始论文《Generative Adversarial Nets》的介绍请移步:https://blog.csdn.net/wenqiwenqi123/article/details/86178376

      本篇主要详细解析它的损失函数。在论文中损失函数定义为:

 

      当然乍一看去,没看懂这个损失函数。我们细细来看:

      GAN的原理就是G(生成器)努力制造以假乱真的图,而D(判别器)努力分辨出假图。这样一起努力最后生成的图就会越来越逼真。一切损失计算都是在D(判别器)输出处产生的,而D的输出一般是fake/true的判断,所以整体上采用的是二分类交叉熵函数。

  左边包含两部分minG和maxD。

      首先看一下maxD部分,因为训练一般是先保持G(生成器)不变训练D的。D的训练目标是正确区分fake/true,二分类问题使用了sigmoid激活函数,因此D(x)的输出范围是[0,1],是一个概率。看第一项E,x~pdata指的是x采样于真实数据data的分布。如果我们以1/0代表true/fake,则对第一项E因为输入采样自真实数据所以我们期望D(x)趋近于1,因为D(x)∈[0,1],也就意味着第一项(logD(x))要更大。同理第二项E输入采样自G生成数据,所以我们期望D(G(z))趋近于0更好,也就是说第二项又是更大。所以是这一部分是期望训练使得整体更大了,也就是maxD的含义了。

  第二部分保持D不变,训练G,这个时候只有第二项E有用了(第一项里没有G),因为我们要迷惑D,所以这时将生成的图的label设置为1(我们知道是fake,所以才叫迷惑),希望D(G(z))输出接近于1更好,也就是1-D(G(z))接近于0更好,因此第二项越小越好(log函数),这就是minG。

       生成器和判别器分别迭代优化,最终生成的图就可以以假乱真了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章