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. 如何在 ASP.Net Core 中使用 Lamar

    ASP.Net Core 自带了一个极简的 开箱即用 的依赖注入容器,实际上,你还可以使用第三方的 依赖注入容器 来替代它,依赖注入是一种设计模式,它能够有效的实现对象之间的解耦并有利于提高单元测试和 ...

  2. (数据科学学习手札112)Python+Dash快速web应用开发——表单控件篇(上)

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...

  3. 怎么用Markdown在github上写书,并用pages展示

    怎么用git写书 安装环境 第一步 安装node npm 先检测自己电脑是否安装了node npm # 查看 node 版本 node -v # 查看 npm 版本 npm -v 复制代码 如果成功打 ...

  4. Angle Beats Gym - 102361A

    题目链接:https://vjudge.net/problem/Gym-102361A 题意:给定N个点,q次询问每次询问给一个点,问在N个点中取2个和给定点最多可以组成几个直角三角形. 思路:htt ...

  5. Android Studio 之 RadioButton

    •任务 如何通过 RadioButton 实现如图所示的界面? •基本用法 RadioButton 单选按钮,就是只能够选中一个,所以我们需要把 RadioButton 放到 RadioGroup 按 ...

  6. OLAP引擎:基于Druid组件进行数据统计分析

    一.Druid概述 1.Druid简介 Druid是一款基于分布式架构的OLAP引擎,支持数据写入.低延时.高性能的数据分析,具有优秀的数据聚合能力与实时查询能力.在大数据分析.实时计算.监控等领域都 ...

  7. 从谷歌CRE谈起,运维如何培养服务意识?

    从谷歌CRE谈起,运维如何培养服务意识? 2016年10月,谷歌云平台博客(Google Cloud Platform Blog)上更新了一篇文章,谷歌宣布了一个新的专业岗位,CRE(Customer ...

  8. 2048小游戏(c++)(转)

    下为源码 #include <iostream> #include <windows.h> #include <ctime> using namespace std ...

  9. [Fundamental of Power Electronics]-PART I-2.稳态变换器原理分析-2.3 Boost 变换器实例

    2.3 Boost 变换器实例 图2.13(a)所示的Boost变换器器是另一个众所周知的开关模式变换器,其能够产生幅值大于直流输入电压的直流输出电压.图2.13(b)给出了使用MOSFET和二极管的 ...

  10. Dynamics CRM制作报表的时候让用户可以用自己的权限浏览数据

    我们做SSRS报表的时候最头疼的问题就是用Sql查出来的数据都是全部数据没有做权限过滤,导致不同用户看到的数据是一样的. 确实Dynamics CRM产品的数据库时有对这个做处理的,其中每个实体都会有 ...