损失函数

GAN 会尝试复制概率分布。因此,它们应使用能反映 GAN 所生成数据分布与真实数据分布之间距离的损失函数。

如何捕获 GAN 损失函数中两种分布之间的差异?这个问题是一个积极的研究领域,人们已提出了许多方法。我们将在这里介绍两个常见的 GAN 损失函数,这两个函数都在 TF-GAN 中实现:

TF-GAN 也实现了许多其他损失函数。

一个损失函数还是两个损失函数?

GAN 可以有两个损失函数:一个用于生成器训练,另一个用于判别器训练。两个损失函数如何共同反映概率分布之间的距离测量?

在本文的损失方案中,生成器和判别器损失基于概率分布之间的单一距离来推导。不过,在这两种方案中,生成器只能影响距离测量中的一个字词:反映虚假数据的分布的字词。因此,在生成器训练期间,我们将丢弃另一个术语,以反映真实数据的分布。

生成器和判别器损失函数最终看起来有所不同,即使它们源自一个公式也是如此。

最大损失

在介绍 GAN 的论文中,生成器试图将以下函数最小化,而判别器则尝试将其最大化:

$$E_x[log(D(x))] + E_z[log(1 - D(G(z)))]$$

在此函数中:

  • D(x) 是判别器对真实数据实例 x 真实的概率的估计值。
  • Ex 是所有真实数据实例的预期值。
  • G(z) 是指定的噪声 z 时的输出。
  • D(G(z)) 是判别器对虚构实例是真实概率的估计值。
  • Ez 是指向生成器的所有随机输入的预期值(实际上是所有生成的虚构实例 G(z) 的预期值)。
  • 该公式由真实分布和生成的分布之间的交叉熵得出。

生成器不能直接影响函数中的 log(D(x)) 项,因此对于生成器,最大限度降低损失相当于最小化 log(1 - D(G(z)))

在 TF-GAN 中,请参阅 minimax_discriminator_loss 和 minimax_generator_loss 了解此损失函数的实现。

修改后的 Minmaxmax 损失

原始 GAN 论文指出,上述极小损失函数可能会导致 GAN 在判别器的工作非常轻松时卡在 GAN 训练的早期阶段。因此,这篇论文建议修改生成器损失,以便生成器尝试最大化 log D(G(z))

在 TF-GAN 中,请参阅 modify_generator_loss 了解此修改的实现。

废弃物损失

默认情况下,TF-GAN 使用 Wasserstein 损失

此损失函数依赖于 GAN 方案(称为“Wasserstein GAN”或“WGAN”)的修改,其中判别器实际上并不对实例进行分类。对于每个实例,它都会输出一个数字。此数字不必小于或大于 0,因此我们无法将 0.5 作为阈值来确定实例是真实的还是虚构的。判别器训练只是尝试让真实实例的输出比虚构实例更大。

由于 WGAN 判别器实际上无法区分真实内容和虚假内容,因此实际上称为“专家”,而不是“判别器”。这种区分在理论上具有重要意义,但实际上,我们可以将其视为确认损失函数的输入不一定是概率的确认。

损失函数本身看起来很简单:

专家损失D(x) - D(G(z))

判别器会尝试将此函数最大化。换句话说,它会尝试最大程度地减小真实实例上的输出与虚构实例上的输出之间的差异。

生成器损失D(G(z))

生成器会尝试最大限度利用此函数。换言之,它尝试为其虚构实例最大限度地提高判别器的输出。

在这些函数中:

  • D(x) 是专家对真实实例的输出。
  • G(z) 是指定的噪声 z 时的输出。
  • D(G(z)) 是虚构实例的专家输出。
  • 专家 D 的输出无需在 1 和 0 之间。
  • 这些公式基于真实分布和生成的分布之间的土方移动距离得出。

在 TF-GAN 中,如需了解实现,请参阅 wasserstein_generator_loss 和 wasserstein_discriminator_loss

要求

Wasserstein GAN(或 WGAN)的理论原因需要对整个 GAN 中的权重进行裁剪,使其处于受限的范围内。

优势

Wasserstein GAN 比基于 minimax 的 GAN 更容易卡住,并可以避免梯度消失的问题。地球移动距离还具有一个真正的指标,即度量概率分布中的距离。从这个意义上讲,交叉熵不是一个指标。