首页 > 其他分享 >【GAN优化】如何选好正则项让你的GAN收敛

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

时间:2022-10-12 17:03:46浏览次数:50  
标签:Dirac 函数 GAN 正则 收敛 WGAN


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

作者&编辑 | 小米粥


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



【GAN优化】如何选好正则项让你的GAN收敛_损失函数


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


1. Dirac-GAN


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



【GAN优化】如何选好正则项让你的GAN收敛_数据_02


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



【GAN优化】如何选好正则项让你的GAN收敛_损失函数_03


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



【GAN优化】如何选好正则项让你的GAN收敛_数据_04


可获得原始形式,而选择



【GAN优化】如何选好正则项让你的GAN收敛_数据_05


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



【GAN优化】如何选好正则项让你的GAN收敛_数据_06


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


2. 标准GAN与WGAN


2.1 标准GAN


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



【GAN优化】如何选好正则项让你的GAN收敛_数据_07


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



【GAN优化】如何选好正则项让你的GAN收敛_损失函数_08


相应的动力学系统:



【GAN优化】如何选好正则项让你的GAN收敛_正则_09


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



【GAN优化】如何选好正则项让你的GAN收敛_损失函数_10


2.2 WGAN



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



【GAN优化】如何选好正则项让你的GAN收敛_数据_11


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



【GAN优化】如何选好正则项让你的GAN收敛_正则_12


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



【GAN优化】如何选好正则项让你的GAN收敛_损失函数_13


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



【GAN优化】如何选好正则项让你的GAN收敛_数据_14


其实,与简单的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限制的软方法,其损失函数的表达式为:



【GAN优化】如何选好正则项让你的GAN收敛_正则_15


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



【GAN优化】如何选好正则项让你的GAN收敛_数据_16


相应的动力学系统:



【GAN优化】如何选好正则项让你的GAN收敛_正则_17


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



【GAN优化】如何选好正则项让你的GAN收敛_数据_18


4. 一致优化


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



【GAN优化】如何选好正则项让你的GAN收敛_损失函数_19


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



【GAN优化】如何选好正则项让你的GAN收敛_正则_20


相应的动力学系统:



【GAN优化】如何选好正则项让你的GAN收敛_数据_21


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



【GAN优化】如何选好正则项让你的GAN收敛_数据_22


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


5. zero centered gradient


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

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



【GAN优化】如何选好正则项让你的GAN收敛_损失函数_23


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



【GAN优化】如何选好正则项让你的GAN收敛_正则_24


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



【GAN优化】如何选好正则项让你的GAN收敛_损失函数_25


相应的动力学系统:



【GAN优化】如何选好正则项让你的GAN收敛_数据_26


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



【GAN优化】如何选好正则项让你的GAN收敛_损失函数_27


这一个简单将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可以实现收敛,这为我们提供了很好的启示。

标签:Dirac,函数,GAN,正则,收敛,WGAN
From: https://blog.51cto.com/u_14122493/5751161

相关文章

  • 【GAN优化】GAN优化专栏栏主小米粥自述,脚踏实地,莫问前程
    作者|小米粥编辑|言有三随走随行其实我一直非常佩服那些有规划又努力的人,因为我是一个对自己没太多规划的人。本科选择了物理专业,上学期间也算得上比较努力吧,但是物理是......
  • 【GAN优化】详解对偶与WGAN
    越学习越发现自己知之甚少,道阻且长,还是认真看下这篇文章,好好琢磨琢磨GAN吧。今天将和大家一起学习在GAN界占有重要位置的WGAN,它提出了一种新的距离度量,较之前的f散度,它的数......
  • 【GAN优化】一览IPM框架下的各种GAN
    今天的这篇小文将是GAN模型理论介绍的最后一篇。有一些内容,所用数学技巧和方法非常高大上,理论结果也非常漂亮,但是完全搞明白其中的门门道道需要相当大精力和知识铺垫,况且实......
  • 【GAN优化】GAN训练的小技巧
    头一阵子放假了,专栏都没有怎么更新了,今天开始继续更新(想问问小伙伴们都放了多久的假期?我们只有两周感觉时间好短呀~)作者&编辑|小米粥上一期中,我们说明了GAN训练中的几个问......
  • 非常用正则表达式
    收集几个非常用正则,一些原理说实话我是没看懂,但是试了能用,就这样了取反通常正则是对匹配到的字串进行操作,但有的时候我们需要进行一些相反的操作,比如,删除所......
  • 【GAN的应用】基于对抗学习的图像美学增强方法
    好久不见~甚是想念由于年底了要处理的事情变得特别多,突然间醒悟好久没更新啦于是深夜给大家带来一篇生成对抗网络在图片美学增强上的应用。首先来个小问题,你能猜出下图的(b)(c)......
  • java字符串&字符串的使用&格式化字符串&正则&字符串生成器
    publicclassCompound{publicstaticvoidmain(Stringargs[]){Stringa="good";System.out.println(a);charb[]={'h','e','l','l',......
  • python之正则表达式用法详细讲解
    一、re.compile函数 作用:compile函数用于编译正则表达式,生成一个正则表达式(Pattern)对象,供match()和search()这两个函数使用。 案例:如何判断是正规的手机号......
  • 【每周CV论文推荐】StyleGAN人脸属性编辑有哪些经典论文需要阅读
    欢迎来到《每周CV论文推荐》。在这个专栏里,还是本着有三AI一贯的原则,专注于让大家能够系统性完成学习,所以我们推荐的文章也必定是同一主题的。当前人脸图像领域的研究和落地......
  • 【每周CV论文推荐】基于GAN的图像数据增强有哪些经典论文值得阅读
    欢迎来到《每周CV论文推荐》。在这个专栏里,还是本着有三AI一贯的原则,专注于让大家能够系统性完成学习,所以我们推荐的文章也必定是同一主题的。当前基于GAN的二维图像生成领......