GAN实战
上QQ阅读APP看书,第一时间看更新

第1章 GAN简介

本章主要内容

生成对抗网络简介

这类机器学习算法的特别之处

本书所涉及的令人兴奋的GAN应用

机器能否思考——这一想法比计算机本身出现得还要早。数学家、逻辑学家以及计算机科学家艾伦•图灵(Alan Turing),或许是凭借在破译密码机方面做出的贡献而广为人知的,但他于1950年撰写的《计算机器与智能》(Computing machinery and intelligence)这篇论文也足以使他的名字永载后世。

在这篇文章中,图灵提出了一种叫作模仿游戏的测试。今天,人们更习惯称之为图灵测试。在这个假设的测试场景中,一个不知情的观察者与位于一扇紧闭的门后的两个“对应者”交谈:一个是人类,另一个是计算机。图灵认为,如果观察者不能分辨出哪个是人、哪个是机器,那么必须承认通过该测试的计算机是智能的。

试过与自动聊天机器人或智能语音助手进行对话的人都知道,要通过这个看似简单的测试,计算机还有很长的路要走。然而,在其他类型的任务中,计算机不仅能与人类的表现相媲美,在一些领域甚至超越了人类——即使是一些在最近还被认为最智能的算法都无法企及的领域,例如,计算机在人脸识别中已经能做到超越人类的精确度,还能不需人类经验即可掌握围棋技能。[1]

机器学习算法非常擅长识别已有数据中的模式,并将这种洞察能力用于诸如分类(为样本分配正确类别)和回归(根据一系列的输入进行数值估算)等任务中。但是当被要求生成新数据时,计算机就显得力不从心了。算法可以击败国际象棋大师,估计股价走势,并能分辨信用卡交易是否可能是欺诈,但相比之下,任何与Amazon的Alexa或Apple的Siri进行闲聊的尝试却往往注定失败。事实上,人类最基本和最重要的能力——例如一次愉快的对话或者一件原创作品的制作——都足以使最先进的超级计算机束手无策。

但这一切在2014年发生了改变,当时还是加拿大蒙特利尔大学博士生的伊恩•古德费勒(Ian Goodfellow)发明了GAN,这项技术使得计算机能够利用两个独立的神经网络生成真实的数据。GAN并不是第一个用于生成数据的计算机程序,但其出色的效果和多功能性使得它脱颖而出。GAN已经取得了惊人的成果,而这些成果长期以来被认为是几乎不可能通过人工系统实现的,比如,生成栩栩如生的伪图像,将涂鸦手绘变成照片风格的图像,或者将视频片段中奔跑的骏马变成黑白相间的斑马——利用GAN,这些都不需要大量精心标注的训练数据即可实现。

由于GAN的出现,机器数据生成技术取得了长足的进步,图1.1所示的人脸合成就是一个很好的例子。就在GAN被发明出来的2014年,机器生成的最好效果只是一张模糊的脸——这在当时已被认为是突破性的成就了。仅仅3年后的2017年,GAN技术的进步就让计算机能够生成以假乱真的高分辨率人脸了!在本书中,我们将深入探究让这一切成为可能的算法——GAN。

(来源:The Malicious Use of Artificial Intelligence: Forecasting, Prevention, and Mitigation, by Miles Brundage et al., 2018.)
图1.1 人脸生成的进展

1.1 什么是GAN

GAN是一类由两个同时训练的模型组成的机器学习技术:一个是生成器,训练其生成伪数据;另一个是鉴别器,训练其从真实数据中识别伪数据。

生成(generative)一词预示着模型的总目标——生成新数据。GAN通过学习生成的数据取决于所选择的训练集,例如,如果我们想用GAN合成一幅看起来像达•芬奇作品的画作,就得用达•芬奇的作品作为训练集。

对抗(adversarial)一词则是指构成GAN框架的两个动态博弈、竞争的模型:生成器和鉴别器。生成器的目标是生成与训练集中的真实数据无法区分的伪数据——在刚才的示例中,这就意味着能够创作出和达•芬奇画作一样的绘画作品。鉴别器的目标是能辨别出哪些是来自训练集的真实数据,哪些是来自生成器的伪数据。也就是说,鉴别器充当着艺术品鉴定专家的角色,评估被认为是达•芬奇画作的作品的真实性。这两个网络不断地“斗智斗勇”,试图互相欺骗:生成器生成的伪数据越逼真,鉴别器辨别真伪的能力就要越强。

网络(network)一词表示最常用于生成器和鉴别器的一类机器学习模型:神经网络。依据GAN实现的复杂程度,这些网络包括从最简单的前馈神经网络(第3章)到卷积神经网络(第4章)以及更为复杂的变体(如第9章的U-Net)。

1.2 GAN是如何工作的

支撑GAN的数学理论是较为复杂的(我们将在后面几章中集中探讨,特别是第3章和第5章),幸运的是,我们有许多现实世界的示例可以做类比,这样能使GAN更容易理解。前面我们讨论了一个艺术品伪造者(生成器)试图愚弄艺术品鉴定专家(鉴别器)的示例。伪造者制作的假画越逼真,鉴定专家就必须具有越强的辨别真伪的能力。反过来也是成立的:鉴定专家越善于判断某幅画是否是真的,伪造者就越要改进造假技术,以免被当场识破。

还有一个比喻经常用来形容GAN(Ian Goodfellow经常喜欢用的示例),假币制造者(生成器)和试图逮捕他的侦探(鉴别器)——假钞看起来越真实,就需要越好的侦探才能辨别出它们,反之亦然。

用更专业的术语来说,生成器的目标是生成能最大程度有效捕捉训练集特征的样本,以至于生成出的样本与训练数据别无二致。生成器可以看作一个反向的对象识别模型——对象识别算法学习图像中的模式,以期能够识别图像的内容。生成器不是去识别这些模式,而是要学会从头开始学习创建它们,实际上,生成器的输入通常不过是一个随机数向量。

生成器通过从鉴别器的分类结果中接收反馈来不断学习。鉴别器的目标是判断一个特定的样本是真的(来自训练集)还是假的(由生成器生成)。因此,每当鉴别器“上当受骗”将假的图像错判为真实图像时,生成器就会知道自己做得很好;相反,每当鉴别器正确地将生成器生成的假图像辨别出来时,生成器就会收到需要继续改进的反馈。

鉴别器也会不断地改善,像其他分类器一样,它会从预测标签与真实标签(真或假)之间的偏差中学习。所以随着生成器能更好地生成更逼真的数据,鉴别器也能更好地辨别真假数据,两个网络都在同时不断地改进着。

表1.1总结了GAN的两个子网络的关键信息。

表1.1 生成器和鉴别器的关键信息

1.3 GAN实战

现在,你已经对GAN及其组成网络有了一个大致的了解,接下来看一下系统的实际运行情况。假定我们的目标是教GAN生成逼真的手写数字(第3章将实现这样一个模型,并在第4章中对其进行扩展)。GAN的核心结构如图1.2所示。

让我们看看其中的细节。

(1)训练数据集——包含真实样本的数据集,是我们希望生成器能以近乎完美的质量去学习模仿的数据集。在这个示例中,数据集由手写数字的图像组成。该数据集用作鉴别器网络的输入({x}^*)

图1.2 两个GAN子网及其输入、输出和交互

(2)随机噪声向量——生成器网络的初始输入(\boldsymbol{z})。此输入是一个由随机数组成的向量,生成器将其用作合成伪样本的起点。

(3)生成器网络——生成器接收随机数向量(\boldsymbol{z})作为输入并输出伪样本({x}^*)。它的目标是生成和训练数据集中的真实样本别无二致的伪样本。

(4)鉴别器网络——鉴别器接收来自训练集的真实样本({x}^*)或生成器生成的伪样本({x}^*)作为输入。对每个样本,鉴别器会进行判定并输出其为真实的概率。

(5)迭代训练/调优——对于每个鉴别器的预测,我们会衡量它效果有多好——就像对常规的分类器一样——并用结果反向传播去迭代优化鉴别器网络和生成器网络。

更新鉴别器的权重和偏置,以最大化其分类的精确度(最大化正确预测的概率:{x}为真,{x}^*为假)。

更新生成器的权重和偏置,以最大化鉴别器将{x}^*误判为真的概率。

了解各种GAN组件的用途可能像是在看搜索引擎的快照,除非我们看到它们是如何运作的,否则将无法完全理解。这就是本节的主要内容。我们首先介绍GAN的训练算法,其次演示训练过程,以便你可以清楚地看到实际的架构图。



GAN训练算法

对于每次训练迭代,执行如下操作。

  (1)训练鉴别器。

    a. 从训练集中随机抽取真实样本{x}

    b. 获取一个新的随机噪声向量\boldsymbol{z},用生成器网络合成一个伪样本{x}^*

    c. 用鉴别器网络对{x}{x}^*进行分类。

    d. 计算分类误差并反向传播总误差以更新鉴别器的可训练参数,寻求最小化分类误差。

  (2)训练生成器。

    a. 获取一个新的随机噪声向量\boldsymbol{z},用生成器网络合成一个伪样本{x}^*

    b. 用鉴别器网络对{x}^*进行分类。

    c. 计算分类误差并反向传播以更新生成器的可训练参数,寻求最大化鉴别器误差。

结束



GAN训练过程可视化

GAN的训练算法如图1.3所示,其中的字母表示GAN训练算法中的步骤。

图1.3 GAN训练算法有两个主要部分。训练鉴别器和训练生成器两部分,在训练过程的对应阶段中描绘了同一个GAN网络在不同时间点的状态



子程序图示说明

  (1)训练鉴别器。

    a. 从训练集中随机抽取真实样本{x}

    b. 获取一个新的随机噪声向量\boldsymbol{z},用生成器网络合成一个伪样本{x}^*

    c. 用鉴别器网络对{x}{x}^*进行分类。

    d. 计算分类误差并反向传播总误差以更新鉴别器的权重和偏置,寻求最小化分类误差。

  (2)训练生成器。

    a. 获取一个新的随机噪声向量\boldsymbol{z},用生成器网络合成一个伪样本{x}^*

    b. 用鉴别器网络对{x}^*进行分类。

    c. 计算分类误差并反向传播以更新生成器的权重和偏差,寻求最大化鉴别器误差。



你可能想知道GAN训练循环何时停止,更准确地说,如何知道GAN何时能被完全训练好,以便确定适当的训练迭代次数?对于一般的神经网络,我们通常有一个明确的目标去实现以及用来衡量效果。例如,当训练一个分类器时,我们度量在训练集和验证集上的分类误差,一旦发现验证集误差开始变坏,就停止进程(为了避免过度拟合)。在GAN结构中,鉴别器网络和生成器网络有两个互为竞争对手的目标:一个网络越好,另一个就越差。那么,我们如何决定何时停止进程呢?

熟悉博弈论的人可能会意识到这是一个零和博弈问题,即一方的收益等于另一方的损失。当一方提高一定程度时,另一方会恶化同样的程度。零和博弈都有一个纳什均衡点,那就是任何一方无论怎么努力都不能改善他们的处境或者结果。

当满足以下条件时,GAN达到纳什均衡

(1)生成器生成的伪样本与训练集中的真实数据别无二致。

(2)鉴别器所能做的只是随机猜测一个特定的样本是真的还是假的(也就是说,猜测一个示例为真的概率是50%)。


 

注意 

纳什均衡是以美国经济学家、数学家John Forbes Nash的名字命名的,他的生平事迹和职业生涯被收录在一本名为《美丽心灵》(A Beautiful Mind)的传记中,并被翻拍成同名电影。


 

让我们来解释为何会出现这种情况。当每一个伪样本({x}^*)与来自训练集的真实样本无法区分时,鉴别器用任何手段都无法区分它们。因为鉴别器接收到的样本有一半是真的,一半是假的,所以它所能做的最有用的事情就是抛硬币,以50%的概率把每个样本分为真和假。

同样,生成器也处于这样一个点上,它不能从进一步的调优中获得任何提高了。因为生成器生成的样本早已和真实样本无法区分了,以至于对随机噪声向量(\boldsymbol{z})转换为伪样本({x}^*)的过程做出哪怕一丁点儿改变,也可能给鉴别器提供从真实样本中辨别出伪样本的机会,从而使生成器变得更糟。

当达到纳什均衡时,GAN就被认为是收敛的。这是一个棘手的问题,在实践中,由于在非凸博弈中实现收敛所涉及的巨大复杂性,几乎不可能达到GAN的纳什均衡(在后续的章节中,特别是第5章中,有更多关于收敛的内容)。实际上,GAN的收敛仍是GAN研究中最重要的开放性问题之一。

幸而这并没有妨碍到GAN的研究,也没有妨碍生成对抗学习的许多创新应用。即使在缺乏严格数学保证的情况下,GAN也取得了引人瞩目的实证结果——本书涵盖了一部分最具影响力的工作,下一节先介绍其中一些示例。

1.4 为什么要学GAN

自发明以来,GAN一直被学术界和工业界的专家们誉为“深度学习中最重要的创新之一”。Facebook的人工智能研究主管Yann LeCun甚至表示,GAN及其变体是“过去20年来深度学习中最酷的想法”。[2]

这种兴奋是合情合理的。机器学习领域的其他进展可能在科研人员中人尽皆知,但对于门外汉来说,可能疑惑多于兴奋,GAN激起了从研究人员到大众的极大兴趣——包括《纽约时报》、BBC、《科学美国人》以及许多其他知名媒体机构,甚至可能就是GAN的某项成果驱使你来购买这本书的呢。(对吧?)

最值得关注的可能是GAN创作超现实主义意象的能力。图1.4所示的人脸都不是真人的,都是假的,这展示了 GAN 合成足以和真实照片以假乱真图像的能力。这些人脸是用渐进式增长生成对抗网络生成的,相关内容参见第6章。

(来源:Progressive Growing of GAN for Improved Quality, Stability and Variation,by Tero Karras et al., 2017.)
图1.4 这些逼真但虚假的脸是由在高分辨率名人肖像照片集上训练过的渐进GAN生成的

GAN另一个引人瞩目的成就是图像到图像的转换(image-to-image translation)。与把句子从汉语翻译成西班牙语的方式类似,GAN可以将图像从一种风格转换为另一种风格。如图1.5所示,GAN可以把马的图像转换为斑马的图像,把一张照片变成莫奈的画作,而这几乎不需要任何监督,也不需要任何标签。使这一切成为可能GAN的变体是循环一致性生成对抗网络(CycleGAN),相关内容参见第9章。

更实用些的GAN应用同样令人着迷。在线零售的巨头亚马逊(Amazon)尝试利用GAN提供时尚建议:通过分析无数的搭配,系统能学会生成符合给定的任意风格的新产品。[3] 在医学研究中,GAN通过合成样本增强数据集,以提高诊断准确率。[4] 在掌握了训练GAN及其变体的细节之后,我们将在第11章详细地探讨这两个应用。

(来源:Unpaired Image-to-Image Translation Using Cycle-Consistent Adversarial Networks, by Jun-Yan Zhu et al., 2017.)
图1.5 通过使用名为CycleGAN的GAN变体,可以将莫奈的画作变成照片,或将图片中的斑马变成马;反之亦然

GAN也被视为实现通用人工智能[5]的重要基石。它是一种能够匹敌人类认知能力的人工系统,能获取几乎任何领域的专业知识——从走路所需的运动技能到语言表达技能,甚至于写诗所需的创作技能。

然而,拥有生成新数据和新图像的能力使得GAN有时也会很危险。关于假新闻的传播及其危险性已经是老生常谈,GAN生成可信假视频的能力也令人不安。在2018年一篇关于GAN的文章的结尾处——这篇文章的标题很贴切“如何成为一个人工智能”——《纽约时报》记者 Cade Metz和Keith Collins谈到了令人担忧的前景:GAN可能被用来制造和传播易使人轻信的错误信息,比如虚假的世界各国领导人发表声明的视频片段。《麻省理工学院科技评论》旧金山分社社长Martin Giles也表达了他的担忧,他在2018年发表的《GAN之父:赋予机器想象力的人》一文中提到,在技术娴熟的黑客手中,GAN可能会以前所未有的规模被用来探索和利用系统漏洞。这些忧虑促使我们讨论GAN的应用在道德伦理上的考量(第12章)。

GAN可以为世界带来许多好处,但是任何技术创新都是一把双刃剑。对此,我们必须怀有一种哲学意识:“除掉”一种技术是不可能的,所以确保像你这样的人了解这项技术的迅速崛起及其巨大的潜力是很重要的。

本书也仅能触及应用GAN可实现功能的一些皮毛,但是,我们希望这本书能够为你提供必要的理论知识和实践技能,使你能够继续从各个方面探索自己最感兴趣的领域。

事不宜迟,让我们开始吧!

1.5 小结

(1)GAN 是一种利用两个神经网络之间的动态竞争来合成真实数据样本的深度学习技术,例如能合成具有照片级真实感的虚假图像。构成一个完整GAN的两个网络如下:

生成器,其目标是通过生成与训练数据集别无二致的数据来欺骗鉴别器;

鉴别器,其目标是正确区分来自训练数据集的真实数据和由生成器生成的伪数据。

(2)目前,GAN在许多不同的领域都有着广泛的应用,如时尚、医药和网络安全等。


[1] 见Surpassing Human-Level Face Verification Performance on LFW with GaussianFace, by Chaochao Lu and Xiaoou Tang, 2014. 另见《纽约时报》文章GoogleTang, 2014Level Fs Chinese Go Master in Win for A.I.,by Paul Mozur, 2017.

[2] 见GoogleMozur, 2017Level Fs Chinese Go Master in Win f, by Cade Metz, Wired, 2017.

[3] Amazon Has Developed an AI Fashion Designer, by Will Knight, MIT Technology Review, 2017.

[4] Synthetic Data Augmentation Using GAN for Improved Liver Lesion Classification, by Maayan Frid-Adar, et al., 2018.

[5] OpenAI Founder: Short-Term AGI Is a Serious Possibility, by Tony Peng, Synced, 2018. 另见A Path to Unsupervised Learning Through Adversarial Networks, by Soumith Chintala,f Code, 2016.