WDK李宏毅学习笔记第十四周01_GAN

Generative Adversarial Network(GAN)


摘要

我们在解决某些问题,training神经网络时,往往需要全面的训练数据才可以得到好的model,而训练数据往往是珍贵的难获取的,在训练数据不够全面却没法获取更多的时候,我们就需要machine自己产生训练数据,而怎么产生训练数据,这就是这章要讲的。Generative Adversarial Network(GAN)可以根据现有资料,生成更多和现有资料类似的数据,GAN内主要包括Generator(G)和Discriminator(D),本章要讲的就是GAN生成数据的基本原理以及在structured learning里的应用。同时还介绍了如何用单独的Generator和单独的Discriminator来生成数据。

1、Basic Idea of GAN

1.1 Generation(生成)

Generation做的事情主要分为如下两种:

  1. Image Generation
    它是训练一个生成器,该生成器吃入一个Vector,输出一张image。
    X

  2. Sentence Generation
    它也是训练一个生成器,该生成器吃入一个Vector,输出一个句子。
    在这里插入图片描述
    两者本质一样,都是找到一个Generation,而Generator实际上就是一个神经网络,在这个Generation里面它的input就是一个Vector,Output就是image或者Sentence。

1.2 Discriminator

在训练GAN时,同时也会训练一个Discriminator,Discriminator也是一个神经网络,它的输入是Generation产生的图片,输出是该图片真实性分数scalar,分数越高,它看起来就更像真实的图片。
在这里插入图片描述

1.3 Generation和Discriminator的关系

Generation和Discriminator就像捕食者和被捕食者一样,两者都会随着对方的进化而跟着进化。例如GAN在二次元头像生成中,它的训练过程就是一个Generation和Discriminator不断进化完善的过程。
在这里插入图片描述

1.4 Algorithm

  1. 在训练时,固定Generation参数,只训练Discriminator参数。它的具体做法是将G产生的图片和Database(真实的图片)中的图片丢入D,因为G的参数初始化时是随机数,所以产生的图片是很烂的,我们希望D看到数据库中的图片时输出高分,看到G产生的图片时输出低分。
    在这里插入图片描述
  2. 在第一步中,我们已经训练好了D,所以这一步我们固定D的参数,只训练G。具体做法是,调整G的参数,我们希望G产生的图片,D看到后输出的分数越高越好。也就是希望G产生的图片越接近真实的图片越好。

2、GAN as structured learning

在传统的Structured Learning Approach里面,有两套方法,一个是Bottop Up,它是说我们要产生一个object,它是一个一个output来产生的,它的缺点就是会丢失一些全局信息。一个是Top Down,它是说产生一个Object后,从整体的角度来给其打分。此时Bottop Up可以看作G,Top Down可以看作D,将两者结合起来就是structured learning的GAN。
在这里插入图片描述

3、Can Generator learn by itself?

Generator是可以自己train的,有一个最简单的办法就是直接输入vector,然后我们有其对应的label,以此来训练Generator model。那么现在的问题就是label中的手写数字的vector是怎么产生的。
在这里插入图片描述
有一个好的办法就是training一个Encoder,这个办法其实就是之前学过的Auto-encoder。其中的Decoder就可以看作是一个G。
在这里插入图片描述
而此时就有了新的问题,也就是同样的手写数字,只是倾斜角度不同,两者的平均值丢给G,我们的想法是它会生成倾斜角度在两者中间的同样的手写数字。而事实上并不会,甚至有可能产生胡乱的图片。这个问题怎么解决呢?
在这里插入图片描述
有一个解决办法就是Variational Auto-encoder(VAE),它的做法是让Encoder在生成code的同时还产生code每个维度的value,然后从正态分布中sample一些noise,再将noise与value的vector相乘得到的结果加到code里,让Decoder还原出原来的图片。
在这里插入图片描述

4、 Can Discriminator generate?

Discriminator 用来生成是穷举所有的x,然后找出分数最高的,就是生成的结果。很明显这个生成是非常痛苦的。
在这里插入图片描述
在training时,我们也需要一些好的training data来训练我们的model,好的training data是需要正确的data和错误的data都是合适的,正确的data是容易找的,而合适的错误data则比较难找,怎么产生合适的错误data,这又变成了一个死循环的问题。
在这里插入图片描述
正确的解法是如下这样的:

  1. 首先我们有一组正确的data和错误的data。
    在这里插入图片描述
  2. 我们将其放入Discriminator进行训练,Discriminator要做的事情就是给正确data高分,给错误data低分。
  3. 我们用训练好的Discriminator生成一组它认为好的图片。将该组图片作为错误的data重新进行第二步的做法。循环训练,最后得到合适的model后停止循环。

方法

  1. GAN生成数据的方法是首先固定G的参数,用正确的data,和错误的data对D进行训练,D训练好后固定D的参数,对G进行训练,我们希望G生成的数据在D中的分越高越好。
  2. 单独的Generator生成数据的方法是Variational Auto-encoder(VAE),它的做法是让Encoder在生成code的同时还产生code每个维度的value,然后从正态分布中sample一些noise,再将noise与value的vector相乘得到的结果加到code里,让Decoder根据加入noise的code能够还原出原来的图片此时的Decoder就是Generator。用此方法生成的数据更稳定。
  3. 单独的Discriminator生成数据的方法是讲label数据和明显错误的数据丢给D,让D给label高分,给错误数据低分进行训练,再让训练好后的D画出一组它认为分最高的数据,将该组数据作为错误数据和label一起丢给D进行训练,反复循环,直至得到合适的结果再停止训练。

结论

GAN在很多方面都有应用,近年来也有越来越多的人开始研究GAN并且发了很多的文章,从本章中可以看到GAN在生成数据方面有其独特的优势,不仅GAN可以生成数据,将GAN拆开,单独的Generation和Discriminator也可以生成数据。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值