13.1.1 猫和老鼠的游戏

在2016年7月,一款国外的照片处理软件火遍了全世界,同时也引爆了国
人的朋友圈。这款产品就是Prisma。Prisma可以按照你提供的图片内容和指定
的风格,生成一副指定风格的图片,如图13-1所示。

如此神乎其神的技术是怎么做到的呢?其背后的关键技术就是接?来我们
要讲解的生成对抗网络。在讲解之前我们先来了解一部电影的故事。
同样在2016年,莱昂纳多凭借《荒?猎人》中出色的表演一举夺得第88届
奥斯卡金像奖,当时这则新闻也引起了中国网友的广泛热议。笔者在闲暇之余
也比较喜欢看电影,若要问我最喜欢莱昂纳多哪一部电影,我的答案无疑是
2002年他主演的《猫鼠游戏》。这部电影主要讲述了FBI探员卡尔与擅长伪造
文件、支票的罪犯弗兰克(莱昂纳多饰)之间的一场猫抓老鼠的故事。在这场
猫鼠游戏中,如同动画片《猫和老鼠》,老鼠是聪明的那一个,而警察如猫,
是跟在老鼠屁股后追着跑的那一个。
片中的莱昂纳多有高超的观察与模仿能力。无论是驾照上的出生年份、泛
美航空的工作证还是各种支票、大学的?业证书等,只需要让他观察一段时
间,他就能用他的双手把它制作出来,而且达到以假乱真的地步。抓捕他的
FBI探员一开始总是被骗,但是在这个过程中,探员鉴别假材料的技巧也越来
越高,最终成功将他抓捕归案。
这部电影和我们本章要讲述的生成对抗网络有什么联系呢??面我将细细
道来。
生成对抗网络(Generative Adversarial Network,GAN)由2014年还在
蒙特利尔大学读博士的伊恩·古德费洛(Ian Good?ellow)引入深度学习领
域。到2016年,短短两年的时间,GAN算法的热潮已经遍布AI领域各大顶级会
议,来自“脸书”人工智能研究院的院长扬·勒丘恩(Yann LeCun)教授在一
次关于无监督学习的会议上公开评价,GAN是“20年来机器学习领域最酷的想
法”。
GAN 是一种比较特殊的深度学习模型,也是近年来关于复杂分布的无监督
学习问题最具有前景的解决方法之一。GAN 由生成模型和判别模型两部分组
成。其中生成模型用于生成比较接近原有样本的数据,而判别模型用来判断它
看到的数据到?是原来样本的数据还是通过生成模型制造出来的数据,因为生
成模型与判别模型通常都使用深度神经网络,因此也称为生成网络及判别网
络。GAN的目的是生成?真的“假样本”。生成器专门用于生成看似真实的样
本,判别器学习分辨生成样本和真实样本,两个网络相互博弈使生成器生成
的“假样本”越来越?真。
这种博弈就像电影里的莱昂纳多和FBI探员的博弈一样。生成网络就是造
假者莱昂纳多,根据真实的文件与钞票,学习并制造出假文件和假钞,而判别
网络就是一直在检测假钞的FBI探员。生成网络不断学习提升造假能力,试图
欺骗判别网络,判别网络则在一次次欺骗中努力学习,提升自己的识别能力。
两个模型经过不断的交替训练和优化,能力都有极大的提升,最终我们的目标
就是训练出一个很好的生成网络,这个生成网络所生成的数据能够达到真假难
分的地步。如图 13-2 所示,这些都是由GAN 系统根据给定词汇生成的图片,
我们只需要告诉系统现在要生成一个关于“蚂蚁”和“火山”的图片,系统便
可以自动生成。

从该图可以看出,除了部分图片还不符合我们对蚂蚁或火山的常规印象以
外,许多图片已经达到了以假乱真的地步,如果不说这是由计算机生成的图
片,相信很多人会认为这就是一幅摄影作品。看到这里相信很多读者都会有疑
问,如此神奇的效果GAN到?是怎么实现的呢?
这里用一个例子让读者感受一?这个过程。假设我们现在想让计算机根据
明星的人脸照片,自动生成一幅看起来很真实的明星照片。
首先我们需要设置一个生成网络和判别网络,生成网络用于生成明星照
片,就像学生学习后需要“做作业”一样,判别网络用来判别这张照片是真实
的还是生成的,这就像另一个学生在帮他“批改作业”一样。生成模型随意接
受一个输入变量,让这个变量学习真实照片的分布特征从而生成近似的照片。
接?来将模型生成的照片和真实的明星照片一起输入判别网络中,让判别模型
去分析哪张照片才是“正版”,整个过程如图13-3所示。

在训练过程中,生成网络的目标是尽量生成?真的图片,欺骗判别网络。
而判别网络的目标是尽量把生成的图片和真实的图片区别开来。这样一来,两
个网络之间就构成了一个动态的“博弈过程”。可以想象,生成的图片一开始
质量肯定不高,与真实照片相比,判别模型一?子就能分辨出来。随着生成网
络的不断学习,慢慢地,图片质量逐步提升,这时候判别模型也越来越难分辨
真假图片。最后只有当生成的图片达到“以假乱真”的地步时,才说明我们的
模型训练成功。
在以上过程中,用于训练的样本集只需要有这张人脸样本的信息,不需要
其他任何信息,甚至不需要知道这张脸对应哪个人,这个人有什么长相特点
等,仅凭一张脸就能够自动生成让人类也无法分辨的照片,这真是以往无法想
象的事情。
生成网络和判别网络具体是怎么一回事呢?它们两者之间又是如何产生对
抗的呢?为什么对抗的结果会让两个网络变得越来越好?带着这些问题,我们
继续探索生成网络和判别网络的原理和实现方式。


13.1.2 生成网络是什么
相信很多读者第一次接触到GAN模型时,都会有这样的疑问:既然我们已
经有如此多的真实训练样本,那我们为何不“照葫芦画瓢”直接复制一个呢?
为什么还要让计算机自己去生成一个“假的”?
对于这个问题,笔者的个人理解是,GAN这种生成模式是从“人类赋予计
算机思考逻辑”到计算机真正“用自己的方式思考”的转变,也就是说赋予
了计算机以自己的方式去“理解”事物的能力 。对于人工智能,我们所追求
的一个很重要的特性就是让计算机能够像我们人类一样,理解周围复杂的世
界,包括识别和理解现实中的三维世界,如人类、动物和各种工具。这样才能
在对现实世界理解的基础上,进行推理和创造。因此,“能否自主创造”是人
工智能又一个核心衡量标准。
回想传统的机器学习算法,我们采取的方式都是让计算机学习我们人为理
解、人为赋予含?的特征,从这些特征中找到规律。此时计算机并非真正理解
了这些特征的表达,只是在做数据挖掘、发现数据规律的工作,距离真正
的“智能”还有一些差距。正是基于这样的前提,机器学习以及人工智能的研
究者们提出了概率生成模型,致力于用概率和统计的语言,描述周围的世界。
简单来说,概率生成模型的目的就是找出给定观测数据内部的统计规律,并且
能够基于得到的概率分布模型,产生全新的、与观测数据类似的数据,这是一
种计算机视角的生成方式。这也是为什么要让计算机学会“自主”生成的原
因。而GAN的生成网络正是使用概率生成模型的典型代表,力求让生成的人工
对象与真实对象之间达到惊人的相似度。
一个最基本的GAN生成网络,实际上是将一个随机变量,通过参数化的概
率生成模型,进行概率分布的逆变换采样,最后得到一个生成的概率分布,如
图 13-4 所示。

上面这段话是什么意思呢?首先我们要了解数据空间与概率分布的概念。
数据空间,顾名思?,指的就是数据所在的空间,假设我们采用的明星照片的
分辨率为128×128,则这张照片就可以等价于一个128×128×3的三阶张量,
此时我们说的数据空间就是指这个数据规模?所有可能的图像构成的集合,也
称为图像空间。也就是说这里面128×128个像素点可以打散了任意组合,每个
像素点的3种颜色也可以任意组合,这张明星照片就是这128×128个像素点的
一种特定组合。这个定?对后续内容的理解非常重要。在图像空间中,每一张
图片都是这个空间里的一个点,如图13-5所示。

并非恰好这128×128个像素组成的照片才是这张明星照片。照片中皮肤的
部分颜色浅一点,头发的部分颜色深一点,或者某两个像素稍微变换一?位
置,其实表现出来的还是这个明星。因此在这个图像空间中,其实有很多种组
合的数据点都符合我们的要求。这些数据点在空间中散落的地方存在一定规
律,空间中有些位置聚集的数据点比较多,有些位置聚集的比较少,或者没有
数据点,如图 13-6 所示。这种数据在空间中的分布情况称为数据分布。
从关于GAN生成网络的描述会发现,实际上生成网络的训练目的就是要使
随机像素点生成的概率分布和真实数据集中图片的像素数据分布尽量接近,
从而能够模拟真实的数据 。一开始输入至网络的变量是随机抽取的,生成网
络就像是一个可以实现“像素点重组”的函数,它把原来潜在空间中的随机点
变成图像空间中有意?的像素点,如图 13-7 所示。这就好比艺术家把一个个
原本简要抽象的艺术构思变成一张张具有复杂意向的画作。通过生成网络生成
的点称为生成点,通过生成网络得到的图像空间中的分布称为生成分布。

 实际上一幅图像的空间分布情况非常复杂,我们完全没有办法知道真实数
据的分布。而且简单的函数也很难将这些随机点恰到好处地转变为真实图像所
对应的位置上的点。所以在实际项目中通常要利用深度神经网络使生成?真的
图片成为可能。
通过GAN生成的模型并不能理解给定词语的“语?”,它们不能理解“蚂
蚁”“火山”等词语的意?,不能理解蚂蚁和火山有什么特征、有什么构造,
它只是由计算机的视角从像素点的概率分布上去学习一张图片的组成,例如一
幅火山图片,通常天空部分是蓝色的,山体部分主要是红色、灰色和黄色的,
那么这四种颜色在这张图片每个像素点上的分布并非是随机的,而是服从某种
分布规律的。这些图片并不是机器基于原有训练图片库的再创造,而是生成网
络所推断出的非常接近现实的结果。
生成网络的目的是生成尽可能?真的样本。那么怎么判断生成网络生成的
样本像不像一幅真的照片呢?解决方法就是送到判别网络中,所以在训练生成
网络的时候,需要联合判别网络一起训练才能达到训练的目的。

13.1.3 判别检验
判别网络的任务是判断一张图片究竟是来自现实中的还是由生成网络生成
的。在训练判别网络的过程中,通过不断给其输入两类不同的图片并为两类图
片标注不同的数值以提高它的辨别能力。训练判别模型的目的是要尽量提升判
别准确率,当这张图片被判别为来自真实的图片时,标注数值1,若判别这张
图片是生成出来的,则标注数值0。
当一个判别模型的能力已经非常强的时候,如果生成模型所生成的数据,
还是能够使它产生混淆,无法正确判断,我们就认为这个生成模型实际上已经
学到了真实数据的分布,达到了以假乱真的目的。
13.1.4 生成对抗的过程
GAN模型的基本框架如图13-8所示,该框架的主要目的是由判别器D辅助生
成器G产生出与真实数据分布一致的伪数据。

在整个过程中,首先持续在潜在空间生成随机点,输入生成器的随机点称
为随机噪声信号z,该噪声信号经过生成器G被映射到一个新的图像空间,得到
生成的数据G(z),也就是通过生成器将这些随机点组成生成图片。
接?来,将这些生成的图片输入判别器D中,由判别器D根据真实数据x与
生成数据 G(z)的数据分布情况输出一个概率值。表示 D对于输入是真实数据
还是生成数据的置信度,以此判断 G 产生的数据的性能好坏。生成器利用判
别器的反馈信息来调整网络的参数,使生成的图片获得更高的分数。经过一定
量的交替迭代训练后,最终当D不能区分真实数据x和生成数据G(z)时,我们就
认为生成器G达到了最优,也就是说生成了以假乱真的图片。
判别器为了能够区分两者,它的目标是使D(x)与D(G(z))尽量往相反的方
向跑,增加两者的差异性,比如使D(x)尽量大而同时使D(G(z))尽量小。而G的
目标是使自己产生的数据在D上的表现D(G(z))尽量与真实数据的表现D(x)一
致,让D不能区分生成数据与真实数据。因此,这两个模型的优化过程是一个
相互竞争、相互对抗的过程,两者的性能在迭代过程中不断提高。经过一定量
的训练之后,生成网络可以输出更接近真实图片的图片。
我们用一个简单的例子来说明生成对抗的过程。如图 13-9 所示,图中较
粗的虚线P(x)是真实图片的数据分布,实线G(z)是通过生成器产生的图片的数
据分布。较细的虚线D(x)代表判别器的输出分数。

从图(a)可以看出,一开始判别器能够清楚地分辨哪些点是生成器生成
的,其对应的输出得分为0,哪些是来自真实图片的,对应输出分数为1。随着
训练次数增多,生成器学习能力提升。生成图片的数据分布逐渐往真实图片的
数据分布上靠近,如图(b)(c)所示,这个时候判别网络虽然能够分清生成
的图片,但是判别的概率相较之前已经有所上升。直到运行到图(d),这时
真实图片和生成图片的数据分布已经完全重合了。判别器的输出结果变成了
0.5,这意味着判别器完全不能判断区间内任何一个点究竟是生成器生成的还
是来自真实图片的。对于生成器来说,它所生成的图片已经能通过判别器的检
验了,所以没有继续更新模型的必要,即整个生成对抗网络达到了一个稳定状
态。
?面我们展示一个真实的生成明星图片的例子。如图13-10所示,当模型
迭代到40000次的时候,只能看到一张人脸大致的轮廓,这个时候还不能称之
为脸;当模型迭代到60000次的时候,能看到较为清?的五官,只是眼睛、嘴
唇还有缺陷;当模型迭代到140000次的时候,基本上已经获得了一张五官正
常、轮廓清?的人脸;后续迭代得到的结果没有太大的差异,只是在原来的基
础上进一步完善脸部细节。

人工智能知识全面讲解:初识生成对抗网络相关推荐

  1. 人工智能知识全面讲解:生成对抗网络的应用

    13.2.1 GAN的特点 GAN从2015年提出至今,短短4年的时间已经发展成为人工智能学界一个热 门的研究方向,吸引了大批研究人员来研究 GAN.除了学术界的理论研究以 外,许多科技公司已经付诸行 ...

  2. [人工智能-深度学习-59]:生成对抗网络GAN - 基本原理(图解、详解、通俗易懂)

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

  3. [人工智能-深度学习-63]:生成对抗网络GAN - 图片创作:普通GAN, pix2pix, CycleGAN和pix2pixHD的演变过程

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

  4. [人工智能-深度学习-61]:生成对抗网络GAN - 图像融合的基本原理与案例

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

  5. 【深度学习实战】从零开始深度学习(五):生成对抗网络——深度学习中的非监督学习问题

    参考资料: <PyTorch深度学习>(人民邮电出版社)第7章 生成网络 PyTorch官方文档 廖星宇著<深度学习入门之Pytorch>第6章 生成对抗网络 其他参考的网络资 ...

  6. [Python人工智能] 二十九.什么是生成对抗网络GAN?基础原理和代码普及(1)

    从本专栏开始,作者正式研究Python深度学习.神经网络及人工智能相关知识.前一篇文章分享了Keras实现经典的深度学习文本分类算法,包括LSTM.BiLSTM.BiLSTM+Attention和CN ...

  7. 使用PyTorch构建GAN生成对抗网络源码(详细步骤讲解+注释版)01 手写字体识别

    文章目录 1 生成对抗网络基本概念 2 生成对抗网络建模 2.1 建立MnistDataset类 2.2 建立鉴别器 2.3 测试鉴别器 2.4 Mnist生成器制作 3 模型的训练 4 模型表现的判 ...

  8. 使用PyTorch构建GAN生成对抗网络源码(详细步骤讲解+注释版)02 人脸识别 上

    文章目录 1 数据集描述 2 GPU设置 3 设置Dataset类 4 设置辨别器类 5 辅助函数与辅助类 1 数据集描述 此项目使用的是著名的celebA(CelebFaces Attribute) ...

  9. 从生成对抗网络到更自动化的人工智能

    来源:中国计算机协会 作者:黄鹤   王长虎 概要:"What I cannot create, I do not understand." 这是著名物理学家费曼的一句名言.把这句 ...

最新文章

  1. debian10 简单的bash脚本监控apache运行状态
  2. 中国科协(深圳)海外人才离岸创新创业基地源创力中心开业,主打国际创业服务...
  3. 构造函数中,成员变量一定要通过初始化列表来初始化的几种情况(转载)
  4. 【完结】优秀的深度学习从业者都有哪些优秀的习惯
  5. SSM项目搭建之配置文件
  6. 与JSP的初次邂逅……
  7. mysql多源复制 知乎_MySQL多主一从(多源复制)同步配置
  8. 《盘点那些秀你一脸的秒天秒地算法》(1)
  9. 漫谈Servlet(一)
  10. 我的世界服务器显示outofmemory,游戏中out of memory解决办法分享
  11. Oracle系列之--Profile
  12. quartz 参数说明
  13. Qt运行提示QGtkStyle was unable to detect the current GTK+ theme.解决方法
  14. 一 HTML概述,网站首页案例及其知识点
  15. Realtek千兆PHYRTL8211F简介及引脚图外接图
  16. android 二级折叠列表,Android折叠列表 ExpandableList
  17. Leetcode 503:下一个更大元素 II(超详细的解法!!!)
  18. 服务器怎么修改u盘启动,服务器主机怎么设置u盘启动
  19. 山东科技大学OJ题库 1014-自动拨出电话的程序
  20. 《手把手教你》系列基础篇之(一)-java+ selenium自动化测试-环境搭建(上)(详细教程)

热门文章

  1. 轻量级pythonide_《轻》字意思读音、组词解释及笔画数 - 新华字典 - 911查询
  2. 推出Linux操作系统Inspur KOS,浪潮信息意欲何为?
  3. 15-责任链模式Quarkus实现
  4. APP被苹果 App Store拒之门外的79个原因!
  5. 【源代码】Python制作的赛车小游戏,逆行飙车
  6. 【渝粤题库】陕西师范大学164103 网络贸易 作业 (高起专)
  7. 计算6+德州扑克各个牌型的概率
  8. 数字孪生医院的智能化运营平台建设内容
  9. Vue中定制公共组件之modal
  10. linux磁盘文件格式转换,使用Fstransform在Linux下无损转换文件系统格式