Skip to main content

散度

KL (Kullback-Leibler) Divergence

KL散度又称相对熵,为信息散度(增益),是两个概率分布P和Q之间差别的非对称的度量,即度量使用基于Q的编码方式对P进行编码所需的额外bits数,P表示数据的真实分布,则Q表示P的近似分布。

KL散度性质:

  • 不对称性;
  • 为非负值,因为对数函数为凸函数;
  • 不满足三角不等式。

KL散度局限性:

当两个分布距离很远,完全没有重叠时,KL散度值失去意义。

单变量高斯分布概率密度:

多变量高斯分布概率密度,其中Σ为协方差矩阵:

JS (Jensen-Shannon) Divergence

JS散度是基于KL散度的变形,度量两个概率分布的相似度,解决了KL散度非对称的问题,一般是对称的,取值在0到1之间。

JS散度性质:

  • 对称性

JS散度局限性:

当两个分布距离很远,完全没有重叠时,JS散度为一个常数,在学习算法中也就意味着这一点的梯度为0,即梯度消失。

TV(Total Variation)Divergence

TV散度是另一种用于衡量概率分布之间差异的指标,定义为:

TV散度的特点包括:

  • 对称性
  • 取值范围:其值在0到1之间,0表示完全相同,1表示完全不同。

TV散度与KL散度的比较

特性KL散度TV散度
对称性非对称对称
取值范围从0到无穷大从0到1
性质不满足三角不等式满足三角不等式
适用场景适用于信息理论和统计推断适用于概率分布的相似性评估

熵 KL散度与交叉熵

首先用一句话进行总结:KL散度可以被用于计算代价,而在特定情况下最小化KL散度等价于最小化交叉熵。而交叉熵的运算更简单,所以用交叉熵来当做代价。

KL散度

KL散度,有时候也叫KL距离,主要用来衡量两个事件或者分布之间的不同。

举个不恰当的例子:

  • 事件A:张三今天买了2个土鸡蛋
  • 事件B:李四今天买了6个土鸡蛋

我们定义随机变量x:买土鸡蛋,那么事件A和B的区别是什么?

有人可能说,那就是李四多买了4个土鸡蛋?这个答案只能得50分,因为忘记了”坐标系”的问题。

换句话说,对于张三来说,李四多买了4个土鸡蛋。对于李四来说,张三少买了4个土鸡蛋。

选取的参照物不同,那么得到的结果也不同。

更严谨的说,应该是说我们对于张三和李四买土鸡蛋的期望不同,可能张三天天买2个土鸡蛋,而李四可能因为孩子满月昨天才买了6个土鸡蛋,而平时从来不买。

因此对于离散事件,我们定义KL散度为:

img

观察公式我们可以得出:

  • 如果,既两个事件的分布完全相同,那么KL散度为0。
  • 上式减号左边部分就是事件A的熵。
  • 如果颠倒一下顺序(求),那么结果就不一样了,因此KL散度不具有对称性。

交叉熵

现在我们已经有KL散度来衡量两个分布之间的不同了,那么交叉熵是用来做什么的呢?

事实上交叉熵和KL散度的公式非常相近,其实就是KL散度的后半部分:A和B的交叉熵 = A与B的KL散度 – A的熵。

既:

img

因此,交叉熵的公式为:

img

可以观察到,当S(A)为常量时,交叉熵等价于KL散度。因此我们可以有两个发现:

  • 交叉熵和KL散度一样,不具有对称性。
  • 对同一件事求交叉熵实际上就是求该事件的熵

那么为什么使用交叉熵来当作代价函数呢?

首选我们定义训练模型分布P(model) [下称为]以及训练数据分布P(training) [下称为]。我们需要最小化两个两个分布之间的KL散度。既:

但是,当给定数据集时,一定,KL散度等价于交叉熵,因此问题转换为了 。因此,交叉熵可以用于计算训练模型分布与训练模型分布之间的不同。当交叉熵最低时(等于训练数据分布的熵),我们学到了“最好的模型”。


当然,完美的拟合训练数据往往意味着过拟合