【GANs学习笔记】(四)GANs的缺陷

完整笔记:http://www.gwylab.com/note-gans.html
——————————————————————-

Part1 GANs基于Divergence的改进

1. GANs并不完美

1.1 JS divergence距离偏差问题

       我们现在来认真反思,前一篇所介绍的GANs理论,它真的能够学习到,或者说它真的能够无限逼近真实数据分布吗?回想一下,在前面的介绍中,我们提到discriminator,它的最大化的过程实际上就是上就是在求解之间的JS divergence距离,但是到了generator中,它的最小化的过程是在最小化之间的JS divergence距离吗?答案是不一定,我们画张图来理解一下:

       假设上面这张图是discriminator训练完成之后,找到了D=使得V()最大,接下来我们开始训练generator部分。

       假设训练了一次generator之后,变成V()变成了下图的V()

       因为在训练generator的时候我们是固定D的,但是我们可以看到此时的不再是让V()达到最大值的解,也就是说从这时开始,把D=代入 V()中计算出的值不再等于之间的JS divergence距离(只有才等于JS距离),那么在接下来在继续训练generator的过程中,minimize的值就不再会是之间的JS divergence距离了。

       这个问题可以通过限制训练次数来解决。对于discriminator,理论上我们需要让它训练非常多次,直到discriminator找到的的全局最大解,这样在传给generator时才能保证之间的JS divergence距离;而对于generator,我们限制它只能训练1次,这是为了防止训练完一次后发生变化导致不再是的解。于是原始的算法优化为如下算法:

       不过,在实际操作中我们往往不会非常多次地训练discriminator,因为找到真正的解需要的训练次数太多,为了减小训练代价我们只会训练k次,找到的近似解即可停止。所以在实际的应用中,我们计算的都是JS Divergence的近似值,最终GANs学到的是近似分布而不是数据的真实分布,这是我们需要明白的地方。

1.2 训练速度问题

       原始GAN中,discriminator对于仿造数据的处理式是:

       我们注意到,这个表达式,一开始减得很慢,后面减得很快,我们不妨与这个表达式对比一下:

       我们知道,一开始鉴别器是很容易鉴别仿造数据的,因此D(x)的初始值是在靠近0的左端。而对于刚开始训练的模型,我们希望在初期D(x)能够快速地更新,但不幸的是,目标函数左端刚好是平缓的区域,依据梯度下降原理这会阻碍D(x)的快速更新。

       为了解决这一问题,有人提出了把这个表达式换成,同样能满足discriminator的目标函数要求,并且在训练初期还能更新得比较快。

       上述方法便是在这个非常小的地方做了改进。不过后来,人们为了区分这两种GAN,还是分别起了不同的名字。第一种GAN被叫做MMGANMinimax GAN),它也是人们常说的原始GANs;第二种GAN被叫做NSGANNon-saturating GAN)。

       前面两节是在一些细节上对GANs做了改进,那其实还有很多专门的paperGANs做了架构上的改进,我会在第3节进行介绍,不过在那之前我会先介绍一篇非常有趣的paper,叫做fGAN,它能帮助我们对GANs有更深的理解。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值