如何解释生成对抗网中鉴别者的损失和生成器的损失?

时间:2017-03-09 08:53:46

标签: neural-network deep-learning

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

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

enter image description here

enter image description here

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

1 个答案:

答案 0 :(得分:16)

不幸的是,就像你对GAN所说的那样,损失是非常不直观的。大多数事情发生在发电机和鉴别器相互竞争的事实上,因此对一方的改进意味着另一方面的损失更高,直到另一方在收到的损失上学得更好,从而搞砸其竞争对手等等。

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

这种损失收敛通常意味着GAN模型找到了一些最优的,它不能提高更多,这也意味着它已经学得很好。 (另请注意,数字本身通常不是很有用。)

以下是一些附注,我希望能提供帮助:

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