GAN笔记_李弘毅教程(一)Introduction

因为本文课题需要用到GAN,因此学习下GAN,笔记内容均为本人看李弘毅老师视频时记下的要点。
以下为正文:
李弘毅老师教程视频来自blibli。

简介

在人工智能研究领域,Yann LeCun、Geoffrey Hinton 和 Yoshua Bengio一直被公认为深度学习三巨头。
since sliced bread (由此以来 )
GAN动物园有历年来的GAN技术。

现在通常用conditional generation来控制生成的内容

输入向量的每一值都表示一种特征,上图可以理解为:输入向量的第一行代表头发长度,倒数第二行代表发色接近蓝色的程度,最后一行代表嘴的大小。
训练generator的同时训练discriminator,discriminator输入是图片,输出是数值,数值越大,生成图片就越真实。

接下来老师讲了个枯叶蝶的故事,有一种鸟专门吃枯叶蝶,因此枯叶蝶的祖先从普通蝴蝶的颜色变为棕色,鸟随之用纹理识别的方法来判断是否是枯叶蝶(当时枯叶蝶还没进化出枯叶般的纹理),枯叶蝶也随之进化出了枯叶的纹理,两者还在不断进化……互相拮抗。在这个故事里,枯叶蝶是generator,鸟就是discriminator。

老师喜欢用二次元来描述,在上图中,v1的generator首先生成模糊的无色彩的二次元图,然后v1的discriminator输入真实图片,和v1的G生成的图片做对比,第一代假设是主要能区分是否有色彩;然后v1的generator想要骗过第一代D,便生成了有色彩的图片,这就是v2的G,这时v1的D就被v2的G骗过了,但随之也有了v2的D,假设它能区分图片人物是否有嘴;为了骗过v2的D,G也进化出了v3版……这种adversarial的过程可以用于不同地方。
用比较和平的方式,也可以把这个关系比作师生。如下图:

算法

在step1中,D要能区分真实样本和生成的图片,真实样本能被D标为1,生成的虚假样本能被D标为0。

在step2中,将G和D的神经网络连起来,成为一个large network, 用来update G。这个large network的输入是一个vector,输出是一个scalar。G和D之间有一个很大维数的一层,是G生成的图片维数,可以作为一个hidden layer。目标是为了D生出的值越大越好,所以用Gradient Ascent。

完整算法如下:

先sigmod ,使其在0~1之间;
distribution不是很重要;
G和D输入的z可以是不一样的;
D和G的训练过程反复进行。

实际上维数会很多

Structured Learning

挑战性:

one-hot/Zero-shot Learning(有些东西machine在训练时从未见过,所以在测试时需要创造出新的东西,而这需要intelligence):

如何解决?(虽然machine生成的东西是一部分一部分出来的,但部分与部分之间有dependency,整体是global的):

两种方法

botton up:容易失去大局观 (相当于generator)
top down:很难做generator (相当于discriminator)
两者联合起来,即为GAN:

Can Generator learn by itself

给原本的image编上相应向量。然后随即一个向量输入进G,如果输入的向量在原本的图片中有,那么G输出的图片和原本的图片越接近越好。这个过程相当于是NN分类模型的反过程:

但向量如何产生?
根据特征:如数字本身(1,2,3……);倾斜程度(向左斜、向右斜)
首先输入图片,经过NN encoder,将image特征用向量表示。
| | |
下图上半部分其实就是自动编码器VAE的简约版,它的后半部分就是G:
|||
随机输入一个二维向量,[1.5,0]代表0,[-1.5,0]代表1,那么-1.5到1.5之间如下图:

但是又有如下问题:

所以用VAE,使上图中的a和b无论加上什么噪声,都能成为一张图片。 σ \sigma σ越接近1越好:

如果G能完全复制原图那么这个性能将是很不错的,但G总会犯些错误,而这些错误往往很复杂,每个部分之间使不能相互影响的,除非神经网络的深度加深:

在下图中,蓝色的点为输出,绿色的点为输入,尽量要让蓝色的点和绿色的点分布相同。从图中看,的确使绿色的点有被覆盖一些,但一个绿色点团与另一个绿色点团之间也有些蓝色的分布,G是无法影响这些蓝色点的。

Can Discriminator generate?

Discriminator:输入一张图片,输出一个数值:

D通过自上而下的评估是比较容易捕捉部分之间的关系:

穷尽所有的x,放进D中,找出最大的x:

判断真实的图片为1,判断虚假的图片为0。我们手里往往只有正确的样本,而D需要一些错误的例子。

在训练的过程中,错误的例子很关键,需要偏向真实的错误例子:

  • 首先给出一些正确的样本,随机生成错误的样本
  • 在每一个迭代中
    1.学习出一个能判别正确样本和错误样本的D
    2.通过D生成错误的样本

训练出新的D:

在训练过程中,在真实样本范围内输出的值要提高,其他范围内的值降低。但实际上,样本空间巨大,所以不能把所有非正确样本都降低:

所以实际上,
第一次:D会只对生成样本设置为低分,对真实样本设置为高分,其他忽略;
第二次:用v1的D产生样本(找出分值高的输入),这时产生样本对应的分值是高的,我们需要对产生样本的分值降低。
最后结果就是,只有真实样本范围内的分值很高:

用D来做生成的:

Generator与Discriminator对比

以下为G和D的优缺点

Generator:

  • 优点:容易生成
  • 缺点:
    只学到了目标的表象,学不到精神
    很难学习到部分之间的关系,学不到大局

Discriminator:

  • 优点:能考虑到大局
  • 缺点:生成和错误样本方面有点难

所以要将G和D结合起来
用G来解arg max(.)

GAN 优点

解决了错误样本的缺失;
能使其更大局观

结果(红点为生成样本,蓝点为原样本):

人脸(VAE的模糊些):

VAE和GAN不同:
VAE比较稳,但最好结果没有GAN好。

FID Score 越小,越真实

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值