散度
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散度为:
观察公式我们可以得出:
- 如果,既两个事件的分布完全相同,那么KL散度为0。
- 上式减号左边部分就是事件A的熵。
- 如果颠倒一下顺序(求),那么结果就不一样了,因此KL散度不具有对称性。
交叉熵
现在我们已经有KL散度来衡量两个分布之间的不同了,那么交叉熵是用来做什么的呢?
事实上交叉熵和KL散度的公式非常相近,其实就是KL散度的后半部分:A和B的交叉熵 = A与B的KL散度 – A的熵。
既:
因此,交叉熵的公式为:
可以观察到,当S(A)为常量时,交叉熵等价于KL散度。因此我们可以有两个发现:
- 交叉熵和KL散度一样,不具有对称性。
- 对同一件事求交叉熵实际上就是求该事件的熵
那么为什么使用交叉熵来当作代价函数呢?
首选我们定义训练模型分布P(model) [下称为]以及训练数据分布P(training) [下称为]。我们需要最小化两个和两个分布之间的KL散度。既:
但是,当给定数据集时,一定,KL散度等价于交叉熵,因此问题转换为了 。因此,交叉熵可以用于计算训练模型分布与训练模型分布之间的不同。当交叉熵最低时(等于训练数据分布的熵),我们学到了“最好的模型”。
当然,完美的拟合训练数据往往意味着过拟合