24

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

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

在此处输入图像描述

在此处输入图像描述

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

4

1 回答 1

38

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

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

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

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

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