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. 《MySQL数据库》MySQL ERRORLOG,BINLOG,SLOWLOG日志详解

    前言 MySQL 经常出现启动错误或者执行错误等等,这个时候我们需要查询error日志 在数据库使用中,经常会出现需要恢复数据的情况,MySQL如果需要恢复数据的话需要开启binlog(二进制日志). ...

  2. el-dialog“闪动”解决办法

    问题描述:el-dialog关闭的时候总是出现两次弹窗 解决思路:既然是el-dialog产生的那就直接杀掉el-dialog 代码实践:在el-dialog上添加上一个v-if,值就是用闭窗的值,促 ...

  3. e3mall商城的归纳总结6之redis

    一.说在前面的话 前面几节我们主要对该项目的后端进行了增删改查,但是所有的数据都是存放在数据库中,这样的话数据库的压力显而易见是很大的,因此本节学习nosql的缓存,也就是redis的使用,在使用之前 ...

  4. P1004 方格取数(四维动态规划)

    题目描述 设有N \times NN×N的方格图(N \le 9)(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字00.如下图所示(见样例): A 0 0 0 0 0 0 0 0 ...

  5. 小花梨判连通 (bfs+思维+map统计数量)

    如果两个集合存储颜色的情况相同,说明这两个在k个图中都是在一个集合的 学到的点:用map,将vector映射一个整数时,只有vector后面的邻接的数据都一样时,才认为两个vector一样 代码: # ...

  6. oracle无法通过ip地址连接

    问题描述:使用plsql可以连接本地oracle实例,但telnet 192.168.130.71 (内网ip)不通. 其实在11g安装完成后,默认网络配置 listener.ora中 host = ...

  7. OpenShift Container Platform 4.3.0部署实录

    本文参照红帽官方文档,在裸机安装Openshift4.3文档进行.因为只有一台64G内存的PC机,安装vmware vsphere 6.7免费版进行本测试,所以尝试在OCP官方文档要求的最低内存需求基 ...

  8. 2020年1月31日 安装Python的requests包记录

    C:\Users\ufo>pip install requests Collecting requests WARNING: Retrying (Retry(total=, connect=No ...

  9. Nginx升级加固SSL/TLS协议信息泄露漏洞(CVE-2016-2183)

    Nginx升级加固SSL/TLS协议信息泄露漏洞(CVE-2016-2183) 漏洞说明 // 基于Nginx的https网站被扫描出SSL/TLS协议信息泄露漏洞(CVE-2016-2183),该漏 ...

  10. html+css入门基础案例之圣诞那些事

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...