作者丨苏剑林

单位丨广州火焰信息科技有限公司

研究方向丨NLP,神经网络

个人主页丨kexue.fm

不知道从什么时候开始,我发现我也掉到了 GAN 的大坑里边了,唉,争取早日能跳出来。

本文介绍的是我最近提交到 arXiv 的一个关于 GAN 的新框架,里边主要介绍了一种对概率散度的新理解,并且基于这种理解推导出了一个新的 GAN。整篇文章比较偏理论,对这个 GAN 的相关性质都做了完整的论证,自认为是一个理论完备的结果。



先摆结论:

1. 论文提供了一种分析和构造概率散度的直接思路,从而简化了构建新 GAN 框架的过程;

2. 推导出了一个称为 GAN-QP 的 GAN 框架,这个 GAN 不需要像 WGAN 那样的 L 约束,又不会有 SGAN 的梯度消失问题,实验表明它至少有不逊色于、甚至优于 WGAN 的表现。

▲ GAN-QP效果图

论文的实验最大做到了 512 x 512 的人脸生成(CelebA HQ),充分表明了模型的有效性(效果不算完美,但是模型特别简单)。有兴趣的朋友,欢迎继续阅读下去。

直面对偶空间

我们现在要构建一个 GAN 框架,一般包含三个步骤:

  • 寻求一种良好的概率散度;

  • 找出它的对偶形式;

  • 转化为极小-极大游戏(min-max game)。

问题是:真正对训练过程有用的是第二、第三步,第一步并不是那么必要。

事实上,从原空间要定义一个新的散度很难,定义了之后也不一定容易转化为对偶形式。然而,我们可以直接在对偶空间分析,由此可以发现一批新的、形态良好的散度。换言之,我们其实可以直接在对偶空间中论述一个式子是否满足散度的定义,从而直接给出可优化的目标,而不需要关心它具体是 JS 散度还是 W 距离了。

下面我们来举例说明这个思路。

散度

首先我们来给出散度的定义:

如果 D[p,q] 是关于 p,q 的标量函数,并且满足:

  • D[p,q]≥0 恒成立;

  • D[p,q]=0⇔p=q。

那么称 D[p,q] 为 p,q 的一个散度,散度与“距离”的主要差别是散度不用满足三角不等式,也不用满足对称性。但是散度已经保留了度量差距的最基本的性质,所以我们可以用它来度量 p,q 之间的差异程度。

SGAN

基本定义

我们先来看 SGAN 中的判别器 loss,定义:

这其实就是 JS 散度的对偶形式。但是我们可以直接基于这个定义来证明它是一个散度,然后讨论这个散度本身的性质,而根本不需要知道它是 JS 散度。

怎么证明?只需要证明这个结果满足刚才说的散度的两点要求。注意,按照我们的逻辑,我们不知道它是 JS 散度,但我们可以从数学角度证明它是一个散度。

其实如果读者真的明白了式 (1) 的含义,证明就不困难了。式 (1) 先定义了一个期望的式子,然后对 T 取最大(用更准确的说法是求“上确界”),取最大的结果才是散度。再强调一遍,“取最大之后的结果才是散度”,这个式子并不是散度。

具体的证明过程略微冗长,就不完整摆出来了,请读者自行去看原文的附录。或者看下面的 WGAN 的部分,因为 WGAN 的部分相对简单。

对抗网络

假如有了散度之后,我们就可以通过缩小两个概率分布的散度,来训练生成模型了。也就是说接下来要做的事情应该是:

注意 D[p(x),q(x)] 是通过 maxT 操作实现的,所以组合起来就是一个 min-max 的过程,比如前面的例子,等价地就是:

这就是 SGAN。

所以我们发现,GAN 的过程其实就两步:1)通过 max 定义一个散度;2)通过 min 缩小两个分布的散度。这里的新观点,就是将 max 直接作为散度的定义的一部分。

性能分析

我们知道 SGAN 可能有梯度消失的风险,这是为什么呢?我们考察一个极端情形:

其中 α≠β。这样一来,两个分布分别只是单点分布,完全没有交集。这种情况下代入 (1),结果就是:

注意我们对 T 没有任何约束,所以为了取最大,我们可以让 T(α)→+∞,T(β)→−∞,从而得到上确界是一个常数 log2。即这种情况下 D[p(x),q(x)]=log2。

这就是说,对于两个几乎没有交集的分布,式 (1) 定义的散度给出的度量结果是常数 log2,常数就意味着梯度是 0,无法优化。而 WGAN 的那两篇文章则表明,“没有交集”理论上在 GAN 中是很常见的,所以这是 SGAN 的固有毛病。

一般的f散度

上面的几个小节已经完整了呈现了这种理解的流程:

1. 我们通过 max 定义一个数学式子,然后可以从数学角度直接证明这是一个散度,而不用关心它叫什么名字;

2. 通过 min 最小化这个散度,组合起来就是一个 min-max 的过程,就得到了一种 GAN;

3. 为了检查这种散度在极端情况下的表现,我们可以用 p(x)=δ(x−α),q(x)=δ(x−β) 去测试它。

上述关于 SGAN 的论述过程,可以平行地推广到所有的 f-GAN 中(参考《f-GAN简介:GAN模型的生产车间》[1]),各种 f 散度其实没有本质上的差异,它们有同样的固有毛病(要不就梯度消失,要不就梯度爆炸)。

WGAN

基本定义 

现在我们转向一类新的散度:Wasserstein 距离。注意 Wasserstein 距离是一个严格的、满足公理化定义的距离,不过我们这里只关心它的散度性质。定义:

这里:

而 d(x,y) 是任意一种现成的距离。

可以直接证明它是一个散度。这个证明还算经典,所以将它写在这里:

1. 不管是什么 p(x),q(x),只要让 T(x)≡0,我们就得到,因为散度的定义是要遍历所有的 T 取最大的,所以它至少不会小于 0,这就证明了第一点非负性;

2. 证明 p(x)=q(x) 时,W[p(x),q(x)]=0,也就是 W[p(x),p(x)]=0,这几乎是显然成立的了;

3. 证明 p(x)≠q(x) 时(严格来讲是它们不等的测度大于 0),W[p(x),q(x)]>0。这个相对难一点,但其实也很简单,只需要令 T0(x)=sign(p(x)−q(x)),那么显然有:

这样我们就直接地证明了 W[p(x),q(x)] 是满足散度的定义的。

对抗网络

同样地,有了新散度,就可以定义新 GAN 了:

这就是 WGAN,相应的参考资料有互怼的艺术:从零直达WGAN-GP、WGAN-div:一个默默无闻的WGAN填坑者。

性能分析

同样地,用 p(x)=δ(x−α),q(x)=δ(x−β) 去测试 W[p(x),q(x)] 散度的性能,我们得到:

注意我们有 L 约束 ‖T‖L≤1,这意味着 |T(α)−T(β)|≤d(α,β),等号可以取到,所以:

结果不是常数,所以即使在这种极端情况下我们可以也拉近两个分布的距离。所以从这一点看,WGAN 要比 SGAN 要好。

L约束

WGAN 的遗留问题就是如何往判别器加入 L 约束,目前有三种方案:参数裁剪、梯度惩罚、谱归一化,请参考深度学习中的Lipschitz约束:泛化与生成模型和WGAN-div:一个默默无闻的WGAN填坑者。

参数裁剪基本已经被弃用了。梯度惩罚原则上只是一个经验方法,有它的不合理之处,而且要算梯度通常很慢。谱归一化看起来最优雅,目前效果也挺好,不过也有限制的太死的可能性。进一步讨论请看WGAN-div:一个默默无闻的WGAN填坑者。

新散度,新GAN

现在的结论是:SGAN 可能有梯度消失的风险,WGAN 虽然很好,但需要额外的 L 约束。那么很自然就会问:有没有不需要 L 约束,又不会梯度消失的 GAN?鱼与熊掌能否兼得?

还真的可以,下面带你找一个。不对,其实不止一个,带你找一批都行。

平方势散度

基本定义

下面要给出的散度,形式是这样的:

其中 λ>0 是一个超参数,d 可以是任意距离。

这个形式好像就在 WGAN 的基础上加了一个平方形式的势能,所以称为平方势散度(QP-div,quadratic potential divergence)。

论文的附录已经证明了式 (12) 确实是一个散度。

性能分析

用 p(x)=δ(x−α),q(x)=δ(x−β) 去测试这个散度,结果是:

设 z=T(α,β)−T(β,α) 就得到,很熟悉有没有?这只是个二次函数的最大值问题呀,最大值是呀,所以我们就有:

这不就跟 WGAN 差不多了嘛,哪怕对于极端分布,也不会有梯度消失的风险。鱼与熊掌真的可以兼得。

GAN-QP

对抗网络

有了散度就可以构建对抗网络,我们最终给出的形式为:

我在论文中称之为 GAN-QP。

注意不要把二次项这一项加入到生成器的 loss 中(理论上不成问题,但是用梯度下降优化时会有问题。),因为这一项的分母是 d(xr,xf),一旦最小化二次项,等价于最小化 d(xr,xf),也就是用 d(xr,xf) 来度量图片的差距,这是不科学的。

解的分析

通过变分法可以证明(还是在附录),判别器的最优解是:

由这个最优解,我们可以得到两点结论。首先,不难证明最优解满足:


也就是说最优解自动满足 L 约束。所以我们可以认为 GAN-QP 是一种自适应 L 约束的方案。

其次,将最优解代入生成器的 loss,那么得到判别器的目标是:

这也是一个概率散度,并且我们也从理论上证明了它不会梯度消失/爆炸(跟柯西不等式有关)。此外,还可以看到 λ 只是一个缩放因子,事实上并不重要,从而这个 GAN-QP 对 λ 是鲁棒的,λ 不会明显影响模型的效果。

实验结果

论文在 CelebA HQ 数据集上,比较了多种 GAN 与 GAN-QP 的效果,表明 GAN-QP 能媲美甚至超越当前最优的模型。

注意,模型 (15) 中,T 是 (xr,xf) 的二元函数,但实验表明,取最简单的一元特例 T(xr,xf)≡T(xr) 即可,即 T(xr,xf)−T(xf,xr) 用 T(xr)−T(xf) 就够了,改成二元函数并没有明显提升(但也可能是我没调好)。这样的话,形式上就跟 WGAN-GP 非常相似了,但理论更完备。

代码开源:

https://github.com/bojone/gan-qp

128 x 128

在 128 x 128 分辨率上,我们进行了较为全面的比较,定量指标是 FID。结果如下图:

▲ 不同GAN的FID定量曲线

以及下表:

256 与 512

在 128 分辨率上,最好的表现是 GAN-QP 和 SGAN-SN,不过在 256 x 256 分辨率上,它们的表现就拉开了差距:

我最大把 GAN-QP 的实验做到了 512 x 512 的人脸生成,效果还是不错的,最终的 FID 是 26.44:

▲ 512 x 512人脸效果图

论文综述

这篇文章源于我对概率散度的思考,企图得到一种更直接的理解概率散度的方案,其中还受启发于 WGAN-div。

幸好,最后把这条路走通了,还得到了一些新结果,遂提交到 Github 中,供各位参考,希望得到各位前辈高手的指点。事实上,基于类似的思路,我们可以构造很多类似的散度,比如将平方换成 4 次、6 次方等,只不过理论分析起来就会困难一些了。

限于算力,加之我不是专门研究 GAN 的,所以实验方面可能做得不够完善,基本能论证结论即可,请大家体谅,当然也欢迎各位的指导。

相关链接

[1]. https://kexue.fm/archives/6016

点击以下标题查看作者其他文章:

  • 变分自编码器VAE:原来是这么一回事 | 附开源代码

  • 再谈变分自编码器VAE:从贝叶斯观点出发

  • 变分自编码器VAE:这样做为什么能成?

  • 深度学习中的互信息:无监督提取特征

  • 全新视角:用变分推断统一理解生成模型

  • 细水长flow之NICE:流模型的基本概念与实现

  • 细水长flow之f-VAEs:Glow与VAEs的联姻

  • 深度学习中的Lipschitz约束:泛化与生成模型

关于PaperWeekly

PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。

▽ 点击 | 阅读原文 | 查看作者博客

不用L约束又不会梯度消失的GAN,了解一下?相关推荐

  1. WGAN新方案:通过梯度归一化来实现L约束

    ©PaperWeekly 原创 · 作者 | 苏剑林 单位 | 追一科技 研究方向 | NLP.神经网络 当前,WGAN 主流的实现方式包括参数裁剪(Weight Clipping).谱归一化(Spe ...

  2. 梯度消失和梯度爆炸_知识干货-动手学深度学习-05 梯度消失和梯度爆炸以及Kaggle房价预测...

    梯度消失和梯度爆炸 考虑到环境因素的其他问题 Kaggle房价预测 梯度消失和梯度爆炸 深度模型有关数值稳定性的典型问题是消失(vanishing)和爆炸(explosion). 当神经网络的层数较多 ...

  3. 动手学深度学习(PyTorch实现)(四)--梯度消失与梯度爆炸

    梯度消失与梯度爆炸 1. 梯度消失与梯度爆炸 2. 模型参数的初始化 2.1 PyTorch的默认随机初始化 2.2 Xavier随机初始化 3. 环境因素 3.1 协变量偏移 3.2 标签偏移 3. ...

  4. L8梯度消失、梯度爆炸

    houseprices数据下载: 链接:https://pan.baidu.com/s/1-szkkAALzzJJmCLlJ1aXGQ 提取码:9n9k 梯度消失.梯度爆炸以及Kaggle房价预测 代 ...

  5. 深度学习中梯度消失和梯度爆炸的根本原因及其缓解方法

    深度学习中梯度消失和梯度爆炸的根本原因及其缓解方法 一.梯度消失和爆炸的根本原因 1. 深层网络角度 2. 激活函数角度 二.梯度消失.爆炸的解决方案 1. 梯度剪切.正则 2. 采用其他的激活函数 ...

  6. 反向传播算法推导、激活函数、梯度消失与爆炸

    目录 反向传播算法 定义 推导过程 激活函数 定义 性质 常用的激活函数 Sigmoid Tanh ReLU softmax 梯度消失与梯度爆炸 起因 出现的原因 表现 解决方案 参考文档 反向传播算 ...

  7. 梯度消失和梯度爆炸情况详解

    前言 本文主要深入介绍深度学习中的梯度消失和梯度爆炸的问题以及解决方案.本文分为三部分,第一部分主要直观的介绍深度学习中为什么使用梯度更新,第二部分主要介绍深度学习中梯度消失及爆炸的原因,第三部分对提 ...

  8. 深入了解梯度消失与梯度爆炸

    本文探讨深度学习中经常会提到的概念–梯度消失与梯度爆炸.他们是影响模型收敛,学习好坏的一个重要因素,对此现象也提出了对应的解决方案.在此记录其概念,原因和相关的解决方案,仅供参考. 目录 概念 原因 ...

  9. 学习笔记5-梯度爆炸和梯度消失(K折交叉验证)

    1.梯度消失.梯度爆炸 梯度消失和梯度爆炸 考虑到环境因素的其他问题 1.1 本次课程主要任务 了解学习梯度消失与梯度爆炸产生的原因以及怎么样解决. 考虑到环境因素的其他问题(协变量偏移,标签偏移,概 ...

最新文章

  1. html li padding,求大神来看为li元素设置相同的padding为何padding-bottom和padding-right为多出一部分_html/css_WEB-ITnose...
  2. Python使用matplotlib可视化多个不同颜色的折线图、通过FontProperties为可视化图像配置中文字体可视化、并指定字体大小
  3. 1.Spring Security 详细简绍与入门
  4. DRBD + heartbeat 介绍及安装测试
  5. 如何使用MFC和类型库创建自动化项目
  6. 【系统知识点】linux入门基础命令
  7. 17款加速效率的CSS工具
  8. 解析IPostBackEventHandler和WebForm的事件机制
  9. shapenet数据集什么格式_网络中的链路层数据格式是什么样?6个知识点1张图给您说明白...
  10. SylixOS USB Gadget层介绍
  11. cocos2dx 魔塔项目总结(一)
  12. Python在线编辑器推荐
  13. 微信聊天记录删除了怎么恢复
  14. Raspberry-Pi-PICO系列--第七篇 创建自己的工程
  15. ConvE,知识图谱嵌入(KGE)论文复现(Ubuntu 20.04)
  16. 工业过程控制领域中通信
  17. [无人机学习]无人机学习概论
  18. 一篇硕士论文的开题报告,可以借鉴
  19. Python环境配置与数据处理
  20. linux驱动 .c文件,linux驱动程序在.c文件和make文件都正确的时候为什么在键入命令mak...

热门文章

  1. 监督学习和无监督学习_让半监督学习再次伟大!谷歌最新无监督数据增强研究,全面超越现有半监督学习方法...
  2. python time模块详解
  3. android 模拟器Genymotion的安装和使用
  4. 腾讯云+校园扶持计划是bug还是福利
  5. ES6——class
  6. workflow GetListIdByName 获取表名
  7. 【SQL-分组合并字符串】把相同分组的某个字段合并为同一个字符串(使用函数)...
  8. ibatis.net:第五天,QueryForObject
  9. vmware workstation 安装 fedora9+ vmware tools血泪史啊
  10. php删除数据库中数据表的数据,php中删除数据库数据例子