0901-生成对抗网络GAN的原理简介

pytorch完整教程目录:https://www.cnblogs.com/nickchen121/p/14662511.html

一、GAN 概述

GAN(生成对抗网络,Generative Adversarial Networks) 的产生来源于一个灵机一动的想法:What I cannot create, I do not understand.(那些我所不能创造的,我也没有真正地理解它。)

类似的,如果深度学习不能创造图片,那么它也没有真正地理解图片。那段时间深度学习已经开始在各类计算机视觉领域中达到了一个较高的成就,在很多任务中都取得了突破,但是人们一直对神经网络的黑盒模型表示质疑,也因此更多的人想从可视化的角度来套索卷及网络所学习的特征和特征间的组合,而 GAN 则从生成学习的角度展示了神经网络的强大能力。

GAN 解决了非监督学习中的著名问题:给定一批样本,训练一个系统能够生成类似的样本。

二、GAN 的网络结构

GAN 的网络结构图如上图所示,主要包含以下两个子网络:

  • 生成器(generator):输入一个随机噪声,生成一张图片
  • 判别器(discriminator):判断输入的图片时真图片还是假图片

训练判别器的时候,需要利用生成器生成的假图片和真实图片;训练生成器的时候,只需要用噪声生成假图片。判别器用来评估生成的假图片的质量,促使生成器相应地调整参数。

生成器的目标是尽可能地生成以假乱真的图片,让判别器以为这是真的图片;判别器的目标是将生成器生成的图片和真实图片区分开。可以看出这两者的目标相反,在训练过程中相互对抗,这也是它被称作生成对抗网络的原因。

三、通过一个举例具体化 GAN

上述的描述可能过于抽象,现在让我们用收藏齐白石作品的书画收藏家和假画贩子的例子来说明。

下图为齐白石画虾图真迹。

假画贩子相当于是生成器,他们希望能够模仿大师真迹伪造出以假乱真的假画,骗过收藏家;书画收藏家则希望把赝品和真迹区分开。在下述的例子中,假画贩子和收藏家所交易的画,主要都是齐白石画的虾。

在这个例子中,假设一开始假画贩子和收藏家都是新手,他们对真迹和赝品的概念都很模糊。假画贩子仿造出来的画几乎都是鬼画符,而收藏家也傻啦吧唧的把不少赝品当做了真迹,也有很多真迹当做了赝品。

起初,收藏家通过一堆赝品和真迹,发现画中的虾有一对大钳子,如果画中没有这个大钳子,则一概过滤掉,当做是赝品;假画贩子中的一堆画中没有大钳子的赝品基本都血本无归,只有有大钳子的赝品才被收藏家傻乎乎的买去了,因此假画贩子吸取经验,在所有的赝品中都加上了大钳子,其他部分还是鬼画符。

下图为假画贩子的第一版赝品。

魔高一尺道高一丈,收藏家买了所有的画都有了大钳子,但是收藏家发现还是不对劲,因为还是有些画是赝品,因此收藏家又一次闭关修炼,发现齐白石画的虾不仅有大钳子,虾还有弯曲的形状,并且虾须很长;假画贩子也发现了不对劲,只有大钳子的假画很多卖不出去了,因此假画贩子开始日夜作画,渐渐地,他发现只要这幅画有大钳子,虾有弯曲的形状,虾须很长,收藏家就会买,因此假画贩子又一次占了上风。

下图为假画贩子的第二版赝品。

正所谓道高一尺魔高一丈,假画贩子和收藏家就在这种的博弈情况下,一个鉴定假画的能力越来越强,一个作假画的水平越来越高超,两个人在博弈对抗中,还不断地促使对方学习进步,进而达到了共同提升的目的。

在这个例子中,假画贩子相当于一个生成器,收藏家相当于一个判别器。一开始生成器和判别器的水平都很差,因为二者都是随机初始化。

训练过程分为两步交替进行:

  1. 第一步是训练判别器(只修改判别器的参数,固定生成器),目标是把真迹和赝品区分开
  2. 第二步是训练生成器(只修改生成器的参数,固定判别器),为的是生成的假画能够被判别器判别为真迹

上述两步交替进行,进而分类器和判别器最终都会达到一个较高的水平,直至最后,生成器生成的虾的图片和齐白石的真迹几乎没有区别。

下图所示便是生成器生成的虾。

四、GAN 的设计细节

下面我们来思考网络结构的设计。

判别器的目标是判断输入的图片是真迹还是赝品,所以可以看成是一个二分类网络,可以设计一个简单的卷积网络完成。

生成器的目标是从噪声中生成一张彩色图片,这里我们采用广泛使用的 DCGAN(Deep Convolutional Generative Adversarial Networks)结构,也就是全卷机网络,它的结构如下图所示。

网路的输入是一个 100 维的噪声,输出是一个 3×64×64 的图片。其中这里的输入可以看成是一个 100×1×1 的图片,通过上卷积慢慢增大为 4×4、8×8、16×16、32×32 和 64×64。

上卷积,或称为转置卷积,是一种特殊的卷积操作,类似于卷及操作的逆运算。当卷积的 side 为 2 时,输出相比输入会下采样到一半的尺寸;而当上卷积的 side 为 2时,输出会上采样到输入的两倍尺寸。

这种上采样的方法可以理解为图片的信息保存于 100 个向量之中,神经网络根据这 100 个向量描述的信息,前几步的上采样先勾勒出轮廓、色调等基础信息,后几步上采样慢慢完善细节。网络越深,细节越详细。

在 DCGAN 中,判别器的结构和生成器对称:生成器中采用上采样的卷积,判别器中就采用下采样的卷积,生成器是根据噪声输出一张 64×64×3 的图片,而判别器则是根据输入的 64×64×3 的图片输出图片属于正负样本的分数(概率)。

0901-生成对抗网络GAN的原理简介的更多相关文章

  1. 用MXNet实现mnist的生成对抗网络(GAN)

    用MXNet实现mnist的生成对抗网络(GAN) 生成式对抗网络(Generative Adversarial Network,简称GAN)由一个生成网络与一个判别网络组成.生成网络从潜在空间(la ...

  2. 人工智能中小样本问题相关的系列模型演变及学习笔记(二):生成对抗网络 GAN

    [说在前面]本人博客新手一枚,象牙塔的老白,职业场的小白.以下内容仅为个人见解,欢迎批评指正,不喜勿喷![握手][握手] [再啰嗦一下]本文衔接上一个随笔:人工智能中小样本问题相关的系列模型演变及学习 ...

  3. 生成对抗网络GAN介绍

    GAN原理 生成对抗网络GAN由生成器和判别器两部分组成: 判别器是常规的神经网络分类器,一半时间判别器接收来自训练数据中的真实图像,另一半时间收到来自生成器中的虚假图像.训练判别器使得对于真实图像, ...

  4. TensorFlow从1到2(十二)生成对抗网络GAN和图片自动生成

    生成对抗网络的概念 上一篇中介绍的VAE自动编码器具备了一定程度的创造特征,能够"无中生有"的由一组随机数向量生成手写字符的图片. 这个"创造能力"我们在模型中 ...

  5. 深度学习-生成对抗网络GAN笔记

    生成对抗网络(GAN)由2个重要的部分构成: 生成器G(Generator):通过机器生成数据(大部分情况下是图像),目的是“骗过”判别器 判别器D(Discriminator):判断这张图像是真实的 ...

  6. 生成对抗网络(GAN)

    基本思想 GAN全称生成对抗网络,是生成模型的一种,而他的训练则是处于一种对抗博弈状态中的. 譬如:我要升职加薪,你领导力还不行,我现在领导力有了要升职加薪,你执行力还不行,我现在执行力有了要升职加薪 ...

  7. 深度学习框架PyTorch一书的学习-第七章-生成对抗网络(GAN)

    参考:https://github.com/chenyuntc/pytorch-book/tree/v1.0/chapter7-GAN生成动漫头像 GAN解决了非监督学习中的著名问题:给定一批样本,训 ...

  8. 科普 | ​生成对抗网络(GAN)的发展史

    来源:https://en.wikipedia.org/wiki/Edmond_de_Belamy 五年前,Generative Adversarial Networks(GANs)在深度学习领域掀起 ...

  9. 利用tensorflow训练简单的生成对抗网络GAN

    对抗网络是14年Goodfellow Ian在论文Generative Adversarial Nets中提出来的. 原理方面,对抗网络可以简单归纳为一个生成器(generator)和一个判断器(di ...

随机推荐

  1. InterJ idea 回滚提交的代码

    如果你要回滚到这一次提交 ctrl shift k 提交 选force push 那么你的代码就回滚到你所想要的这次提交记录了

  2. Centos mini系统下的Hadoop集群搭建

    1.事前了解 1.1 Hadoop 百度百科:https://baike.baidu.com/item/Hadoop/3526507?fr=aladdin Hadoop是一个由Apache基金会所开发 ...

  3. JDK 16 正式发布,一次性发布 17 个新特性…不服不行!

    上一篇:Java 15 正式发布, 14 个新特性 JDK 16 正式发布 牛逼啊,JDK 15 刚发布半年(2020/09/15),JDK 16 又如期而至(2021/03/16),老铁们,跟上. ...

  4. Linux性能优化:内存使用情况分析

    Blog:博客园 个人 目录 什么是内存 Linux内存回收机制 查看Linux内存情况 查看/proc/meminfo 使用free命令查看 Buffer和Cache Swap 内存泄漏和内存溢出 ...

  5. CQGUI框架之样式管理

    大家好,我是IT文艺男,来自一线大厂的一线程序员 今天给大家讲解基于C++/Qt的CQGUI框架的样式管理实现. 在Qt平台,实现窗口/控件美化或者自定义效果,有如下两种方式 重绘 样式 对于重绘,我 ...

  6. 全网最详细的Linux命令系列-iptrad-ng网络流量监测命令

    观察网络流量的工具:IPTRAF 想知道你的Linux系统上网络流量有多大吗?想知道是哪一块网卡承载着网络流量吗?想知道哪一个进程产生了网络流量吗?iptraf可以帮你做到.在最新的Linux rel ...

  7. [面试仓库]HTML面试题汇总

      HTML这一块呢,说简单也简单,说难也不是那么容易.但我们在各个面试要求中,大部分都把HTML这一条摆在了第一位,重要性可想而知.这个位置算是有关HTML的一个汇总点了,亦会在这里及时补充. 1, ...

  8. Unity2D项目-平台、解谜、战斗! 1.1战斗底层组件CanFight-CanBeFighted

    各位看官老爷们,这里是RuaiRuai工作室,一个做单机游戏的兴趣作坊. 本文对该2D项目中战斗底层组件的开发及设计思路做一个总结,希望各路同行多多交流,各路大佬多多指点. 实例特征分析 首先对于各个 ...

  9. Java中注释的形式

    单行注释 单行注释 // #双斜杠 快捷键:Ctrl + / 多行注释 多行注释 /* */ #单斜杠星号 星号单斜杠 快捷键:Ctrl + shift + / 文档注释 多行注释 /** */ #单 ...

  10. docker 容器重启策略

    查看docker 容器重启策略 docker inspect 容器ID docker run -d --restart=always bba-208 docker run -d --restart=o ...