一.简介

在人工智能领域内,GAN是目前最为潮流的技术之一,GAN能够让人工智能具备和人类一样的想象能力。只需要给定计算机一定的数据,它就可以自动联想出相似的数据。我们学习和使用GAN的原因如下:

1.能够用GAN进行无监督学习:深度学习需要大量数据的标注才能够进行监督学习,而使用GAN则不需要使用大量标注的数据,可以直接生成数据进行无监督学习,比如使用GAN进行图像的语义分割,我们甚至根本不需要标注图像,计算机就可以自动对图像进行语义分割,目标检测等等。

2.使用GAN可以进行图像的风格迁移:我们可以将一段马的视频变成斑马,将一段真实世界里的视频变成动漫世界

3.使用GAN可以输入文字就输出图像:我们只需要随便对计算机说一句话,计算机就可以根据这段话想象出所对应的场景。

4.GAN:使用Gan可以恢复图像的分辨率,让图像变得更加清晰,或者去掉马赛克。比如前几个月的老北京项目,将100年前的一段北京街头的黑白视频变成了高清的彩色视频。

二.GAN的发展历史

GAN实际上从2014年才提出来,目前也只走过了6年的时间,当时Yun Lecun(LeNet-5的发明者)在Twitter上评论说GAN是人工智能领域最有顶尖的技术,但是因为在今年他所提出的去马赛克技术,因技术还不够成熟,将奥巴马(黑人)的打马赛克之后的图像去掉马赛克变成了白人,刺激了美国的种族主义者,因此把他骂退了Twitter的账号,Gan的发展历程如下:

从DCGANs开始人们第一次在生成对抗网络当中引入了深度神经网络的思想,从而让GAN的效果得到极大的提升。那么GAN的基本结构是怎么的呢?

三.生成式对抗网络的结构

生成对抗网络GAN的结构如下:

整个结构具有两个神经网络,一个是Generator神经网络,另一个则是Discriminator神经网络。Generator接受一个随机噪声(随机的一个向量的值)用于生成假的图片,Discriminator通过判定生成的图片和真实图片之间的差异来形成loss,同时在判定的时候更新自己的参数,直到能够完全分辨出假的图片和真实的图片,让loss变到最大为止。如下图所示就是一个用于生成二次元妹子头像的生成式对抗网络:

那么我们整个训练的步骤是怎样的呢?

第一步:

首先生成Fake image,然后固定住Generator,让其不更新参数,通过更新Discriminator的参数来让loss更小,这里的loss衡量的是什么呢??假设真是的图像的label为1,生成的fake image为0,loss就是衡量的Discriminator是否将真实的图片label为1以及将假的图片衡量为0的准确度,loss因此越小越好。从而使Discriminator能够区分真的图片和假的图片。

第二步:

我们直接固定住Discriminator和Trainnig Set,更新Generator的参数,使Discriminator的loss越来越大,让Discriminator根本无法分辨。这个时候参数更新又重复之间的第一步,固定住Generator,不断地迭代。最终就可以让生成的图片完全让人类的肉眼无法分辨其真假。

四.GAN的缺点

第一点是:根据实验可得,生成式对抗网络不容易梯度下降达到全局最优点,如下所示:

第二点则是容易出现模式坍塌,也就是训练出来的结果很可能让计算机丧失生成视频或者图片的多样性。比如说我们使用GAN生成的妹子图片和真实图片几乎像克隆人一般一模一样,从而丧失了GAN的想象力。

五.常见的对抗生成网络(GAN)

1.DCGAN是一种十分常见的对抗生成网络,如下图所示:

和原始GAN不同的是:

1.原始gan全都使用了全连接神经网络进行训练,而DCGAN将全连接网络层都替换成了卷积神经网络。

2.并在每一层之后添加了Batch Normilization,从而加速了训练,提升了训练的稳定性。

3.Generator的Hidden Layer都使用了Relu作为激活函数,Generator的最后一层使用了Tanh,Discriminator则使用了leakrelu作为了激活函数,可以防止梯度稀疏。

2.Multi agent diverse GAN(MAD-GAN)


通过增加多个生成器,从而让GAN生成的对象更加丰富:

一文入门人工智能的明珠:生成对抗网络(GAN)的更多相关文章

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

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

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

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

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

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

  4. 生成对抗网络GAN介绍

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

  5. 生成对抗网络(GAN)

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

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

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

  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. C#字符串拼接

    var name = "李哈哈"; var t = $"我是{name}";

  2. C/C++编程语言制作《游戏内存外挂》

    通过C/C++编程语言编写一个简单的外挂,通过 API 函数修改游戏数据,从而实现作弊功能 对象分析要用的 API 函数简单介绍编写测试效果. 下面是我整理好的全套C/C++资料,加入天狼QQ7269 ...

  3. Python 图像处理 OpenCV (13): Scharr 算子和 LOG 算子边缘检测技术

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...

  4. java 面向对象(三十三):泛型二 泛型在集合中的使用

    1. 在集合中使用泛型之前的例子 @Test public void test1(){ ArrayList list = new ArrayList(); //需求:存放学生的成绩 list.add( ...

  5. Django框架08 /聚合查询、分组、F/Q查询、原生sql相关

    Django框架08 /聚合查询.分组.F/Q查询.原生sql相关 目录 Django框架08 /聚合查询.分组.F/Q查询.原生sql相关 1. 聚合查询 2. 分组 3. F查询和Q查询 4. o ...

  6. 前端04 /css样式

    前端04 /css样式 目录 前端04 /css样式 昨日内容回顾 css引入 选择器 基础选择器 组合选择器 属性选择器 伪类选择器 伪元素选择器 优先级(权重) 通用选择器 css样式 1高度宽度 ...

  7. Elasticsearch备份数据

    Elasticsearch备份数据 1.建立备份目录 POST _snapshot/my_backup/ { "type": "fs", "setti ...

  8. JS 判断是否为数字 数字型特殊值

    JS 数字型三个特殊值 Infinity ,代表无穷大,大于任何数值 -Infinity ,代表无穷小,小于任何数值 NaN ,Not a number,代表一个非数值  isNaN的使用: isNa ...

  9. 操作句柄Handle(7)

    可以将Handle理解成访问对象的一个“句柄”.垃圾回收时对象可能被移动(对象地址发生改变),通过Handle访问对象可以对使用者屏蔽垃圾回收细节. Handle涉及到的相关类的继承关系如下图所示. ...

  10. c++运行程序 鼠标点击按钮 (c++)(windows)

    简介 这是在黑漆漆的程序中,制造用户可点击的按钮,来决定程序下一步该作什么,的基本代码. 详解 头文件 <cstdio>和<windows.h> 结构体 //这不全别复制 st ...