LS-GAN(损失敏感GAN)

PS: 获取更好的阅读体验,请前往知乎专栏。

  好早以前就说要写一篇LS-GAN,loss sensitive GAN[1]的读书笔记,一直没有写,今天就来聊聊LS-GAN,请注意,它不是我们上一期所说的LSGAN(least square GAN)。

  开始本期文章解读之前,先来回答以下上上期谈LSGAN时留下的问题,当时提到了least square GAN优化的目标是Pearson 散度,属于f-divergence的一种,然后提到了其他的divergence是否也能用到GAN的训练中,当时没推导出来,后来发现有一篇文章[4]将所有的f-divergence对应的GAN的形式都推导出来了,参见下图。

  

  值得一提的是,作者刘国君老师也在知乎专栏介绍了LS-GAN,他写的更专业严谨一些,感兴趣的童靴可以移步:

  条条大路通罗马LS-GAN:把GAN建立在Lipschitz密度上 - 知乎专栏

  广义LS-GAN(GLS-GAN):现在 LS-GAN和WGAN都是这个超模型的特例了 - 知乎专栏

  

(图片来源于[3])

  下面,我会用与上面两篇文章不同的视角(类比SVM)来解读LS-GAN,这个视角是GAN讨论群里面有个童鞋提出来的。

  在了解LS-GAN之前,我们先来回顾一下SVM,后面你会看到,两者有相似的地方。

  SVM

  假定我们有一批数据,它是线性可分的。通常来说,我们可以通过求解下面的优化问题来得到一个线性SVM分类器:

  也就是说,在保证每个样本点与超平面的几何间隔至少为的情况下,我们尽可能地最大化这个间隔

  当数据线性不可分的时候,我们可以不必要求每个样本点都满足几何间隔至少为的要求(因为那样将导致问题不可解),通过引入一个松弛变量来放宽约束条件

  上式虽然允许有误分类的样本点,但是它要求误分类尽可能地少。

  LS-GAN

  我们知道GAN分为generator(G)和discriminator(D),D实际上是一个分类器,用于分类输入图像是真实图像还是G产生的图像。这里说的误分类点就是D错误分类的数据。对于任意一组数据,我们可以根据D的输出定义它的loss为为损失函数。对GAN来说,fake数据来自于G,我们可以简化符号,将D嵌入到loss中,记为真实数据(real),而G生成的数据为fake,这样,对应的loss分别可以简化写成,其中为D的参数。

  从优化的角度来看,real数据的loss应该比fake数据的loss来得小,小多少呢?跟两者的相似度有关,写成约束条件就是

  是相似性度量,可以自定义,一般来说用p范数就行了

  这跟上面提到的线性可分情形下的SVM有相似之处。不过,SVM要求所有的margin至少为,而这里采用的margin与数据间的相似性有关(是不是采用相同的margin也可以?可以尝试,采用与数据相似性相关的margin可以让GAN专注于那些生成质量较差的数据,也就是“按需分配”[2])。

  随着G学得越来越好,会越来越小,D越来越难区分real和fake的数据(当然,这也是我们的目标),上述的约束条件可以会无法满足,训练可能会出现震荡,陷入僵局。

  类似于SVM,当数据不可分时,可以引入松弛变量,于是约束条件可以改写成

  这样,固定G,我们可以通过下面的优化问题求解D:

  进一步地,将约束条件放到目标函数上去,可以改写为

  这里,称为函数的正部,为了方便,下面称它为正部函数。对于正部函数,当时,,否则

  而对于G,固定D(也就是固定),我们可以通过如下规划优化G:

  在实际训练中,这两个优化问题交替求解,而且无需求解到最优再转向另一个问题,通常来说,每次迭代,D更新步,G更新一步。

  作者在[1]中证明了,若真实数据分布的支撑集为紧致集,并且是Lipschitz连续的,则当时,LS-GAN将收敛到纳什均衡解,。这也启示我们,在实际训练时,应该设置为一个较大的数。

  作者通过实验验证了LS-GAN的有效性,并且发现,即使不使用batch normalization,LS-GAN仍然能够产生decent的图像。

  CLS-GAN

  不难理解,带条件的LS-GAN的loss可以记为,其中为条件信息。对应的优化问题分别为:

  同样地,与其他GAN的conditional版本一样,它也可以做预测问题:

  作者在SVHN数据集上测试了预测问题(监督学习),CLS-GAN取得了不错的分类结果:

  LS-GAN做半监督学习

  设我们的数据包含个类别。我们知道,general GAN做半监督学习,一般是将G产生的数据当做单独的一类数据,而真实的类数据一起构成类的数据,D的任务是正确分类这类的数据(参看Improved GAN)。

  当计算loss时,还是按照real和fake两类进行计算,即真实的类数据算为real,而G产生的数据,即第类数据算为fake。采用JS散度即可定义loss。一般来说,没有标签的数据只来自于G。

  当然,LS-GAN也可以这么做。作者采用另外一种方式,从CLS-GAN入手做半监督学习。

  首先,由于是分类问题,loss可以根据softmax的输出来定义

  对于没有标签的数据(与Improved GAN中所用的方法不同,这里不只是G产生的数据,还可以没有标签的真实数据),它的标签可以通过CLS-GAN进行预测,对应的,这类数据的loss可以定义为

  对有标签和没有标签的数据做一个平衡(设平衡参数为),可以得到最终的目标函数:

  其中:

  实验发现,CLS-GAN在CIFAR数据集上的半监督学习达到了state-of-the-art的水平。

  GLS-GAN

  最后,作者对LS-GAN做了一个推广,得到广义的LS-GAN,GLS-GAN。

  回顾一下,前面LS-GAN引入了非负的松弛变量,并最终将松弛变量合并到目标函数中(通过正部函数)。这个过程只用到了正部函数的两个性质:

  1.

  2.

  我们可以用一个满足这两个性质的其他函数来代替正部函数,比如leaky relu函数。记为满足以上两个性质的函数,它可以用于替换正部函数:

  足够大时,我们可以忽略第一项:

  若采用leaky relu函数,此时的GLS-GAN记为,不难看出

  而当时,无关,可以忽略,此时D的目标函数为:

  而这就是WGAN的目标函数!也就是说

  也就是说,LS-GAN和WGAN都是GLS-GAN的特例。

  此外,可以尝试其他类型的C函数,个人觉得,换成其他类型的C函数,对效果的影响并不大。文章的结果我还没复现,待复现结果时验证一下。

  代码

  1. LS-GAN: https://github.com/guojunq/lsgan

  2. GLS-GAN: https://github.com/guojunq/glsgan

  参考文献

  1. Qi G J. Loss-Sensitive GenerativeAdversarial Networks on Lipschitz Densities[J]. arXiv preprintarXiv:1701.06264, 2017.

  2. 知乎专栏:条条大路通罗马LS-GAN:把GAN建立在Lipschitz密度上 - 知乎专栏

  3. An Incomplete Map of the GAN models: http://www.cs.ucf.edu/~gqi/GANs.htm

  4. Nowozin S, Cseke B, Tomioka R. f-GAN:Training generative neural samplers using variational divergenceminimization[C]//Advances in Neural Information Processing Systems. 2016:271-279.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值