写在前面

在前面一篇文章:【GAN】一、利用keras实现DCGAN生成手写数字图像中我们利用keras实现了简单的DCGAN,并生成了手写数字图像。程序结果让我们领略了GAN的强大,接下来我们开始一步一步地介绍各种GAN模型。那么我们首先从最基础的GAN开始说起。


一、GAN简介

GAN(Generative Adversarial Network)全名叫做对抗生成网络或者生成对抗网络。GAN这一概念是由Ian Goodfellow于2014年提出,并迅速成为了非常火热的研究话题。目前,GAN的变种更是有上千种,2019年计算机界的诺贝尔奖“图灵奖”得主,深度学习先驱之一的Yann LeCun也曾说:“GAN及其变种是数十年来机器学习领域最有趣的想法。”

原始GAN的论文连接为:Generative Adversarial Nets

首先我们用一句话来概括下原始GAN。原始GAN由两个有机中整体构成——生成器GGG和判别器DDD,生成器的目的就是将随机输入的高斯噪声映射成图像(“假图”),判别器则是判断输入图像是否来自生成器的概率,即判断输入图像是否为假图的概率。

GAN的训练也与CNN大不相同,CNN是定义好特定的损失函数,然后利用梯度下降及其改进算法进行优化参数,尽可能用局部最优解去逼近全局最优解。但是GAN的训练是个动态的过程,是生成器GGG与判别器DDD两者之间的相互博弈过程。通俗点讲,GAN的目的就是无中生有,以假乱真。即要使得生成器GGG生成的所谓的"假图"骗过判别器DDD,那么最优状态就是生成器GGG生成的所谓的"假图"在判别器DDD的判别结果为0.5,不知道到底是真图还是假图。

接下来我们要对GAN中相关术语进行解释。首先给出解释的是生成器GGG。生成器GGG用于捕获输入高斯噪声的数据分布,产生"假图"。接下来即使的是判别器。判别器DDD则是评估输入样本是来自训练集而非生成器的概率。训练生成器GGG是为了最大化判别器DDD犯错的概率。原始GAN整个框架是生成器GGG与判别器DDD两者之间的相互博弈的动态过程。


二、GAN训练

接下来我们来介绍GAN的训练。首先我们给出原始GAN的目标函数(损失函数),损失函数表入下所示:
min⁡Gmax⁡DV(D,G)=Ex∼pdata(x)[log⁡D(x)]+Ez∼pdata(z)[log⁡(1−D(G(z)))](1)\underset{G}{\mathop{\min }}\,\underset{D}{\mathop{\max }}\,V(D,G)={{\mathbb{E}}_{x\sim {{p}_{data}}(x)}}[\log D(x)]+{{\mathbb{E}}_{z\sim {{p}_{data}}(z)}}[\log (1-D(G(z)))]\tag1 Gmin​Dmax​V(D,G)=Ex∼pdata​(x)​[logD(x)]+Ez∼pdata​(z)​[log(1−D(G(z)))](1)

其中,GGG代表生成器,DDD代表判别器,xxx代表真实数据,pdatap_{data}pdata​代表真实数据概率密度分布,zzz代表了随机输入数据,该数据是随机高斯噪声。

从上式可以看出,从判别器DDD角度来看判别器DDD希望能尽可能区分真实样本xxx和虚假样本G(z)G(z)G(z),因此D(x)D(x)D(x)必须尽可能大,D(G(z))D(G(z))D(G(z))尽可能小, 也就是V(D,G)V(D,G)V(D,G)整体尽可能大。从生成器GGG的角度来看,生成器GGG希望自己生成的虚假数据G(z)G(z)G(z)可以尽可能骗过判别器DDD,也就是希望D(G(z))D(G(z))D(G(z))尽可能大,也就是V(D,G)V(D,G)V(D,G)整体尽可能小。GAN的两个模块在训练相互对抗,最后达到全局最优。

下面原始论文也给出了GAN的训练过程示意图。在上图中,平行线代表噪声zzz,它映射到了xxx,蓝色点线代表判别器DDD的输出,黑色圆点代表真实数据分布pdatap_{data}pdata​,绿色实线代表生成器GGG的虚假数据的概率分布pgp_gpg​。可以从下面图看出,在GAN的训练过程中,生成器GGG的概率密度分布慢慢的逼近真实数据集的概率密度分布,而判别器预测值也在不断下降,当出现下图(d)的情况时,D(G(z))=0.5D(G(z))=0.5D(G(z))=0.5,即分不清输入图像到底是真实图像还是生成器伪造的假图。

接下来,我们给出GAN训练的算法,如下图所示。从下图训练算法可以看出,首先利用上述目标函数结合梯度上升训练K次判别器,之后结合梯度下降去训练1次器。

在论文中,作者也给出了GAN相关结论数学证明 ,CSDN上已经有大神给出相关详细推导过程,在此我就不给出相关证明了,若有兴趣请移步:GAN论文阅读——原始GAN(基本概念及理论推导)。不过我在此也对相关接结论进行一个归纳:

  1. 生成器概率密度分布pgp_gpg​与真实数据分布pdatap_{data}pdata​相等时,GAN的目标函数取得全局最优解。
  2. 最优判别器DDD的表达式为:DG∗(x)=pdata(x)pdata(x)+pG(x)D_{G}^{*}(x)=\frac{{{p}_{data}}(x)}{{{p}_{data}}(x)+{{p}_{G}}(x)}DG∗​(x)=pdata​(x)+pG​(x)pdata​(x)​,那么GAN取得最优时pg=pdatap_g = p_{data}pg​=pdata​,,那么DG∗(x)=0.5D_{G}^{*}(x)=0.5DG∗​(x)=0.5
  3. 综合1,2两点,虽然在实际训练GAN中,我们最终不能使得pg=pdatap_g = p_{data}pg​=pdata​,但是我们v必须尽可能去逼近这个结果,这样才能使得生成的“假图”能够以假乱真。

三、 实验结果

下面给出原始GAN实验结果。首先给出在MNIST数据集和TFD上对数极大似然估计,实验结果如下如所示。

接下来是是实验结果可视化,分别在mnist数据集、TFD数据集和CIFAR-10数据集进行训练,然后生成中间训练结果,如下图所示。其中图a是mnist数据集的训练结果,图b是TFD数据集的训练结果,图c是利用全连接网络的GAN在CIFAR-10数据集上的训练结果,图d是利用卷积和反卷积的GAN在CIFAR-10数据集上的训练结果。


后记

至此GAN系列第二篇——原始GAN论文详解到此结束,在下一篇博客我们将详细介绍DCGAN的。

【GAN】二、原始GAN论文详解相关推荐

  1. Spark RDD 论文详解(二)RDDs

    前言 本文隶属于专栏<1000个问题搞定大数据技术体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见1000个问题搞定大数据技 ...

  2. Spark 3.2.0 版本新特性 push-based shuffle 论文详解(二)背景和动机

    前言 本文隶属于专栏<大数据技术体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见大数据技术体系 目录 Spark 3.2.0 ...

  3. pix2pix论文详解

    pix2pix论文详解 – 潘登同学的对抗神经网络笔记 文章目录 pix2pix论文详解 -- 潘登同学的对抗神经网络笔记 pix2pix简介 模型输入 与GAN的区别 Loss函数的选取 condi ...

  4. Fast R-CNN论文详解

    Fast R-CNN论文详解 作者:ture_dream &创新点 规避R-CNN中冗余的特征提取操作,只对整张图像全区域进行一次特征提取: 用RoI pooling层取代最后一层max po ...

  5. KernelGAN论文详解分享

    KernelGAN- Blind Super-Resolution Kernel Estimation using an Internal-GAN论文详解 论文地址:https://arxiv.org ...

  6. Spark RDD 论文详解(三)Spark 编程接口

    前言 本文隶属于专栏<1000个问题搞定大数据技术体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见1000个问题搞定大数据技 ...

  7. Java8初体验(二)Stream语法详解(转)

    本文转自http://ifeve.com/stream/ Java8初体验(二)Stream语法详解 感谢同事[天锦]的投稿.投稿请联系 tengfei@ifeve.com 上篇文章Java8初体验( ...

  8. 智能城市dqn算法交通信号灯调度_博客 | 滴滴 KDD 2018 论文详解:基于强化学习技术的智能派单模型...

    原标题:博客 | 滴滴 KDD 2018 论文详解:基于强化学习技术的智能派单模型 国际数据挖掘领域的顶级会议 KDD 2018 在伦敦举行,今年 KDD 吸引了全球范围内共 1480 篇论文投递,共 ...

  9. 限时9.9元 | 快速领取数学建模竞赛备战必备技巧与论文详解!

    全世界只有3.14 % 的人关注了 青少年数学之旅 大家晚上好,随着美赛时间的公布以及大大小小的数学建模竞赛的进行,小天经常可以收到来自很多小伙伴们提出的问题,"竞赛中如何去考虑选题?&qu ...

最新文章

  1. python 基础学习 正则表达式1(规则)
  2. Kubernetes — Overview
  3. 18-Chain of trust bindings
  4. OpenCV创建小部件Creating Widgets
  5. 【转】从哈希存储到Bloom Filter
  6. 解决RM删除没有释放空间问题
  7. matlab 不允许函数定义,matlab中函数定义在脚本中不允许是什么意思
  8. Markdown语法014:浏览器兼容
  9. C语言fcntl函数
  10. 基于激光雷达技术的3维虚拟校园建设与研究_爱学术—免费下载
  11. 设计模式之观察者模式(Java实现)
  12. Excel冻结窗口及设置下拉菜单
  13. arcgis生成等高线CAD无法识别高程
  14. 智能电饭煲自动洗米手机操控一键搞定
  15. Android中HorizontalScrollView的使用总结
  16. 计算机中的英语六级作文万能模板,六级作文通用万能模板
  17. 家用监控器怎么选择,怎么连接手机远程监控,保存多久视频
  18. linux sh脚本各种数值进制转换(比如10进制转16)若干例子
  19. GPUImage--美颜滤镜GPUImageBeautifyFilter
  20. java注册时向指定邮箱发送邮件激活

热门文章

  1. android 游戏 育碧,育碧新作 Android游戏《动物过山车》
  2. 线性与非线性规划——单纯形法python实现
  3. 骂人变成**是怎么做到的——过滤器Filter
  4. DDL DML DCL TCL
  5. Unity3D网络游戏0.6
  6. Java毕设项目网上摄影工作室(java+VUE+Mybatis+Maven+Mysql)
  7. html涟漪特效,基于WebGL的炫酷元素背景水波涟漪jQuery特效
  8. gtx1060和gtx970的差距 哪个好
  9. linux: Resource temporarily unavailable 问题解决
  10. VSCode格式化配置