【GANs学习笔记】(七)LSGAN

4. LSGAN

       在上一节当中提到,JS divergence出现问题的原因是:只要完全没有重合,discriminator就能100%地鉴别出的差异,因此二者的JS divergence就是一样的。那现在的一个解决思路就是,让discriminator始终都不能100%地鉴别出的差异,这样即便完全没有重合,二者的JS divergence也会不一样,而只要divergence存在差异,就能反映出的优劣度来。基于这样的思路,LSGAN(最小二乘GAN)被提出了。

       当然,上面的描述还是有些拗口,下面我们通过图片来详细说明一下。

       第一张图是discriminator训练得太好的例子,它能够100%地鉴别出的差异。蓝色样本点,是生成样本,它们的得分为0;绿色样本点,是真实样本,它们的得分为1之间完全没有交集。这样会出现什么问题呢?当轮到generator训练的时候,它希望蓝色的点能够向右移,但是因为对于所有蓝色点,discriminator计算出的JS divergence都是一样的,这意味着所有点的梯度都是0,于是基于gradient descent所有的生成样本的点都无法移动了。这种情况其实是很有意思的,因为在之前的理论中,我们希望discriminator尽可能训练到最好,但是当之间完全没有交集时,discriminator就不能训练得太好,因为那意味着梯度消失至0generator无法更新。

       接下来,我们就要想办法去限制discriminator不要训练得太好。其实方法非常简单,只需要将discriminator的最后的sigmoid激活层改成linear激活层,这样训练出的D就会是一个线性的直线,如下图所示。

       D只有在一种情况下才会梯度为0,就是完全重合时,D变为一条y=1/2处的水平直线;其他情况下都会顺着直线的梯度向靠拢。这条直线是如何计算出的呢,它用到的方法是最小二乘法,详细理论可以参阅LSGANpaper

       上述便是LSGAN,它解决的是GANs当中梯度消失为0的问题;其实关于梯度消失问题,还有一篇paper从判别器的角度给出了方案,详见Part3RGAN,就不放在这儿了。

       可是,我们真正想要解决的问题,即如何去更好地测量之间的divergenceLSGAN绕过了这一核心问题,真正在这一问题上作出了突破的是下面这篇paper――WGAN

猜你喜欢

转载自blog.csdn.net/a312863063/article/details/83551995