1.2 生成对抗网络(GAN)

本节首先从较高层次概括介绍生成对抗网络(GAN)的工作原理;然后以生成动漫人脸图像为例,向读者展示GAN的内部工作原理;最后,还将讨论GAN的实际应用。

1.2.1 GAN概述

生成对抗网络是一种生成模型,最初由Ian Goodfellow等人于2014年提出。[4]近年来GAN变得非常流行,因为它易于构建和训练,而且可以生成各种各样的内容。我们将在图1.2的示例中看到,GAN采用了双网络架构,其中包括一个生成模型,负责捕捉生成内容时所需的底层数据分布,还包括一个判别模型,用于估算特定样本来自真实训练数据集(被视为“真实样本”)而非生成模型(被视为“虚假样本”)的可能性。该模型的主要目标是生成与训练数据集中的数据非常相似的新数据实例。GAN生成数据的性质取决于训练数据集的组成。例如,如果训练数据由服装灰度图像组成,那么生成的图像也将与这些服装非常相似;同理,如果训练数据集由人脸彩色图像组成,那么生成的图像也将与人脸相似。


[4] GOODFELLOW I. J, POUGET-ABADIE J, MIRZA M, et al. Generative adversarial nets[C]//Proceedings of the 27th International Conference on Neural Information Processing Systems, MIT Press, 2014:2672-2680.

图1.2展示了GAN架构及其组成部分。为了训练模型,训练数据集中的真实样本和生成器创建的虚假样本都要输入判别器。生成器的主要目的是创建与训练数据集中的示例几乎没有区别的数据实例,而判别器则需要努力将生成器生成的虚假样本与真实样本区分开来。这两个网络进行着类似于猫鼠游戏的持续竞争,每个网络都会不断尝试超越对方。

GAN模型的训练过程包括多次迭代。在每次迭代中,生成器都会获取某种形式的任务描述(步骤1),并用它来创建虚假图像(步骤2)。虚假图像与训练集中的真实图像一起被输入判别器(步骤3)。判别器会尝试将每个样本分类为“真实”或“虚假”,然后将分类结果与实际标签[真实数据(ground truth)]进行比较(步骤4)。判别器和生成器都会从分类结果中获得反馈(步骤5),并据此提高自己的能力:判别器会调整自己识别虚假样本的能力;生成器则会学习如何增强其生成更加令判别器信服的样本的能力。随着训练的推进,当两个网络都无法进一步提升时,就会达到一个平衡点。此时,生成器即可生成与真实样本几乎没有区别的数据实例了。

图1.2 生成对抗网络架构及其组成部分。生成对抗网络采用双网络架构,包括一个生成模型(左)和
一个判别模型(中),生成模型负责捕捉底层数据分布,判别模型负责估算特定样本来自真实训练
数据集(被视为“真实样本”)而非生成模型(被视为“虚假样本”)的可能性

为了准确理解GAN的工作原理,我们看一个示例。

1.2.2 示例:生成动漫人脸

假设我们是充满激情的动漫爱好者,正在进行一项激动人心的探索,打算使用一种名为深度卷积GAN(deep convolutional GAN,DCGAN,详见第4章)的强大工具创建自己的动漫脸谱。

回顾图1.2中间上方,有一张标有“真实样本”的图像。我们将使用63632张彩色动漫人脸图像作为训练数据集。图1.3展示了训练集中的32个示例图像。这些特殊图像起着至关重要的作用,它们将作为判别器网络的一半输入数据。

图1.3 动漫人脸训练数据集中的示例

图1.2左侧是生成器网络。为了每次生成不同图像,生成器会从潜空间(latent space)获取一个向量Z作为输入。我们可以把这个向量看作“任务描述”。在训练过程中,我们从潜空间中提取不同的Z向量,因此网络每次都会生成不同图像。这些虚假图像是判别器网络的另一半输入数据。

注意

通过改变向量Z的值,可以生成不同的输出。在第5章中,我们将学习如何选择向量Z来生成具有特定特征(如男性或女性特征)的图像。

但有一个问题需要注意,那就是在两个网络学会有关创作和检测的技能之前,生成器生成的图像都是乱七八糟的!此时的结果看起来完全不像图1.3中的动漫人脸。实际上,此时的结果看起来就像电视屏幕上显示的“雪花点”(第4章会展示此时的生成结果)。

我们需要对模型进行多次迭代训练。在每次迭代中,我们将生成器创建的一组图像连同从训练集中随机抽取的一组真实动漫人脸图像输入判别器,我们期望判别器预测每张图像是由生成器创建的(虚假图像)还是从训练集中抽取的(真实图像)。

有人可能会问:在每次迭代训练中,判别器和生成器是如何学习的?一旦做出了预测,判别器并不会就此作罢,而是从每张图像的预测错误中学习。有了这些新获得的知识,判别器将调整参数,使自己在下一轮判断中做出更好的预测。生成器也没闲着!它记录图像生成过程和预测结果。有了这些知识,生成器也将调整自己的网络参数,力争在下一次迭代中生成越来越逼真的图像,以降低判别器识别出虚假图像的概率。

随着不断迭代,我们将迎来显著变化。生成器网络不断进化,生成的动漫人脸越来越逼真,与训练集中的人脸非常相似。与此同时,判别器网络也通过磨炼自己的技能,成长为一名火眼金睛的识假侦探。创作者和检测者就这样联手“翩翩起舞。”

渐渐地,我们终于迎来了那个神奇时刻:模型达成了一种平衡,一种完美的平衡。此时,生成器创建的图像变得惊人地真实,以至于与训练集中的真实动漫人脸难以区分。此时,判别器已经无所适从了,它会对每张图像都赋予50%的真实性概率,无论图像是来自训练集,还是由生成器生成的。

最后,读者可以看看图1.4所示的一些生成器作品示例,它们看起来与训练集中的图像没有任何区别。

图1.4 由DCGAN中训练好的生成器生成的动漫人脸图像

1.2.3 为什么要关注GAN

GAN易于实现且用途广泛。在本书中,我将介绍如何用GAN生成几何图形、复杂图案、高分辨率图像和风格显著的音乐。

GAN的实际应用不仅限于生成逼真的数据。GAN还可以将一个图像域(image domain)中的属性转换到另一个图像域中。正如第6章将要介绍的,我们可以训练CycleGAN(GAN家族中的一种生成模型)将人脸图像中的金发转换为黑发,同一模型还可以将黑发转换为金发。图1.5显示了4行图像。第一行是金发原始图像。经过训练的CycleGAN将其转换为黑发图像(第二行)。最后两行则分别是黑发原始图像和转换后的金发图像。

图1.5 利用CycleGAN改变发色。如果将金发图像(第一行)输入训练好的CycleGAN模型,
该模型会将这些图像中的金发转换为黑发(第二行)。这个模型还能将黑发(第三行)
转换为金发(第四行)

想想看,我们能从GAN的训练中获得哪些神奇技能?这些技能不仅很酷,而且超级实用!假设我们经营了一家“按单定制”的在线服装店(在实际生产所订购的产品前,允许顾客对产品进行定制)。我们的网站展示了大量独特的设计供顾客挑选,但这会面临一个问题:只有当顾客下订单后,才会生产定制化的服装。那么如何在下单前让顾客看到这些定制化服装的照片?制作这些服装的高质量照片可能会非常昂贵,因为必须先生产出商品,然后才能拍摄它们。

GAN可以大展拳脚了!我们再也不需要收集大量已生产服装的照片,而是可以用CycleGAN等工具将一组图像的特征转换为另一组图像的特征,从而创造出一系列全新款式。这只是GAN的一种有趣用法。由于这些模型具有超强的通用性,可以处理各种数据,因此在实际应用中具有无限的可能性。