李宏毅P1-学习笔记:生成对抗网络GAN(Generative Adversarial Nets)

Generative Adversarial Network (GAN)于2014年提出。论文下载地址:https://arxiv.org/pdf/1406.2661.pdf

李宏毅对抗生成网络(GAN)国语教程(2018):

https://www.bilibili.com/video/av24011528?from=search&seid=13805566188303016426

课件:

http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS18.html


Structured Learning

可以把GAN理解为一种结构化学习(Structured Learning)的概念。

结构化学习的输入和输出都是序列模型,结构化学习例子:

输出是序列sequence

1)机器翻译

2)语音识别

3)聊天机器人

输出是矩阵matrix

1)图片转图片

2)文本转文字

结构化学习存在一些挑战,一是序列模型的样本问题:one-shot/Zero-shot learning。想象下在一个语句翻译的模型里,输入和输出都是语句,很可能所有样本里没有重复的句子。如果我们把翻译的每个结果视为一个分类,可能每一个分类的样本就出现一次。如果输出的分类很多,有一些分类甚至可能没有训练样本。所以要让模型处理从来没有见过的句子是一个难题。

所以在结构化学习中,我们要将自底向上bottom up和自顶向下top down两种方法结合起来。

Generator :Bottom Up

学习在component级别生成对象;

Discriminator:Top Down

对整个对象进行评估,找出最好的一个。

自底向上即生成一个一个独立的元素构成序列,自顶向下即从整体上来评估序列。其实自底向上的思路和GAN中的Generator一致,自顶向下的思路和GAN中的Discriminator一致。后文中会介绍GAN以及GAN的这两个部件。

Basic Idea of GAN

 

GAN由两部分组成,分别是G(Generator)和D(Discriminator),注意这两部分都是神经网络。

对于G

输入是一个向量,输出是一个高维向量,如图像或者语句。

对于D

输入是G输出的高维向量,输出一个标量。一般而言标量的值越高说明输入的高维向量的越符合最终的要求(比如说输入一张图像输出分值高则说明这个图像符合设计需求)。

G和D都在不断进化(权重迭代更新)。第N+1代的G输出向量可以在第N代的D中获得相对较高的输出,但是在第N+1代的D中无法获得高分。以下是形象的比喻:

 

之后我们还会讨论,为什么要用GAN这样的结构,而不是Generator自己学会更新自己生成更好的样本,而Discriminator自己生成样本。


Algorithm

初始化G和D,在之后的每次迭代(进化)中:

按照老师课上的说法,分类和回归都适用于D。分类的话就是数据库里的是1类,G生成的是0类。回归则是给数据库里的样本高分,G生成的低分。D通过学习,可以分辨出第一代G生成的样本与数据库里的样本。

将G与D合并成一个大的神经网络,该网络输入一个向量输出一个标量,G与D之间存在一个高维向量。G升级(训练)的目标是大网络的输出能尽可能高,即G生成的样本分数尽量高。注意因为这里是要使输出变大,所以字面上不再是梯度下降而是梯度上升。如果不固定住D进行梯度上升,那么只更新最后一层的权重就可以获得很好的效果没有意义。

先训练D再训练G随后迭代进行。为了让D可以更好地分别真实样本和G产生的样本,在一次迭代中D训练多次G只训练一次。m是batchsize的大小,z是G的输入向量,从任一分布采样初始化。迭代次数是一个超参数。


Can Generator learn by itself?

那为什么一定要加入Discriminator,我们可以让Generator自己学会生成更好的图像么?这里提出了VAE的结构,Generator的作用其实就是该结构中的Decoder。

那VAE中的Decoder和GAN中存在Discriminator的Generator的效果区别在哪里?我们先上实验结果:

可以看到VAE的效果不如GAN。那区别是在哪里呢?

如下图,虽然上面的两张图片像素上和目标图片的差距比下面两张图片要小,但是我们可以知道下面两张图片更接近目标图片。

所以我们知道了输出序列和目标序列的相似程度,不能单单以序列中单个元素进行比较而是需要整体地观察,元素间的关系很重要我们的模型需要捕捉到这种关系。

Can Discriminator generate?

判别网络自己也是可以生成的,需要解一个式子:

 其中x为判别网络输入,D(x)为输出。所以使得输出最大的输入即为生成的最佳的图片。但这个很难解,且目前只有假设判别网络是线性的才能解,当然这大大失去了复杂程度。

假设我们已经有一个Discriminator D(x),生成样本即输入所有可能的序列x,找出令D(x)最大的序列x。这里存在一个问题即穷举所有可能的x是否可行,这里我们先假设其可行,看下一步会怎么样。

因为少了Generator,我们少了反例样本,模型就很有可能学会将所有的输出都标记为正例。这里我们先假设可以获得反例样本,继续看下一步会怎么样。

 

有了初始的反例样本,按以上方法可以在每一次迭代中获得新的反例样本,这个类似与每次Generator生成的样本。

 

Discriminator的训练过程如上图,即每次迭代找到D(x)分类的弱点(即空白没有正反例样本的区域),在弱点处生成新的反例样本来更新D(x)。等到D(x)和正例反例的曲线趋于一致时,说明生成的样本已经很接近真实的样本了。

 

实际上用Discriminator来生成样本,就是结构化学习中的概率图模型。以上是几种概率图模型。

 

以上是G和D的优缺点。

所以G其实是一种很好的解arg max D(x)的方法,而传统的方法往往很难解决这个问题。总结如下:

 



作者:tianchen627
链接:https://www.jianshu.com/p/428603fb1f4c
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值