本文主要是介绍WDK李宏毅学习笔记第十四周01_GAN,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Generative Adversarial Network(GAN)
文章目录
- Generative Adversarial Network(GAN)
- 摘要
- 1、Basic Idea of GAN
- 1.1 Generation(生成)
- 1.2 Discriminator
- 1.3 Generation和Discriminator的关系
- 1.4 Algorithm
- 2、GAN as structured learning
- 3、Can Generator learn by itself?
- 4、 Can Discriminator generate?
- 方法
- 结论
摘要
我们在解决某些问题,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做的事情主要分为如下两种:
-
Image Generation
它是训练一个生成器,该生成器吃入一个Vector,输出一张image。
-
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
- 在训练时,固定Generation参数,只训练Discriminator参数。它的具体做法是将G产生的图片和Database(真实的图片)中的图片丢入D,因为G的参数初始化时是随机数,所以产生的图片是很烂的,我们希望D看到数据库中的图片时输出高分,看到G产生的图片时输出低分。
- 在第一步中,我们已经训练好了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,这又变成了一个死循环的问题。
正确的解法是如下这样的:
- 首先我们有一组正确的data和错误的data。
- 我们将其放入Discriminator进行训练,Discriminator要做的事情就是给正确data高分,给错误data低分。
- 我们用训练好的Discriminator生成一组它认为好的图片。将该组图片作为错误的data重新进行第二步的做法。循环训练,最后得到合适的model后停止循环。
方法
- GAN生成数据的方法是首先固定G的参数,用正确的data,和错误的data对D进行训练,D训练好后固定D的参数,对G进行训练,我们希望G生成的数据在D中的分越高越好。
- 单独的Generator生成数据的方法是Variational Auto-encoder(VAE),它的做法是让Encoder在生成code的同时还产生code每个维度的value,然后从正态分布中sample一些noise,再将noise与value的vector相乘得到的结果加到code里,让Decoder根据加入noise的code能够还原出原来的图片此时的Decoder就是Generator。用此方法生成的数据更稳定。
- 单独的Discriminator生成数据的方法是讲label数据和明显错误的数据丢给D,让D给label高分,给错误数据低分进行训练,再让训练好后的D画出一组它认为分最高的数据,将该组数据作为错误数据和label一起丢给D进行训练,反复循环,直至得到合适的结果再停止训练。
结论
GAN在很多方面都有应用,近年来也有越来越多的人开始研究GAN并且发了很多的文章,从本章中可以看到GAN在生成数据方面有其独特的优势,不仅GAN可以生成数据,将GAN拆开,单独的Generation和Discriminator也可以生成数据。
这篇关于WDK李宏毅学习笔记第十四周01_GAN的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!