生成器

GAN 的生成器部分通过纳入来自判别器的反馈来学习创建虚假数据。它会学习让判别器将其输出归类为真实。

与鉴别器训练相比,生成器训练需要生成器与鉴别器之间更紧密的集成。GAN 中用于训练生成器的部分包括:

  • 随机输入
  • 生成器网络,用于将随机输入转换为数据实例
  • 判别网络,用于对生成的数据进行分类
  • 判别器输出
  • 生成器损失,用于惩罚未能欺骗分类器的生成器

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

图 1:生成器训练中的反向传播。

随机输入

神经网络需要某种形式的输入。通常,我们会输入要执行某项操作的数据,例如要分类或预测的实例。但是,我们要使用什么作为输入来让网络输出全新的数据实例?

在最基本的形式中,GAN 会将随机噪声作为输入。然后,生成器会将此噪声转换为有意义的输出。通过引入噪声,我们可以让 GAN 从目标分布中的不同位置进行抽样,从而生成各种各样的数据。

实验表明,噪声的分布不太重要,因此我们可以选择易于抽样的内容,例如均匀分布。为方便起见,用于从中抽样噪声的空间的维度通常小于输出空间的维度。

使用判别器训练生成器

为了训练神经网络,我们会更改网络的权重,以减少其输出的误差或损失。不过,在我们的 GAN 中,生成器与我们尝试影响的损失函数并非直接相关。生成器会馈送到判别器网络,而判别器会生成我们尝试影响的输出。如果生成器生成的样本被判别器网络归类为假,生成器损失会对生成器进行惩罚。

反向传播中必须包含这部分额外的网络。反向传播通过计算权重对输出的影响(如果您更改权重,输出会如何变化),以正确的方向调整每个权重。但是,生成器权重的效果取决于它馈入的判别器权重的效果。因此,反向传播从输出开始,并通过判别器流回生成器。

同时,我们也不希望鉴别器在生成器训练期间发生变化。尝试命中移动目标会使生成器的难题变得更加棘手。

因此,我们将按照以下步骤训练生成器:

  1. 采样随机噪声。
  2. 从采样的随机噪声生成生成器输出。
  3. 获取生成器输出的判别器“真实”或“虚假”分类。
  4. 计算鉴别器分类的损失。
  5. 通过鉴别器和生成器进行反向传播以获取梯度。
  6. 使用梯度仅更改生成器权重。

这是生成器训练的一个迭代。在下一部分中,我们将了解如何同时训练生成器和鉴别器。