机器学习中的熵、条件熵、相对熵和交叉熵
1 信息熵
熵 (entropy) 这一词最初来源于热力学。1948年,克劳德·爱尔伍德·香农将热力学中的熵引入信息论,所以也被称为香农熵 (Shannon entropy),信息熵 (information entropy)。
首先,我们先来理解一下信息这个概念。信息是一个很抽象的概念,泛指人类社会传播的一切内容。那信息可以被量化么?可以的!香农提出的“信息熵”概念解决了这一问题。
一条信息的信息量大小和它的不确定性有直接的关系。我们需要搞清楚一件非常非常不确定的事,或者是我们一无所知的事,就需要了解大量的信息。相反,如果我们对某件事已经有了较多的了解,我们就不需要太多的信息就能把它搞清楚。所以,从这个角度,我们可以认为,信息量的度量就等于不确定性的多少。
比如,有人说广东下雪了。对于这句话,我们是十分不确定的。因为广东几十年来下雪的次数寥寥无几。为了搞清楚,我们就要去看天气预报,新闻,询问在广东的朋友,而这就需要大量的信息,信息熵很高。再比如,中国男足进军2022年卡塔尔世界杯决赛圈。对于这句话,因为确定性很高,几乎不需要引入信息,信息熵很低。
考虑一个离散的随机变量 \(x\),由上面两个例子可知,信息的量度应该依赖于概率分布 \(p(x)\),因此我们想要寻找一个函数 \(I(x)\),它是概率 \(p(x)\) 的单调函数,表达了信息的内容。怎么寻找呢?如果我们有两个不相关的事件 \(x\) 和 \(y\),那么观察两个事件同时发生时获得的信息量应该等于观察到事件各自发生时获得的信息之和,即:\(I(x,y)=I(x)+I(y)\)。
因为两个事件是独立不相关的,因此 \(p(x,y)=p(x)p(y)\)。根据这两个关系,很容易看出 \(I(x)\) 一定与 \(p(x)\) 的对数有关 (因为对数的运算法则是 \(\log_{a}(mn)=\log_{a}{m}+\log_{a}{n}\)因此,我们有:
$$I(x)=−\log {p(x)}$$
其中负号是用来保证信息量是正数或者零。而 \(\log\) 函数基的选择是任意的(信息论中基常常选择为2,因此信息的单位为比特bits;而机器学习中基常常选择为自然常数,因此单位常常被称为奈特nats)。\(I(x)\) 也被称为随机变量 \(x\) 的自信息 (self-information),描述的是随机变量的某个事件发生所带来的信息量。图像如图:
最后,我们正式引出信息熵。 现在假设一个发送者想传送一个随机变量的值给接收者。那么在这个过程中,他们传输的平均信息量可以通过求 \(I(x)=−\log p(x)\) 关于概率分布 \(p(x)\) 的期望得到,即:
$$H(X)=-\sum_{x}p(x)\log p(x)=-\sum_{i=1}^{n}p(x_{i})\log p(x_{i})=-\int_x p(x)\log p(x)dx$$
\(H(X)\) 就被称为随机变量 \(x\) 的熵,它是表示随机变量不确定的度量,是对所有可能发生的事件产生的信息量的期望。
从公式可得,随机变量的取值个数越多,状态数也就越多,信息熵就越大,混乱程度就越大。(变量的个数越多,分到的概率越小,概率越小,自信息越大)
当随机分布为均匀分布时,熵最大,且 \(0≤H(X)≤logn\)。稍后证明。
将一维随机变量分布推广到多维随机变量分布,则其联合熵(Joint entropy) 为:
$$H(X,Y)=-\sum_{x,y} \log p(x,y) = -\sum_{i=1}^{n} \sum_{j=1}^{m} p(x_i,y_i) \log p(x_i,y_i)$$
(注意:熵只依赖于随机变量的分布,与随机变量取值无关,所以也可以将 \(X\) 的熵记作 \(H(p)\);令 \(0\log 0=0\)(因为某个取值概率可能为0))
那么这些定义有着什么样的性质呢?
考虑一个随机变量 \(x\)。这个随机变量有4种可能的状态,每个状态都是等可能的。为了把 \(x\) 的值传给接收者,我们需要传输2比特的消息。
$$H(X)=−4\times{\frac {1}{4}}\times\log_{2} {\frac {1}{4}}=2\ bits$$
现在考虑一个具有4种可能的状态 \(\{a,b,c,d\}\) 的随机变量,每个状态各自的概率为 \(\{\frac {1}{2},\frac {1}{4},\frac {1}{8},\frac {1}{8}\}\)。这种情形下的熵为:
$$H(X)=-\frac{1}{2} \log_2{\frac{1}{2}}-\frac{1}{4} \log_2{\frac{1}{4}}-\frac{1}{8} \log_2{\frac{1}{8}}-\frac{1}{8} \log_2{\frac{1}{8}}=1.75 \ bits$$
我们可以看到,非均匀分布比均匀分布的熵要小。
现在让我们考虑如何把变量状态的类别传递给接收者。与之前一样,我们可以使用一个2比特的数字来完成这件事情。然而,我们可以利用非均匀分布这个特点,使用更短的编码来描述更可能的事件,使用更长的编码来描述不太可能的事件。我们希望这样做能够得到一个更短的平均编码长度。我们可以使用下面的编码串(哈夫曼编码):0、10、110、111来表示状态 \(\{a,b,c,d\}\)。传输的编码的平均长度就是:
$$average\ code\ length= {\frac {1}{2}}\times{1} +{\frac {1}{4}}\times 2+ 2 \times {\frac {1}{8}} \times 3 = 1.75\ bits $$
这个值与上方的随机变量的熵相等。熵和最短编码长度的这种关系是一种普遍的情形。Shannon 编码定理表明熵是传输一个随机变量状态值所需的比特位下界(最短平均编码长度)。因此,信息熵可以应用在数据压缩方面。
1.1 小结
- 熵只依赖于随机变量的分布,与随机变量取值无关;
- 定义0log0=0(因为可能出现某个取值概率为0的情况);
- 熵越大,随机变量的不确定性就越大,分布越混乱,随机变量状态数越多。
### 1.2 证明 0 ≤ H(X) ≤ logn 证明 \\(0≤H(X)≤logn\\) 利用拉格朗日乘子法证明: 因为 \\(p(1)+p(2)+⋯+p(n)=1\\) 所以有:
目标函数:
$$f(p(1),p(2),…,p(n))=\{-(p(1)logp(1)+p(2)logp(2)+⋯+p(n)logp(n))\}$$
约束条件:
$$g(p(1),p(2),…,p(n),λ)=p(1)+p(2)+⋯+p(n)−1=0$$
定义拉格朗日函数:
$$L(p(1),p(2),…,p(n),λ)={−(p(1)logp(1)+p(2)logp(2)+⋯+p(n)logp(n))+λ(p(1)+p(2)+⋯+p(n)−1))}$$
函数 \( L(p(1),p(2),…,p(n),λ)\) 分别对 \(p(1),p(2),p(n),λ\) 求偏导数,
令偏导数为:
求出 \(p(1),p(2),…,p(n)\) 值:
解方程得,\(p(1)=p(2)=⋯=p(n)={1 \over n}\)代入 \(f(p(1),p(2),…,p(n))\)
得到目标函数的极值为:
$$f({1 \over n},{1 \over n},\cdots
,{1 \over n})=-({1 \over n}\log{1 \over n}+{1 \over n}\log{1 \over n}+\cdots+{1 \over n}\log{1 \over n})=-\log{1 \over n}=\log n$$
由此可证 \(\log n\) 为最大值。
2 条件熵
Conditional entropy
条件熵 \(H(Y|X)\) 表示在已知随机变量 \(X\) 的条件下随机变量 \(Y\) 的不确定性。条件熵 \(H(Y|X)\) 定义为 \(X\) 给定条件下 \(Y\) 的条件概率分布的熵对 \(X\) 的数学期望:
条件熵 \(H(Y\mid X)\) 相当于联合熵 \(H(X,Y)\) 减去单独的熵 \(H(X)\) ,即 \(H(Y\mid X)=H(X,Y)−H(X)\) ,证明如下:
同理可得: \(H(X,Y)=H(X\mid Y)+H(Y)\) 即 \(H(X\mid Y)=H(X,Y)-H(Y)\)
举个例子,比如环境温度是低还是高,和我穿短袖还是外套这两个事件可以组成联合概率分布 \(H(X,Y)\) ,因为两个事件加起来的信息量肯定是大于单一事件的信息量的。假设 \(H(X)\) 对应着今天环境温度的信息量,由于今天环境温度和今天我穿什么衣服这两个事件并不是独立分布的,所以在已知今天环境温度的情况下,我穿什么衣服的信息量或者说不确定性是被减少了。当已知 \(H(X)\) 这个信息量的时候, \(H(X,Y)\) 剩下的信息量就是条件熵: \(H(Y\mid X)=H(X,Y)−H(X)\)
因此,可以这样理解,描述 \(X\) 和 \(Y\) 所需的信息是描述 \(X\) 自己所需的信息,加上给定 \(X\) 的条件下具体化 \(Y\) 所需的额外信息。关于条件熵的例子可以看这篇文章,讲得很详细。(链接)
3 相对熵 / KL散度
相对熵 (Relative entropy) / KL散度 (Kullback–Leibler divergence)
设 \(p(x),q(x)\) 是 离散随机变量 \(X\) 中取值的两个概率分布,则 \(p\) 对 \(q\) 的相对熵是:
$$D_{KL}(p||q)=\sum_{x}p(x)\log {\frac {p(x)}{q(x)}}=\sum_{x}p(x)(\log p(x)-\log q(x))=E_{p(x)}\log {\frac {p(x)}{q(x)}}$$
在一定程度上,熵可以度量两个随机变量的距离。
可是熵值并没有给出压缩数据到最小熵值的方法,即如何编码数据才能达到最优(存储空间最优)。
熵的主要作用是告诉我们最优编码信息方案的理论下界(存储空间),以及度量数据的信息量的一种方式。
理解了熵,我们就知道有多少信息蕴含在数据之中,现在我们就可以计算当我们用一个带参数的概率分布来近似替代原始数据分布的时候,到底损失了多少信息。
K-L散度度量信息损失:
$$\sum_{x}p(x)(\log p(x)-\log q(x))$$
典型情况下,P表示数据的真实分布,Q表示数据的理论分布,模型分布,或P的近似分布。
3.1 性质
- 如果 \(p(x)\) 和 \(q(x)\) 两个分布相同,那么相对熵等于0
- 非对称性: \(D_{KL} (p||q) ≠ D_{KL}(q||p)\),相对熵具有不对称性。大家可以举个简单例子算一下。
- 非负性:\(D_{KL}(p||q)≥0\)
3.2 应用
相对熵是比较两个概率分布的距离(相似度),用一个分布来近似另一个分布时计算信息损失量,因此可以用于文本相似度的计算;还可以用于权重指标的分配。
3.3 总结
相对熵可以用来衡量两个概率分布之间的差异,上面公式的意义就是求 \(p\) 与 \(q\) 之间的对数差在 \(p\) 上的期望值。
优秀文章:
4 交叉熵
Cross entropy