生成对抗网络介绍

生成对抗网络(GANs)是一种由两个相互竞争的网络组成的深度神经网络架构。

一、生成模型和判别模型

为了理解生成对抗网络,首先应该了解生成算法的是如何工作的,为此,现将生成算法和判别算法进行对比以便更好的理解。

1、判别算法

判别算法试图对输入数据进行分类:即给定一个数据实例的特征,来预测该数据所属的标注或类别。
介绍判别算法的一个典型例子是垃圾邮件分类,即给定一封电子邮件的所有单词预测该邮件是否为垃圾邮件。邮件的类型是标注,从邮件中收集到的单词则构成了输入数据的特征。用数学表达式表述这一问题,y表示标注,x表示特征,公式p(y|x)表示”给定x,y的概率”,则该事件可描述为”给定邮件中所包含的单词,邮件为垃圾邮件的概率”。因此,判别算法将特征映射到标注,只关注二者之间的相关性。

2、生成算法

一种理解生成算法的方式是,生成算法做和判别算法相反的事情。生成算法并不预测给定特征的标注,而是试图预测给定标注的特征。
还以垃圾邮件分类为例子,生成算法试图解决的问题是”假设这封电子邮件为垃圾邮件,它的特征可能是什么?”。用数学表达式表述这一问题,公式p(x|y)表示”给定y,x的概率”。因此,生成算法学习的是数据生成的机制。

二、生成对抗网络的基本原理

1、大白话版本

假设一个城市治安混乱,很快,这个城市里就会出现无数的小偷。在这些小偷中,有的可能是盗窃高手,有的可能毫无技术可言。假如这个城市开始整饬其治安,突然开展一场打击犯罪的「运动」,警察们开始恢复城市中的巡逻,很快,一批「学艺不精」的小偷就被捉住了。之所以捉住的是那些没有技术含量的小偷,是因为警察们的技术也不行了,在捉住一批低端小偷后,城市的治安水平变得怎样倒还不好说,但很明显,城市里小偷们的平均水平已经大大提高了。

警察们开始继续训练自己的破案技术,开始抓住那些越来越狡猾的小偷。随着这些职业惯犯们的落网,警察们也练就了特别的本事,他们能很快能从一群人中发现可疑人员,于是上前盘查,并最终逮捕嫌犯;小偷们的日子也不好过了,因为警察们的水平大大提高,如果还想以前那样表现得鬼鬼祟祟,那么很快就会被警察捉住。

为了避免被捕,小偷们努力表现得不那么「可疑」,而魔高一尺、道高一丈,警察也在不断提高自己的水平,争取将小偷和无辜的普通群众区分开。随着警察和小偷之间的这种「交流」与「切磋」,小偷们都变得非常谨慎,他们有着极高的偷窃技巧,表现得跟普通群众一模一样,而警察们都练就了「火眼金睛」,一旦发现可疑人员,就能马上发现并及时控制——最终,我们同时得到了最强的小偷和最强的警察。

2、非大白话版本

生成对抗网络(GANs)由2个重要的部分构成:
生成器(Generator):通过机器生成数据(大部分情况下是图像),目的是“骗过”判别器
判别器(Discriminator):判断这张图像是真实的还是机器生成的,目的是找出生成器做的“假数据”

下面详细介绍一下过程:
第一阶段:固定「判别器D」,训练「生成器G」
我们使用一个还 OK 判别器,让一个「生成器G」不断生成”假数据”,然后给这个「判别器D」去判断。
一开始,「生成器G」还很弱,所以很容易被揪出来。但是随着不断的训练,「生成器G」技能不断提升,最终骗过了「判别器D」。到了这个时候,「判别器D」基本属于瞎猜的状态,判断是否为假数据的概率为50%。

第二阶段:固定「生成器G」,训练「判别器D」
当通过了第一阶段,继续训练「生成器G」就没有意义了。这个时候我们固定「生成器G」,然后开始训练「判别器D」。
「判别器D」通过不断训练,提高了自己的鉴别能力,最终它可以准确的判断出所有的假数据。到了这个时候,「生成器G」已经无法骗过「判别器D」。

循环阶段一和阶段二

通过不断的循环,「生成器G」和「判别器D」的能力都越来越强。
最终我们得到了一个效果非常好的「生成器G」,我们就可以用它来生成我们想要的数据了。

三、生成对抗网络的意义

在早期的传统机器学习时代,人们需要精心设计如何从数据中提取有用的特征,设计针对特定任务的目标函数,再利用一些通用的优化算法来搭建机器学习系统。在深度学习崛起之后,人们很大程度上不再依赖于精心设计的特征,而让神经网络去自动学习有用的特征。但针对具体任务,我们还是需要设计具体的目标函数以约束模型的学习方向,否则学习出来的模型所做的事可能并不是我们原来所设想的那样。但是,自从有了生成对抗网络,我们在很多场景中不再需要精心设计的目标函数了,而是让判别器自己学,效果会更好。

0%