您当前的位置: 首页 >  网络

wendy_ya

暂无认证

  • 4浏览

    0关注

    342博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

GAN生成对抗网络入门介绍及DCGAN、WGAN等介绍

wendy_ya 发布时间:2020-08-21 10:48:24 ,浏览量:4

文章目录
  • 一、原理部分
    • 1.1举例解释
    • 1.2基本知识
    • 1.3优缺点
  • 二、GAN的主要问题
  • 三、公式说明
  • 四、训练GAN的一些技巧
  • 五、GAN的改进策略
  • 六、 DCGAN
    • 6.1 DCGAN介绍
    • 6.2 DCGAN应用案例
    • 6.2.1 DCGAN用于生成图像变换
    • 6.2.2 DCGAN用于生成图像的算术运算
    • 6.2.3 DCGAN用于残缺图像的补全
    • 6.3 DCGAN代码实战
  • 七、Wasserstein GAN
    • 7.1 WGAN介绍
    • 7.2 WGAN-GP
  • 八、其他结构的GAN
    • 8.1 EBGAN
    • 8.2 总结
  • 十、GAN的应用领域

一、原理部分

Generative Adversarial Networks(GAN):生成对抗网络。 2014年Ian J. Goodfellow等人在论文《Generative Adversarial Nets》中第一次提出GAN的概念。 大牛Yann LeCun甚至评价GAN为 “adversarial training is the coolest thing since sliced bread”。

1.1举例解释

论文中举了一个很通俗的例子——假币与真币的例子。 造假币的团伙相当于生成器,他们想通过伪造金钱来骗过银行,使得假币能够正常交易,而银行相当于判别器,需要判断进来的钱是真币还是假币。因此假币团伙的目的是造出银行识别不出的假币而骗过银行,银行则是想办法准确的识别出假币。 在这里插入图片描述

这样,G和D构成了一个动态的“博弈过程”。因此,生成对抗网络由此而来。

1.2基本知识

GAN的主要灵感来源于博弈论中零和博弈的思想。GAN属于非监督式学习,但与一般非监督式学习不同。GAN被誉为近年来复杂分布上无监督学习最具前景的方法之一。

组成: GAN包括两个部分, 生成器G(generator) 和 判别器D(discriminator) 。生成器接收一个随机噪声(随机数),并且学习真实图像分布从而让自身生成的图像更加真实,以骗过判别器。判别器则需要对接收的图片进行真假判别。

目标: 使得判别器无法判断,无论对于真假样本,输出结果概率都是0.5。

原理: 在训练过程中,生成器努力地让生成的图像更加真实,而判别器则努力地去识别出图像的真假,这个过程相当于一个二人博弈,随着时间的推移,生成器和判别器在不断地进行对抗。最终两个网络达到了一个动态均衡:生成器生成的图像接近于真实图像分布,而判别器识别不出真假图像,对于给定图像的预测为真的概率基本接近0.5(相当于随机猜测)。

在分析GAN结构模型之前,我们首先要明白在使用以下两个问题:

  • 我们有什么? 我们所拥有的,也就是向神经网络中填喂的数据仅仅是真实采集来的数据集,仅此而已,甚至连类标签都没有。
  • 我们要得到什么? 我们希望根据输入数据,当输入一个噪声时,能模拟得到与输入数据类似的图像,以此得到以假乱真的效果。

模型结构如图所示: 在这里插入图片描述

  • G表示生成器,它接收一个随机噪声z(随机数),通过这个噪声生成图像;
  • D代表判别器,判别图像真假,它的输出是(0,1)之间的数字,代表真实图像的概率。如果是1,表示是真实图片;如果是0则代表不是真实图像,而是生成器生成的图像。

【注意】:需要注意的是生成模型和对抗模型可以说是完全独立的两个模型,他们之间是没有什么联系的。因此训练这两个模型的方法是:单独交替迭代训练。也就是说,当一个神经网络开始训练时,另一个必须停止;而另一个训练时,第一个就需要停止。

1.3优缺点

关于优缺点部分,作者在论文中是这样写的: 在这里插入图片描述 具体来说, 优点:

  • 相比较其它模型,只需使用反向传播来获得梯度,而不需要复杂的马尔科夫链(Markov chains)
  • 在学习过程中不需要推理,非常灵活,并且可以将多种函数合并到模型中(无监督学习方式)
  • 相比较于VAE,可以产生更加清晰真实的样本

缺点:

  • 不适合处理离散形式的数据,比如文本
  • 在训练过程中D必须与G很好地同步(特别是,G在不更新D的情况下不能训练太多),否则可能会出现 训练不稳定、梯度消失、模式崩溃等问题。

【注1:模式崩溃(model collapse)现象】

GAN采用的是对抗训练的方式,G的梯度更新来自D,所以G生成的好不好,得看D怎么说。具体就是G生成一个样本,交给D去评判,D会输出生成真假样本的概率(0-1),相当于告诉G生成的样本有多大的真实性,G就会根据这个反馈不断改善自己,提高D输出的概率值。但是如果某一次G生成的样本可能并不是很真实,但是D给出了正确的评价,或者是G生成的结果中一些特征得到了D的认可,这时候G就会认为我输出的正确的,那么接下来我就这样输出肯定D还会给出比较高的评价,实际上G生成的并不怎么样,但是他们两个就这样自我欺骗下去了,导致最终生成结果缺失一些信息,导致训练失败。

二、GAN的主要问题

GAN从本质上来说,有着与一般神经网络不同的特点,因为GAN的训练是依次迭代D和G,如果判别器D学的不好,生成器G得不到正确反馈,就无法稳定学习。如果判别器D学的太好,整个loss迅速下降,G就无法继续学习。

GAN的优化需要生成器和判别器达到纳什均衡,但是因为判别器D和生成器G是分别训练的,纳什平衡并不一定能达到,这是早期GAN难以训练的主要原因。另外,最初的损失函数也不是最优的。

三、公式说明

在这里插入图片描述 生成网络G的损失函数为: log ⁡ ( 1 − D ( G ( z ) ) ) \log (1 - D(G(z))) log(1−D(G(z)))或者 − l o g D ( G ( z ) ) -log D(G(z)) −logD(G(z))。 判别网络D的损失函数为: − ( log ⁡ D ( x ) + log ⁡ ( 1 − D ( G ( z ) ) ) ) - (\log D(x) + \log (1 - D(G(z)))) −(logD(x)+log(1−D(G(z))))

我们从式子中解释对抗,损失函数的图像是一个类似于y=log(x)函数图形,x>1时,y>0,x=1时,y=0。 在这里插入图片描述

生成网络和判别网络对抗(训练)的目的是使得各自的损失函数最小,生成网络G的训练希望 D ( G ( z ) ) D(G(z)) D(G(z))趋近于1,也就是正类,这样生成网络G的损失函数 log ⁡ ( 1 − D ( G ( z ) ) ) \log (1 - D(G(z))) log(1−D(G(z)))就会最小。而判别网络的训练就是一个2分类,目的是让真实数据x的判别概率D趋近于1,而生成数据G(z)的判别概率 D ( G ( z ) ) D(G(z)) D(G(z))趋近于0,这是负类。

  • 当判别网络遇到真实数据时: E x ∼ p d a t a ( x ) [ log ⁡ D ( x ) ] {E_{x \sim {p_{data}}(x)}}[\log D(x)] Ex∼pdata​(x)​[logD(x)],这个期望要取最大,只有当D(x)=1的时候,也就是判别网络判别出真实数据是真的。
  • 当判别网络遇到生成数据时: E z ∼ P z ( z ) [ log ⁡ ( 1 − D ( G ( z ) ) ) ] {E_{z \sim Pz(z)}}[\log (1 - D(G(z)))] Ez∼Pz(z)​[log(1−D(G(z)))],因为0
关注
打赏
1659256378
查看更多评论
立即登录/注册

微信扫码登录

0.0422s