【问题标题】:How to interpret the discriminator's loss and the generator's loss in Generative Adversarial Nets?如何解释生成对抗网络中鉴别器的损失和生成器的损失?
【发布时间】:2017-07-30 03:58:05
【问题描述】:

我正在阅读人们对 DCGAN 的实现,尤其是 tensorflow 中的this one

在那个实现中,作者画出了判别器和生成器的损失,如下图所示(图片来自https://github.com/carpedm20/DCGAN-tensorflow):

判别器和生成器的损失似乎都没有遵循任何模式。不同于一般的神经网络,其损失随着训练迭代的增加而减少。训练 GAN 时如何解释损失?

【问题讨论】:

  • 我认为你的意思是鉴别器,而不是决定器。
  • @MatiasValdenegro 感谢您的指出。

标签: neural-network deep-learning generative-adversarial-network


【解决方案1】:

不幸的是,就像您对 GAN 所说的那样,损失非常不直观。大多数情况下,它发生在生成器和判别器相互竞争的事实,因此对一个的改进意味着另一个的损失更高,直到另一个对接收到的损失学习得更好,从而搞砸了它的竞争对手,等等。

现在应该经常发生的一件事(取决于您的数据和初始化)是鉴别器和生成器的损失都收敛到一些永久数字,如下所示: (损失反弹一点是可以的——这只是模型试图自我改进的证据)

这种损失收敛通常意味着 GAN 模型找到了一些最优值,但它无法进一步改进,这也应该意味着它已经学得足够好。 (另请注意,这些数字本身通常信息量不大。)

以下是一些旁注,希望对您有所帮助:

  • 如果损失没有很好地收敛,这并不一定意味着模型没有学到任何东西 - 检查生成的示例,有时它们会足够好。或者,可以尝试更改学习率和其他参数。
  • 如果模型收敛良好,仍然检查生成的示例 - 有时生成器会发现判别器无法区分真实数据的一个/几个示例。问题是它总是给出这几个,而不是创造任何新的东西,这被称为模式崩溃。通常为您的数据引入一些多样性会有所帮助。
  • 因为 vanilla GAN 相当不稳定,我建议使用some version of the DCGAN models,因为它们包含一些特征,如卷积 层和批量标准化,这应该有助于 收敛的稳定性。 (上图是 DCGAN 而不是 vanilla GAN 的结果)
  • 这是一些常识,但仍然是:就像大多数神经网络结构调整模型一样,即更改其参数或/和架构以适应您的特定需求/数据可以改进模型或搞砸它。

【讨论】:

  • Goodfellow 的 GAN 论文讨论的是可能性,而不是损失。你能说一下这个情节到底描述了什么吗?换句话说,损失究竟意味着什么?任何方程式或描述都会很有用。
  • DCGAN 代码请参考以下 github 目录:github.com/carpedm20/DCGAN-tensorflow 你将能够找到 model.py 中定义的损失。损失的通用公式请参考以下论文的第 3.1 节:arxiv.org/pdf/1611.04076.pdf 根据使用的 GAN 类型,可能会有不同的定义。
猜你喜欢
  • 2021-02-19
  • 2018-07-26
  • 2017-11-08
  • 2019-12-22
  • 2019-01-18
  • 2017-11-27
  • 2018-09-13
  • 2020-05-05
  • 2021-11-18
相关资源
最近更新 更多