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. UTF-8、GB2312、GBK编码格式详解和编码示例

    UTF-8.GB2312.GBK编码格式详解 参考文章 UTF-8 使用1~4个字节对每个字符进行编码 128个ASCII字符字需要一个字节编码 带有附加符号的拉丁文.希腊文.西里尔字母.亚美尼亚语. ...

  2. Sql 注入----学习笔记

    先了解下CRLF,CRLF常用在分隔符之间,CR是carriage retum(ASCII 13,\r) LF是Line Feed (ASCII 10,\n), \r\n这两个字符类似于回车是用于换行 ...

  3. 【python】迭代器与生成器到底是什么?看完你就知道

    迭代器跟生成器,与上篇文章讲的装饰器一样,都是属于我的一个老大难问题. 通常就是遇到的时候就去搜一下,结果在一大坨各种介绍博客中看了看,回头又忘记了. 你是不是也是这样呢? 俗话说:好记性不如烂笔头, ...

  4. H5选择器

    1.标签选择器 注意点:1. 标签选择器选中当前所有的标签,而不能单独选择某个标签 2.标签选择器不无多深都能被选中     3.只要是HTML中的标签就可以作为表亲啊选择器(h/a/img/ul/o ...

  5. C++11中一个使用for+auto时容易发生的bug

    C++11中一个使用for+auto时容易发生的bug 一个小坑,那就是忘记在for循环中使用auto时加引用. 例如: for(auto num : nums){ // do some thing ...

  6. 转载:Oracle常见字段类型

    转载节选自:https://bbs.csdn.net/topics/220059184 数据类型 参数 描述 char(n) n=1 to 2000字节 定长字符串,n字节长,如果不指定长度,缺省为1 ...

  7. Netty进阶和实战

    实现UDP单播和广播 UDP 这样的无连接协议中,并没有持久化连接这样的概念,并且每个消息(一个UDP 数据报)都是一个单独的传输单元.此外,UDP 也没有TCP 的纠错机制. 通过类比,TCP 连接 ...

  8. HTTP 协议类

    HTTP 协议的主要特点 简单快速:每个资源的URL是固定的 灵活:在每个 http 协议中都有一个头部分有一个数据类型,通过一个 http 协议就可以完成不同数据类型的传输 无连接:连接一次就好断掉 ...

  9. 第0课 - 搭建开发环境之安装QT

    第0课 - 搭建开发环境之安装Qt 1. 课程学习的原材料 — Visual Studio 2010 — Qt SDK 4.7.4 — Qt Creator 2.4.1 2. Visual Studi ...

  10. Bootstrap学习第一天

    听说bootstrap很火,页面做的非常好看,今天我决定开始学习bootstrap. bootstrap是一种响应式前端技术,可以用于构建适应多种设备的网站页面,当页面尺寸变化时会根据变化的尺寸适应设 ...