在二分类问题中,使用JS散度是不合适的,因为图像的性质,PG和Pdata是不可能重叠的,不重叠的情况下计算出的JS散度永远是log2,所以上图中第一个图和第二个图没有区别,因此在二分类问题中会出现训练困难的问题。

tips1 LSGAN

问题:绿色点为real data,蓝色点为generated data。可能会出现一个状况,如果二分类器训练的太好(即蓝色为0,绿色为1),使用sigmoid函数进行训练会出现训练困难的问题,因为在0处梯度几乎为0。这样generator想把蓝色的点往右移发现会移不动。因此在没有这些tips的时候训练discriminator,不要训练的太差(分辨不出来),也不要训练的太好,一般边吃饭的时候边看输出(hahaha)。

有人提出使用LSGAN,即将sigmoid激活函数换成线性的。

tips2 WGAN
在之前训练GAN的时候,用的都是JS散度或者f散度,这里不再使用它们。

WGAN使用的是Earth Mover‘s Distance来衡量两个分布的差异。
假设有两个data P和G,假设有一台推土机,将P中的土铲到Q中走过的平均的距离即为W,上图假设一维空间下的情形,P和Q都在一个点上,则W=d。

但是该方法会有一个问题:铲土有好多种方法,哪个为所求呢?
一种方法:可以穷举所有铲土的方法,走过距离最小的即为所求。

首先要做一个moving plan。moving plan实质为一个矩阵,矩阵的值越亮代表P的土挪到Q越多。我们可以求出平均距离B(γ),然后穷举所有的B(γ),取最小值。


WGAN的discriminator应该是这样的,P中sample出的data应该尽可能大,G中sample出的data应该尽可能小。但是这样还是不够的,因为这样real会无限大,generated会无限小,永远不会收敛。因此应该加一个限制条件,D要足够平滑。

即输出的变化不能超过输入的变化。

问题是怎么解,如果把constraint拿掉,很好解,但是在D上加了constraint很难解。

解决办法:
最原始的解决办法是梯度裁剪,即权值绝对值超过某个值c,则把weight设置为c,结束。但是该方法达不到1-lipschitz的效果。

后来出现inproved WGAN(WGAN-GP)

上图中,使得D(x)在所有点的梯度小于等于1等价于D满足1-Lipschitz。
但是我们无法sample出所有的x进而计算D(x)的梯度。所以,我们从Ppenalty这个分布中sample x。

Ppenalty指的是:在Pdata中sample一个点,在PG中sample一个点,将两个点相连。若干个这样的连线构成的分布即Ppenalty。
一个直观的理解:WGAN的思想是将PG挪到Pdata,因此它们中间的地方才会有影响。

本来我们要求的是D(x)的梯度大于1有惩罚,小于1没有惩罚。但是WGAN最终做的是,让D(x)的梯度越接近1越好。文章中提出D(x)的梯度越接近1,表现越好。
实际上improved WGAN也是有问题的,比如右下角的图,将黄色的点移动到红色的点,给红色的线penalty,它可能不会沿着黑色的线走。


Spectrum Norm可以使得每个位置的gradient norm都小于1.具体细节请查阅文献。

训练GAN的流程

如果训练WGAN,需要把sigmoid拿掉,带着sigmoid实际上是JS diversion。


对于EBGAN,Generator是不变的,Discriminator使用的AutoEncoder。它的思想是将生成图片通过一个AutoEncoder,与重新生成的图片计算一下loss,将loss✖️-1得到的即为输出。
EBGAN的好处是,AutoEncoder是可以进行预训练的,它可以只用正样本进行预训练,而二分类问题是不行的。使用EBGAN可以对autoEncoder进行预训练,刚开始就可以拿到一个较强的Discriminator,否则需要先训练generator,要训练很久才能得到一个很厉害的Discriminator。

注意EBGAN在训练的时候,我们关注的是real data得分越大越好,并不是generate越小越好,因为建设难破坏容易。比如我们输入一个data,生成一个vector,再由vector重建图像是很困难的;但是加入一个noise就可以使得分很小,这样虽然可以使loss很小,但这不是我们要的,因此在generate的data中设置一个margin,得分小于margin即可。

GAN 生成对抗网络 10-6 Tips for improving GAN相关推荐

  1. 54_pytorch GAN(生成对抗网络)、Gan代码示例、WGAN代码示例

    1.54.GAN(生成对抗网络) 1.54.1.什么是GAN 2014 年,Ian Goodfellow 和他在蒙特利尔大学的同事发表了一篇震撼学界的论文.没错,我说的就是<Generative ...

  2. 深度学习(九) GAN 生成对抗网络 理论部分

    GAN 生成对抗网络 理论部分 前言 一.Pixel RNN 1.图片的生成模型 2.Pixel RNN 3.Pixel CNN 二.VAE(Variational Autoencoder) 1.VA ...

  3. 深度学习 GAN生成对抗网络-1010格式数据生成简单案例

    一.前言 本文不花费大量的篇幅来推导数学公式,而是使用一个非常简单的案例来帮助我们了解GAN生成对抗网络. 二.GAN概念 生成对抗网络(Generative Adversarial Networks ...

  4. 使用PyTorch构建GAN生成对抗网络源码(详细步骤讲解+注释版)02 人脸识别 下

    文章目录 1 测试鉴别器 2 建立生成器 3 测试生成器 4 训练生成器 5 使用生成器 6 内存查看 上一节,我们已经建立好了模型所必需的鉴别器类与Dataset类. 使用PyTorch构建GAN生 ...

  5. 使用PyTorch构建GAN生成对抗网络源码(详细步骤讲解+注释版)02 人脸识别 上

    文章目录 1 数据集描述 2 GPU设置 3 设置Dataset类 4 设置辨别器类 5 辅助函数与辅助类 1 数据集描述 此项目使用的是著名的celebA(CelebFaces Attribute) ...

  6. 【轩说AI】生成模型(2)—— GAN生成对抗网络 + WGAN + Conditional GAN + Cycle GAN

    文章目录 GAN生成对抗网络(Generative Adversarial Network) 神经网络的本质就是一个函数,一个用于拟合的函数 生成模型面临的前所未有的问题 GAN解决这一问题的思想 O ...

  7. 生成对抗网络(Generative Adversarial Network,GAN)

    生成对抗网络(Generative Adversarial Network,GAN) Generative:生成式模型 Adversarial:采取对抗的策略 Networks:网络(不一定是深度学习 ...

  8. GAN (生成对抗网络) 手写数字图片生成

    GAN (生成对抗网络) 手写数字图片生成 文章目录 GAN (生成对抗网络) 手写数字图片生成 Discriminator Network Generator Network 简单版本的生成对抗网络 ...

  9. 生成对抗网络(Generative Adversarial Networks,GAN)

    目录 生成对抗网络(Generative Adversarial Networks,GAN) 一.什么是GAN 二.GAN的模型结构 三.实战案例 3.1 使用GAN生成人脸照片 四.深入理解GAN模 ...

  10. GAN -- 生成对抗网络

    GAN -- 生成对抗网络 生成对抗网络(英语:Generative Adversarial Network,简称GAN)是非监督式学习的一种方法,通过让两个神经网络相互博弈的方式进行学习.该方法由伊 ...

最新文章

  1. 静态库符号文件冲突的解决办法,已实践OK, mark
  2. echarts图例(legend)
  3. Xposed学习一:初探
  4. oracle自动提交没有生效,JBoss对Oracle的自动提交始终不起作用
  5. Java加个书名编号约束条件_java 按照题目所给变量名称、类型和方法名称进行编程 求帮助...
  6. AltiumDesigner14.3.X系列软件安装及破解过程
  7. 使用eclipse调试ns3配置说明
  8. 发布 项目_项目发布会活动到底应该怎么办
  9. IDEA 2021.1正式发布,新增了这几个超实用功能!
  10. 2020山东省计算机专科学校排名,2021山东专科学校排名 最好的高职院校排行榜
  11. set学习(系统的学习)
  12. jquery遍历元素children、find、parent、parents、parentsUntil、next、prev、siblings、closest、filter、not
  13. c语言指针 r,C语言指针的高级操作
  14. IndexedDb、Web Sql、localStorage以及localForage使用
  15. 什么样的家具拆单软件才能称之为好用?全屋定制拆单 衣柜橱柜拆单 sketchup拆单 拆单软件 有屋拆单软件 筑木
  16. python考勤统计_公司HR统计考勤用这个函数公式,快速、准确完成,再也不加班了...
  17. 千千静听皮肤急速合成器
  18. 886. 可能的二分法
  19. Python解析器安装后测试打开微软商店
  20. Java教程:如何使用Jib插件容器化SpringBoot应用?

热门文章

  1. 阿里云服务器远程又链接不上 链接一下就闪烁一下又回到登陆界面,控制台重启一下才可以连接
  2. D. Bouncing Boomerangs
  3. bootstrap table合并单元格
  4. java 生成缩略图_java实现图片生成缩略图
  5. 搭建Prometheus监控报警系统
  6. 7-38 数列求和-给定某数字A(1≤A≤9)以及非负整数N(0≤N≤100000),求数列之和S=A+AA+AAA+⋯+AA⋯A(N个A)。例如A=1, N=3时,S=1+11+111=123。
  7. LOG4cxx安装指南
  8. HTML超链接标签—链接QQ在线聊天
  9. python画几种树
  10. JAVA有没有moba游戏_你了解MOBA么?——MOBA游戏类型介绍(上)