今天讲述的内容还是GAN的训练,也是最后一期,做几个简单的小实验,告诉大家怎么给GAN加正则项,使得你的GAN尽可能收敛。其实今天的内容本来还是与动力学结合很紧密,但是考虑到复杂的数学内容可能有害无益,我就将数学部分都删除了,只展示最直观的结果。

作者&编辑 | 小米粥

上一期我们说了关于GAN收敛的这样一件事情:如果矢量场v的雅可比矩阵的特征值的实部为负数,且学习速率足够小,则GAN会局部收敛到纳什均衡点。假设学习速率确实足够小,单纯考虑特征值的问题。在纳什均衡点,特征值的实数部分能否出现负数?这件事情是与目标函数息息相关的,因为雅可比矩阵的一般形式如下:

不难料想,如果生成器和判别器的目标函数f和g选取得当,上述矩阵的特征值的实数部分确实有可能为负数。今天用一个小实验来盘点一下,到底哪些GAN,哪些目标函数可能收敛。

1. Dirac-GAN

我们将使用一个极其简单的Dirac-GAN模型作为测试对象,在一维空间中,训练数据只有一个点,其位置固定在x=0;生成器只包含一个参数θ,生成样本的位置在x=θ,如下图所示:

判别器为一个简单的线性函数与激活函数复合的形式

包括一个参数φ ,其中f为激活函数。通过选择不同的激活函数f(t)可对应于不同的GAN形式,使用Sigmoid函数

可获得原始形式,而选择

可以得到WGAN的形式。Dirac-GAN的纳什均衡点为(0,0),即生成的样本与训练数据重合。

接下来,我们依次观察不同的GAN能否收敛到均衡点。需要说明,实际情况远远复杂于Dirac-GAN,样本不只是一维也不可能只存在一个样本点,我们只是通过它来直观说明一些问题,得到一些启示。

2. 标准GAN与WGAN

2.1 标准GAN

标准GAN即Goodfellow首次提出的GAN的标准形式,其损失函数的表达式为:

在Dirac-GAN中,对应的损失函数成为:

相应的动力学系统:

采用梯度下降法发现其并不收敛:

2.2 WGAN

WGAN改进了概率分布之间的距离的度量,其损失函数的表达式为:

在Dirac-GAN中,对应的损失函数成为:

这里有一个简化处理,假设当训练到一定程度时,φ处于0附近,其值自然小于1,满足Lipschitz限制。若只要关心其收敛情况,这样的假设是合理的。相应的动力学系统:

采用梯度下降法则发现其并不收敛:

其实,与简单的Dirac-GAN的实验结果一致,无论是标准形式的GAN或者WGAN,从理论上证明,发现在纳什均衡点(0,0),其特征值为f'(0)i和-f'(0)i,均不包含实部。根据之前的理论,参数轨迹确实不应该表现为收敛,而且可以进一步证明,它在(0,0)附近的轨迹表现为“圆”,缺乏向纳什均衡点靠拢的“向心力”。

可以说,现在的问题不是选择什么样的f(t),不是用fGAN或者WGAN的问题了,而是如何调整目标函数,也就是如何添加正则项,从而能解决特征值实部为负数的问题。

3. WGAN-GP

采用惩罚项的WGAN-GP是一种解决1-Lipschitz限制的软方法,其损失函数的表达式为:

在Dirac-GAN中,对应的损失函数成为:

相应的动力学系统:

采用梯度下降法则发现其也不收敛,说明这个正则项加的“不太好”。

4. 一致优化

一致优化是一种理论上比较“有保证”的GAN,具体内容在上一期进行过详细描述,以标准的GAN+一致优化正则项为例,其损失函数的表达式为:

在Dirac-GAN中,对应的损失函数成为:

相应的动力学系统:

结果有点复杂,但是确实在Dirac-GAN中精确收敛至(0,0):

正如上一期所说,实际情况中必须保证学习速率要足够小,而且要比较好地控制超参数,才可能收敛。

5. zero centered gradient

所谓zero centered gradient与WGAN-GP非常相近,就是添加正则项使判别器对输入的梯度接近一个常数,只不过在WGAN-GP中我们选择常数为1,而这里选择常数为0。(至于为何选择0,这里不展开,以后有机会补充。)再细分下来,又包括两种添加正则项的方法,一种是在真实数据上施加惩罚项,另一种是在生成数据上施加惩罚项。

如果选择在真实数据上施加惩罚项,则其损失函数的表达式为:

如果选择在生成数据上施加惩罚项,则其损失函数的表达式为:

无论如何,其在Dirac-GAN中,对应的损失函数均表示为:

相应的动力学系统:

采用梯度下降法则发现其收敛:

这一个简单将1改为0,使结果产生了巨大的变化,其实这一改变也正是Wasserstein散度的理论结果,注意这不是WGAN中的Wasserstein距离。

综上,我们可以带有启发性得说,如果你的fGAN或者WGAN训练过程不收敛,试一下一致优化正则项或者zero centered gradient正则项吧。

[1] Mescheder L , Nowozin S , Geiger A . The Numerics of GANs[J]. 2017.

[2] Mescheder L , Geiger A , Nowozin S . Which Training Methods for GANs do actually Converge?[J]. 2018.

总结

这篇文章用了一个非常简单且直观的Dirac-GAN进行实验,首先说明了标准的GAN或者WGAN是无法收敛到纳什均衡的,需要添加正则项。接下来,WGAN-GP也无法收敛,而一致优化正则项和zero centered gradient可以实现收敛,这为我们提供了很好的启示。

下期预告:GAN中的mode collapse问题

GAN群

有三AI建立了一个GAN群,便于有志者相互交流。感兴趣的同学也可以微信搜索xiaozhouguo94,备注"加入有三-GAN群"。

有三AI夏季划

有三AI夏季划进行中,欢迎了解并加入,系统性成长为中级CV算法工程师。

转载文章请后台联系

侵权必究

往期精选

【GAN优化】如何选好正则项让你的GAN收敛相关推荐

  1. 【GAN优化】一览IPM框架下的各种GAN

    今天的这篇小文将是GAN模型理论介绍的最后一篇.有一些内容,所用数学技巧和方法非常高大上,理论结果也非常漂亮,但是完全搞明白其中的门门道道需要相当大精力和知识铺垫,况且实际运用也非常小众,但是作为模型 ...

  2. 【GAN优化】GAN优化专栏上线,首谈生成模型与GAN基础

    大家好,今天小米粥在有三AI开设新专栏<GAN的优化>.在这个专栏中,我们会讲述GAN的相关背景.基本原理.优化等相关理论,尤其是侧重于GAN目标函数的优化.小米粥和有三将带领大家从零学起 ...

  3. 【GAN优化】详解GAN中的一致优化问题

    GAN的训练是一个很难解决的问题,上期其实只介绍了一些基本的动力学概念以及与GAN的结合,并没有进行过多的深入.动力学是一门比较成熟的学科,有很多非常有用的结论,我们将尝试将其用在GAN上,来得到一些 ...

  4. 【GAN优化】从动力学视角看GAN是一种什么感觉?

    今天讲述的内容是GAN与动力学,这是一个非常好玩.非常新鲜的视角.考虑到很多人微积分和线性代数等知识的涉猎不多,我将会对涉及的内容都做出基本说明,也并不会涉及过深入的东西,然后争取串成一个故事,扩展一 ...

  5. 【GAN优化】GAN训练的几个问题

    从今天开始,我们将关注训练GAN时产生的问题,作为第一篇文章,首先从几个方面来分析一下实际训练的GAN和理论模型上的GAN不同之处以及实践中出现的问题.第一个部分将介绍最优判别器引发的梯度消失问题,第 ...

  6. 【GAN优化】详解SNGAN(频谱归一化GAN)

    今天将和大家一起学习具有很高知名度的SNGAN.之前提出的WGAN虽然性能优越,但是留下一个难以解决的1-Lipschitz问题,SNGAN便是解决该问题的一个优秀方案.我们将先花大量精力介绍矩阵的最 ...

  7. 【GAN优化】GAN优化专栏栏主小米粥自述,脚踏实地,莫问前程

    今天是加入有三AI的第三期,给大家来个自我介绍,也聊一聊我的一些想法和体会. 作者 | 小米粥 编辑 | 言有三 随走随行 其实我一直非常佩服那些有规划又努力的人,因为我是一个对自己没太多规划的人. ...

  8. 【GAN优化】详解对偶与WGAN

    越学习越发现自己知之甚少,道阻且长,还是认真看下这篇文章,好好琢磨琢磨GAN吧. 今天将和大家一起学习在GAN界占有重要位置的WGAN,它提出了一种新的距离度量,较之前的f散度,它的数学性质更为优秀. ...

  9. 【GAN优化】解决模式崩溃的两条思路:改进优化和网络架构

    今天讲述的内容仍然是GAN中的模式崩溃问题,首先将说明模式崩溃问题的本质,并介绍两种解决模式崩溃问题的思路,然后将介绍一种简单而有效的解决方案MAD-GAN,最后一部分将给出MAD-GAN的强化版本M ...

最新文章

  1. vbs劫持快捷键并执行程序
  2. 长方形与圆最近连线LISP_编写一个AutoLISP程序,画出一个边长为A的正方形,以及该正方形的内切圆,正方形的底边与正X轴的夹角为ANG...
  3. opengl绘制长方体线框_OpenGL绘制长方体
  4. Java ResourceBundle keySet()方法及示例
  5. java死锁怎么用jvm调试,线程死锁演示,线程锁演示,模拟JVM的线程次序调度
  6. spring boot 的使用(一)
  7. html中text函数,text函数的使用方法
  8. 学习笔记---Web服务、Remoting、WCF (上) --- Web服务
  9. MFC程序减少体积的方法
  10. 极客大学产品经理训练营:产品规划与功能规划 第15课总结
  11. SketchUp 更新插件,不用重启让更新生效
  12. likeshop搭建商城系统,一步到位
  13. 计算机装系统找不到硬盘,安装系统找不到硬盘怎么办
  14. 架构中的应用-XTT 篇
  15. Java程序:编程模拟和表达老虎Tiger和猫咪Cat等具体种类的生物都是一种动物。即它们都具有共同的名字属性name和运动行为run,只不过具体的名字叫法不同,运动行为的具体方式也不同。
  16. 梦幻手游最新服务器,《梦幻西游》手游服务器如何选择 新区还是老区
  17. 微软的现实困难:产品需要再次变“酷”
  18. Socket编程 TCP粘包问题及解决方案
  19. python制作冰花_小学作文制作冻冰花
  20. 使用plugman开发cordova 高德地图定位插件

热门文章

  1. 十个经典Java 集合面试题!
  2. “面试不败计划”:面试题基础二
  3. 归并排序算法 C++实现与时间复杂度(考过)恋上数据结构笔记
  4. capdriverconnect 黑色_【中信期货黑色(动力煤)】港口库存低位,结构性矛盾突出——周报20201101...
  5. pat德才论(java)
  6. 操作系统:基于页面置换算法的缓存原理详解(下)
  7. python文件指针_在使用python写入文件之前,如何将文件指针放在上面一行?
  8. 不得不看的17 个linux实用技巧
  9. OpenKruise v1.0:云原生应用自动化达到新的高峰
  10. 轻松构建基于 Serverless 架构的弹性高可用音视频处理系统