GAN 损失函数的理想值是多少
What is the ideal value of loss function for a GAN
最初由 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 的最佳值,但为什么不能将它们用作评估指标?
我认为这个问题属于交叉验证,但无论如何:
我为此纠结了很长一段时间,想知道为什么没有人问这个问题。
接下来是我目前所在的位置。不确定是否对您有帮助,但这是我的一些直觉。
G 和 D 损失是失败案例的良好指标...
当然,如果 G loss 是一个非常大的数字并且 D 为零,那么你的 GAN 中就没有什么好事情发生了。
...但不是很好的性能指标。
我已经训练了一堆 GAN,除了非常简单的例子之外,几乎从未见过“0.5/0.5 案例”。大多数时候,当输出 D(x) 和 D(G(z))(因此,损失)或多或少稳定时,您会很高兴。所以不要将这些值用于 "gold standard".
我缺少的一个关键直觉是同时进行 G 和 D 训练。一开始,G 确实不擅长生成东西,但 D 也很不擅长区分它们。随着时间的推移,G 变得更好,但 D 也变得更好。所以经过很多个epoch,我们可以认为D真的很擅长辨别真假。因此,即使 G "fools" D 只有 5% 的时间(即 D(x)=0.95 和 D(G(z))=0.05),这也可能意味着 G 实际上非常好,因为它有时会愚弄一个非常好的鉴别器。
如您所知,除了暂时查看图像质量之外,没有可靠的图像质量指标,但我发现对于我的用例,G 可以产生出色的图像,而愚弄 D 的时间只有百分之几。
这种同时训练的推论是训练开始时发生的事情:你可以有 D(X)=0.5 和 D(G(Z))=0.5,并且仍然有 G 产生几乎随机的图像:只是 D 是还不够好,无法将它们与真实图像区分开来。
我看到你发布这个问题已经有几个月了。如果您在此期间获得了直觉,我将很高兴听到!
最初由 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 的最佳值,但为什么不能将它们用作评估指标?
我认为这个问题属于交叉验证,但无论如何:
我为此纠结了很长一段时间,想知道为什么没有人问这个问题。 接下来是我目前所在的位置。不确定是否对您有帮助,但这是我的一些直觉。
G 和 D 损失是失败案例的良好指标...
当然,如果 G loss 是一个非常大的数字并且 D 为零,那么你的 GAN 中就没有什么好事情发生了。
...但不是很好的性能指标。
我已经训练了一堆 GAN,除了非常简单的例子之外,几乎从未见过“0.5/0.5 案例”。大多数时候,当输出 D(x) 和 D(G(z))(因此,损失)或多或少稳定时,您会很高兴。所以不要将这些值用于 "gold standard".
我缺少的一个关键直觉是同时进行 G 和 D 训练。一开始,G 确实不擅长生成东西,但 D 也很不擅长区分它们。随着时间的推移,G 变得更好,但 D 也变得更好。所以经过很多个epoch,我们可以认为D真的很擅长辨别真假。因此,即使 G "fools" D 只有 5% 的时间(即 D(x)=0.95 和 D(G(z))=0.05),这也可能意味着 G 实际上非常好,因为它有时会愚弄一个非常好的鉴别器。
如您所知,除了暂时查看图像质量之外,没有可靠的图像质量指标,但我发现对于我的用例,G 可以产生出色的图像,而愚弄 D 的时间只有百分之几。
这种同时训练的推论是训练开始时发生的事情:你可以有 D(X)=0.5 和 D(G(Z))=0.5,并且仍然有 G 产生几乎随机的图像:只是 D 是还不够好,无法将它们与真实图像区分开来。
我看到你发布这个问题已经有几个月了。如果您在此期间获得了直觉,我将很高兴听到!