交叉熵、相对熵(KL散度)、JS散度和Wasserstein距离

1 信息量

       任何事件都会承载着一定的信息量,包括已经发生的事件和未发生的事件,只是它们承载的信息量会有所不同。如昨天下雨这个已知事件,因为已经发生,既定事实,那么它的信息量就为0。如明天会下雨这个事件,因为未有发生,那么这个事件的信息量就大。从上面例子可以看出信息量是一个与事件发生概率相关的概念,而且可以得出,事件发生的概率越小,其信息量越大。
       假设 X X X是一个离散型随机变量,则定义事件 X = x 0 X=x_0 X=x0的信息量为:
I ( x 0 ) = − l o g ( p ( x 0 ) ) I(x_0)=-log(p(x_0)) I(x0)=log(p(x0))

2 信息熵

       如果我们把一个事件的所有可能性罗列出来,就可以求得该事件信息量的期望,信息量的期望就是信息熵,所以信息熵的公式为:
H ( x ) = − ∑ i = 1 n p ( x i ) l o g ( p ( x i ) ) H(x)=-\sum_{i=1}^np(x_i)log(p(x_i)) H(x)=i=1np(xi)log(p(xi))
       信息熵是衡量随机变量分布的混乱程度,是随机分布各事件发生的信息量的期望值,随机变量的取值个数越多,状态数也就越多,信息熵就越大,混乱程度就越大。当随机分布为均匀分布时,熵最大

3 相对熵(KL散度)

       相对熵又称KL散度,如果我们对于同一个随机变量 x 有两个单独的概率分布 P(x) 和 Q(x),我们可以使用 KL 散度来衡量这两个分布的差异。在机器学习中,P往往用来表示样本的真实分布,Q用来表示模型所预测的分布,那么KL散度就可以计算两个分布的差异,也就是Loss,取值范围是(0,正无穷)。公式如下:
D K L ( p ∣ ∣ q ) = ∑ i = 1 n p ( x i ) l o g ( p ( x i ) q ( x i ) ) D_{KL}(p||q)=\sum_{i=1}^{n}p(x_i)log(\frac{p(x_i)}{q(x_i)}) DKL(pq)=i=1np(xi)log(q(xi)p(xi))
       有时会将KL散度称为KL距离,但它并不满足距离的性质:

  1. KL散度不是对称的;
  2. KL散度不满足三角不等式。

4 交叉熵

       我们将KL散度公式进行变形:
D K L ( p ∣ ∣ q ) = ∑ i = 1 n p ( x i ) l o g ( p ( x i ) q ( x i ) ) = ∑ i = 1 n p ( x i ) l o g ( p ( x i ) ) − ∑ i = 1 n p ( x i ) l o g ( q ( x i ) ) = − H ( p ( x ) ) + [ − ∑ i = 1 n p ( x i ) l o g ( q ( x i ) ) ] D_{KL}(p||q)=\sum_{i=1}^{n}p(x_i)log(\frac{p(x_i)}{q(x_i)})=\sum_{i=1}^{n}p(x_i)log(p(x_i))-\sum_{i=1}^{n}p(x_i)log(q(x_i))=-H(p(x))+[-\sum_{i=1}^{n}p(x_i)log(q(x_i))] DKL(pq)=i=1np(xi)log(q(xi)p(xi))=i=1np(xi)log(p(xi))i=1np(xi)log(q(xi))=H(p(x))+[i=1np(xi)log(q(xi))]
       等式的前一部分恰巧就是p的熵,等式的后一部分,就是交叉熵:
H ( p , q ) = − ∑ i = 1 n p ( x i ) l o g ( q ( x i ) ) H(p,q)=-\sum_{i=1}^{n}p(x_i)log(q(x_i)) H(p,q)=i=1np(xi)log(q(xi))
       在机器学习中,我们需要评估label和predicts之间的差距,使用KL散度就好,但是KL散度中的前一部分−H(y)不变,故在优化过程中,只需要关注交叉熵就可以了。所以一般在机器学习中直接用用交叉熵做loss,评估模型。
       其用来衡量在给定的真实分布下,使用非真实分布所指定的策略消除系统的不确定性所需要付出的努力的大小。

JS散度

       JS散度度量了两个概率分布的相似度,基于KL散度的变体,解决了KL散度非对称的问题。一般地,JS散度是对称的,其取值是0到1之间。定义如下:
J S ( p 1 ∣ ∣ p 2 ) = 1 2 K L ( p 1 ∣ ∣ p 1 + p 2 2 ) + 1 2 K L ( p 2 ∣ ∣ p 1 + p 2 2 ) JS(p_1||p_2)=\frac{1}{2}KL(p_1||\frac{p_1+p_2}{2})+\frac{1}{2}KL(p_2||\frac{p_1+p_2}{2}) JS(p1p2)=21KL(p12p1+p2)+21KL(p22p1+p2)

Wasserstein距离

       如果两个分配P,Q离得很远,完全没有重叠的时候,那么KL散度值是没有意义的,而JS散度值是一个常数。这在学习算法中是比较致命的,这就意味这这一点的梯度为0。梯度消失了。
       Wasserstein距离相比KL散度、JS散度的优越性在于,即便两个分布没有重叠,Wasserstein距离仍然能够反映它们的远近;而JS散度在此情况下是常量,KL散度可能无意义。公式如下:
W ( p 1 , p 2 ) = inf ⁡ γ ∼ ∏ ( p 1 , p 2 ) = E ( x , y ) ∼ γ [ ∣ ∣ x − y ∣ ∣ ] W(p_1,p_2)=\inf_{\gamma \sim \prod(p_1,p_2)}=E_{(x,y)\sim \gamma}[||x-y||] W(p1,p2)=γ(p1,p2)inf=E(x,y)γ[xy]
        ∏ ( p 1 , p 2 ) \prod(p_1,p_2) (p1,p2)是P1和P2分布组合起来的所有可能的联合分布的集合。对于每一个可能的联合分布γ,可以从中采样(x,y)∼γ得到一个样本x和y,并计算出这对样本的距离||x−y||,所以可以计算该联合分布γ下,样本对距离的期望值 E ( x , y ) ∼ γ [ ∣ ∣ x − y ∣ ∣ ] E_{(x,y)\sim \gamma}[||x-y||] E(x,y)γ[xy]。在所有可能的联合分布中能够对这个期望值取到的下界 inf ⁡ γ ∼ ∏ ( p 1 , p 2 ) = E ( x , y ) ∼ γ [ ∣ ∣ x − y ∣ ∣ ] \inf_{\gamma \sim \prod(p_1,p_2)}=E_{(x,y)\sim \gamma}[||x-y||] infγ(p1,p2)=E(x,y)γ[xy]就是Wasserstein距离。

参考

https://zhuanlan.zhihu.com/p/74075915

你可能感兴趣的:(深度学习)