对抗网络——GAN

人脸检测,图像识别,语音识别等等,人类或者机器总是在现有的事物的基础上做出描述和判断,那么大家考虑一个东西,能不能创造出这个世界上不存在的东西?——————————GAN(生成对抗网络)

GAN主要包含三个部分:生成,判别和对抗

生成和判别是两个独立的模块

生成器:负责使用随机向量产生内容,这些内容可以是图片,文字等等

判别器:负责判断接受到的内容是否是真实的

他会给出一个概率,代表内容的真实程度,那么生成器和判别器分别使用什么呢?没有规定,只要能够处理就可以,比如如果是图片任务就可以选择CNN,如果是文字类型的就可以使用RNN

对抗:这指的是GAN的交替训练的过程,先使用生成器生成一些假信息,和收集到的真的信息,一同交给判别器,让判别器学习区分两者,给真的高分,给假的低分,当判别器能够熟练判别这些信息的时候,再让生成器从判别器这个地方,获取高分为目标,不断的生成越来越好,越来越真实的信息,直到能骗过判别器,重复进行这个过程知道判别器分辨不出真假信息,这个时候就停止训练。

事例:

我们做GAN网络最终要达成的目标就是要训练最终一个很好的Generator生成器

其实想说明的意思呢,就是这个生成器,说白了就是要给网络,神经网络,当然也可以是全连接欸,只要能达到一个这样的目的:输入一个向量,经过这个生成器的网络,能获得到一张图片或者一句话。

生成器和判别器的异同点:

相同点:

这两个模型都可以看成是一个黑匣子,接受输入然后有一个输出,类似一个函数,一个输入输出映射。

不同点:

生成模型功能:比作是一个样本生成器,输入一个样本,然后把它包装成一个逼真的样本,也就是输出。

判别模型:比作一个二分类器(如同0-1分类器),来判断输入的样本是真是假。(就是输出值大于0.5还是小于0.5)

判别网络的目的:就是能判别出来属于的一张图它是来自真实样本集还是假样本集。假如输入的是真样本,网络输出就接近1,输入的是假样本,网络输出接近0,那么很完美,达到了很好判别的目的。

生成网络的目的:生成网络是造样本的,它的目的就是使得自己造样本的能力尽可能强,强到什么程度呢,你判别网络没法判断我是真样本还是假样本。

那么最终生成对抗网络我们想让谁赢?肯定是想让生成模型赢。

注意生成模型和判别模型是两个完全独立的模型,就好像两个完全独立的神经网络一样,在训练的阶段交替互相训练。

假设现在生成网络模型已经有了(可能不是最好的生成网络),那么给一堆随机数组,就会得到一堆假的样本集(因为不是最终的生成模型,那么现在生成网络可能就处于劣势,导致生成的样本就不咋地,可能很容易就被判别网络判别出来了说这货是假冒的),但是先不管这个,假设我们现在有了这样的假样本集,真样本集一直都有,现在我们人为的定义真假样本集的标签,因为我们希望真样本集的输出尽可能为1,假样本集为0,很明显这里我们就已经默认真样本集所有的类标签都为1,而假样本集的所有类标签都为0.

有人会说,在真样本集里面的人脸中,可能张三人脸和李四人脸不一样呀,对于这个问题我们需要理解的是,我们现在的任务是什么,我们是想分样本真假,而不是分真样本中那个是张三label、那个是李四label。况且我们也知道,原始真样本的label我们是不知道的。回过头来,我们现在有了真样本集以及它们的label(都是1)、假样本集以及它们的label(都是0),这样单就判别网络来说,此时问题就变成了一个再简单不过的有监督的二分类问题了,直接送到神经网络模型中训练就完事了。假设训练完了,下面我们来看生成网络。

对于生成网络,想想我们的目的,是生成尽可能逼真的样本。那么原始的生成网络生成的样本你怎么知道它真不真呢?就是送到判别网络中,所以在训练生成网络的时候,我们需要联合判别网络一起才能达到训练的目的。什么意思?就是如果我们单单只用生成网络,那么想想我们怎么去训练?误差来源在哪里?细想一下没有,但是如果我们把刚才的判别网络串接在生成网络的后面,这样我们就知道真假了,也就有了误差了。所以对于生成网络的训练其实是对生成-判别网络串接的训练,就像图中显示的那样。好了那么现在来分析一下样本,原始的噪声数组Z我们有,也就是生成了假样本我们有,此时很关键的一点来了,我们要把这些假样本的标签都设置为1,也就是认为这些假样本在生成网络训练的时候是真样本。

那么为什么要这样呢?我们想想,是不是这样才能起到迷惑判别器的目的,也才能使得生成的假样本逐渐逼近为正样本。好了,重新顺一下思路,现在对于生成网络的训练,我们有了样本集(只有假样本集,没有真样本集),有了对应的label(全为1),是不是就可以训练了?有人会问,这样只有一类样本,训练啥呀?谁说一类样本就不能训练了?只要有误差就行。还有人说,你这样一训练,判别网络的网络参数不是也跟着变吗?没错,这很关键,所以在训练这个串接的网络的时候,一个很重要的操作就是不要判别网络的参数发生变化,也就是不让它参数发生更新,只是把误差一直传,传到生成网络那块后更新生成网络的参数。这样就完成了生成网络的训练了。

在完成生成网络训练好,那么我们是不是可以根据目前新的生成网络再对先前的那些噪声Z生成新的假样本了,没错,并且训练后的假样本应该是更真了才对。然后又有了新的真假样本集(其实是新的假样本集),这样又可以重复上述过程了。我们把这个过程称作为单独交替训练。我们可以实现定义一个迭代次数,交替迭代到一定次数后停止即可。这个时候我们再去看一看噪声Z生成的假样本会发现,原来它已经很真了。

看完了这个过程是不是感觉GAN的设计真的很巧妙,个人觉得最值得称赞的地方可能在于这种假样本在训练过程中的真假变换,这也是博弈得以进行的关键之处。

深度学习--生成对抗网络(Generative Adversarial Nets)相关推荐

  1. 生成对抗网络Generative Adversarial Nets(译)

    仅供参考,如有翻译不到位的地方敬请指出. 论文地址:Generative Adversarial Nets  论文翻译:XlyPb(http://blog.csdn.net/wspba/article ...

  2. 深度学习生成对抗网络(GAN)

    一.概述 生成对抗网络(Generative Adversarial Networks)是一种无监督深度学习模型,用来通过计算机生成数据,由Ian J. Goodfellow等人于2014年提出.模型 ...

  3. 生成对抗网络 – Generative Adversarial Networks | GAN

    生成对抗网络 – Generative Adversarial Networks | GAN 生成对抗网络 – GAN 是最近2年很热门的一种无监督算法,他能生成出非常逼真的照片,图像甚至视频.我们手 ...

  4. 生成对抗网络(Generative Adversarial Networks)

    参考  生成对抗网络(Generative Adversarial Networks) - 云+社区 - 腾讯云 目录 一.生成对抗网络原理 1.模型的起源 2.模型的结构和损失函数 二.对GAN的改 ...

  5. 你真的了解深度学习生成对抗网络(GAN)吗?

    生成对抗网络(GANs,https://en.wikipedia.org/wiki/Generative_adversarial_network)是一类具有基于网络本身即可以生成数据能力的神经网络结构 ...

  6. [深度学习]生成对抗网络的实践例子

    系列文章目录 深度学习GAN(一)之简单介绍 深度学习GAN(二)之DCGAN基于CIFAR10数据集的例子 深度学习GAN(三)之DCGAN基于手写体Mnist数据集的例子 深度学习GAN(四)之c ...

  7. 深度卷积生成对抗网络

    深度卷积生成对抗网络 Deep Convolutional Generative Adversarial Networks GANs如何工作的基本思想.可以从一些简单的,易于抽样的分布,如均匀分布或正 ...

  8. 利用python实现深度学习生成对抗样本模型,为任一图片加扰动并恢复原像素的全流程记录

    利用python实现深度学习生成对抗样本,为任一图片加扰动并恢复原像素 一.前言 (一)什么是深度学习 (二)什么是样本模型 (三)什么是对抗样本 1.对抗的目的 2.谁来对抗? 3.对抗的敌人是谁? ...

  9. 深度卷积生成对抗网络DCGAN之实现动漫头像的生成(基于keras Tensorflow2.0实现)

    起飞目录 DCGAN简介 反卷积(上采样upsampling2D) 数据集 代码实战 数据导入和预处理 生成器G 判别器D 训练模块 完整代码 结果 2020 8/13补充 DCGAN简介 原始GAN ...

  10. 深度卷积生成对抗网络--DCGAN

    本问转自:https://ask.julyedu.com/question/7681,详情请查看原文 --前言:如何把CNN与GAN结合?DCGAN是这方面最好的尝试之一,DCGAN的原理和GAN是一 ...

最新文章

  1. 干掉visio,这个画图神器真的绝了!!!
  2. Django博客系统(登录)
  3. 选择合适的CMS搭建网站
  4. Effective C++ -- 零散知识点整理
  5. Python中join 和 split详解
  6. 手写自定义注解实现思路
  7. KVM更改虚拟机默认存储路径
  8. Git指令2 - 操作分支
  9. 博客园添加鼠标粒子吸附特效
  10. pytorch 实现 LSTM AutoEncoder 与案例
  11. 匿名内部类为什么访问外部类局部变量必须是final的?
  12. 关于RN报Unrecognized font family ionicons
  13. MongoDB 日志管理
  14. 互联网诞生记:风起于青萍之末
  15. sudo,,sudo-i ,,su的区别
  16. 权值衰减weight decay的理解
  17. 使用javascript制作 滚动字幕及时钟
  18. ajax,HTTP原理 : 网络传输协议,网页从输入url到渲染的流程,函数防抖和节流
  19. html加载特效大全,10种炫酷的CSS3 loading加载动画特效
  20. plsql远程连接Oracle

热门文章

  1. Mysql 搭建MHA高可用架构,实现自动failover,完成主从切换
  2. STM32 HAL UART 框架初体验
  3. 程序生活 - 减肥小记
  4. mysql将角色r1授予用户u1_常见的mysql权限设置
  5. 在局域网中安装和设置防病毒服务器(10)(转)
  6. yarn web管理界面
  7. ARM KEIL5编译环境搭建及建立工程文件模板
  8. Tableau制作我国疫情数据可视化报表
  9. 室内定位技术(二)——竞争对手分析
  10. VS2013通过MySQL ConnectorC++操作数据库