GAN自推出以来就以训练困难著称,因为它的训练过程并不是寻找损失函数的最小值,而是寻找生成器和判别器之间的纳什均衡。前者可以直接通过梯度下降来完成,而后者除此之外,还需要其它的训练技巧。

  下面对历年关于GAN的论文提出的训练技巧进行总结,这里仅记录技巧,具体原理请直接看论文原文。

WGAN和WGAN-GP

  WGAN论文将GAN原文用来度量两个分布之间差异的JS divergence改为了Wasserstein distance,从而有了拉近两个分布之间距离的“连续性”指标。经过转换后,对模型进行的修改如下:

  1、判别器输出层去掉sigmoid,且损失函数不取对数log。也就是说原本的损失是先用sigmoid映射到$(0,1)$模拟概率值,然后再取对数映射到更大的区间以便计算。现在则是直接把这两步给取消了。实际上这两步就是多余的,因为不进行这两步的输出值就已经处于所需要的区间了。

  2、将判别器参数的绝对值截断在常数C以内(不是特别大的数就行)。

  3、不要用基于动量的优化算法,推荐RMSProp,SGD也行(这是论文实验得出的结论)。

  WGAN-GP对WGAN做出了改进,且仅仅做出了一项改进:

  1、将WGAN对判别器权重的裁剪约束,改为对判别器相对于输入的梯度的大小的约束。以正则项的形式直接加在目标函数中。改进目标函数如下:

$L = \mathop{\mathbb{E}}\limits_{\tilde{x}\sim \mathbb{P}_g}  \left[D(\tilde{x})\right] - \mathop{\mathbb{E}}\limits_{x\sim \mathbb{P}_r}  \left[D(x)\right] +\lambda \mathop{\mathbb{E}}\limits_{\hat{x}\sim \mathbb{P}_{\hat{x}}}  \left[(||\nabla_{\hat{x}}D(\hat{x})||_2-1)^2\right] $

  判别器参数$w$的更新就是求$L$对$w$的梯度,然后进行梯度下降。而因为有最后一个正则项,所以同样会把梯度限制在一定范围内。其中$\hat{x}$是$x$和$\tilde{x}$的随机加权和,至于为什么要用随机加权和而不是直接求$x$和$\tilde{x}$的梯度:关于WGAN-GP中的遗留问题? - 知乎

  当然我们实践的时候,为了方便,可以直接使用$x$和$\tilde{x}$来对梯度的大小进行约束。也就是可以直接在keras中添加关于每个样本的正则化loss。

CGAN

  相较于原始GAN,CGAN将图像的某些特征(比如手写数字对应的真实数字编码)加入生成器的输入进行训练。这样训练出来的生成器就能够以特征生成对应的图像,并且训练收敛的速度会更快一些,可能是因为输入增加了确定性。

InfoGAN

  CGAN是添加与图像有关的特征到原本只有随机噪声的输入中增强训练,InfoGAN则是让生成器建立生成图像与输入生成器的随机噪声之间的映射关系,它大致看起来就像是自动编码器与GAN的结合。

  InfoGAN除了定义生成器与判别器之外,还定义了一个与判别器共享大部分权重的“编码器”。相对于“编码器”,生成器就成了一个“解码器”。解码器将输入的噪声解码为图片,除了输入判别器外,还要将图片输入编码器。编码器则要尽量让自身的输出与解码器(生成器)输入的某一部分“噪声”相同,这一部分“噪声”是人为选择的隐变量,可以人为设置为离散或连续变量。这样一来,生成器不但要“照顾”判别器,生成尽量真实的图片,还要考虑让解码器能解码成功,生成与输入的噪声编码相关的图片。因此生成器的输入与其输出就会有一定的隐式联系。

DCGAN

  对于深度卷积GAN,论文提出四个提高训练稳定性的方阵:

  1、用步幅卷积层来代替所有的池化层。

  2、在生成器和判别器中使用BN(Batch Normalization),但不要在生成器的输出与判别器的输入层使用。

  3、对于层数较深的模型,隐层避免使用全连接层。

  4、对于生成器,输出层激活函数使用Tanh,其它层激活函数都使用ReLu。生成器使用Tanh时,输出的图像颜色数值在$(-1,1)$内,因此训练集图像色值也要从$(0,1)$预处理到$(-1,1)$内。

  5、对于判别器,所有层的激活函数都使用LeakyReLu。 

NIPS 2016 Tutorial:GAN

  生成器规模比判别器小更好。

GAN训练技巧汇总的更多相关文章

  1. 深度学习与CV教程(6) | 神经网络训练技巧 (上)

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/37 本文地址:http://www.showmeai.tech/article-det ...

  2. 移动平台3G手机网站前端开发布局技巧汇总

    移动平台3G手机网站前端开发布局技巧汇总 作者:前端开发-武方博   发布:2011-05-10 09:11   分类:移动开发   阅读:120,618 views   7条评论     您或许正在 ...

  3. 移动平台WEB前端开发技巧汇总(转)

    最近我很关注移动前端的知识,但做为一个UI设计师和web前端工作人员没有这个工作环境接触,做为门外汉,网上系统的知识也了了,一直有种雾里看花的感觉,见到本文,我自己是奉为经典.所以我分享之后又专门打笔 ...

  4. 【技巧汇总】eclipse中如何跳转到指定行

    技巧汇总 持续更新ing eclipse中如何跳转到指定行 ctrl+L

  5. typora的基本使用技巧汇总

    typora的基本使用技巧汇总 链接: https://www.jianshu.com/p/380005c8f104

  6. 训练技巧详解【含有部分代码】Bag of Tricks for Image Classification with Convolutional Neural Networks

    训练技巧详解[含有部分代码]Bag of Tricks for Image Classification with Convolutional Neural Networks 置顶 2018-12-1 ...

  7. CSS 技巧汇总

    CSS 选择符优先级 !important 声明>内联样式(style)>id 选择符(#id)>类选择符(.class)=伪类选择符(:hover )=属性选择符([attr] ) ...

  8. 使用jmeter进行性能测试-Jmeter教程及技巧汇总 (转)

    http://www.jmeter.cf/loadtesting-jmeter.html 为什么使用jmeter, 它免费开源, 不断发展, 功能逐渐强大. 可以做功能,负载, 性能测试.一套脚本可以 ...

  9. PL/SQL developer 使用技巧汇总

    为了快速的使用PL/SQL developer 进行 oracle数据库相关开发,将一些使用频率较高的使用技巧进行汇总如下,以下转自网络和自己的测试 1.切换schema --switch schem ...

随机推荐

  1. Javascript数组与函数初识

    1 - 数组 1.1 数组的概念 数组可以把一组相关的数据一起存放,并提供方便的访问(获取)方式. 数组是指一组数据的集合,其中的每个数据被称作元素,在数组中可以存放任意类型的元素.数组是一种将一组数 ...

  2. 接口测试中postman环境和用例集

    postman的环境使用 postman里有环境的设置,就是我们常说的用变量代替一个固定的值,这样做的好处是可以切换不同的域名.不同的环境变量,不同的线上线下账户等等场景.下面就看下怎么用吧. 创建一 ...

  3. go语言之字符串、指针、数组、切片、结构struct、面向对象

    一: 字符串 概述: Go 语言将字符串作为 种原生的基本数据类型,字 符串的初始化可以使用字符串字面量. (1)字符串是常量,可以通过类 数组 索引访问其字节单元,但是不能修改某个字节的值 (2)宇 ...

  4. JDK源码分析-ArrayList

    ArrayList 储存结构 private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; transient Objec ...

  5. Android开发之recycleView详解代码,看完包你熟练掌握recycleView的用法。转自网络经典文章

    来源 http://jinyudong.com/2014/11/13/Introduce-RecyclerView-%E4%B8%80/ 编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在 ...

  6. webdriver实现简单的窗口切换

    webdriver实现简单的窗口切换,也只能是简单的,因为目前处于学习阶段,复杂的情况现在还没碰到过.之前写过关于一个小demo的总结,就有提到过在新开窗口进行操作的情况,用以下一句就可以搞定了,la ...

  7. VS停止调试,IIS Express也跟着关闭了

    问题描述: 我们会时不时地用VS进行调试,当点击停止调试的时候,网站再刷新一下,便会出现网页走丢的现象,然后需要重新打开网站,很是麻烦,令人抓狂.如何解决呢? 首先说下,为啥会产生这种问题? 大致描述 ...

  8. 小程序开发-媒体组件image

    image 图片组件,支持 JPG.PNG.SVG.WEBP.GIF 等格式,2.3.0 起支持云文件ID. 所有属性如下: Tips image组件默认宽度320px.高度240px image组件 ...

  9. 20190925-03Redis端口号的由来及单线程加多路IO复用 000 024

  10. 读网文《将20M文件从30秒压缩到1秒,我是如何做到的?》做实验

    先在微信公众号上看到网文<将20M文件从30秒压缩到1秒,我是如何做到的?>,然后在网上搜索了一下,看到了原文:https://www.jianshu.com/p/2e46ccb125ef ...