Advertisement

机器学习基础——香农熵、相对熵(KL散度)与交叉熵

阅读量:

1. 香农熵(Shannon entropy)

信息熵(又称为香农熵)表征了一个系统的无序状态的程度,在该系统中随着其有序性增强而减少,在达到完全有序状态时达到最小值;相反地,在完全无序状态下则达到最大值

设随机变量X的所有可能取值为x₁,x₂,…,xₙ,则称随机变量X的信息熵H(X)定义为:

H(X)=?∑i=1np(xi)logp(xi)

2. 相对熵(relative entropy)

所谓的相对性,在两个随机变量之间体现得尤为明显。另一种称为互熵的指标是Kullback–Leibler散度(缩略为K-L散度)。当p(x)和q(x)分别表示X取值的概率分布时,则称p相对于q的相对熵为:

D(p||q)=∑i=1np(x)logp(x)q(x)

在某种程度上, 熵表征了两个随机变量之间的距离. KL散度作为两个概率分布P和Q之间差异的非对称性指标,其本质即在于衡量基于Q的编码方案对于从P中抽取样本所需多出的信息量.

通常情况下,在统计学中,P 代表真实的数据分布情况,Q 则表示理论上的数据分布模式,或者可被视为对P的一种近似估计

相对熵的性质,相对熵(KL散度)有两个主要的性质。如下

  • (1)尽管 KL 散度从直观上是个度量或距离函数,但它并不是一个真正的度量或者距离,因为它不具有对称性,即

D(p||q)≠D(q||p)

(2)相对熵的值为非负值,即

D(p||q)≥0

在证明之前,需要认识一个重要的不等式,叫做吉布斯不等式。内容如下

这里写图片描述

这里提供一个离散型 KL 散度的简单实现:

from functools import functools.reduce
import operator
import math
def kl(p, q):
return functools.reduce(operator.add, map(lambda x,y: x * math.logarithm(x / y), p,q))

3. 交叉熵(cross entropy)

  • H(p,q)=?∑xp(x)logq(x)

通俗理解

信息熵是指在最优编码方案下所能达到的最小平均码长是多少。
交叉熵是指在实际应用中(由于对概率分布的估计可能存在偏差),所使用的平均码长是多少。
交叉熵等于最优码长加上一个增益项。
相对熵是指衡量实际码长与最优码长之间差距的一种指标。

零、信息熵
1、熵的本质即为香农定义下的期望信息量;(参考了第一个答案)
其计算方式即为对每个事件概率与其对应的信息量乘积之总和;
那么为何香农定义的信息量取值为log(1/p)呢?
由于事件发生的概率越低,则其编码所需的二进制位数会相应增加;
为了实现尽可能高效的信息编码与存储,在多次重复试验中所取得的平均编码长度即为其理论下限;
这也是为什么我们采用log函数来进行度量化的原因所在:它能够将概率与所需编码长度之间的关系转化为可计算的形式;
通过这种方式我们得以量化了一个系统所能提供的最大不确定性或随机性水平;

本质含义:编码方案完美时,最短平均编码长度的是多少

本质含义

具体来说,在最优编码方案下时的最短平均编码长度是多少

具体来说,在最优编码方案下时的最短平均编码长度是多少

3、交叉熵 ,则可这样理解:基于"估计"的编码方式所得到的平均编码长度(可能并非最短)
其中:

  • p 代表真实概率分布
  • q 是你所估计的概率分布(可能存在偏差)
  • 当采用 q 进行编码时(即使用 log(1/q_i) 作为码长),所得出的平均码长为 ∑ p_i * log(1/q_i),即为交叉熵
  • 只有当估计的概率分布 q 完全准确时(即与真实分布 p 完全一致),所得到的平均码长才是最短的;此时交叉熵值等于信息熵

本质含义:编码方案不一定完美时,平均编码长度的是多少

v2-7d4806737924e1d69087a212ab9383a2_b.png

在两个选项中,H(p)分别表示p的信息熵与相对熵. 离散型函数: = Entropy(P) + D_{KL}(P || Q). 该式表明了两个概念之间的关系.

v2-a064eab677bb964913f0d156c028d0fb_b.png

=Entropy(P) + D_KL(P||Q)

作用:用来衡量当前估计的概率分布与真实目标分布之间的差异程度

本质含义:由于编码方案不一定完美,导致的平均编码长度的增大值

本质含义:因为编码方案未必完美无缺的原因之下会产生平均编码长度的增长量

v2-a1d7ca22685d59521b063a5cf0599df6_b.png

发现:D_KL(P||Q) = ∑P(i) *logP(i) - ∑P(i) *logQ(i)
= - Entropy(P) + 交叉熵 H(p,q)

观察到KL散度D_KL(P||Q)的计算公式如下:
D_{KL}(P||Q) = \sum P(i)\cdot \ln P(i) - \sum P(i)\cdot \ln Q(i)
进一步化简可得:
D_{KL}(P||Q) = -\text{熵}(P) + \text{交叉熵}(p,q)

v2-773d21115b182b6f6658dea8087ab8a8_b.png

1)用于度量2个取值为正数的函数之间的差异性
2)当2个完全相同的分布时,其相对熵等于零;当分布之间差异越大时,相对熵也会越大;
3)概率密度函数若其函数值均大于0,则可以利用相对熵来评估两个随机变量之间的差异程度;
4)需要注意的是,相对熵具有不对称性特点,并不满足交换律

全部评论 (0)

还没有任何评论哟~