¶引言
在学习机器学习的过程中,对熵的概念一致混淆不清,今天我尝试整理一些之前学习的有关于熵的概念和公式,把我的一些粗浅的理解加以罗列,也是给我自己梳理思路。
¶熵及相关概念
最初接触到熵是源于物理学的名词,其中熵是对系统混乱程度的一种度量。我们知道热力学第二定律的熵描述即是:随着时间的进行,一个孤立系统的熵不会减小,意味着一个孤立系统的混乱程度不会随时间减小。
在机器学习的学习过程中,又一次学习到了熵以及一些相关的概念:熵(Entropy),联合信息(Joint Information),互信息(Mutual Information),条件熵(Conditional Entropy),交叉熵(Cross Entropy),KL散度(KL Divergence)。以下三张图反应了不同熵之间的关系。
¶自信息与熵
谈及熵就离不开信息论中的自信息。信息论是应用数学的一个分支,主要研究的是对一个信号包含信息的多少进行量化。书上讲的量化信息的基本准则有:
1.非常可能发生的事件信息量要比较少,并且极端情况下,确保能够发生的事件应该没有信息量
2.较不可能发生的事件具有更高的信息量
3.独立事件应具有增量的信息。例如:投掷的硬币两次正面朝上传递的信息量,应该是投掷一次硬币正面朝上的信息量的两倍。
其中1与2较好理解,越确定能发生的事件带来的信息量越少,越不可能发生的时间信息量越多。比如如果有人告诉你:大海里有水,那么这对你基本是没有信息量的。因为不论这个人告不告诉你,你都知道大海里有水,这个人告诉你的话没有给你带来影响(当然是在你已知大海有水的前提)。相应的,如果有人告诉你:大海里的水都蒸发了,那么这对你信息量将会很大。因为这是个较不可能发生的事件,对你已有的信息造成了很大的挑战。第3条我还没有很好理解,暂时认为是一种量化的准则。
有了这三条基本性质,我们有自信息(self-information)的定义:
$$
I(x)=-\log P(x) \tag 1
$$
其中log的底这里默认为e,对应$I(x)$单位为奈特(nat)。一奈特是以$\frac{1}{e}$的概率观测到一个事件时获得的信息量。若log底数为2,则对应单位为比特(bit)或者香农(shannons)。通过比特度量的信息只是通过奈特度量信息的常数倍。我们定性地看待自信息,可以发现式(1)满足三条性质的前两条。而定量的看待自信息,发现其满足第三条性质。
接着引入熵的概念:
我的理解,若$\forall x \epsilon X$都有$-\log P(x)$作为自信息,那么对所有自信息作加权平均即得到熵:
$$
E(X)=-\Sigma _{x\epsilon X}\log P(x) \tag 2
$$
因此熵反应了随机变量X总的自信息。
书上定义:自信息只处理单个的输出。我们可以用香农熵(Shannon entropy)来对整个概率分布中的不确定性总量进行量化:
$$
H(x)=E {x\sim P}(I(x))=-E{x \sim P}[\log P(x)] \tag 3
$$
也记作$H§$。换言之,一个分布的香农熵是指遵循这个分布的事件锁产生的期望信息总量。
¶联合信息(Joint Information)
先上公式:
$$
H(T,Y)=-\Sigma _t \Sigma _y p(t,y)\log_2 p(t,y) \tag 4
$$
¶KL散度
详细参考Kullback-Leibler(KL)散度介绍 - 知乎 (zhihu.com)
后来发现了原文链接Kullback-Leibler Divergence Explained — Count Bayesie
直观理解,随机变量T和Y的KL散度$KL(T||Y)$表示用Y的分布编码T损失的信息量,是不对称的,不能用作距离度量。下面进行解释:
假设有两个随机变量T和Y,分别对应概率分布$ P_{T}$和概率分布$P_{Y}$则分别有随机变量T和Y的熵:
$$
E(T)=-\Sigma_x P_T(x)\log(P_T(x))\\
E(Y)=-\Sigma_x P_Y(x)\log(P_Y(x)) \tag5
$$
·其中$E(T)$和$E(Y)$分别表示分布$ P_{T}$和分布$P_{Y}$的期望信息量,若log底为2,则表示编码分布$ P_{T}$和分布$P_{Y}$所需要的最小2进制位数
我们计算两个分布的KL散度:
$$
KL(T||Y)@=\Sigma_{x}P_T(x)(\log P_T(x)-\log P_Y(x))\\
@=\Sigma_x [P_T(x)\log P_T(x)-P_T(x)\log P_Y(x)]\tag6\\
@=-E(T)-\Sigma_xP_T(x)\log P_Y(x)
$$
上述公式最终得到$-E(T)-\Sigma_xP_T(x)\log(P_Y(x))$这里的$-\Sigma_xP_T(x)\log(P_Y(x))$就是交叉熵
实际应用中,通常使用$KL(T||Y)=\Sigma_{x}P_T(x)\log\frac{P_T(x)}{P_Y(x)}$
这里有一个疑问
为什么$KL(T||Y)=\Sigma_{x}P_T(x)\log(P_T(x)-P_Y(x))$
而不是$-\Sigma_{x}P_T(x)\log(P_T(x)-P_Y(x))=E(T)+\Sigma_x P_T(x)\log P_Y(x)$
这样就可以理解为是用$P_Y$分布表示$P_T$分布造成的信息损失的期望了
是因为他也需要符合散度的定义吗?这样KL散度就可以直接放入优化问题中去
所以,KL散度应该是使用Y的分布表示T的分布所造成的信息 增加,只不过这个增加肯定是负数
那么,交叉熵$-\Sigma_xP_T(x)\log(P_Y(x))$就是增加后的总信息量
饮用KL散度(Kullback-Leibler Divergence)介绍及详细公式推导 | HsinJhao’s Blogs
¶统计学意义上的KL散度:
在统计学意义上来说,KL散度可以用来衡量两个分布之间的差异程度。若两者差异越小,KL散度越小,反之亦反。当两分布一致时,其KL散度为0。正是因为其可以衡量两个分布之间的差异,所以在VAE、EM、GAN中均有使用到KL散度。
¶信息论角度的KL散度:
KL散度在信息论中的专业术语为相对熵。其可理解为编码系统对信息进行编码时所需要的平均附加信息量。其中信息量的单位随着计算公式中𝑙𝑜𝑔log运算的底数而变化。
- log底数为2:单位为比特(
bit)- log底数为
e:单位为奈特(nat)
若对从统计学角度直观解释KL散度感兴趣,可参阅以下文章:
- 英文版[推荐]:Kullback-Leibler Divergence Explained
- 英文版中文翻译[推荐]: 解释Kullback-Leibler散度
- 中文版:直观解读KL散度的数学概念
¶Wasserstein Distance
KL散度和JS散度有一个隐蔽的问题:如果两个分布 离得很远,完全没有重叠的时候,那么KL散度值是没有意义的,而JS散度值是一个常数。


