生成对抗网络(Generative Adversarial Networks,GAN)——让机器学习具有创造力

1 生成对抗网络概述

有时候我们希望网络具有一定的创造力,比如画画、编曲等等,能否实现呢?是可以实现的,大家可以鉴别一下下面这几张照片,哪些是真实的人脸,哪些是机器生成的人脸。很难判断吧?本节最后会给出答案。

到底哪些是机器产生的?

要实现上述能力,就要用到一种新的网络架构— 生成对抗网络(Generative Adversarial Net,GAN
。首先,我们大概来了解一下什么是 “生成” ,什么是 “对抗”

8.1.1 对“生成”的理解

假设我们设计一个网络,将其称为 “生成器(Generator)”。生成器的输入是一个向量z,该向量一般是低维向量,它是通过一个特定的分布采样出来的,例如正态分布。生成器的输出是另一个向量y,该向量是一个高维向量,比如一个二次元的人脸。由于生成器的输入向量是通过一个分布随机采样的,所以输入向量每次都是不一样的,因此生成器每次的输出也是不一样的,会形成一个复杂的分布。尽管输出向量不一样,但是我们要求这些输出向量都是二次元的人脸,而不是其它。也就是说期望生成器输出的复杂分布要和某个特定分布(例如所有二次元人脸的集合)尽可能相似,如何做到呢?这就要用到“对抗”。

生成(Generator)

1.2 对“对抗”的理解

我们常说要“感谢对手”,为什么呢?因为对手逼得我们不断想办法进步,最后让我们进化成长为优秀的人。为了使生成网络不断进化以成为画画高手,我们还需要训练另外一个网络,叫做 “鉴别器(Discriminator)” 。鉴别器是专门用来和生成网络进行对抗的,就是用它来逼得生成网络不断进化。鉴别器的输入是一张图片,它的输出则是一个0-1的数字,数字越大就越认为这张图片是一个二次元图片,数字越小呢就越认为这张图片不是一个二次元图片。比如下图中上面两张图片很清楚是二次元,所以鉴别器输出1.0,而下面两张图片很模糊,所以鉴别器输出0.1。因此,简单点讲,鉴别器的功能就是判断某张图片到底是不是二次元图片。

鉴别器

现在我们把这个鉴别器拿过来和生成器进行对抗:

  • ①版本1的生成器的参数是随机生成的,所以其生成的图片啥都不是。这 时候,我们对鉴别器进行训练,以使鉴别器能够鉴别出哪些是生成器生成的图片,哪些是真实的二次元人脸。经过训练后,我们得到了版本1的鉴别器。
  • ②在版本1的鉴别器的基础上,我们再来训练生成器,训练的目的是让鉴别器分辨不出哪些是生成器生成的图片,哪些是真实的二次元人脸。通过训练之后,得到了版本2的生成器,此时生成的图片有一点点像二次元了,足以骗过版本1的鉴别器。
  • ③在版本2的生成器的基础上,我们接着训练鉴别器,同样是要使鉴别器能够鉴别出哪些是版本2生成器生成的图片,哪些是真实的二次元人脸。通过训练之后,得到了版本2的鉴别器。
  • ④重复上述过程,不断进化生成器和鉴别器,最后生成器可以生成非常逼真的二次元人脸。

通过上述过程我们可以看出,生成器和鉴别器在不断的对抗过程中,两者都在不断的进步,可以说是对抗成就了对方。所以,它们亦敌亦友,相爱相杀,既对立又统一。

对抗的基本思路

2 生成对抗网络的理论基础

我们刚才提到生成器的输入是由一个简单的分布(如正态分布)采样得到的一堆向量,输出是一堆向量构成另一个一个复杂的分布,用P_G表示。我们期望P_G和某个特定的分布尽可能地相似,而这个分布来自于一堆真实的数据,这个分布表示为P_{data}。如果我们用Div(P_G,P_{data})来表示这两个分布的Divergence(这个英文不好翻译,暂且理解为“差异程度”吧),那么我们的目标就是寻找一个生成器G^*要使Div(P_G,P_{data})最小,即,G^*=arg\min_{G} Div(P_G,P_{data})我们知道在机器学习中,训练的目标是要使损失函数最小,所以在该任务中损失函数就是Div(P_G,P_{data})。但是有一个很关键的问题,我们如何计算这两个分布的Divergence呢?好像没法用解析式去描述这两个分布的Divergence,那怎么办呢?我们可以通过采样的方式来计算这两个分布的Divergence。

生成网络的目标

采样是很好办的,以二次元人脸生成器为例。P_{data}的采样很简单,我们从一堆二次元的图库中随机采样一些图片就行了。P_{G}的采样也很简单,我们从正态分布中采样一些向量,生成器输出一些图片,就得到P_{G}的采样图片了。我们有了P_{data}P_{G}的采样了,那么怎么计算Div(P_G,P_{data})呢?这就需要用到鉴别器了。
通过采样来计算两个分布的Divergence

假设从P_{data}采样得到的数据用蓝色五角星表示,从P_{G}采样得到的数据用黄色五角星表示。鉴别器的目的就是遇到蓝色五角星时输出的分数要尽量高,遇到黄色五角星时输出的分数要尽量低。如果用V(D,G)鉴别器训练的目标函数(最大化一般称为目标函数,最小化一般称为损失函数),那么就有,V(G, D)=E_{y \sim P_{\text {data }}}[\log D(y)]+E_{y \sim P_{G}}[\log (1-D(y))]其中E_{y \sim P_{\text {data }}}[\log D(y)]表示当yP_{data}中采样,通过鉴别器后的输出D(y)要尽可能大,E_{y \sim P_{G}}[\log (1-D(y))]表示当yP_{data}中采样,通过鉴别器后的输出D(y)要尽可能小,因此加了个负号。可以看出该式中还专门取了个对数,这是为了和分类问题中的交叉熵保持一致,因为该式加个负号就是分类问题中的交叉熵了。在训练分类器的时候是要最小化交叉熵,这里要最大化V(D,G),所以两者是等同的。因此,鉴别器也可以看成一个二分类器,一类数据从P_{data}采样得到,一类数据P_{G}采样得到。
最重要的一点是,\max_{D}V(D,G)和上面提到的Divergence是相关的,这一点在GAN最原始的文章中有严格的数学推理。
鉴别器

我们可以从直观上来理解为什么\max_{D}V(D,G)Div(P_G,P_{data})是相关的。假设Div(P_G,P_{data})比较小,表示这两者很相似,那么从P_{G}P_{data}采样得到的数据混到一起就很难被鉴别,因此鉴别器的\max_{D}V(D,G)就不会太大;相反地,如果Div(P_G,P_{data})比较大,表示这两者差异性很大,那么从P_{G}P_{data}采样得到的数据混到一起就比较容易被鉴别,因此鉴别器的\max_{D}V(D,G)就会比较大。希望了解详情的,请移步GAN的原文。
image.png

既然我们已经知道\max_{D}V(D,G)Div(P_G,P_{data})是相关的,而且是正相关的。所以生成器的损失函数中的Div(P_G,P_{data})就可以用\max_{D}V(D,G)来进行替换,可以得到,G^*=arg\min_{G} \max_{D}V(D,G)这个损失函数有点复杂,又是\min,又是\max。其实这个损失函数包含了两个优化问题:首先是在固定生成器G的情况下,找到一个鉴别器G使V(D,G)最大,然后是要找到鉴别器G,使\max_{D}V(D,G)最小。因此,前面提到的对抗过程就是求解G^*=arg\min_{G} \max_{D}V(D,G)的过程。所以生成对抗网络的训练如下图所示。
image.png

对了,本节最前面的人脸全部是由机器生成的,惊叹吧!?

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354

推荐阅读更多精彩内容