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. 从代理模式 到 SpringAOP

    前言 Spring AOP 就是通过代理模式来实现切面编程的.代理模式用来为其他对象提供一种代理,以控制对这个对象的访问. 代理对象在客户端和目标对象之间起到中介的作用.通过控制对这个对象的访问,可以 ...

  2. 对String Intern()方法的理解

    今天重新看了一点周志明大佬的<深入理解Java虚拟机>,发现这个地方讲的不是很透彻,在网络上看到一些博客基本也都是在搬运原文,搞得一头雾水.弄了半天算是彻底明白了,做一下笔记. 搬运一下原 ...

  3. MyBatis(三):自定义持久层框架实现

    代码已上传至码云:https://gitee.com/rangers-sun/mybatis 新建Maven工程 架构端MyPersistent.使用端MyPersistentTest,使用端引入架构 ...

  4. Excel查分系统搭建小技巧

    推荐一个教师必备工具"Yichafen",是一个在线查分系统,全国8000所高校都在用,三分钟极速创建发布查分系统 在工作学习中,我们经常会遇到查分系统这样的问题.培根说过:读书足 ...

  5. 前端笔记:React的form表单全部置空或者某个操作框置空的做法

    1.全部置空的做法,一般在弹出框关闭后,需要重置该form所有表单: this.props.form.resetFields(); 2.针对某个操作框置空的做法 例如,form表单里有一个部门和一个张 ...

  6. Kotlin/Java Base64编码和解码(图片、文件)

    原文: Kotlin/Java Base64编码和解码(图片.文件) | Stars-One的杂货小窝 最近在项目中使用到了Base64编码和解码,便是稍微写篇文章记录一下 PS:本文代码都是使用Ko ...

  7. 【python+selenium的web自动化】- 元素的常用操作详解(二)

    如果想从头学起selenium,可以去看看这个系列的文章哦! https://www.cnblogs.com/miki-peng/category/1942527.html ​ 本篇主要内容:1.鼠标 ...

  8. golang 二维平面求多重遮挡三角形总面积

    解决问题描述:二维平面有很多三角形错落,可能会相互叠加落在一起,也可能互相远离.目标求出这些三角形的总占地面积. 我最开始想的解决方案是用总面积-总重叠面积 = 总占地面积.后来实现起来发现当面临多次 ...

  9. 解决unbutu网络编程socket_tcp连接不上网络助手

    unbutu开放指定端口 开放端口8080 sudo iptables -I INPUT -p tcp --dport 8080 -j ACCEPT 保存设置 iptables-save 在终端中输入 ...

  10. (一)SpringBoot启动过程的分析-启动流程概览

    -- 以下内容均基于2.1.8.RELEASE版本 通过粗粒度的分析SpringBoot启动过程中执行的主要操作,可以很容易划分它的大流程,每个流程只关注重要操作为后续深入学习建立一个大纲. 官方示例 ...