【阅读时间】10min - 13min
【内容简介】使用一个现实中直观的例子详解信息熵、交叉熵及相对熵的核心概念,读完后,希望能帮助你建立起这三个概念的固有直觉,不再疑惑

要完成题目的最终解释,必须从这个神奇的概念开始讲起

什么是熵 - Entropy

词源 - 最初来源于热力学

Entropy来源于希腊语,原意:内向,即:一个系统不受外部干扰时往内部稳定状态发展的特性。定义的其实是一个热力学的系统变化的趋势

$$
\Delta S = \frac{Q}{T} = \frac{热量}{温度} \tag{1-1}
$$
1923年,德国科学家普朗克来中国讲学用到entropy这个词,胡刚复教授看到这个公式,创造了“熵”字,因为“火”和热量有关,定义式又是热量比温度,相当自洽

信息论

信息论中,熵是接受的每条消息中包含的信息的平均值。又被称为信息熵、信源熵、平均自信息量。可以被理解为不确定性的度量,熵越大,信源的分布越随机

1948年,由克劳德·爱尔伍德·香农将热力学中的熵引入信息论,所以也叫做:香农熵

生态学

在生态学中,熵表示生物多样性的指标

广义的定义

熵是描述一个系统的无序程度的变量;同样的表述还有,熵是系统混乱度的度量,一切自发的不可逆过程都是从有序无序的变化过程,向熵增的方向进行

我们接下来要讨论的信息熵 交叉熵 相对熵 更多的着眼于信息论的角度,换句话说,更加关注概率和不确定性

什么是信息熵、交叉熵、相对熵

可以将对熵的理解从简单到复杂依次分解成三个层次来理解

如何衡量不确定事物的发生?

数学是一种工具,使用数学来描述现实中的各种事物是一个数学家本质的工作目标。而现实中不确定性,或者说不太确定是否会发生的事件必须要找到一种抽象的符号化公式化的手段去表示。

比如天气情况,假设可能有【阴、晴、雨、雪】四种情况,使用概率符号表示 $\mathbf P = [p_1,p_2,p_3,p_4]$,接下来自然而然的思考:那么,什么条件(情况)会影响这些值呢?

假设有一下三种描述,或者说条件

  • 今天是晴天,所以明天可能也是晴天
  • 天气预报说明天下雨
  • 9月12日苹果公司举行发布会

那么这三个描述中,很明显,第二条的信息量更大,因为它可以使得不确定事件发生在 $p_3$ 的概率更大。类似的,第三条对判断毫无帮助,信息量为0。注意,信息量不等于信息熵,如果是这样,那么直接用概率来衡量就可以了,不需要在重新定义一个概念

其实信息熵是信息量的期望(均值),它不是针对每条信息,而是针对整个不确定性结果集而言,信息熵越大,事件不确定性就越大。单条信息只能从某种程度上影响结果集概率的分布

考虑到信息冗余,信息量存储下来究竟需要多大空间

我们已经有了 $\mathbf P = [p_1,p_2,p_3,p_4]$ 来表示天气情况,那么用计算机来存储每天的天气,那该如何编码呢?

常见的做法是,4个不同的信息,只需要2bit就能做到,00 01 11 10,假设我们在南方城市,肯定要把00编码成雨天,这样可以节省存储空间,至于为什么能节省存储空间,这就要讨论编码方式。可以简单的理解为,如果一串信息一串0很多,可以通过编码压缩这一群0来节省空间

使用一个公式来计算记录n天数据需要的存储空间:Sn

$$ S_n = n \times \sum_{i = 1}^4{\left(P_i \times F(P_i) \right) } \tag{2-1} $$

$P_i$ 表示第i个事件发生的概率;$F(P_i)$ 表示存储空间的存储因子

如何确定这个函数 $F(P_i)$ 的形式?考虑这个函数需要满足条件:概率大的事件对应小的存储空间,说人话,就是成反比,你的数学功底不错的话,脑海中第一反应出来满足这个条件最直观是反比例函数,说人话, $\frac{1}{P_i}$ 。

之后我们发现这个公式中有个除法非常讨厌,我们想着去掉它,脑海中第一反应出来的满足这个条件的一定是取对数,至于为什么取对数,那说道就很多,取对数是指数的逆操作

  • 对数操作可以让原本不符合正态分布的模型符合正态分布,比如随着模型自变量的增加,因变量的方差也增大的模型取对数后会更加稳定
  • 取对数操作可以rescale(原谅我,这里思前想后还是感觉一个英文单词更加生动)其实本质来说都是因为第一点。说人话版本,人不喜欢乘法,对数可以把乘法变加法

那么我们结束清楚之后,就很容易就可以定义出
$$
F(P_i) = \log_a ({\frac{1}{P_i}}) \tag{2-2}
$$
a作为底数,可以取2(处理2bit数据),10(万金油),e(处理正态分布相关的数据)

结合对信息熵的定义(第一节最后的粗体字)然后把(2-2)带入(2-1),就会发现,哦!看着有点眼熟啊
$$
H(P) = \sum_i {P(i)log_a {\frac{1}{P(i)}}} = - \sum_i {P(i)log_a {P(i)}} \tag{2-3}
$$
这这这,就是信息熵的定义式吧?总结就发现,信息熵其实从某种意义上反映了信息量存储下来需要多少存储空间

总结为:根据真实分布,我们能够找到一个最优策略,以最小的代价消除系统的不确定性(比如编码),而这个代价的大小就是信息熵

理解基于信息熵的交叉熵和相对熵

因为是我们用2bit模式存储,为了计算方便,这里取a = 2

先计算刚刚有关天气问题 $\mathbf P = [p_1,p_2,p_3,p_4]$ :【阴、晴、雨、雪】的信息熵,假设我们对天气的概率一无所知,那么四种天气的发生概率为等概率(服从平均分布),即 $\mathbf P = [\frac {1}{4},\frac {1}{4},\frac {1}{4},\frac {1}{4}]$ ,带入公式2-3,得到 $H(P) = 2$ ,存储信息需要的空间 $S_n = 2n$

继续思考,假设我们考虑天气的城市是一个地处中国南方雨季的城市,那么阴天和雨天的概率从经验角度(先验概率)来看大于晴天雪天,把这种分布记为 $\mathbf Q = [\frac{1}{4},\frac{1}{8},\frac{1}{2},\frac{1}{8}]$,带入公式2-3,信息熵 $H(Q) = 1.75$,存储信息需要的空间 $S_n = 1.75n$

直观的来考虑上面不同的两种情况,明显当事件的不确定性变小时候,我们可以改变存储策略(00 雨天 01 阴天),再通过编码,节省存储空间。信息熵的大小就是用来度量这个不确定大小的

关于编码的方式,这里提一下,哈夫曼树与哈夫曼编码 ,有兴趣的读者可以去研究一下

交叉熵的由来

我们把这个问题再扩展一下

天气【阴、晴、雨、雪】 信息熵
$\mathbf P = [\frac{1}{4},\frac{1}{4},\frac{1}{4},\frac{1}{4}]$ $H(P) = 2$
$\mathbf Q = [\frac{1}{4},\frac{1}{8},\frac{1}{2},\frac{1}{8}]$ $H(Q) = 1.75$
$\mathbf Z = [\frac{1}{8},\frac{1}{16},\frac{3}{4},\frac{1}{16}]$ $H(Z) = \frac{7}{8}+\frac{3}{4}\log_2 {\frac{4}{3}} = 1.186$
$\mathbf W = [0,0,1,0]$ $H(W) = 0$

接下来,假定在确定性更大的概率分布情况下,用更不确定的存储策略来计算,比如使用 $\mathbf P$ 的概率乘上 $\mathbf Q$ 的存储因子,套用公式2-3
$$
H(\mathbf P,\mathbf Q) = \sum_i {P(i) \log_a {\frac{1}{Q(i)}}} \tag{3-1}
$$
顾名思义,看公式3-1的形式,就不难发现,这就是所谓的交叉熵,计算可得

交叉熵 P Q Z W
P $H(P,P) = 2$ $H(P,Q) = 2.25$ $H(P,Z) = \frac{11}{4}+\frac{1}{4}\log_2 {\frac{4}{3}} = 2.85$ $+\infty$
Q $H(Q,P) = 2$ $H(Q,Q) = 1.75$ $H(Q,Z) = \frac{7}{4}+\frac{1}{2}\log_2 {\frac{4}{3}} = 1.96$ $+\infty$
Z $H(Z,P) = 2$ $H(Z,Q) = 1.375$ $H(Z,Z) = \frac{7}{8}+\frac{3}{4}\log_2 {\frac{4}{3}} = 1.186$ $+\infty$
W $H(W,P) = 2$ $H(W,Q) = 1$ $H(W,Z) = \log_2 {\frac{4}{3}} = 0.415$ $H(W,W) = 0$

上表直观的展现的交叉熵的数值表现,PQZW依次不确定性越来越低,极端情况的W不确定性为0,即是确定的

交叉熵,用来高衡量在给定的真实分布下,使用非真实分布指定的策略消除系统的不确定性所需要付出努力的大小

总的来说,我们的目的是:让熵尽可能小,即存储空间小(消除系统的不确定的努力小)。(不要问为什么想要存储空间小,这都是钱更是效率和时间)

通过上表我们发现一个规律,为了让熵小,解决方案是:是用确定性更大的概率乘以确定性更小的存储因子,比如不确定性越大的概率分布,如P概率分布,其信息熵越大;基于同一真实(确定性)分布的情况下,套用不确定性更大的存储因子,如P的存储因子,得出的交叉熵越大

在机器学习中,即用测试结果集(样本结果集)的概率乘以训练出来的结果集存储因子,而在不断的训练过程中,我们要做的就是通过不断调整参数,降低这个值,使得模型更加的稳定,不确定性越来越小,即突出需要表征的数值的特点(白话文也就是分类的效果更好)

相对熵的由来

有了信息熵和交叉熵后,相对熵是用来衡量两个概率分布之间的差异,记为 $D(P||Q) = H(P,Q) - H(P)$,也称之为KL散度
$$
D_{KL}(P||Q) = \sum_i{P(i) \log_a {\frac{P(i)}{Q(i)}}}
$$
当 $P(i) = Q(i)$ 的时候,该值为0,深度学习过程也是一个降低该值的过程,该值越低,训练出来的概率Q越接近样本集概率P,即越准确,或者可以理解为相对熵一把标尺,用来衡量两个函数是否相似,一样就是0,当然,这种解释十分牵强,但是更直观

关于底数 $a$ 的选择问题,其实和概率分布的情况是分不开的。比如使用2进制编码,那么所能表示的不同情况的数量,$\sum_{i=0}^N 2^i$,我们知道,指数函数变化率变化很大,不好分析,稳定性差。对数操作可以乘法变加法,指数放下来,是十分好用的数学工具(其实是一种变换域的思想,这种思想在整个信息论,统计学中处处可见)

比如使用 $ln()$ 的时候,对应的分布,其实是正态分布,很好理解,正太分布的底数是 $e$