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

sha*_*are 17 neural-network deep-learning generative-adversarial-network gan

我正在阅读人们对DCGAN的实现,特别是这个在tensorflow中的实现.

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

在此输入图像描述

在此输入图像描述

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

Mas*_*nya 23

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

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

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

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

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