一篇文章读懂“GAN”——生成式对抗网络

机器学习是一个不断发展的领域,因此对于很多人来说,时刻跟踪这一领域的最新进展是很难的。GAN(生成式对抗网络)是最近引起广泛关注的新兴领域之一,为了让大家能够更好地跟上技术发展的脚步,我们安排了一个简短的GAN速成文章:

  ·它们适用于哪些生成模型

  ·过去的时间里它们发生了什么样的变化

  ·它们可应用于哪里

  ·GAN带来的挑战

  ·这个新兴的技术领域未来如何

  下面我们就开始吧。

生成模型

使用生成模型,目的是对给定数据集的分布进行建模。对于我们今天讨论的生成模型,该数据集通常是一组图像,但也可能是其他类型的数据,例如音频样本或时间序列数据。

获取此分布模型的方法有两种:隐式或显式。

那么两者之间有什么区别?

有了显式的生成模型,您就可以掌握概率密度。我们可以直接对该分布中的所有变量建模。而对于隐式生成模型,您必须进行抽样以了解我们的模型分布。

当我们评估生成模型时,一种实现方法是使用图像。因此,我们可以从模型分布中取样,然后目视检查样本,以查看它们与原始数据的匹配程度。样本图像离训练图像越近,说明我们的模型越好。

生成模型的类型

在深度学习中,当我们谈论生成模型时,通常是指下列四种模型之一:

  ·自回归(Autoregressive)

  ·可逆的(Reversible)

  ·变分自动编码器(Variational Autoencoders)

  ·生成式对抗网络(Generative Adversarial Networks)

自回归模型:使用自回归模型,您可以根据之前生成的像素来生成每个像素,从而生成图像。也就是说,当使用自回归模型生成图像时,会逐像素生成图像。这是一个自回归模型的例子。

可逆模型:可逆模型的概念是采用GAN,但要使生成器过程可逆。这意味着我们可以通过可逆模型(从噪声到图像以及从图像到噪声)同时传递图像和噪声。这是可逆模型的一个例子。

变分自动编码器:自动编码器由一对相连的网络组成:编码器和解码器。变分自动编码器的特点是具有连续的潜在空间。这样可以轻松进行采样和插入,这在使用VAE探索特定方向上已有数据的变化时特别有用。这是一个变体自动编码器的例子。

生成式对抗网络

简要介绍完其他生成模型之后,现在我们开始讲解GAN或生成对抗网络。

(图像来自于Brock 2018

首先,让我们查看一些由GAN生成的图像,以了解过去五年中已取得的进展。上面的这些图像是无条件生成的ImageNet样本,该样本来自名为BigGAN的模型,该模型由Andrew Brock在2019年国际学习代表大会(ICLR)上提出。

这些图像样本之所以引人注目,主要有两个原因:清晰度和类别的多样性。一个动物、一个蘑菇、食物、一道风景,这些都是一起生成的,而且分辨率都很高。

但并不总是这样。

(图片来自Goodfellow et al 2014

这是最初的GAN论文中的图片,作者为Ian Goodfellow等人。2014年该论文发表时,一跃成为最先进的图像生成技术。但是与BigGAN的样本相比,可以说是天壤之别。从上图所示的这些样本中可以看到,图像分辨率很低,并且容貌尚未完全解析。

(图像案例来自 Karras et al. 2019)

现在让我们快进大概4年,到Nvidia的StyleGAN论文发布,这些生成的人物图像看起来已经非常真实。从2014年的模糊图像开始,GAN所生成的面孔在短短4年内就与真人几乎无法区分。

GAN概述

像上面我们所介绍的其他模型一样,GAN是生成模型的一种形式。但是,与我们讨论的其他模型不同,GAN是隐式生成模型。这意味着如果我们想查看模型的分布情况,就必须对其进行抽样。

那么GAN如何工作?

GAN有两个网络:生成器(生成组件)和鉴别器(对抗组件)。

鉴别器经过训练可以识别生成的示例,并将其与实际示例区分开。我们通过采用一组真实的示例和一组生成的示例,并让鉴别器尝试对真实示例进行分类,以此来训练辨别器。通过训练,我们希望鉴别器能够识别样本是来自于真实的分布还是生成的分布。

与鉴别器相对应的是生成器,它可以吸收随机噪声,并学会将随机噪声转换为看起来逼真的样本,逼真到足以欺骗鉴别器。

随着时间的流逝,这种情况会发生,因为生成器在生成看起来像真实示例的样本方面变得越来越好,而鉴别器甚至会随机猜测样本是真实的还是生成的。我们可以将其想象成一个两人的极大极小博弈,而鉴别器进行随机猜测的这个点就是它的纳什均衡。

训练GAN生成器

生成器将如何学习将随机噪声转换为可以通过鉴别器的图像?

生成器获取样本(通常来自高斯分布),并通过神经网络对其进行转换以创建样本。同样,我们的目标是让这个示例看起来尽可能真实。

最初,这些转换是完全没有意义的。把随机噪声通过发生器,另一边得到的结果就会很像随机噪声。

(说明噪声向图像的转换过程。噪音来自Adobe Stock,面容来自Karras et al. 2018)

现在,当您生成一个灰度点的图像并将其传递给鉴别器时,大多数情况下鉴别器会将其识别为一个并不真实的例子。使用反向传播,您将获得一个通过生成器发送的信号,该信号告诉生成器中的各层,根据刚发送给鉴别器的样本的不良性能来更新其权重。

经过这些调整后,更多的随机噪声会通过生成器创建一个新图像发送给鉴别器。这次,鉴别器可能会被我们的样本所欺骗了,因为——这主要是由于训练初期的随机性——图像中的某些特征类似于真实数据集。然后,生成器得到一个信号,表明最后一个样本表现良好,并再次相应地更新其权重。

通过许多次迭代并生成大量图像,生成器权重将根据它们在欺骗鉴别器方面的表现而继续更新。如果训练顺利,生成器可以获取随机噪声并将其转换为逼真的图像。

生成器和鉴别器都可以使用此过程完全不受监督地进行训练,并且由于损失函数产生的动态特性,可以创建大量样本。

GAN中的损失函数

在GAN中,生成器和鉴别器都有各自的损失函数。尽管这两种不同的损失函数允许我们通过GAN进行无监督学习,但它们也给训练带来了一些挑战。

鉴别器的代价是希望将真实样本正确标识为真实样本,并且希望将生成的样本正确标识为已生成(等式1)。

(等式1)

您可以在此等式的左侧看到,第一项表示将真实样本标识为真实,而右边项表示将生成的样本标识为生成。

有趣的是,生成器的成本只是该函数的负数(等式2)。

(等式2)

您可以在这里看到一个常数,其中方程式是指鉴别器将真实示例识别为真实示例,因为生成器与过程中的这一部分没有直接关系。但是人们发现,如果像上面的方程式那样使用生成器的损失函数,损失就会饱和。因此,我们要做的就是稍微改变一下公式(公式3)。

(等式3)

使用此版本的损失函数,如果生成器创建可被鉴别器很轻松地识别为生成,那么生成器将获得非常强的信号。通过使用第二个等式,它不再完全是一个由两人组成的极大极小博弈,而是使训练按照我们希望的那样进行,而且训练比以前更加稳定。

GAN的应用

现在我们已经掌握了GAN训练的知识,让我们深入讲解一些关于应用程序的知识。

GANs最早的应用之一来自Goodfellow的原始论文,该论文显示了MNIST数字1和5之间的插值。这是一种表示学习,因为通过训练生成器和鉴别器,我们可以学习原始数据集的潜在表示。

(图片来自Karras et al.2019

你可以在上面的StyleGAN论文和其他GAN论文的图片中看到同样的应用。

在这个特定示例中,我们看到的是采用源A的样式并将其应用于源B的结构。在左上角,我们将眼镜应用于不同的图像,或者让左边的人们看起来像小孩子。

(图像示例来自Zhu et al. 2017Isola et al. 2016

GAN的另一个应用是图像翻译——在某些情况下,它是图像风格转换的一种更通用的方法。

在左边(Zhu),我们看到CycleGAN正在进行一些图像增强,而在右边,Pix2Pix论文(Isola)中,我们正在将图像从一种风格转换为另一种风格。

所以我们有左侧的街景视图的分割图像,以及右侧的实景图像。然后是卫星图像和类似的地图的图像。

使用Pix2Pix模型训练这种风格的转换,您可以实现从卫星图到地图,以及从地图到卫星图的变换。因此,如果您要对一组图像进行样式转换,这些模型是最有效的。

GAN的挑战

但是,GAN的所有进步并非没有挑战。

从理论上讲,GAN就像这个有序的两人极大极小博弈一样,逐渐达到其纳什均衡。我们让噪声通过生成器,生成器学会欺骗鉴别器,然后从理论上讲,鉴别器不再善于检测差异并开始随机猜测。

作为该博弈的运作方式,GAN面临三个主要挑战:

  ·模式崩溃

  ·过分讲究的训练

  ·GAN的评估

模式崩溃

(模式崩溃的图像,来自Goodfellow 2016

对于模式崩溃,模型只学习多模式数据集的一个或几个模式。我们训练GAN的数据通常有非常多的模式,这使得模式崩溃存在一定的问题。

过分讲究的训练

然后是训练的问题。之前,我们提到了生成器和鉴别器的成本函数。由于此模型中有两个不同的成本函数,因此在平衡这两者方面您可能遇到更多的挑战。

评估GAN

在评估GAN时,有几个问题需要考虑。

首先,来自生成器的好样本并不一定意味着您已经很好地了解了分布。

其次,估算可能性是很难的,也就很难衡量对分布学习的好坏。这就引出了第三个问题:很难知道从分布中到底学习到了多少。

最后,评估GAN是一个活跃的研究领域,目前并没有通用的评估方法。许多论文提出了新的评估指标,但在后来的出版物中并没有受到关注。

GAN的未来

在本篇概述中,我们主要介绍了GAN在生成图像方面的应用,但这并不是GAN的唯一应用——无论是今天已经看到的,还是未来即将出现的。

GAN也正在飞跃发展,例如为语音模拟生成音频,开发新药品,为建筑物设计平面图,为结构生成组件,创建图形设计布局,生成表格数据等等。

随着这类机器学习模型在不同行业和应用中的不断发展,人们对GAN的概念越来越满意,他们将继续寻找更多的领域来利用这一技术。因此,从2014年到今天、到未来,在我们用尽这种对抗网络所带来的所有机遇之前,GAN仍有很长的路要走。

原文作者:Andrew Martin

Image placeholder
未设置
  21人点赞

没有讨论,发表一下自己的看法吧

推荐文章
一篇文章帮你了解 PHP 7.3 更新

PHP目前依旧是其它脚本语言强劲的竞争对手,这主要归功于其核心维护团队的快速更新。 自从PHP7.0发布以来,社区见证了许多新特性的诞生,极大地改进了开发者在项目中应用PHP的方式。提高PHP应用的性

一篇文章看懂,存储虚拟化在不同用例中的实践与优势

存储虚拟化是一种对物理存储资源进行抽象的技术,使其看起来像是一个集中的资源。虚拟化掩盖了管理内存、网络、服务器和存储中资源的复杂性。存储虚拟化运行在多个存储设备上,使它们看起来就像一个单一的存储池。这

探秘ASC19:首次设置的“超级团队对抗赛”究竟是什么?

4月21日,2019ASC世界大学生超级计算机竞赛(ASC19)总决赛在大连理工大学正式拉开帷幕。根据赛程,在4月23日正式竞赛之前,所有参赛队伍的主要任务是完成竞赛系统的搭建与调试,力求在3000瓦

冬虫夏草之技术路线图之二【“术”——业务篇】

作为一名28年证券机构从业经历的老兵,杨松一直在观察和研究IT技术对金融机构的业务重构,以及证券业务变革相关的内容。今天,让我们来看看这位金融业内人士如何利用他28年的行业积累,通过“技”“术”“路”

冬虫夏草之技术路线图之三【“路”——经营篇】

作为一名28年证券机构从业经历的老兵,杨松一直在观察和研究IT技术对金融机构的业务重构,以及证券业务变革相关的内容。今天,让我们来看看这位金融业内人士如何利用他28年的行业积累,通过“技”“术”“路”

冬虫夏草之技术路线图之四【“线”——组织篇】

作为一名28年证券机构从业经历的老兵,杨松一直在观察和研究IT技术对金融机构的业务重构,以及证券业务变革相关的内容。今天,让我们来看看这位金融业内人士如何利用他28年的行业积累,通过“技”“术”“路”

冬虫夏草之技术路线图之五【“图”——管理篇】

作为一名28年证券机构从业经历的老兵,杨松一直在观察和研究IT技术对金融机构的业务重构,以及证券业务变革相关的内容。今天,让我们来看看这位金融业内人士如何利用他28年的行业积累,通过“技”“术”“路”

冬虫夏草之技术路线图之一【“技”——技术篇】

作为一名28年证券机构从业经历的老兵,杨松一直在观察和研究IT技术对金融机构的业务重构,以及证券业务变革相关的内容。今天,让我们来看看这位金融业内人士如何利用他28年的行业积累,通过“技”“术”“路”

一张图读懂《2020全球网络趋势报告》

日前,思科发布了《2020全球网络趋势报告》,从网络技术、运营、人才三大维度,了解网络如何与时俱进,满足关键业务需求。那么这份94页的报告,究竟有哪些亮点?戳下图,带你看明白!

如果有人再问你怎么实现分布式延时消息,这篇文章丢给他

1.背景上篇文章介绍了RocketMQ整体架构和原理有兴趣的可以阅读一下,在这篇文章中的延时消息部分,我写道开源版的RocketMQ只提供了18个层级的消息队列延时,这个功能在开源版中显得特别鸡肋,但

编程书说的 “Go 程序员应该让聚合类型的零值也具有意义” 是在讲什么

在《Go语言编程》这本书和很多其他Go编程教程中很多都提到过“Go程序员应该让一些聚合类型的零值也具有意义”的概念,我们这篇文章主要说一下有意义的零值这个话题。 在Go中声明变量时如果初始化表达式被省

Python教程-一文读懂运算和运算符

Python支持多种运算符,下表按照优先级从高到低的顺序列出了所有的运算符,运算符的优先级指的是多个运算符同时出现时,先做什么运算然后再做什么运算。 [][:] 下标,切片 ** 指数 ~+- 按

一文读懂数据库70年发展史

作者:常垒资本 冯斯基顾问:云和恩墨、戴工玖、周家晶零1949-19791956年,周恩来总理亲自领导了“科学技术发展十二年规划”,标志着我国计算机事业的开始。而那时,几乎没有人知道计算技术是怎么回事

Python面试|一文让你读懂if __name__==’__main__’的含义

程序入口对于很多编程语言来说,程序都必须要有一个入口,比如C,C++,以及完全面向对象的编程语言Java,C#等。如果你接触过这些语言,对于程序入口这个概念应该很好理解,C和C++都需要有一个main

一文读懂HBase多租户

本文从三个方面介绍了HBase的多租户实现。上篇文章回顾:HDFS短路读详解多租户(multi-tenancytechnology),参考维基百科定义,它是在探讨与实现如何于多用户的环境下共享相同的系

一图读懂POLARDB BOX的云原生力量

9月26日,2019杭州云栖大会上,阿里云宣布正式推出高性能数据库一体机——POLARDBBOX,用户部署在自有数据中心即可享受云数据库的便捷体验,同时还为Oracle等传统数据库用户提供一键迁移功能

一文读懂原码、反码与补码

一、二进制二进制和十进制一样,也是一种进位计数制,但是它的基数是2。二进制表达式中0和1的位置不同,它所代表的数值也不同。例如,二进制数00001010表示十进制数10。一个二进制数具有两个基本特点:

从网络接入层到 Service Mesh,蚂蚁金服网络代理的演进之路

本文作者:肖涵(涵畅)上篇文章《 诗和远方:蚂蚁金服ServiceMesh深度实践|QCon实录》中, 介绍了ServiceMesh在蚂蚁金服的落地情况和即将来临的双十一大考,帮助大家了解Servic

Nginx 配置常用参数,看这一篇就够了

最近在全面学习Nginx,当作笔记了,如有错误,欢迎指出或深入交流。 主模块 #配置用户或者组,默认为nobodynobody。 #userwwwwww; #Nginx开启的worker进程数,

秒读 Excel 百万数据(第一篇)

读取前的准备工作 1.文件类型属于.xls、.xlsx,需要用办公软件WPS或Office将文件另存为.csv类型。不能直接重命名修改文件类型,直接重命名修改文件类型会导致数据格式不兼容,Window

Nginx 配置常用参数,看这一篇就够了

主模块 #配置用户或者组,默认为nobodynobody。 #userwwwwww; #Nginx开启的worker进程数,建议为CPU的核数 #worker_processes2; #指定ngi

侵入式服务治理方案,读这一篇就够

尽管在程序执行效率上,Java不如C、C++,在开发效率、易用性以及学习难度上,Java又不如Ruby、Python、Go,但Java无疑是当今后端系统开发中使用最为广泛的语言。Java所累积的大量生

Spring入门这一篇就够了

前言前面已经学习了Struts2和Hibernate框架了。接下来学习的是Spring框架…本博文主要是引入Spring框架…Spring介绍Spring诞生:创建Spring的目的就是用来替代更加重

了解 MongoDB 看这一篇就够了

作者:美码师一、简介MongoDB是一款流行的开源文档型数据库,从它的命名来看,确实是有一定野心的。MongoDB的原名一开始来自于英文单词”Humongous”,中文含义是指”庞大”,即命名者的意图

Java 与 Kotlin 系列文章 (一):性能问题

随着对Kotlin越来越深入的了解,我发现市面上关于Kotlin方面,比较深入的资料几乎是0,所以我决定,将Kotlin各个方面的研究作为我的研究生课题,而性能问题往往是程序员最佳关注的内容,所以第