核心思想_一文通俗了解对抗生成网络(GAN)核心思想

目前有时间的时候学习一下gan的知识,但是时间也不多,这里记录一下所学,不要太期待喔,完全是学习李宏毅老师课程的笔记,由于是新手,欢迎大家交流指错。

引言

GAN已经作为一种思想来渗透在ML的其余领域,做出了很多很Amazing的东西。被Yann LeCun评价为近十年最有趣的idea,所以相关研究方向的同学gan成了一个必须要学的思想和方法。

836c86aeac4b9acd37229bb6254bd70b.png

Basic Idea of GAN (Generator)

GAN中包括两个最基本的组件,其中一个就是Generator,对于Image Generation过程来说,你给它一个向量,它输出一个图片(image)。

input: vector

output: image

如下所示:

aaf25506cdcdc4fe6c3cd8f91a6315c1.png

对于Sentence Generation来说,你给它一个向量,它输出一个句子(sentence)。

input: vector

output: sentence

如下所示:

941fd5534422e8ced3d1028879d7e768.png

其中我们以image generation过程来仔细说明一下其中过程原理!

实际上Generator就是一个NN网络,输入是一个vector,它的输出是一个高维的向量,比如image是16*16,那么它的输出就是256维的向量。

如图所示:

51e04a704ca036330ed13ce1c1e2c768.png

其中,输入向量的每一个维度都可以代表输出image的某些特征,比如说第一维度的值,代表着image人物的头发长短。

那么我们在调大input vector的第一维的值的时候,我们可以看到生成的image的头发变长,如下图所示:

5dfd6e45a220c2b9868bd9aa52f94188.png

比如说,input vector某一个维度的值大小代表生成image的头发颜色蓝色深浅,调大后,生成的image头发变得更蓝一些:

099494da3d22e713af5f8d0471ae25ac.png

或者说,input vector某一个维度的值大小代表生成image的口张开的大小,调大后,生成的image人物中口张的更大一些:

62f6800344442219eddeb5b59d51c48f.png

总而言之,GAN中的Generator就是一个神经网络,丢给它一个输入向量,输出也是一个向量。

在不同的任务中,生成的东西不同,输入向量的每一个维度都代表着输出image的特定特征。

Basic Idea of GAN(Discriminator) 

讲完了Generator之后,我们来看GAN的另一个组件,Discriminator。Discriminator也是一个NN网络,它的输入是Generator的输出或者是真实的image...,输出是一个标量,代表接受的输入的quality有多好,数值越大,代表越好,数值越小,代表越差。

如下图:

bd2661f48cf092a17c4e34f615b50202.png

比如给它输入是真实的image,那么经过Discriminator之后应该是输出的标量值很大,代表送入给它的image的质量很高。

2c915bbce0e67da2782adc03c440016b.png

比如给它输入是差的image,那么经过Discriminator之后应该是输出的标量值很小,代表送入给它的image的质量很低。

0365bba95cb9a4b1100597170bb64e02.png
Algorithm of GAN

下面我们来介绍一下最基本的gan的训练算法,不够严谨,但是容易接受。

首先,跟任何网络训练一样,我们需要初始化生成器G,和判别器D的参数

a325cae6e785c1770a5c3d992b5ba4a3.png

形式化公式就是如下:

ddc0d50de80702031dfc87608031bf5b.png

1、然后在每一轮中,首先固定住G,训练D,具体怎么训练呢?

我们任意选取一些向量,送给G,同时从database中挑选出一些数据,使得判别器学会从database挑选出真实的图片打分高,任意选取向量从G中生成的图片,打分低。这样就是在训练判别器:

1b30d049cc6e45bdf01961124d550a6b.png

形式化公式如下:

ce3570afa1881dc54210e579574c83c0.png

稍微解释一下图片中的公式,训练判别器就是希望它对于真实的图片打分高,生成的图片打分低。而公式中是最大化那个式子,分解来看完全对应文字的解释:

对应真正的图片打分高,也就是最大化如下公式,公式如下:

a61261db8a31a47f09ca24cd0250f825.png

2、第二步是固定判别器D,训练生成器G,我们还是任意给定一些向量,这些向量送给G,生成一些图片,然后喂进判别器进行判别。

首先我们的目的是使得生成器能够生成非常真实的图片,对于真正真实的图片来说,判别器的打分是高的,那么也就是说,我们需要训练生成器,使得通过生成器生成出来的图片让判别器打分高,尽可能的迷惑判别器,这样通过生成器生成出来的图片就是接近“真实的”,土话说就是跟真的好像啊。

e5146e2494804b9705eb6069fd5a14e3.png

形式化公式如下:

8829b5141513a7a2ab86daf305027090.png

公式解释为:最大化使得判别器对于生成器生成的图片打分。

这里需要注意的是训练生成器的时候,一定要固定判别器的参数,因为在实际实现中,生成器和判别器会构成一个大网络,如果不固定判别器的参数去训练生成器的话。

因为目标是使得最后的得分高,网络这个时候仅仅更新最后一层的参数就能让最后的输出标量非常大,很显然这不是我们希望的,如果固定了判别器后面几个layer,训练前面生成器的参数就能正常学习。

实例

最后李宏毅老师给出了他自己用gan生成二次元头像的实例,下面分别给出训练了不同轮次的生成结果,给大家一个直观的感觉:

172e02e13ee5c046224bbbe7762c7bfd.png
05d681c26e13257997b675f8ca68e09b.png
c7acfb890a72411c8ce79f5835e3cdbf.png
9d68ea3610605a77a86184ac7aa8b27a.png
GAN的魅力

可能不少人会有疑问,就是生成一些牛逼的图像有什么用,模型再厉害,我拿一个照相机照出来的难度会比你差,这里解释一下,如果仅仅只能生成见过的图片,确实没有什么厉害的地方,但是如果可以“合理”的生成没有见过的图像,是不是就很有意思呢?如下图,中间的图片就是训练集中重来没有出现:

1fb86590864527ceba33b41f80c3b1f5.png

它居然自己学到了,在中间参数的时候,头像的转向等等特质,非常的amazing

视频资料如下:

https://www.bilibili.com/video/av23316535from=search&seid=13825323076277645807

为您推荐

“12306”的架构到底有多牛逼?

中国程序员34岁生日当天在美国遭抢笔记本电脑,追击歹徒被拖行后身亡,为什么会发生此类事件?

阿里如何抗住90秒100亿?看这篇你就明白了!

60个Chrome神器插件大收集:助你快速成为老司机,一键分析网站技术栈

深度学习必懂的13种概率分布

eab7ab105bad39c47993392d2a3b9bec.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值