(2)GAN的loss导致问题


GAN存在着两种问题,原始GAN中判别器要最小化如下损失函数,尽可能把真实样本分为正例,生成样本分为负例:

 

 

 对于生成器,Goodfellow一开始提出来一个损失函数,后来又提出了一个改进的损失函数,分别是:

公式2和公式3分别存在着两种不同的问题。

公式2存在的问题:

  判别器越好,生成器梯度消失越严重。

首先,我们给公式2加上一个不依赖于生成器的项,使之变成:

这是上一篇GAN理论中我们上面证明过程所使用的判别器的损失函数的相反数,我们最终得到的是:

根据原始GAN定义的判别器loss,我们可以得到最优判别器的形式;而在最优判别器的下,我们可以把原始GAN定义的生成器loss等价变换为最小化真实分布$p_{data}(x)$与生成分布$p_g(x)$之间的JS散度。我们越训练判别器,它就越接近最优,最小化生成器的loss也就会越近似于最小化$p_{data}(x)$和$p_g(x)$之间的JS散度。

问题就出在这个JS散度上。我们会希望如果两个分布之间越接近它们的JS散度越小,我们通过优化JS散度就能将$p_g(x)$“拉向”$p_{data}(x)$,最终以假乱真。这个希望在两个分布有所重叠的时候是成立的,但是如果两个分布完全没有重叠的部分,或者它们重叠的部分可忽略(下面解释什么叫可忽略),它们的JS散度是多少呢?

答案是log2,因为对于任意一个x只有四种可能:

 

 

 第一种对计算JS散度无贡献,第二种情况由于重叠部分可忽略所以贡献也为0,第三种情况和第四种情况计算都为log2.

换句话说,无论$p_{data}(x)$跟$p_g(x)$是远在天边,还是近在眼前,只要它们俩没有一点重叠或者重叠部分可忽略,JS散度就固定是常数log2,而这对于梯度下降方法意味着——梯度为0!此时对于最优判别器来说,生成器肯定是得不到一丁点梯度信息的;即使对于接近最优的判别器来说,生成器也有很大机会面临梯度消失的问题。

但是$p_{data}(x)$与$p_g(x)$不重叠或重叠部分可忽略的可能性有多大?比较严谨的答案是:当$p_g(x)$与$p_{data}(x)$的支撑集(support)是高维空间中的低维流形(manifold)时,$p_g(x)$与$p_{data}(x)$重叠部分测度(measure)为0的概率为1。

GAN中的生成器一般是从某个低维(比如100维)的随机分布中采样出一个编码向量,再经过一个神经网络生成出一个高维样本(比如64x64的图片就有4096维)。当生成器的参数固定时,生成样本的概率分布虽然是定义在4096维的空间上,但它本身所有可能产生的变化已经被那个100维的随机分布限定了,其本质维度就是100,再考虑到神经网络带来的映射降维,最终可能比100还小,所以生成样本分布的支撑集就在4096维空间中构成一个最多100维的低维流形,“撑不满”整个高维空间。所以我们可以说,$p_{data}(x)$与$p_g(x)$的支撑集是高维空间中的低维流形。

“撑不满”就会导致真实分布与生成分布难以“碰到面”,这很容易在二维空间中理解:一方面,二维平面中随机取两条曲线,它们之间刚好存在重叠线段的概率为0;另一方面,虽然它们很大可能会存在交叉点,但是相比于两条曲线而言,交叉点比曲线低一个维度,长度(测度)为0,可忽略。三维空间中也是类似的,随机取两个曲面,它们之间最多就是比较有可能存在交叉线,但是交叉线比曲面低一个维度,面积(测度)是0,可忽略。从低维空间拓展到高维空间,就有了如下逻辑:因为一开始生成器随机初始化,所以$p_g(x)$几乎不可能与$p_{data}(x)$有什么关联,所以它们的支撑集之间的重叠部分要么不存在,要么就比$p_{data}(x)$与$p_g(x)$的最小维度还要低至少一个维度,故而测度为0。

故,我们有此结论:

   在(近似)最优判别器下,最小化生成器的loss等价于最小化$p_{data}(x)$与$p_g(x)$之间的JS散度,而由于$p_{data}(x)$与$p_g(x)$几乎不可能有不可忽略的重叠,所以无论它们相距多远JS散度都是常数log2,最终导致生成器的梯度(近似)为0,梯度消失。

因而我们这样认为,判别器训练得太好,生成器梯度消失,生成器loss降不下去;判别器训练得不好,生成器梯度不准,四处乱跑。只有判别器训练得不好不坏才行,但是这个火候又很难把握,甚至在同一轮训练的前后不同阶段这个火候都可能不一样,所以GAN才那么难训练。

实验辅证见论文。

 

公式3存在的问题:

最小化第二种生成器loss函数,会等价于最小化一个不合理的距离衡量,导致两个问题,一是梯度不稳定,二是collapse mode即多样性不足。

如前文所说,Ian Goodfellow提出的“- log D trick”是把生成器loss改成:

由上文我们可以得到:

我们把KL散度写开来:

结合JS散度,我们有:

最后一项显然不依赖于生成器G,所以我们最小化公式3等价于最小化以下式子:

这个等价最小化目标存在两个严重的问题。第一是它同时要最小化生成分布与真实分布的KL散度,却又要最大化两者的JS散度,一个要拉近,一个却要推远!这在直观上非常荒谬,在数值上则会导致梯度不稳定,这是后面那个JS散度项的毛病。

第二,即便是前面那个正常的KL散度项也有毛病。因为KL散度不是一个对称的衡量,$KL(p_g(x)||p_{data}(x))$与$KL(p_{data}(x)||p_g(x))$是有差别的。以前者为例:

  • 当$p_g(x)\to0$而$p_{data}(x)>0$时,$p_g(x)log\frac{p_g(x)}{p_{data}(x)}\to0$,对$KL(p_g(x)||p_{data}(x))$的贡献趋近于0;
  • 当$p_{data}(x)\to0$而$p_g(x)>0$时,$p_g(x)log\frac{p_g(x)}{p_{data}(x)}\to \infty$,对$KL(p_g(x)||p_{data}(x))$的贡献趋近于无穷。

换言之,$KL(p_g(x)||p_{data}(x))对于上面两种错误的惩罚是不一样的,第一种错误对应的是“生成器没能生成真实的样本”,惩罚微小;第二种错误对应的是“生成器生成了不真实的样本” ,惩罚巨大。第一种错误对应的是缺乏多样性,第二种错误对应的是缺乏准确性。这一放一打之下,生成器宁可多生成一些重复但是很“安全”的样本,也不愿意去生成多样性的样本,因为那样一不小心就会产生第二种错误,得不偿失。这种现象就是collapse mode。

所以,在原始GAN的(近似)最优判别器下,第一种生成器loss面临梯度消失问题,第二种生成器loss面临优化目标荒谬、梯度不稳定、对多样性与准确性惩罚不平衡导致mode collapse这几个问题。

 

 

西工大陈飞宇还在成长,如有错误还请批评指教。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM