其中 Pr 是真实样本分布,Pg 是由生成器产生的样本分布。对于生成器,Goodfellow 一开始提出来一个损失函数,后来又提出了一个改进的损失函数,分别是
后者在 WGAN 两篇论文中称为“the - log D alternative”或“the - log D trick”。WGAN 前作分别分析了这两种形式的原始GAN各自的问题所在,下面分别说明。 第一种原始GAN形式的问题 一句话概括:判别器越好,生成器梯度消失越严重。WGAN 前作从两个角度进行了论证,第一个角度是从生成器的等价损失函数切入的。 首先从公式1可以得到,在生成器 G 固定参数时最优的判别器 D 应该是什么。对于一个具体的样本,它可能来自真实分布也可能来自生成分布,它对公式1损失函数的贡献是 令其关于D(x)的导数为0,得 化简得最优判别器为:
这个结果从直观上很容易理解,就是看一个样本 x 来自真实分布和生成分布的可能性的相对比例。如果Pr(x) = 0且 Pg(x) ≠ 0,最优判别器就应该非常自信地给出概率0;如果 Pr(x) = Pg(x),说明该样本是真是假的可能性刚好一半一半,此时最优判别器也应该给出概率0.5。 然而GAN训练有一个trick,就是别把判别器训练得太好,否则在实验中生成器会完全学不动(loss降不下去),为了探究背后的原因,我们就可以看看在极端情况——判别器最优时,生成器的损失函数变成什么。给公式2加上一个不依赖于生成器的项,使之变成 注意,最小化这个损失函数等价于最小化公式2,而且它刚好是判别器损失函数的反。代入最优判别器即公式4,再进行简单的变换可以得到 变换成这个样子是为了引入 Kullback–Leibler divergence(简称KL散度)和 Jensen-Shannon divergence(简称JS散度)这两个重要的相似度衡量指标,后面的主角之一Wasserstein距离,就是要来吊打它们两个的。所以接下来介绍这两个重要的配角——KL散度和JS散度:
于是公式5就可以继续写成 到这里读者可以先喘一口气,看看目前得到了什么结论:根据原始GAN定义的判别器loss,我们可以得到最优判别器的形式;而在最优判别器的下,我们可以把原始GAN定义的生成器loss等价变换为最小化真实分布Pr与生成分布Pg之间的JS散度。我们越训练判别器,它就越接近最优,最小化生成器的loss也就会越近似于最小化Pr和Pg之间的JS散度。 问题就出在这个JS散度上。我们会希望如果两个分布之间越接近它们的JS散度越小,我们通过优化JS散度就能将Pg“拉向”Pr,最终以假乱真。这个希望在两个分布有所重叠的时候是成立的,但是如果两个分布完全没有重叠的部分,或者它们重叠的部分可忽略(下面解释什么叫可忽略),它们的JS散度是多少呢? 答案是log2,atv,因为对于任意一个x只有四种可能:
第一种对计算JS散度无贡献,第二种情况由于重叠部分可忽略所以贡献也为0,第三种情况对公式7右边第一个项的贡献是 第四种情况与之类似,所以最终 换句话说,无论 Pr 跟Pg 是远在天边,还是近在眼前,只要它们俩没有一点重叠或者重叠部分可忽略,JS散度就固定是常数 log2,而这对于梯度下降方法意味着——梯度为0!此时对于最优判别器来说,生成器肯定是得不到一丁点梯度信息的;即使对于接近最优的判别器来说,生成器也有很大机会面临梯度消失的问题。 (责任编辑:本港台直播) |