https://www.toutiao.com/a6675315277808271884/

1. 生成模型与判别模型

理解对抗网络,首先要了解生成模型和判别模型

判别模型比较好理解,就像分类一样,有一个判别界限,通过这个判别界限去区分样本。从概率角度分析就是获得样本 x 属于类别y 的概率,是一个条件概率 P(y|x)。

而生成模型是需要在整个条件内去产生数据的分布,就像高斯分布一样,需要去拟合整个分布,从概率角度分析就是样本 x 在整个分布中的产生的概率,即联合概率 P(xy)。

2. 对抗网络思想

理解了生成模型和判别模型后,再来理解对抗网络就很直接了,对抗网络只是提出了一种网络结构,总体来说, GANs 简单的想法就是用两个模型,一个生成模型,一个判别模型。

判别模型用于判断一个给定的图片是不是真实的图片(从数据集里获取的图片),生成模型的任务是去创造一个看起来像真的图片一样的图片。而在开始的时候这两个模型都是没有经过训练的,这两个模型一起对抗训练,生成模型产生一张图片去欺骗判别模型,然后判别模型去判断这张图片是真是假,最终在这两个模型训练的过程中,两个模型的能力越来越强,最终达到稳态。(本书仅介绍 GANs 在计算机视觉方面的应用,但是 GANs 的用途很广,不单单是图像,其他方面,譬如文本、语音,或者任何只要含有规律的数据合成,都能用 GANs 实现。)

3. 详细实现过程

假设我们现在的数据集是手写体数字的数据集 mnist,生成模型的输入可以是二维高斯模型中一个随机的向量,生成模型的输出是一张伪造的 fake image,同时通过索引获取数据集中的真实手写数字图片 real image,然后将 fake image 和 real image 一同传给判别模型,由判别模型给出 real 还是 fake 的判别结果。于是,一个简单的 GANs 模型就搭建好了。

值得注意的是,生成模型 G 和判别模型 D 可以是各种各样的神经网络,对抗网络的生成模型和判别模型没有任何限制。

3.1 前向传播阶段

1. 模型输入

1 、我们随机产生一个随机向量作为生成模型的数据,然后经过生成模型后产生一个新

的向量,作为 Fake Image,记作 D(z)。

2 、从数据集中随机选择一张图片,将图片转化成向量,作为 Real Image,记作 x。

2. 模型输出

将由 1 或者 2 产生的输出,作为判别网络的输入,经过判别网络后输出值为一个 0 到 1之间的数,用于表示输入图片为 Real Image 的概率,real 为 1,fake 为 0。使用得到的概率值计算损失函数,解释损失函数之前,我们先解释下判别模型的输入。根据输入的图片类型是 Fake Image 或 Real Image 将判别模型的输入数据的 label 标记为 0或者 1。即判别模型的输入类型为(Xfake ,0)或者(Xreal ,1)。

3.2 反向传播阶段

1. 优化目标

原文给了这么一个优化函数:

我们来理解一下这个目标公式,先优化 D,再优化 G,拆解之后即为如下两步:

第一步:优化 D

优化 D,即优化判别网络时,没有生成网络什么事,后面的 G(z)就相当于已经得到的假样本。优化 D 的公式的第一项,使得真样本 x 输入的时候,得到的结果越大越好,因为真样本的预测结果越接近1越好;对于假样本G(z),需要优化的是其结果越小越好,也就是D(G(z))越小越好,因为它的标签为 0。但是第一项越大,第二项越小,就矛盾了,所以把第二项改为 1-D(G(z)),这样就是越大越好。

第二步:优化 G

在优化 G 的时候,这个时候没有真样本什么事,所以把第一项直接去掉,这时候只有假样本,但是这个时候希望假样本的标签是 1,所以是 D(G(z))越大越好,但是为了统一成 1-D(G(z))的形式,那么只能是最小化 1-D(G(z)),本质上没有区别,只是为了形式的统一。之后这两个优化模型可以合并起来写,就变成最开始的最大最小目标函数了。我们依据上面的优化目标函数,便能得到如下模型最终的损失函数。

2. 判别模型的损失函数

当输入的是从数据集中取出的 real Image 数据时,我们只需要考虑第二部分,D(x)为判别模型的输出,表示输入 x 为 real 数据的概率,我们的目的是让判别模型的输出 D(x)的输出尽量靠近 1。

当输入的为 fake 数据时,我们只计算第一部分,G(z)是生成模型的输出,输出的是一张 Fake Image。我们要做的是让 D(G(z))的输出尽可能趋向于 0。这样才能表示判别模型是有区分力的。

相对判别模型来说,这个损失函数其实就是交叉熵损失函数。计算 loss,进行梯度反传。这里的梯度反传可以使用任何一种梯度修正的方法。当更新完判别模型的参数后,我们再去更新生成模型的参数。

3. 生成 模型的损失函数

对于生成模型来说,我们要做的是让 G(z)产生的数据尽可能的和数据集中的数据一样。就是所谓的同样的数据分布。那么我们要做的就是最小化生成模型的误差,即只将由 G(z)产生的误差传给生成模型。

但是针对判别模型的预测结果,要对梯度变化的方向进行改变。当判别模型认为 G(z)输出为真实数据集的时候和认为输出为噪声数据的时候,梯度更新方向要进行改变。

即最终的损失函数为:

其中D̅ 表示判别模型的预测类别,对预测概率取整,为 0 或者 1.用于更改梯度方向,阈值可以自己设置,或者正常的话就是 0.5。

4. 反向传播

我们已经得到了生成模型和判别模型的损失函数,这样分开看其实就是两个单独的模型,针对不同的模型可以按照自己的需要去是实现不同的误差修正,我们也可以选择最常用的BP 做为误差修正算法,更新模型参数。

其实说了这么多,生成对抗网络的生成模型和判别模型是没有任何限制,生成对抗网络提出的只是一种网络结构,我们可以使用任何的生成模型和判别模型去实现一个生成对抗网络。当得到损失函数后就安装单个模型的更新方法进行修正即可。

4. GANs 大家族分类

随着 GANs 的火热,相关的衍伸模型出现了至少有上百种,在下面这个博客

https://deephunt.in/the-gan-zoo-79597dc8c347

中整理了非常多的 GANs 变种。本书仅选择与计算机视觉相关的 GANs 作介绍,简要地介绍其核心思想和算法原理。本书共涉及到 29种经典的 GANs 架构,现在将其按不同类型进行分类,并按时间排列列表如下。发表时间 名称 中文名称 论文地址

14 年 06 月 GANs 生成对抗网络 https://arxiv.org/pdf/1406.2661.pdf
14 年 11 月 CGAN 条件生成对抗网络 https://arxiv.org/pdf/1411.1784.pdf
15 年 06 月 LAPGAN 拉普拉斯金字塔 GAN https://arxiv.org/pdf/1506.05751.pdf
15 年 11 月 DCGAN 深度卷积生成对抗网络 https://arxiv.org/pdf/1511.06434.pdf
15 年 12 月 VAEGAN 变分自编码器 GAN https://arxiv.org/pdf/1512.09300.pdf
16 年 05 月 BiGAN 双向生成对抗网络 https://arxiv.org/pdf/1605.09782.pdf
16 年 06 月 CoGAN 耦合生成对抗网络 https://arxiv.org/pdf/1606.07536.pdf
16 年 06 月 fGAN f-散度生成对抗网络 https://arxiv.org/pdf/1606.00709.pdf
16 年 06 月 ImprovedDCGAN 提升的 DCGAN https://arxiv.org/pdf/1606.03498.pdf
16 年 06 月 InfoGAN 互信息生成对抗网络 https://arxiv.org/pdf/1606.03657.pdf
16 年 09 月 EBGAN 基于能量的生成对抗网络 https://arxiv.org/pdf/1609.03126.pdf
16 年 09 月 SRGAN 超分辨率生成对抗网络 https://arxiv.org/pdf/1609.04802.pdf
16 年 11 月 LSGAN 最小二乘生成对抗网络 https://arxiv.org/pdf/1611.04076.pdf
16 年 12 月 StackGAN 堆栈式生成对抗网络 https://arxiv.org/pdf/1612.03242.pdf
17 年 01 月 WGAN Was 距离生成对抗网络 https://arxiv.org/pdf/1701.07875.pdf
17 年 03 月 BEGAN 边界均衡生成对抗网络 https://arxiv.org/pdf/1703.10717.pdf
17 年 03 月 CycleGAN 循环生成对抗网络 https://arxiv.org/pdf/1703.10593.pdf
17 年 03 月 TripleGAN 三部分生成对抗网络 https://arxiv.org/pdf/1703.02291.pdf
17 年 04 月 WGAN-GP 加强版 WGAN https://arxiv.org/pdf/1704.00028.pdf
17 年 05 月 DRAGAN 深度回归分析 GAN https://arxiv.org/pdf/1705.07215.pdf
17 年 10 月 PGGAN 渐进生成对抗网络 https://arxiv.org/pdf/1710.10196.pdf
17 年 10 月 StackGAN++ 提升的堆栈式 GAN https://arxiv.org/pdf/1710.10916.pdf
17 年 11 月 StarGAN 星型结构 GAN https://arxiv.org/pdf/1711.09020.pdf
17 年 11 月 XGAN X 型结构 GAN https://arxiv.org/pdf/1711.05139.pdf
17 年 12 月 ComboGAN 合一式生成对抗网络 https://arxiv.org/pdf/1712.06909.pdf
18 年 02 月 SNGAN 频谱归一化生成对抗网络 https://arxiv.org/pdf/1802.05957.pdf
18 年 05 月 SAGAN 自注意力生成对抗网络 https://arxiv.org/pdf/1805.08318.pdf
18 年 07 月 RGAN 相对生成对抗网络 https://arxiv.org/pdf/1807.00734.pdf
18 年 09 月 BigGAN 大规模生成对抗网络 https://arxiv.org/pdf/1809.11096.pdf

后续将会逐一介绍这些 GANs 变种的实现原理。

GANs笔记(1) - 初步了解 GANs相关推荐

  1. 【GANs学习笔记】(一)初步了解GANs

    完整笔记:http://www.gwylab.com/note-gans.html ----------------------- 本章借鉴内容: https://blog.csdn.net/sxf1 ...

  2. python入门笔记之初步了解代码

    # # python入门笔记之初步了解代码 #### 昨日回顾 ##### 操作系统 对计算机:秘书,管家 对人类:提供一个人性化操作台 ##### 三层架构 ```mermaid graph TD ...

  3. 【Gans入门】Pytorch实现Gans代码详解【70+代码】

    简述 由于科技论文老师要求阅读Gans论文并在网上找到类似的代码来学习. 文章目录 简述 代码来源 代码含义概览 代码分段解释 导入包: 设置参数: 给出标准数据: 构建模型: 构建优化器 迭代细节 ...

  4. GANs学习系列(2):GANs最新进展二

    reference:http://blog.csdn.net/solomon1558/article/details/52338052 文献整理 题目 主要内容                     ...

  5. 吴恩达深度学习课程笔记(初步认识神经网络)

    吴恩达深度学习课程笔记1 课程主要内容 1.神经网络与深度学习介绍 2.Improving Deep Neural Networks:超参数调整,正则化,优化方法 3.结构化机器学习工程:比如如何分割 ...

  6. Python3.3 学习笔记1 - 初步安装

    下载Python3.3 Windows版本到本地,安装并简单运行: Python 3.3下载地址:http://www.python.org/download/ 安装Python,并在安装过程的选项中 ...

  7. VS 2008 Feature Pack界面开发学习笔记之初步接触

    作者:朱金灿 来源:http://blog.csdn.net/clever101/ 打算将最近学到的VS 2008 Feature Pack界面开发的一些心得写出来.VS 2010都出来了,我还刚用V ...

  8. WebSocket笔记(一) 初步认识

    原文:http://zhangxiao.org/2018/WebSocket/intro/ 使用场景 服务器,需要向客户端主动端推送消息(数据) 客户端,需要实施获取服务器上数据更新或变化 基本概念 ...

  9. Spring Boot笔记-@ComponentScan初步解析

    @ComponentScan默认是扫描当前包下的所有类(包括子包) 如下: @SpringBootConfiguration @EnableAutoConfiguration @ComponentSc ...

最新文章

  1. 文本域textarea 的值也是用value 来表示的。
  2. Windows下一个比较完美的线程池实现
  3. VTK:Filtering之Delaunay2D
  4. GridView多行表头合并
  5. gd动态曲线 php_PHP GD库动态生成折线图的实例代码
  6. node --- 模块化连接MongoDB数据库的参数设置方案之一
  7. 每个开发者都应该懂一点单元测试
  8. 【Kubernetes】 configmaps is forbidden User system:anonymous cannot list resource configmaps
  9. python3.9出了吗_Python 3.9正式版,新特性提前一睹为快
  10. win10安装马上6卡在icon.ico的一种解决方案
  11. 音频处理——解析PCM格式实例(音量调控)
  12. ZigBee学习之NXP JN5169开发环境搭建
  13. 苹果蓝牙耳机平替哪个好用?苹果蓝牙耳机平替推荐
  14. 您该怎样科学地准备过年?
  15. 四周无人机的姿态解算(2)
  16. 钱多多的编程语言晋升路
  17. 样品制备丨艾美捷蛋白质羰基比色测定试剂盒方案
  18. 微信小程序项目实例——幸运大转盘
  19. 惠普HP LaserJet Pro M305dn 打印机驱动
  20. 四川大学计算机导论半期考试,川大人的期末笔记!学霸原来是这样复习的……(内附天府通中奖名单)...

热门文章

  1. c++ qt 编译问题求解答
  2. 武汉一高中14名学生被剑桥牛津预录取!逻辑思路比结果更重要
  3. 网络设备转发数据包的整个流程_网络工程师(33):路由转发工作原理
  4. 人大魏哲巍:图神经网络的理论基础
  5. AWS 和 NVIDIA 实现 Mask R-CNN 和 T5-3B 最快训练时间 | AI 日报
  6. 刘铁岩:如何四两拨千斤,高效地预训练NLP模型?
  7. 开发你的第一个 Android 应用
  8. 【必点】程序员自助SDCC热门主题+图书豪华套餐
  9. OpenCV Python教程(2、图像元素的访问、通道分离与合并)
  10. Make GNN Great Again:图神经网络上的预训练和自监督学习