什么是GAN

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

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

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

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

GAN是如何工作的

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

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

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

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

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

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

实战书是哪一本?

GAN实战

本书旨在引导对生成对抗网络(GAN)有兴趣的人从头开始学习。本书从最简单的例子开始,介绍一些最具创新性的GAN的实现和技术细节,进而对这些研究进展做出直观的解释,并完整地呈现所涉及的一切内容(不包括最基本的数学和原理),让最前沿的研究变得触手可及。

本书的最终目标是提供必要的知识和工具,让你不仅能全面了解对GAN迄今为止取得的成就,还能有能力自由选择开发新的应用。生成对抗这一模式充满潜力,等着像你这样怀有进取心、想在学术研究和实际应用中做出点成就的人去挖掘!欢迎你加入我们的GAN之旅。

适合人群

本书适合已经有一些机器学习和神经网络相关经验的读者阅读。下面列出了理想情况下读者应该提前知悉的内容。尽管本书尽力让内容显得通俗易懂,但你至少应该对下面70%的知识有信心。

  • 能够运行书中的Python程序,不需要精通Python,但至少应该有两年的Python工作经验(最好有全职的数据科学家或软件工程师工作背景)。
  • 了解面向对象的编程、如何使用对象以及如何找出它们的属性和方法;理解典型的Python对象(如Pandas DataFrame)和非典型对象(如Keras层)。
  • 了解机器学习理论的基础知识,如训练集和测试集的分割、过拟合、权重和超参数,以及监督学习、无监督学习和强化学习。熟悉准确率和均方误差等指标。
  • 了解基本的统计学和微积分的知识,如概率、密度函数、概率分布、微分和简单的优化。
  • 了解基本的线性代数知识,如矩阵、高维空间,还应该了解主成分分析的概念。
  • 了解深度学习的基础知识,如前馈网络、权重和偏置、激活函数、正则化、随机梯度下降和反向传播。
  • 需要基本熟悉或自学基于Python 的机器学习库——Keras。

以上要求不是危言耸听,而是为了确保你能充分利用本书所讲的内容。当然,不管怎样,你都可以学习,但是之前了解的内容越少,需要你在线检索学习的内容就越多。如果你感觉上面的要求不足为惧,那就开始学习吧!

《GAN实战》代码说明

本书有许多包含源代码的示例,放在有编号的列表中或者内嵌在普通文本中。这两种情况下源代码的格式都是以等宽字体样式显示的。有时也用加粗样式突出显示代码,表示与先前所示代码不同(有所更改),例如向现有代码行中添加新功能。

本书对大部分源代码做了格式化,以适应本书页面的排版。此外,若正文中有对代码的解释说明,则通常会删除源代码中的注释。为了突出重要概念,清单都给出了注释。本书示例的代码可以从异步社区本书详情页的“配套资源”处下载。

本书使用数据科学教育的标准用具——Jupyter Notebook,所以你应先掌握这个工具的用法。这对于中级Python学习者来说应该不难。访问GPU或者使其所有功能正常运行有时候会遇到困难,特别是在Windows系统,所以有些章节提供了谷歌Colaboratory(缩写为Colab)Notebook。这是谷歌的免费平台,并预先封装了必要的数据科学工具以及有限时长内免费的GPU。你可以直接在浏览器中运行这些代码,也可以将其他章节的代码上传到Colab——它们是兼容的。

在线资源

GAN是一个拥有良好(尽管是零散的)资源的活跃领域。有学术倾向的人可以在arXiv官方网站找到相关的最新论文。arXiv是康奈尔大学拥有和运营的学术论文电子预印本在线存储库。

本书作者都是 Medium 写作平台的活跃撰稿人(特别是以技术为核心的出版物 Towards Data ScienceHacker Noon),你可以在那里找到他们写的最新内容。

本书内容结构

本书力求在理论和实践之间取得平衡。全书分为如下三部分。

第一部分生成对抗网络(GAN)与生成模型导论 这部分介绍生成学习和GAN的基本概念,并实现几种GAN最典型的变体。

  • 第1章介绍了生成对抗网络(GAN),并在高层面上对其工作原理进行阐述。通过学习本章内容,你会了解到GAN是由两个独立的神经网络(生成器和鉴别器)组成的——它们通过动态竞争进行训练。掌握本章的知识可为理解本书其余部分的内容奠定基础。
  • 第2章讨论了自编码器,它在许多方面被视为GAN的前身。鉴于生成学习的新颖性,增加这一章内容有助于将GAN置于更广阔的背景下。本章给出了第一个代码教程,用于构建一个自编码器来生成手写数字——我们在后面几章的GAN教程中也会探索相同的任务。如果你已经熟悉自编码器的相关内容或想直接研究GAN,可以跳过这一章。
  • 第3章深入研究了GAN和对抗性学习背后的理论。本章解释了GAN和传统神经网络的主要区别,即讨论了它们的代价函数和训练过程上的差异。在本章结尾的代码教程中,我们将应用所学知识在Keras中实现GAN,并训练它生成手写数字。
  • 第4章介绍了卷积神经网络和批归一化。本章实现了一种先进的GAN结构,它使用卷积网络作为其生成器和鉴别器,并利用批归一化处理来稳定训练过程。

第二部分 GAN的前沿主题

在第一部分的基础上,这部分深入研究了GAN的基础理论,并实现了一系列高级的GAN架构。

  • 第5章讨论了许多训练GAN的理论和实践障碍以及克服这些障碍的方法。本章根据相关的学术论文和演讲全面概述了训练GAN的首选做法,还涵盖了用于评估GAN性能的选项以及需要担心这个问题的原因。
  • 第6章探索了渐进式增长生成对抗网络(PGGAN),一种生成器和鉴别器的前沿训练方法。PGGAN通过在训练过程中添加新的层获得了非常好的图像质量和分辨率。本章给出了真实的代码示例,并使用TensorFlow Hub(TFHub)从理论上和实践上来解释它的作用原理。
  • 第7章继续探索基于核心GAN模型的创新。你会了解到通过半监督学习仅使用一小部分带标签的训练样本就可提高分类准确率的巨大实际意义。使用本章实现了半监督生成对抗网络(SGAN),并解释了它是如何使用标签将鉴别器转换成一个健壮的多类分类器的。
  • 第8章展示了另一种在训练中使用标签的GAN架构。通过在训练生成器和鉴别器时使用标签或者其他条件信息,条件生成对抗网络(CGAN)解决了生成器的主要缺点之一——无法明确指定要合成的样本。本章最后实现了一个CGAN,用于直接查看目标数据的生成。
  • 第 9 章讨论了最有趣的 GAN 架构之一:循环一致性生成对抗网络(CycleGAN)。此技术可以将一幅图像转换成另一幅图像,例如将马的图像转换成斑马的图像。本章介绍了CycleGAN的架构并解释其主要组成和创新点,并在教程中用CycleGAN把苹果转换成了橙子(也可以将橙子转换成苹果)。

第三部分 何去何从

这一部分讨论了如何应用GAN和对抗学习以及在何处应用它们。

  • 第10章介绍了对抗样本。对抗样本是一种故意欺骗机器学习模型使其犯错的技术。本章从理论和实际层面讨论了它们的重要性,并探讨了它们和GAN的关系。
  • 第11章介绍了GAN的实际应用,探索了如何将前几章介绍的技术用于医学和时尚领域的实际用例:在医学领域,如何使用GAN来扩充小数据集以提高分类准确率;在时尚领域,GAN是如何推动个性化定制发展的。
  • 第12章总结了迄今为止GAN的主要收获,讨论了GAN的相关道德伦理考量,并介绍了一些新兴的GAN技术。

为什么要学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可实现功能的一些皮毛,但是,我们希望这本书能够为你提供必要的理论知识和实践技能,使你能够继续从各个方面探索自己最感兴趣的领域。

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

GAN(生成对抗网络)有一本实战书出版了,了解下?相关推荐

  1. 深度学习 GAN生成对抗网络-1010格式数据生成简单案例

    一.前言 本文不花费大量的篇幅来推导数学公式,而是使用一个非常简单的案例来帮助我们了解GAN生成对抗网络. 二.GAN概念 生成对抗网络(Generative Adversarial Networks ...

  2. GAN (生成对抗网络) 手写数字图片生成

    GAN (生成对抗网络) 手写数字图片生成 文章目录 GAN (生成对抗网络) 手写数字图片生成 Discriminator Network Generator Network 简单版本的生成对抗网络 ...

  3. 54_pytorch GAN(生成对抗网络)、Gan代码示例、WGAN代码示例

    1.54.GAN(生成对抗网络) 1.54.1.什么是GAN 2014 年,Ian Goodfellow 和他在蒙特利尔大学的同事发表了一篇震撼学界的论文.没错,我说的就是<Generative ...

  4. 深度学习(九) GAN 生成对抗网络 理论部分

    GAN 生成对抗网络 理论部分 前言 一.Pixel RNN 1.图片的生成模型 2.Pixel RNN 3.Pixel CNN 二.VAE(Variational Autoencoder) 1.VA ...

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

    文章目录 1 测试鉴别器 2 建立生成器 3 测试生成器 4 训练生成器 5 使用生成器 6 内存查看 上一节,我们已经建立好了模型所必需的鉴别器类与Dataset类. 使用PyTorch构建GAN生 ...

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

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

  7. GAN -- 生成对抗网络

    GAN -- 生成对抗网络 生成对抗网络(英语:Generative Adversarial Network,简称GAN)是非监督式学习的一种方法,通过让两个神经网络相互博弈的方式进行学习.该方法由伊 ...

  8. 【轩说AI】生成模型(2)—— GAN生成对抗网络 + WGAN + Conditional GAN + Cycle GAN

    文章目录 GAN生成对抗网络(Generative Adversarial Network) 神经网络的本质就是一个函数,一个用于拟合的函数 生成模型面临的前所未有的问题 GAN解决这一问题的思想 O ...

  9. GAN生成对抗网络综述

    前阵子学习GAN的过程发现现在的GAN综述文章大都是2016年Ian Goodfellow或者自动化所王飞跃老师那篇(最新发现一篇更新paper,也是王飞跃老师的:http://blog.scienc ...

  10. Pytorch:GAN生成对抗网络实现二次元人脸的生成

    github:https://github.com/SPECTRELWF/pytorch-GAN-study 网络结构 最近在疯狂补深度学习一些基本架构的基础,看了一下大佬的GAN的原始论文,说实话一 ...

最新文章

  1. 分布式服务框架 Zookeeper -- 管理分布式环境中的数据
  2. UI设计培训分享:平面广告设计中的文案表达技巧
  3. c4android资源,OpenC4Android开发环境搭.doc
  4. led灯串怎么摆造型_一元包邮的家用LED日光灯泡,究竟是怎么做到的?
  5. lambda表达式可以用来声明_Lambda 的骚操作,你都get到了没
  6. Jerry的SAP Kyma和Kubernetes讲座的幻灯片分享
  7. 差距50倍!为什么Web API第一次执行这么慢?
  8. Linux C 算法——排序
  9. LeetCode 313. 超级丑数(动态规划)
  10. rfid技术及应用答案王佳斌_RFID技术智能仓储管理系统应用优势
  11. 以下模块打印出超级块中某些字段的内容
  12. 查看SQL执行计划的方法及优劣
  13. 【UML】部署图Deployment diagram(实现图)(转)
  14. 微信公众平台开发(四)——微信支付
  15. s查看oracle空间分配,Oracle查看表空间使用率(包括临时表空间)
  16. 【 Codeforces Round #395 (Div. 2) E】Timofey and remoduling【数学思维题 —— 等差/等比数列】
  17. 面向视频领域的边缘计算白皮书
  18. BAT 批处理的注释语句
  19. Python实现熵权法(正负指标)并计算综合评分—————附增完整代码和测试用例
  20. 用 DiskGenius 和 HDD Regenerator 修复硬盘逻辑坏道和隐藏物理坏道

热门文章

  1. 大众点评 java_大众点评评分爬取-图文识别ORC
  2. 数据统计分析(SPSS)【6】
  3. chrome谷歌浏览器script标签引入CLODOP CLodopfuncs.js 跨域报错
  4. 常用z反变换公式表_常用excel快捷键
  5. 工具:Spy++ —— 窗口、消息查看分析利器
  6. 如何用 Excel 制作二维码
  7. Linux下的tree的简单使用
  8. 气象数据分析之EOF分析以及python的实现
  9. matlab不用hist画直方图,matlab可以画直方图
  10. PLC通过智能网关,实现HTTP协议的POST请求,与服务端JSON格式双向通讯