KL散度(相对熵)和交叉熵的区别
相对熵(relative entropy)就是KL散度(Kullback–Leibler divergence),用于衡量两个概率分布之间的差异。
一句话总结的话:KL散度可以被用于计算代价,而在特定情况下最小化KL散度等价于最小化交叉熵。而交叉熵的运算更简单,所以用交叉熵来当做代价。
如何衡量两个事件/分布之间的不同:KL散度
我们上面说的是对于一个随机变量x的事件A的自信息量,如果我们有另一个独立的随机变量x相关的事件B,该怎么计算它们之间的区别?
此处我们介绍默认的计算方法:KL散度,有时候也叫KL距离,一般被用于计算两个分布之间的不同。看名字似乎跟计算两个点之间的距离也很像,但实则不然,因为KL散度不具备有对称性。在距离上的对称性指的是A到B的距离等于B到A的距离。
举个不恰当的例子,事件A:张三今天买了2个土鸡蛋,事件B:李四今天买了6个土鸡蛋。我们定义随机变量x:买土鸡蛋,那么事件A和B的区别是什么?有人可能说,那就是李四多买了4个土鸡蛋?这个答案只能得50分,因为忘记了"坐标系"的问题。换句话说,对于张三来说,李四多买了4个土鸡蛋。对于李四来说,张三少买了4个土鸡蛋。选取的参照物不同,那么得到的结果也不同。更严谨的说,应该是说我们对于张三和李四买土鸡蛋的期望不同,可能张三天天买2个土鸡蛋,而李四可能因为孩子满月昨天才买了6个土鸡蛋,而平时从来不买。
对于两个概率分布和 ,其相对熵的计算公式为:
注意:由于 和 在公式中的地位不是相等的,所以.
相对熵的特点,是只有 时,其值为0。若 和 略有差异,其值就会大于0。其证明利用了负对数函数( )是严格凸函数(strictly convex function)的性质。具体可以参考PRML 1.6.1 Relative entropy and mutual information.
相对熵公式的前半部分 就是交叉熵(cross entropy)。
若 是数据的真实概率分布, 是由数据计算得到的概率分布。机器学习的目的就是希望尽可能地逼近甚至等于 ,从而使得相对熵接近最小值0. 由于真实的概率分布是固定的,相对熵公式的后半部分 就成了一个常数。那么相对熵达到最小值的时候,也意味着交叉熵达到了最小值。对 的优化就等效于求交叉熵的最小值。另外,对交叉熵求最小值,也等效于求最大似然估计(maximum likelihood estimation)。具体可以参考Deep Learning 5.5 Maximum Likelihood Estimation.
为什么交叉熵可以用作代价?
接着上一点说,最小化模型分布 P ( m o d e l ) P(model)P(model) 与 训练数据上的分布 P ( t r a i n i n g ) P(training)P(training) 的差异 等价于 最小化这两个分布间的KL散度,也就是最小化 K L ( P ( t r a i n i n g ) ∣ ∣ P ( m o d e l ) ) KL(P(training)||P(model))KL(P(training)∣∣P(model))。
比照第四部分的公式:
- 此处的A就是数据的真实分布: P ( t r a i n i n g ) P(training)P(training)
- 此处的B就是模型从训练数据上学到的分布:P ( m o d e l ) P(model)P(model)
巧的是,训练数据的分布A是给定的。那么根据我们在第四部分说的,因为A固定不变,那么求 D K L ( A ∣ ∣ B ) D_{KL}(A||B)DKL(A∣∣B) 等价于求 H ( A , B ) H(A,B)H(A,B) ,也就是A与B的交叉熵。
得证,交叉熵可以用于计算“学习模型的分布”与“训练数据分布”之间的不同。当交叉熵最低时(等于训练数据分布的熵),我们学到了“最好的模型”。
但是,完美的学到了训练数据分布往往意味着过拟合,因为训练数据不等于真实数据,我们只是假设它们是相似的,而一般还要假设存在一个高斯分布的误差,是模型的泛化误差下线。
如果这篇文章帮助到了你,你可以请作者喝一杯咖啡