绪论
最近在做实验的时候,发现机器有些基本知识真的很重要,所以就把机器学习的内容重新整理一下,本文仅从机器学习的角度来讲解熵、KL散度和交叉熵。且本文的公式都是以离散的形式来写的,方便理解。
熵
简单来说熵就是描述系统的不确定性的,就是说,一个事件越确定,那么它的熵就越小,越不确定熵就越大。熵的定义为: H ( x ) = − ∑ i = 1 n p ( x i ) log p ( x i ) H(x) = -\sum_{i=1} ^n p(x_i)\log p(x_i) H(x)=−i=1∑np(xi)logp(xi)例如:抛一枚硬币,有两种情况,正反各有 1 2 \frac{1}{2} 21 的概率,熵为: H ( x ) = − 1 2 log ( 1 2 ) − 1 2 log ( 1 2 ) H(x) = -\frac{1}{2}\log(\frac{1}{2})-\frac{1}{2}\log(\frac{1}{2}) H(x)=−21log(21)−21log(21)。
KL散度
这里先忘掉前面的知识,简单来说,KL散度是描述两个分布之间的差异,比如说,我们现在有两个分布,现在想看这两个分布之间的差异,有很多种衡量的方式,计算距离等等,KL散度也是一种衡量方式,而且实践证明它比较好用,仅此而已。定义为: D K L ( p ∣ ∣ q ) = ∑ i = 1 n p ( x i ) log 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(p∣∣q)=i=1∑np(xi)logq(xi)p(xi)其中P和Q为两个不同的分布。在实际中,一般p为真实分布,q为近似分布,一般的任务是需要让q来接近于真实分布。另外KL散度不是距离,它不是对称的,即 D K L ( p ∣ ∣ q ) D_{KL}(p||q) DKL(p∣∣q)不等于 D K L ( q ∣ ∣ p ) D_{KL}(q||p) DKL(q∣∣p)
交叉熵
交叉熵跟KL散度很相似,先上公式: H ( p , q ) = − ∑ i = 1 n p ( x i ) log q ( x i ) = H ( p ) + D K L ( p ∣ ∣ q ) H(p, q)=-\sum_{i=1}^np(x_i)\log q(x_i) = H(p)+D_{KL}(p||q) H(p,q)=−i=1∑np(xi)logq(xi)=H(p)+DKL(p∣∣q)从公式中可以看出,交叉熵相比KL散度就是多了一项 H ( p ) H(p) H(p),如果P为真实分布的话,那么 H ( p ) H(p) H(p)为常数,此时,KL散度和交叉熵是等价的。那为什么我们一般用交叉熵做损失函数而不用KL散度呢?因为交叉熵的计算比KL散度要简单很多。