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。

损失函数:
minGmaxDV(D,G)=Ex∼pdata(x)[logD(x)]+Ez∼pz(z)[log(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)))]minG​maxD​V(D,G)=Ex∼pdata(x)​​[logD(x)]+Ez∼pz​(z)​[log(1−D(G(z)))]
可以这样理解:损失函数做的是最大化D的区分度,最小化G输出和真实数据的区别。
损失函数可以拆分为两部分:
判别模型:log(D1(x))+log(1−D2(G(z)))…(1)log(D1(x))+log(1-D2(G(z)))…(1)log(D1(x))+log(1−D2(G(z)))…(1)
生成模型:log(D2(G(z)))…(2)log(D2(G(z)))…(2)log(D2(G(z)))…(2)
当判别模型能力强时,D1(x)−>1D1(x)->1D1(x)−>1, D2(G(z))−>0D2(G(z))->0D2(G(z))−>0,(1)式趋近于0
当生成模型能力强时,D2(G(z))−>1D2(G(z))->1D2(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

GAN网络-简单明了相关推荐

  1. 图像对抗生成网络 GAN学习01:从头搭建最简单的GAN网络,利用神经网络生成手写体数字数据(tensorflow)

    图像对抗生成网络 GAN学习01:从头搭建最简单的GAN网络,利用神经网络生成手写体数字数据(tensorflow) 文章目录 图像对抗生成网络 GAN学习01:从头搭建最简单的GAN网络,利用神经网 ...

  2. GAN背后的理论依据,以及为什么只使用GAN网络容易产生

    花了一下午研究的文章,解答了我关于GAN网络的很多疑问,内容的理论水平很高,只能尽量理解,但真的是一篇非常好的文章转自http://www.dataguru.cn/article-10570-1.ht ...

  3. LIVE 预告 | TransGAN:丢弃卷积,纯Transformer构建GAN网络

    自2014年Ian J. Goodfellow等人提出以来,生成对抗网络(GAN,Generative Adversarial Networks)便迅速成为人工智能领域中最有前景的研究方向之一. 而另 ...

  4. GAN——UNIT简单梳理

    自从2014年Goodfellow提出GAN(Generative adversarial networks)模型之后,在机器学习领域就砸下了一个大大的陨石坑,此后至今,已经有成百上千篇的GAN相关论 ...

  5. 『TensorFlow』通过代码理解gan网络_中

    『cs231n』通过代码理解gan网络&tensorflow共享变量机制_上 上篇是一个尝试生成minist手写体数据的简单GAN网络,之前有介绍过,图片维度是28*28*1,生成器的上采样使 ...

  6. 不服就GAN:GAN网络生成 cifar10 的图片实例(keras 详细实现步骤),GAN 的训练的各种技巧总结,GAN的注意事项和大坑汇总

    GAN 的调参技巧总结 生成器的最后一层不使用 sigmoid,使用 tanh 代替 使用噪声作为生成器的输入时,生成噪声的步骤使用 正态分布 的采样来产生,而不使用均匀分布 训练 discrimin ...

  7. GAN网络详解(从零入门)

    从一个小白的方式理解GAN网络(生成对抗网络),可以认为是一个造假机器,造出来的东西跟真的一样,下面开始讲如何造假:(主要讲解GAN代码,代码很简单) 我们首先以造小狗的假图片为例. 首先需要一个生成 ...

  8. GAN网络系列博客(三):不受坐标限制的GAN(StyleGAN3)

    目录 1. 概述 2. 连续信号分析 2.1 等变网络层 3. 具体实现 3.1 傅里叶特征和基础简化 3.2 根据连续插值进行的步骤重建 4.实验 总结 Reference 关于StyleGAN系列 ...

  9. GAN网络生成手写体数字图片

    Keras真香,以前都是用tensorflow来写神经网络,自从用了keras,发现这个Keras也蛮方便的. 目前感觉keras的优点就是方便搭建基于标准网络组件的神经网络,这里的网络组件包括全连接 ...

  10. 5G知识科普, 讲的这么简单明了

    转载自:第一次有人把 5G 讲的这么简单明了 一个简单且神奇的公式    今天的故事,从一个公式开始讲起.这是一个既简单又神奇的公式.说它简单,是因为它一共只有 3 个字母.而说它神奇,是因为这个公式 ...

最新文章

  1. 理解SetWindowOrg,SetViewportOrg,SetWindowExt,SetViewportExt
  2. HYSBZ 1010 玩具装箱toy (决策单调DP)
  3. poj 1325 Machine Schedule 解题报告
  4. 邀请合作如何表达_如何邀请大咖嘉宾来商群分享
  5. 面试题简答题——操作系统相关汇总
  6. Redis在本地安装与启动
  7. JS纯前端导出PDF及分页和使用window.print()保存PDF
  8. 如何实现用串口助手实时绘制16位数据波形图
  9. 关于数据安全中一些概念的学习——容灾备份
  10. 【PC】小米路由器Pro(R3P)升级/刷机
  11. ImportError: DLL load failed while importing Qsci
  12. Django的语言模板
  13. 如何测试服务器端口是否打开?
  14. Quasi-Newton拟牛顿法(共轭方向法)
  15. We‘re sorry but XXX doesn‘t work properly without JavaScript enabled. Please enable it to contin
  16. 微信小程序、微信小游戏作品汇总合集,各种好玩的小程序
  17. 一、区块链项目的基础架构
  18. 【51单片机实验笔记】3. LED点阵的基本控制
  19. Java - JDK动态代理原理
  20. p,np,npc,np难问题,确定图灵机与非确定图灵机

热门文章

  1. Django文档4.0(通俗易懂)
  2. c语言题库及详解答案 免费下载,C语言题库(带详解答案).pdf
  3. lmdb数据库的读取与转换(二) —— 数据集操作
  4. 高精度乘法+刘汝佳BigNumber高精度结构体
  5. 使用C#将RGB24转换为YUV420格式
  6. Redis的下载安装
  7. 生命游戏(python版)
  8. ArcScan矢量化
  9. CMSIS RTOS API,内核通用API接口
  10. Paraview快捷键操作