GAN网络-简单明了

1.引入

  生成式对抗网络(GAN, Generative Adversarial Networks )是一种深度学习模型,是近年来复杂分布上无监督学习最具前景的方法之一。模型通过框架中(至少)两个模块:生成模型(Generative Model)和判别模型(Discriminative Model)的互相博弈学习产生相当好的输出。原始 GAN 理论中,并不要求 G 和 D 都是神经网络,只需要是能拟合相应生成和判别的函数即可。但实用中一般均使用深度神经网络作为 G 和 D 。一个优秀的GAN应用需要有良好的训练方法,否则可能由于神经网络模型的自由性而导致输出不理想。

在这里插入图片描述
  在上图中,坏人能把普通的一张白纸制成假钞,警察可以分辨出假钞和真钞。在一轮一轮的较量中,坏人制假钞的水平不断提高,而警察面对越来越难以辨认的假钞也不得不提高自己的辨别能力。
  套用GAN网络相关术语,我们可以这样来讲这个故事:生成模型(Generative Model,坏人) 可以将一个输入噪音(白纸)生成和真实数据差不多的数据(假钞),判别模型(Discriminative Model,警察) 能够判断出真实数据(真钱)和类真实数据(假钞)。在一轮又一轮的博弈中,生成模型(Generative Model,坏人)能够输出非常接近真实数据的数据。
GAN网络的目标是使得生成的数据和真实数据更接近。为了达到这个目标,一方面,我们要求G(x)(生成模型网络)能够学习到一组很好的模型参数,使得D(x)(判别模型网络)判别不出来真实数据和类真实数据的区别,另一方面,我们要求D(x)(判别模型网络)的判别能力很强,能够完成对数据的真实性做出很好的二分类任务。

2.GAN能干什么?

 GAN的初衷就是生成不存在于真实世界的数据,类似于使得 AI具有创造力或者想象力。应用场景如下:

  1. AI作家,AI画家等需要创造力的AI体;
  2. 将模糊图变清晰(去雨,去雾,去抖动,去马赛克等),这需要AI具有所谓的“想象力”,能脑补情节;
  3. 进行数据增强,根据已有数据生成更多新数据供以feed,可以减缓模型过拟合现象。

3.算法原理

在这里插入图片描述
  如上图所示,x代表真实数据,z代表噪音,G(z)代表一个输入噪音通过生成网络后的输出。一方面,我们希望判别网络能够准确判断出数据的真实性,即D(x)尽可能接近1,D(G(z))尽可能接近于0;另一方面,我们希望生成网络产生的数据非常接近真实数据,即D(G(z))尽可能接近于1。

损失函数:
m i n G m a x D V ( D , G ) = E x ∼ p d a t a ( x ) [ l o g D ( x ) ] + E z ∼ p z ( z ) [ l o g ( 1 − D ( G ( z ) ) ) ] min_{G}max_{D}V(D,G)=E_{x\sim p_{data(x)}}[logD(x)]+E_{z\sim p_{z}(z)}[log(1-D(G(z)))] minGmaxDV(D,G)=Expdata(x)[logD(x)]+Ezpz(z)[log(1D(G(z)))]
可以这样理解:损失函数做的是最大化D的区分度,最小化G输出和真实数据的区别。
损失函数可以拆分为两部分:
判别模型: l o g ( D 1 ( x ) ) + l o g ( 1 − D 2 ( G ( z ) ) ) … ( 1 ) log(D1(x))+log(1-D2(G(z)))…(1) log(D1(x))+log(1D2(G(z)))(1)
生成模型: l o g ( D 2 ( G ( z ) ) ) … ( 2 ) log(D2(G(z)))…(2) log(D2(G(z)))(2)
当判别模型能力强时, D 1 ( x ) − > 1 D1(x)->1 D1(x)>1, D 2 ( G ( z ) ) − > 0 D2(G(z))->0 D2(G(z))>0,(1)式趋近于0
当生成模型能力强时, D 2 ( G ( z ) ) − > 1 D2(G(z))->1 D2(G(z))>1,(2)式趋近于0

4.GAN的两大护法G和D

理解GAN的两大护法G和D

  • G是 generator,生成器: 负责凭空捏造数据出来。
  • D是 discriminator,判别器: 负责判断数据是不是真数据。

  这样可以简单的看作是两个网络的博弈过程。在最原始的GAN论文里面,G和D都是两个多层感知机网络。首先,注意一点,GAN操作的数据不一定非得是图像数据,不过为了更方便解释,我在这里用图像数据为例解释以下GAN:
在这里插入图片描述
  上图,z是随机噪声(就是随机生成的一些数,也就是GAN生成图像的源头)。D通过真图和假图的数据(相当于天然label),进行一个二分类神经网络训练(想各位必再熟悉不过了)。G根据一串随机数就可以捏造一个“假图像”出来,用这些假图去欺骗D,D负责辨别这是真图还是假图,会给出一个score。比如,G生成了一张图,在D这里得分很高,那证明G是很成功的;如果D能有效区分真假图,则G的效果还不太好,需要调整参数。GAN就是这么一个博弈的过程。

5.训练过程

  根据GAN的训练算法,我们有:
在这里插入图片描述

  GAN的训练在同一轮梯度反传的过程中可以细分为2步,先训练D再训练G;注意不是等所有的D训练好以后,才开始训练G,因为D的训练也需要上一轮梯度反传中G的输出值作为输入

  • 当训练D的时候,上一轮G产生的图片,和真实图片,直接拼接在一起,作为x。然后根据,按顺序摆放0和1,假图对应0,真图对应1。然后就可以通过,x输入生成一个score(从0到1之间的数),通过score和y组成的损失函数,就可以进行梯度反传了。(我在图片上举的例子是batch = 1,len(y)=2*batch,训练时通常可以取较大的batch)

  • 当训练G的时候, 需要把G和D当作一个整体,我在这里取名叫做’D_on_G’。这个整体(下面简称DG系统)的输出仍然是score。输入一组随机向量,就可以在G生成一张图,通过D对生成的这张图进行打分,这就是DG系统的前向过程。score=1就是DG系统需要优化的目标,score和y=1之间的差异可以组成损失函数,然后可以反向传播梯度。注意,这里的D的参数是不可训练的。这样就能保证G的训练是符合D的打分标准的。这就好比:如果你参加考试,你别指望能改变老师的评分标准

参考文献

1.https://blog.csdn.net/LEE18254290736/article/details/97371930
2.https://blog.csdn.net/leviopku/article/details/81292192
3.https://blog.csdn.net/weixin_43535573/article/details/89035764

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值