美文网首页
WGAN:为什么要用EM距离取代交叉熵

WGAN:为什么要用EM距离取代交叉熵

作者: 快乐的二叉树 | 来源:发表于2020-04-19 13:19 被阅读0次

面试被问到的一个问题:WGAN使用EM距离作为度量方式,相比原来的交叉熵有什么优势?

一、信息论基础

1、信息熵

假设有事件x,其发生的概率为p(x),那么这件事发生后带来的信息量是:h(x)=-\log p(x),当事件发生的概率越小,其带来的信息量就越大。
因此,信息量度量了一件具体的事情发生后带来的信息,而事件x可能发生也可能不发生,甚至有多种结果,如果在事件发生之前,想要度量它们的信息量,就需要用到信息熵。
信息熵是在事件发生之前对可能产生的各种情况信息量的期望
H(x)=-\sum_{i=1}^n{p(x_i)\log p(x_i)}

连续情况下计算公式为:
H(x)=-\int p(x)\log p(x) dx

H(x)还可以度量概率系统的复杂度。当信息熵越大,说明可能出现的事件种类越多,系统越复杂;信息熵越小,说明事件种类越少,系统越简单。
以上把x当成了一个有很多种可能的事件,实质就是一个概率分布,其信息熵就是对这个分布不确定性的度量。

2、相对熵

相对熵用于度量两种概率分布,假设两个分布分别为p(x)q(x)
在信息论中,相对熵是用来度量使用基于q(x)的编码来编码来自p(x)的样本平均所需的额外的比特个数,同时也可以用来衡量两个概率分布之间的距离。
假设p(x)为真实分布,q(x)是神经网络拟合的分布,现在想要知道网络输出对真实分布的拟合程度,或者说,用分布q(x)去拟合分布p(x)所带来的信息损耗,就可以用相对熵来表示:
\begin{aligned} D(p||q)&=\sum_{i=1}^n[p(x_i)\log p(x_i)-p(x_i)\log q(x_i)] \\ &=\sum_{i=1}^np(x_i)\log \frac {p(x_i)}{q(x_i)} \end{aligned}

可以看到式子的第一项就是p(x)的信息熵的相反数,第二项实际上就是交叉熵的相反数了,所以p和q的相对熵=p和q的交叉熵-p的信息熵
相对熵又叫KL散度,可以从公式看到p和q交换之后,他们的相对熵也会发生变化,也即KL散度具有不对称性。D_{KL}(p||q)表示的是用q去拟合p,D_{KL}(q||p)则表示用p去拟合q,KL只能反映一个对另一个的拟合程度。
为了客观地反映两个分布之间的距离,在KL散度的基础上提出了JS散度,一种对称的度量方式:
D_{JS}(p||q)=\frac {1}{2}D_{KL}(p||\frac {p+q}{2})+\frac {1}{2}D_{KL}(q||\frac {p+q}{2})

由公式可见,p和q的JS散度等价于两个分布到平均分布的KL散度之和,具有交换性,因此JS散度可以较客观地衡量两个分布之间的距离。

3、交叉熵

相对熵的公式中有一项是p和q的交叉熵:
H(p,q)=\sum_{i=1}^np(x_i)\log q(x_i)

在交叉熵上减去一个p的信息熵,就得到了p和q的相对熵,而信息熵是不随q的分布变化的,因此交叉熵也可以用来表示分布q对分布p的拟合程度,常用于做损失函数。

二、原始交叉熵的问题

以下内容参考这篇博客

1、GAN损失

原始GAN中使用交叉熵作为损失函数,判别器需要将真实样本尽量预测为1,将生成样本尽量预测为0,目标函数形式为:
loss_D=-E_{x\in p_g(x)}\log [1-D(x)]-E_{x\in p_r(x)}\log D(x)

其中p_g(x)是生成样本的分布,p_r(x)是真实样本的分布。对于生成器,有一个原始的损失函数,后来又进行了改进:
loss1_G=E_{x\in p_g(x)}\log [1-D(x)]

loss2_G=-E_{x\in p_g(x)}\log D(x)

经过WGAN中大量的实验证明,这两种形式的GAN损失都会产生严重的问题,导致生成器训练不稳定、目标不明确,以及模式崩溃等问题,接下来分别论证。

2、第一种损失形式的问题

GAN的训练是一个极小极大问题,理论上先训练判别器,再训练生成器,然而训练判别器次数如果过多,会使生成器loss降不下来,不论生成什么样的样本都能够被这个判别器鉴别出来;训练判别器次数如果过少,判别器对生成器的输出样本不具有正确的判别能力,会使生成器优化目标不稳定,然而实际应用中很难把握这个度,所以也就出现了GAN难训练的种种问题。

先考虑一下极端情况,也就是判别器训练很多次之后,可以称作此时的判别器为最优判别器D^*。求得D^*的方法为:
loss_DD(x)的导数设为0,此时x为一个具体的样本,
loss_D=-p_g(x)\log [1-D(x)]-p_r(x)\log D(x)

-\frac{p_r(x)}{D(x)}+\frac{p_g(x)}{1-D(x)}=0

得到的D^*(x)为关于两个分布的最优解,
D^*(x)=\frac{p_r(x)}{p_r(x)+p_g(x)}

再将这个最优解代入生成器的目标函数,注意这里为了后续引入JS散度,给生成器损失加了一个不依赖于生成器的项,
loss1_G=E_{x\in p_g(x)}\log [1-D(x)]+E_{x\in p_r(x)}\log D(x)

实际上就是判别器目标函数的相反数,等价于生成器第一个目标函数。代入最优判别器得到,
E_{x\in p_r(x)}\log \frac {2p_r(x)} {p_r(x)+p_g(x)}+E_{x\in p_g(x)}\log \frac {2p_g(x)} {p_r(x)+p_g(x)}-2\log 2

结合JS散度的公式,上述形式可以化为,
loss1_G=2D_{JS}(p_r||p_g)-2\log 2

因此,在第一种生成器损失函数的形式下,根据最优判别器,可以得到生成器的优化目标实质上是最小化两种分布的JS散度。

问题就出在JS散度这种度量方式上,从它的计算方式可以看出,它是在两个分布同样的位置取点,再进行p_r(x_i)\log p_g(x_i)的操作,i始终指示两个分布中同样的位置。
所以,这个优化目标在两个分布有大概率重叠的时候是成立的,但是如果两个分布完全没有重叠的部分,或者它们重叠的部分可忽略时,它们的JS散度就会变成一个常数\log 2
假设p_r(x)=0p_g(x)\not =0,两个分布不重叠,可以得到,
\begin{aligned} loss1_G&=0+E_{x\in p_g(x)}\log \frac {2p_g(x)} {0+p_g(x)}-2\log 2 \\ &=\log 2-2\log 2 \end{aligned}

生成器的损失函数变成了一个常数,就意味着更新时梯度为0,这是在判别器达到最优解的情况下,但即使当判别器在训练过程中,生成器也很有可能面临梯度消失的问题。
上述结论还有一个条件,那就是两个分布没有重叠或重叠很少,关于重叠情况,论文也做了实验验证,得到一个结论:p_rp_g的支撑集是高维空间中的低维流形时,两个分布的重叠部分测度为0的概率为1。
没看懂,不过翻译过来就是两个分布不重叠的可能性非常大。

那么综上,可以得到第一种生成器损失函数存在的问题:在(近似)最优判别器下,最小化生成器的loss等价于最小化p_rp_g之间的JS散度,而由于p_rp_g几乎不可能有不可忽略的重叠,所以无论它们相距多远JS散度都是常数,最终导致生成器的梯度(近似)为0,梯度消失。

3、第二种损失形式的问题

生成器改进的损失形式:
loss2_G=-E_{x\in p_g(x)}\log D(x)

(公式搬运工模式开始),前文已经证明,
E_{x\in p_g(x)}\log [1-D^*(x)]+E_{x\in p_r(x)}\log D^*(x)=2D_{JS}(p_r||p_g)-2\log 2

从KL散度入手,将D_{KL}(p_g||p_r)改写为最优判别器的形式,
D_{KL}(p_g||p_r)=E_{x\in p_g(x)}\log [1-D^*(x)]-E_{x\in p_r(x)}\log D^*(x)

整合前两个式子,就可以得到,
-E_{x\in p_g(x)}\log D^*(x)=D_{KL}(p_g||p_r)-2D_{JS}(p_r||p_g)+2\log 2+E_{x\in p_r(x)}\log D^*(x)

(公式搬运工模式结束),上式就是在最优判别器的情况下,生成器等价的目标函数,式子最后一项是不随生成器改变的,所以可以看到有问题的地方了!

第一,生成器的目标变成了,要最小化生成分布与真实分布的KL散度,同时又要最大化两者的JS散度,这种矛盾的目标会让生成器的优化方向发生错误
第二,第一项的KL散度,对两种分布拟合程度的刻画是不对称的,当p_r(x)\rightarrow 0,p_g(x)\rightarrow 1时,两者的KL散度会逼近无穷大。说明当生成器输出了不太真实的样本时,为其自身带来的惩罚是巨大的,所以生成器就会倾向于生成一些重复但安全的样本,以避免惩罚,这导致了模型缺乏多样性,即模式崩溃

EM距离的改进

综合上面对两种生成器损失函数的论证,可以得到结论:第一种损失函数中由于JS散度的特性,会带来生成器梯度的消失问题;第二种损失函数同时存在KL散度和JS散度的相反优化,导致优化目标不稳定、难训练和模式崩溃等问题
所以提出了Wasserstein距离作为新的度量方式。

1、Wasserstein距离

Wasserstein距离又叫EM距离(Earth Mover's Distance),用于度量两个概率分布之间的距离,计算公式如下:

其中\gamma是由P_1P_2所有可能的联合分布集合中的某个元素,代表其中一种情况下P_1P_2的分布形式,再在这个分布形式中抽样得到(x,y)样本点,计算它们之间的距离||x-y||,从而可以得到在联合分布\gamma下样本对之间的期望值E_{(x,y)\in \gamma}[||x-y||],再在所有可能的联合分布中,找到期望值的下界,就是EM距离。
可以理解为Wasserstein距离就是把分布P_1搬到P_2所需要的最小消耗,因此也可以用来表示神经网络拟合出的分布到真实分布之间的距离。

相比于KL散度和JS散度,EM距离的优势在于:当两个分布没有重叠或者重叠部分很少时,也可以表示它们之间的距离,是一种平滑、积累的计算方式。

2、WGAN

Wasserstein GAN的提出旨在解决原始GAN存在的难训练、不稳定以及缺乏多样性的问题,最重要的改进就是使用了EM距离替代交叉熵,作为真假样本之间距离的度量方式。

WGAN与原始GAN第一种形式相比,改了以下四点:

  • 判别器最后一层去掉sigmoid
  • 生成器和判别器的loss不取log
  • 每次更新判别器的参数之后把它们的绝对值截断到不超过一个固定常数c
  • 不要用基于动量的优化算法(包括momentum和Adam),推荐RMSProp,SGD也行

从表中可得,WGAN判别器的损失函数为:
loss_D=E_{x\in p_g}f_w(x)-E_{x\in p_r}f_w(x)

生成器的损失函数为:
loss_G=-E_{x\in p_g}f_w(x)

具体实现时先通过数学变换将Wasserstein距离写成可求解的形式,利用一个参数数值范围受限的判别器神经网络来最大化这个形式,就可以近似Wasserstein距离。

所以,开头问题的答案应该是:
原始GAN两种形式各自存在问题,第一种形式等价在最优判别器下等价于最小化生成分布与真实分布之间的JS散度,由于随机生成分布很难与真实分布有不可忽略的重叠以及JS散度的突变特性,使得生成器面临梯度消失的问题;第二种形式在最优判别器下等价于既要最小化生成分布与真实分布直接的KL散度,又要最大化其JS散度,相互矛盾,导致梯度不稳定,而且KL散度的不对称性使得生成器宁可丧失多样性也不愿丧失准确性,导致模式崩溃现象。
由于EM距离相对KL散度与JS散度具有优越的平滑特性,当两个分布不重叠或重叠部分很少时,也可以较细致地刻画它们之间的距离,从而使梯度不至于消失,就能有效拉近生成分布与真实分布。WGAN既解决了训练不稳定的问题,也提供了一个可靠的训练进程指标,而且该指标确实与生成样本的质量高度相关。

参考博客

1、令人拍案叫绝的Wasserstein GAN 及代码(WGAN两篇论文的中文详细介绍)
2、Wasserstein距离

相关文章

  • WGAN:为什么要用EM距离取代交叉熵

    面试被问到的一个问题:WGAN使用EM距离作为度量方式,相比原来的交叉熵有什么优势? 一、信息论基础 1、信息熵 ...

  • 算法_EM算法

    基于最大似然估计(交叉熵)的模型,模型中存在隐变量,则用EM(Expectation maximization a...

  • [ML] 交叉熵

    1. 交叉熵定义 交叉熵(Cross Entropy)是Shannon信息论中一个重要概念,主要用于度量两个概率分...

  • 交叉熵ce(cross entropy)

    交叉熵表示两个概率分布之间的距离,公式如下: 在tensorflow中表示:

  • Tensorflow 学习笔记

    一 如何判断一个输出向量和期望的向量有多接近呢? 交叉熵是常用的评判方法之一。交叉熵刻画了两个概率分布之间的距离,...

  • 深度学习知识点汇总-机器学习基础(7)

    2.7 为什么在分类问题中用交叉熵代替二次代价函数? 交叉熵损失函数的学习速度更快,但是对于回归问题,它的准确性又...

  • 交叉熵损失函数和focal loss

    交叉熵 交叉熵是信息论中的一个重要概念,主要用于度量两个概率分布间的差异性。是分类问题中经常使用的一种损失函数。 ...

  • 交叉熵, softmax和MSE

    交叉熵 从交叉熵的公式中可以看到交叉熵函数不是对称的(H(p, q) ≠ H(q,p)),它刻画的是通过概率分布q...

  • cross entropy交叉熵和ground truth总结

    一.cross entropy 交叉熵 交叉熵的概念得从信息熵的概念说起,我们都知道信息熵,简而言之就是信息量多少...

  • 理解熵,交叉熵和交叉熵损失

    交叉熵损失是深度学习中应用最广泛的损失函数之一,这个强大的损失函数是建立在交叉熵概念上的。当我开始使用这个损失函数...

网友评论

      本文标题:WGAN:为什么要用EM距离取代交叉熵

      本文链接:https://www.haomeiwen.com/subject/fgouvhtx.html