判别器

GAN 中的判别器只是一个分类器。它会尝试区分真实数据与生成器创建的数据。它可以使用适合其所分类数据类型的任何网络架构。

生成对抗网络示意图。该图的中心有一个标记为“discriminator”的框。两个分支从左侧进入此框。顶部分支从图表左上角标记为“真实世界图片”的框开始。一个箭头从此圆柱指向标有“Sample”(示例)的框。标记为“Sample”(示例)的框中有一个箭头,指向“Discriminator”(区分标识符)框。底部分支会馈送到“分类器”框中,该框以标有“随机输入”的框开头。一个箭头从“随机输入”框指向标有“生成器”的框。一个箭头从“Generator”(生成器)框指向第二个“Sample”(示例)框。一个箭头从“Sample”(示例)框指向“Discriminator”(区分标识符)框。在“分类器”框的右侧,有两个箭头指向图表右侧的两个框。其中一个箭头指向标有“Discriminator loss”(判别器损失)的框。另一个箭头指向标有“Generator loss”的框。在分类器框和分类器损失框周围绘制了一个带有向左箭头和“反向传播”字样的黄色框,表示反向传播操作会作用于黄色框中包含的系统部分。

图 1:鉴别器训练中的反向传播。

判别器训练数据

分类器的训练数据来自两个来源:

  • 真实数据实例,例如真实的人物照片。在训练过程中,分类器会将这些实例用作正例。
  • 生成器创建的虚构数据实例。在训练期间,鉴别器会将这些实例用作负例。

在图 1 中,两个“Sample”(示例)框代表输入到分类器的两个数据源。在鉴别器训练期间,生成器不会训练。其权重保持不变,同时会生成示例以供判别器进行训练。

训练判别器

分类器连接到两个损失函数。在判别器训练期间,判别器会忽略生成器损失,而只使用判别器损失。我们会在生成器训练期间使用生成器损失,如下一部分所述。

在判别器训练期间:

  1. 判别器会对生成器生成的真实数据和虚假数据进行分类。
  2. 如果判别器将真实实例误分类为虚假实例,或将虚假实例误分类为真实实例,判别器损失函数会对其进行惩罚。
  3. 判别器通过判别器网络从判别器损失进行反向传播来更新其权重。

在下一部分中,我们将了解为什么生成器损失与分类器相关联。