GAN的损失函数的理想值是多少?

时间:2018-03-22 04:16:18

标签: neural-network loss generative-adversarial-network objective-function

最初由IJ Goodfellow提出的GAN使用以下损失函数,

D_loss = - log[D(X)] - log[1 - D(G(Z))]

G_loss = - log[D(G(Z))]

因此,鉴别器试图最小化D_loss并且生成器尝试最小化G_loss,其中X和Z分别是训练输入和噪声输入。 D(。)和G(。)分别是鉴别器和生成器神经网络的映射。

正如原始论文所说,当GAN经过几个步骤的训练时,它达到了发生器和鉴别器都无法改善并且D(Y)在任何地方都是0.5的点,Y是鉴别器的一些输入。在这种情况下,当GAN受到足够的训练时,

D_loss = - log(0.5) - log(1 - 0.5) = 0.693 + 0.693 = 1.386

G_loss = - log(0.5) = 0.693

那么,为什么我们不能将D_loss和G_loss值用作评估GAN的指标?

如果两个损失函数偏离这些理想值,那么GAN肯定需要经过良好的训练,或者架构需要很好地设计。正如原始论文中的定理1所讨论的那样,这些是D_loss和G_loss的最佳值,但为什么不能将它们用作评估度量?

1 个答案:

答案 0 :(得分:2)

我认为这个问题属于“交叉验证”,但无论如何:

我为此苦了很长时间,想知道为什么没有问这个问题。 接下来是我目前所在的位置。不确定是否会对您有所帮助,但这是我的直觉。

G和D损失是故障案例的良好指标...
当然,如果G损失是一个很大的数字,而D则为零,那么您的GAN中就没有任何好处。

...但性能指标不是很好。
我训练了很多GAN,除了非常简单的示例外,几乎从未见过“ 0.5 / 0.5案例”。大多数时候,当输出D(x)和D(G(z))(以及因此造成的损失)或多或少稳定时,您会感到高兴。因此,请勿将这些值用于“黄金标准”。
我缺少的一个主要直觉是G和D训练的同时进行。一开始,请确保G在生成东西方面确实很糟糕,但是D在区分它们方面也确实很糟糕。随着时间的流逝,G会变得更好,但D也会变得更好。因此,经过许多时期,我们可以认为D确实擅长区分假和实。因此,即使G仅在5%的时间内“愚弄” D(即D(x)= 0.95且D(G(z))= 0.05),也可能意味着G实际上是相当不错的,因为它有时会愚弄一个很好的鉴别器。
如您所知,目前除了查看图像质量外,还没有可靠的度量标准,但是我发现对于我的用例,G可以产生出色的图像,而仅在D%的时间内欺骗D。 培训开始时发生的与此同步的训练的结果是:您可以使D(X)= 0.5和D(G(Z))= 0.5,但G仍生成几乎随机的图像:只是D是还不足以将它们与真实图像区分开。

我看到距您发布此问题已经几个月了。如果您在此期间获得了直觉,我将很高兴听到它!