损失函数

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

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

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

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

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

在我们将要介绍的损失函数方案中,生成器和判别器损失来自于概率分布之间的单个距离测量。不过,在这两种方案中,生成器只能影响距离测量中的一项:反映虚假数据分布的项。因此,在生成器训练期间,我们会舍弃反映真实数据分布的另一个项。

生成器和判别器损失最终看起来不同,即使它们来自于一个公式。

Minimax 损失函数

在介绍 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

经过修改的 Minimax 损失函数

原始 GAN 论文指出,当判别器的工作非常简单时,上述最小极大值损失函数可能会导致 GAN 在 GAN 训练的早期阶段陷入困境。因此,该论文建议修改生成器损失,以便生成器尝试最大限度地提高 log D(G(z))

在 TF-GAN 中,如需了解此修改的实现,请参阅 modified_generator_loss

Wasserstein 损失函数

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

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

由于它实际上无法区分真假,因此 WGAN 鉴别器实际上被称为“评价器”而非“鉴别器”。这项区分在理论上很重要,但在实际应用中,我们可以将其视为一种确认,即损失函数的输入不一定是概率。

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

Critic LossD(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 中的权重进行剪裁,以使其保持在受限范围内。

优势

与基于最小极大值的 GAN 相比,Wasserstein GAN 不易陷入停滞状态,并且可以避免梯度消失问题。地球搬运距离还有一个优势,即它是一种真正的度量:一种在概率分布空间中衡量距离的方法。从这个意义上讲,交叉熵不是指标。