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

8
GAN最初由IJ Goodfellow提出,使用以下损失函数:
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个回答

12

我认为这个问题应该属于Cross-Validated,但无论如何:

我曾经花了很长时间来解决这个问题,并想知道为什么没有人问过这个问题。 接下来是我目前的进展。不确定它是否会对您有所帮助,但这是我的一些直觉。

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(X)=0.5 和 D(G(Z))=0.5,但仍然让 G 产生几乎随机的图像:只是 D 还不够好以将其与真实图像区分开来。

我看到你发布这个问题已经有几个月了。如果你在这段时间里获得了直觉,我很乐意听取!


4
我也通过实验学到了同样的东西。当GAN遭受模式崩溃等失败模式时,它会给出最佳损失值,因为G正在利用D,但这并不表明一个GAN比另一个更好。此外,对于图像质量来说,这些损失值并不是衡量标准,根据我的经验,损失值不一定反映图像质量。为了公平比较GAN模型,Frechet距离测量是目前的最先进技术,并且在我的实验中表现非常好。 - Vinay Joshi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接