信息论最基本的概念是信息熵, 并在此基础上出现了多种 “熵”, 容易搞的晕乎乎的. 本文尝试整理各种熵的信息, 通俗讲解 “熵” 的概念.
在开始介绍 “熵” 这一概念前, 需要对信息量和信息熵进行一定的辨析. 香农运用概率提出了信息的度量, 信息是事物运动状态或者存在方式的不确定性的描述, 当一个事情的不确定性越大时, 所蕴含的信息量越大. 比如 “太阳从东边升起” 是一个确定性事件, 这件事本身是没什么信息量的. 但 “太阳从西边升起” 是一个不可能事件, 事情一旦发生, 其蕴含的信息量边无比巨大, 可能会颠覆人类先阶段大量的科学理论和技术成果. 对于一个系统, 可能会发生多个事件, 比如抽盲盒, 会抽到不同的盲盒款. 那么整个抽盲盒事件的信息量要怎么衡量呢? 最简单的方法就是把所有盲盒款的信息量加起来. 但是每个盲盒款出现的概率又不相同, 因此需要用加权的方式相加. “加权求和” 的过程就是求解 “期望” 的过程, 得到的结果便称为 “信息熵”. 信息熵是对系统信息量的度量, 它是一个信息量的期望. 通常, “信息熵” 的提及是在系统层面, 对事件的描述使用 “信息量”.
在展开说明各种 “熵” 之前, 需要了解最基本的熵的形式. 熵的构造并非香农拍脑袋决定的, 而是根据信息的基本假设, 一步步推导而得, 这是大名鼎鼎的 “信息熵唯一性定理”. 在这一定理中, 香农给出了满足基本假设的信息熵公式模型:
H n ( p 1 , . . . , p n ) = − λ ∑ i = 1 n p i log p i . (1) H_{n}(p_1,...,p_n) = -\lambda \sum_{i=1}^{n}{p_i \log p_i}. \tag{1} Hn(p1,...,pn)=−λi=1∑npilogpi.(1) 由于 λ \lambda λ 是一个常数, 只影响所取的单位, 因此通常令 λ = 1 \lambda = 1 λ=1. 于是, 信息熵的公式可以得到:
H n ( p 1 , . . . , p n ) = − ∑ i = 1 n p i log p i . (2) H_{n}(p_1,...,p_n) = - \sum_{i=1}^{n}{p_i \log p_i}. \tag{2} Hn(p1,...,pn)=−i=1∑npilogpi.(2) 所有的故事都从这一简单的公式产生. 公式 ( 2 ) (2) (2) 中的 p i p_i pi 是系统中第 i i i 个事件 x i x_i xi 发生的概率, 这可以看成是每个事件发生的固有属性. 这里需要强调的是, 事件发生的固有属性是在整个系统视角上确定的, 即事件发生的概率是在系统中发生的概率. 当把所有事件写成集合形式 X = { x 1 , x 2 , . . . , x n } X = \{x_1, x_2, ..., x_n\} X={x1,x2,...,xn}, p ( x ) p(x) p(x) 指事件 x x x 发生的概率时, 公式 ( 2 ) (2) (2) 也表达成
H ( X ) = − ∑ i = 1 n p ( x i ) log p ( x i ) = − ∑ i = 1 n p i log p i H(X) = - \sum_{i=1}^{n}{p(x_i) \log p(x_i)} = - \sum_{i=1}^{n}{p_i \log p_i} H(X)=−i=1∑np(xi)logp(xi)=−i=1∑npilogpi
为了说明方便, 本文只介绍离散情景下的熵, 连续情景则是将求和号换成积分号. 部分带有*号的小节可以跳过, 不影响本文的阅读.
根据公式 ( 2 ) (2) (2), 信息熵可以写成
H n ( p 1 , . . . , p n ) = ∑ i = 1 n p i ⋅ ( − log p i ) . (3) H_{n}(p_1,...,p_n) = \sum_{i=1}^{n}{p_i \cdot \left(-\log p_i\right)}. \tag{3} Hn(p1,...,pn)=i=1∑npi⋅(−logpi).(3) 因此, 信息熵可以看成每个事件 x i x_i xi 的某种属性的均值. 系统的总的信息量当然来自系统各组成的信息量. 所以这种属性就是系统中每个事件 x i x_i xi 的信息量, 称为 “自信息量”. 记为
I ( x i ) = − log p ( x i ) = − log p i . (4) I(x_i) = -\log p(x_i) = -\log p_i. \tag{4} I(xi)=−logp(xi)=−logpi.(4) 其中, p ( x ) p(x) p(x) 指事件 x x x 发生的概率.
此外, 也会出现考虑多个事件同时发生的场景, 这就有了联合概率. 联合概率 p ( x , y ) p(x,y) p(x,y) 是指, 同时发生事件 x x x 和 y y y 的概率. 进一步推广到信息论中, 就有了联合自信息量. 同时发生事件 x x x 和 y y y 的信息量可以表示为:
I ( x , y ) = − log p ( x , y ) . (5) I(x,y) = -\log p(x,y) . \tag{5} I(x,y)=−logp(x,y).(5)
有时会考虑事件发生的前提, 因此有了条件概率. 条件概率 p ( x ∣ y ) p(x|y) p(x∣y) 是指在发生事件 y y y 的前提下, 发生事件 x x x 的概率. 从概率论上推广到信息论中, 就有了条件自信息量. 在发生事件 y y y 的前提下, 发生事件 x x x 的信息量为:
I ( x ∣ y ) = − log p ( x ∣ y ) . (6) I(x|y) = -\log p(x|y) . \tag{6} I(x∣y)=−logp(x∣y).(6)
可以看到, 系统中任何一个事件的自信息量都以公式 ( 4 ) (4) (4) 获得.
系统信息量通过信息熵度量, 它是一个信息量的期望结果. 系统信息熵可以通过公式 ( 3 ) (3) (3) 获得, 这里不进行赘述. 本章要进一步阐释联合事件和条件事件下的信息熵.
在第 1 节中知道, 联合自信息量可以通过公式 ( 5 ) (5) (5) 获得. 在一个系统中, 如果有两个事件 X 、 Y X、Y X、Y, 它们分别可以取值为:
X = { x 1 , x 2 , . . . , x n } , Y = { y 1 , y 2 , . . . , y l } . \begin{aligned} & X = \{x_1, x_2, ..., x_n\}, \\ & Y = \{y_1, y_2, ..., y_l\}. \\ \end{aligned} X={x1,x2,...,xn},Y={y1,y2,...,yl}. 于是同时发生事件 X 、 Y X、Y X、Y 的信息熵可以表示为:
H ( X , Y ) = ∑ x i , y j p ( x i , y j ) log p ( x i , y j ) = ∑ i = 1 n ∑ j = 1 l p ( x i , y j ) log p ( x i , y j ) . (7) \begin{aligned} H(X,Y) & = \sum_{x_i,y_j}{p(x_i,y_j) \log p(x_i,y_j)} \\ & = \sum^{n}_{i=1} \sum^{l}_{j=1} {p(x_i,y_j) \log p(x_i,y_j)}. \end{aligned} \tag{7} H(X,Y)=xi,yj∑p(xi,yj)logp(xi,yj)=i=1∑nj=1∑lp(xi,yj)logp(xi,yj).(7) 于是, 称 H ( X , Y ) H(X,Y) H(X,Y) 为发生事件 X 、 Y X、Y X、Y 的联合信息熵.
在第 1 节中可知, 条件自信息量通过公式 ( 6 ) (6) (6) 获得, 条件信息熵就是每个条件事件发生的概率乘以其对应的自信息量的和. 事件 x ∣ y x|y x∣y 发生在整个系统视角上看, 是事件 x x x 和 y y y 同时发生, 因此其对应的发生概率为 p ( x , y ) p(x,y) p(x,y). 因此, 在系统中, 如果有两个事件 X 、 Y X、Y X、Y, 它们分别可以取值为:
X = { x 1 , x 2 , . . . , x n } , Y = { y 1 , y 2 , . . . , y l } . \begin{aligned} & X = \{x_1, x_2, ..., x_n\}, \\ & Y = \{y_1, y_2, ..., y_l\}. \\ \end{aligned} X={x1,x2,...,xn},Y={y1,y2,...,yl}. 于是同时发生事件 X ∣ Y X|Y X∣Y 的信息熵就表示为:
H ( X ∣ Y ) = ∑ x i , y j p ( x i , y j ) log p ( x i ∣ y j ) = ∑ i = 1 n ∑ j = 1 l p ( x i , y j ) log p ( x i ∣ y j ) . (8) \begin{aligned} H(X|Y) & = \sum_{x_i,y_j}{p(x_i,y_j) \log p(x_i|y_j)} \\ & = \sum^{n}_{i=1} \sum^{l}_{j=1} {p(x_i,y_j) \log p(x_i|y_j)}. \end{aligned} \tag{8} H(X∣Y)=xi,yj∑p(xi,yj)logp(xi∣yj)=i=1∑nj=1∑lp(xi,yj)logp(xi∣yj).(8) 于是, 称 H ( X ∣ Y ) H(X|Y) H(X∣Y) 为发生事件 X ∣ Y X|Y X∣Y 的条件信息熵.
条件信息熵的形式, 与在已知其联合分布 p ( x i , y j ) p(x_i,y_j) p(xi,yj), 条件概率的 p ( x i ∣ y j ) p(x_i|y_j) p(xi∣yj) 的对数似然函数一致. 有
L p = log ( ∏ x i , y j p ( x i ∣ y j ) p ( x i , y j ) ) = ∑ x i , y j p ( x i , y j ) log p ( x i ∣ y j ) . L_p=\log \left( \prod_{x_i,y_j}{p\left( x_i|y_j \right) ^{p\left( x_i,y_j \right)}} \right) = \sum_{x_i,y_j} {p(x_i,y_j) \log p(x_i|y_j)}. Lp=log⎝ ⎛xi,yj∏p(xi∣yj)p(xi,yj)⎠ ⎞=xi,yj∑p(xi,yj)logp(xi∣yj). 其中, p ( x i ∣ y j ) p ( x i , y j ) p\left( x_i|y_j \right) ^{p\left( x_i,y_j \right)} p(xi∣yj)p(xi,yj) 是其似然函数.
熵的强可加性是用以描述信息熵、联合信息熵、条件信息熵三者之间的关系, 其形式如下: 对于两个事件 X 、 Y X、Y X、Y, 三种熵之间的关系为
H ( X , Y ) = H ( X ) + H ( Y ∣ X ) . (9) H(X,Y) = H(X) + H(Y|X). \tag{9} H(X,Y)=H(X)+H(Y∣X).(9) 熵的强可加性说明了, 两个事件发生的信息量, 可以将其中一件事作为基线, 加上以该事件为前提另一件事的信息量. 强可加性是数学推导的结果, 本文不进行证明, 有兴趣可以翻阅相关资料.
进一步地, 两个事件发生的信息量, 未必等于两个事件信息量之和. 当两个事件之间有相关关系时, 两个事件信息量之间就存在重复的信息量, 因此需要把它去掉, 这个内容将在第 3 节中阐述.
对于系统中的两个事件 X 、 Y X、Y X、Y, 两者同时发生的信息量为 H ( X , Y ) H(X,Y) H(X,Y). 当两个事件之间有相互关系时, 每个事件信息量之间就存在重复信息量, 因此可以很直观地理解两个事件信息量之和会大于两者同时发生的信息量, 即
H ( X ) + H ( Y ) > H ( X , Y ) . H(X) + H(Y) > H(X,Y). H(X)+H(Y)>H(X,Y). 那么这多出来的信息量, 就是被重复计算的信息量, 换言之是两个事件相互关系的信息量. 这个信息量称为互信息. 互信息记为 I ( X ; Y ) I(X;Y) I(X;Y), 可以如下推导
I ( X ; Y ) = H ( X ) + H ( Y ) − H ( X ; Y ) = ( − ∑ x i p ( x i ) log p ( x i ) ) + ( − ∑ y j p ( y j ) log p ( y j ) ) − ( − ∑ x i , y j p ( x i , y j ) log p ( x i , y j ) ) = ( − ∑ x i , y j p ( x i , y j ) log p ( x i ) ) + ( − ∑ x i , y j p ( x i , y j ) log p ( y j ) ) − ( − ∑ x i , y j p ( x i , y j ) log p ( x i , y j ) ) = ∑ x i , y j p ( x i , y j ) [ log p ( x i , y j ) − log p ( x i ) − log p ( y j ) ] = ∑ x i , y j p ( x i , y j ) log p ( x i , y j ) p ( x i ) p ( y j ) . \begin{aligned} I(X;Y) &= H(X) + H(Y) - H(X;Y) \\ & = \left( -\sum_{x_i} p(x_i) \log p(x_i) \right) + \left( -\sum_{y_j} p(y_j) \log p(y_j) \right) - \left( - \sum_{x_i,y_j} p(x_i, y_j) \log p(x_i,y_j) \right) \\ & = \left( -\sum_{x_i,y_j} p(x_i,y_j) \log p(x_i) \right) + \left( -\sum_{x_i,y_j} p(x_i,y_j) \log p(y_j) \right) - \left( - \sum_{x_i,y_j} p(x_i, y_j) \log p(x_i,y_j) \right) \\ & = \sum_{x_i,y_j} p(x_i,y_j)\left[ \log p(x_i, y_j) - \log p(x_i) -\log p(y_j) \right] \\ & = \sum_{x_i,y_j} p(x_i,y_j) \log \frac{p(x_i,y_j)}{p(x_i)p(y_j)}. \\ \end{aligned} I(X;Y)=H(X)+H(Y)−H(X;Y)=(−xi∑p(xi)logp(xi))+⎝ ⎛−yj∑p(yj)logp(yj)⎠ ⎞−⎝ ⎛−xi,yj∑p(xi,yj)logp(xi,yj)⎠ ⎞=⎝ ⎛−xi,yj∑p(xi,yj)logp(xi)⎠ ⎞+⎝ ⎛−xi,yj∑p(xi,yj)logp(yj)⎠ ⎞−⎝ ⎛−xi,yj∑p(xi,yj)logp(xi,yj)⎠ ⎞=xi,yj∑p(xi,yj)[logp(xi,yj)−logp(xi)−logp(yj)]=xi,yj∑p(xi,yj)logp(xi)p(yj)p(xi,yj).
于是, 两个事件 X 、 Y X、Y X、Y 的互信息表示为:
I ( X ; Y ) = ∑ x i , y j p ( x i , y j ) log p ( x i , y j ) p ( x i ) p ( y j ) . (10) I(X;Y) = \sum_{x_i,y_j} p(x_i,y_j) \log \frac{p(x_i,y_j)}{p(x_i)p(y_j)}. \tag{10} I(X;Y)=xi,yj∑p(xi,yj)logp(xi)p(yj)p(xi,yj).(10)
在通信中, 互信息的计算通常利用信息熵和条件熵获得, 其形式为:
I ( X ; Y ) = H ( X ) − H ( X ∣ Y ) = H ( Y ) − H ( Y ∣ X ) . (11) I(X;Y) = H(X) - H(X|Y) = H(Y) - H(Y|X). \tag{11} I(X;Y)=H(X)−H(X∣Y)=H(Y)−H(Y∣X).(11) 本节用两种方式得到公式 ( 11 ) (11) (11).
方式一: 基于概念理解
假设真实事件为 X X X, 于是该事件的实际信息熵为 H ( X ) H(X) H(X). 此时, 我们观测到的事件为 Y Y Y, 因为 Y Y Y 不一定那么准, 所以我们获得了事件 X X X 部分确定的信息和部分不确定的信息. 这一确定部分的信息显然是 X X X 与 Y Y Y 交互的信息 I ( X ; Y ) I(X;Y) I(X;Y). 不确定的信息是从在事件 Y Y Y 的基础上得到的, 不确定性可利用信息熵来度量, 对应的信息熵为 H ( X ∣ Y ) H(X|Y) H(X∣Y). 从而得到:
I ( X ; Y ) = H ( X ) − H ( X ∣ Y ) . I(X;Y) = H(X) - H(X|Y). I(X;Y)=H(X)−H(X∣Y). 根据对称性, 即得到公式 ( 11 ) (11) (11).
方式二: 基于熵的强可加性
根据公式 ( 9 ) (9) (9), 可以得到
H ( X ) = H ( X , Y ) − H ( Y ∣ X ) . (12) H(X) = H(X,Y) - H(Y|X). \tag{12} H(X)=H(X,Y)−H(Y∣X).(12) 将公式 ( 12 ) (12) (12) 代入公式
I ( X ; Y ) = H ( X ) + H ( Y ) − H ( X ; Y ) I(X;Y) = H(X) + H(Y) - H(X;Y) I(X;Y)=H(X)+H(Y)−H(X;Y)即得
I ( X ; Y ) = H ( X ) + H ( Y ) − H ( X ; Y ) = H ( X , Y ) − H ( Y ∣ X ) + H ( Y ) − H ( X ; Y ) = H ( Y ) − H ( Y ∣ X ) . (13) \begin{aligned} I(X;Y) &= H(X) + H(Y) - H(X;Y) \\ & = H(X,Y) - H(Y|X) + H(Y) - H(X;Y) \\ & = H(Y) - H(Y|X). \end{aligned} \tag{13} I(X;Y)=H(X)+H(Y)−H(X;Y)=H(X,Y)−H(Y∣X)+H(Y)−H(X;Y)=H(Y)−H(Y∣X).(13) 根据对称性, 即得到公式 ( 11 ) (11) (11).
假设一个系统中事件 X = { x 1 , x 2 , . . . , x n } X=\{x_1, x_2, ...,x_n\} X={x1,x2,...,xn} 发生的真实概率分布 P ( X ) P(X) P(X) 为: p ( x i ) = p i , i = 1 , 2 , . . . , n p(x_i)=p_i, i=1,2,...,n p(xi)=pi,i=1,2,...,n. 但此时我们观测到的 (或者理解的) 系统中各事件发生的概率分布 Q ( X ) Q(X) Q(X) 为: q ( x i ) = q i , i = 1 , 2 , . . . , n q(x_i) = q_i, i=1,2,...,n q(xi)=qi,i=1,2,...,n. 于是我们获得的信息熵为 − ∑ i = 1 n p i log q i -\sum^{n}_{i=1} {p_i \log q_i} −∑i=1npilogqi. 它是利用两个分布的信息交叉构造的信息熵, 这一信息熵称为交叉熵, 记
H C E ( P , Q ) = − ∑ i = 1 n p i log q i (14) H_{CE}(P,Q) = -\sum^{n}_{i=1} {p_i \log q_i} \tag{14} HCE(P,Q)=−i=1∑npilogqi(14) 可以看到, 交叉熵关注的是一个事件的两个分布.
交叉熵表示, 在真实的系统分布下, 使用非真实的分布所获的信息量. 由于信息熵可以用来衡量人为消除系统不确定性所付出的代价, 因此交叉熵也被用以衡量用非真实分布的策略消除系统不确定性的代价. 显然, 使用不准确的系统分布会带来更多的消耗, 这个消耗将使用相对熵来衡量.
假设一个系统中事件 X = { x 1 , x 2 , . . . , x n } X=\{x_1, x_2, ...,x_n\} X={x1,x2,...,xn} 发生的真实概率分布 P ( X ) P(X) P(X) 为: p ( x i ) = p i , i = 1 , 2 , . . . , n p(x_i)=p_i, i=1,2,...,n p(xi)=pi,i=1,2,...,n. 于是该系统真实的信息熵为:
H ( X ) = − ∑ i = 1 n p i log p i . H(X) = -\sum^{n}_{i=1} {p_i \log p_i}. H(X)=−i=1∑npilogpi. 但此时我们观测到的 (或者理解的) 系统中各事件发生的概率分布 Q ( X ) Q(X) Q(X) 为: q ( x i ) = q i , i = 1 , 2 , . . . , n q(x_i) = q_i, i=1,2,...,n q(xi)=qi,i=1,2,...,n. 从 4.1 节中可知, 我们获得的信息熵通过交叉熵来衡量,
H C E ( P , Q ) = − ∑ i = 1 n p i log q i . H_{CE}(P,Q) = -\sum^{n}_{i=1} {p_i \log q_i}. HCE(P,Q)=−i=1∑npilogqi. 由于交叉熵蕴含的代价更大, 这种差异可以如下表示:
H C E ( P , Q ) − H ( X ) = ( − ∑ i = 1 n p i log q i ) − ( − ∑ i = 1 n p i log p i ) = − ∑ i = 1 n p i ( log q i − log p i ) = − ∑ i = 1 n p i log q i p i . (15) \begin{aligned} H_{CE}(P,Q) - H(X) & = \left( -\sum^{n}_{i=1} {p_i \log q_i} \right) - \left( -\sum^{n}_{i=1} {p_i \log p_i} \right) \\ & = -\sum^{n}_{i=1}p_i \left( \log q_i - \log p_i \right) \\ & = -\sum^{n}_{i=1}p_i \log \frac{ q_i}{ p_i}. \end{aligned}\tag{15} HCE(P,Q)−H(X)=(−i=1∑npilogqi)−(−i=1∑npilogpi)=−i=1∑npi(logqi−logpi)=−i=1∑npilogpiqi.(15) 这个差异称为相对熵, 或者称为K-L散度 (Kullback-Leible散度). 下面进行规范描述.
我们把事件集合 X X X 的分布 { p 1 , p 2 , . . . , p n } \{ p_1,p_2, ... ,p_n \} {p1,p2,...,pn} 记为 P ( X ) P(X) P(X), 分布 { q 1 , q 2 , . . . , q n } \{ q_1,q_2, ... ,q_n \} {q1,q2,...,qn} 记为 Q ( X ) Q(X) Q(X). 可以看到, 两个分布都是 X X X 的分布, P ( X ) P(X) P(X) 对 Q ( X ) Q(X) Q(X) 的相对熵记为:
D K L ( P ∣ ∣ Q ) = − ∑ i = 1 n p i log q i p i . (16) D_{KL}(P||Q) = -\sum^{n}_{i=1}p_i \log \frac{ q_i}{ p_i}. \tag{16} DKL(P∣∣Q)=−i=1∑npilogpiqi.(16) 根据公式 ( 15 ) (15) (15) 的推导, 可以看到, 公式 ( 16 ) (16) (16) 是以分布 P ( X ) P(X) P(X) 作为真实分布, Q ( X ) Q(X) Q(X) 作为一种拟合、近似或者理论分布.
从构造过程中看, 两个分布越相似, 两个信息熵差距越小, 相对熵也越小. 从相对熵的形式上看, 其无对称性, 即
D K L ( P ∣ ∣ Q ) ≠ D K L ( Q ∣ ∣ P ) . D_{KL}(P||Q) \neq D_{KL}(Q||P). DKL(P∣∣Q)=DKL(Q∣∣P). 相对熵的计算依赖于以何种分布作为基准, 度量另一个分布与其的相似程度. 这也是 “相对” 的含义.
相对熵可以用来衡量两个分布的差异, 但其形式熵不具有对称性, 在机器学习训练中可能会出现问题. 因此一个直接的想法将相对熵进行推广, 构造一个具有对称性的分布差异度量. 最简单的构造方式便是将两个对称的相对熵求均值, 如此就能保证对称性, 所构造出来的度量称为JS散度, 形式如下
D J S ( P , Q ) = 1 2 [ D K L ( P ∣ ∣ Q ) + D K L ( Q ∣ ∣ P ) ] . (17) D_{JS}(P,Q)=\frac{1}{2} \left[ D_{KL}(P||Q) + D_{KL}(Q||P) \right]. \tag{17} DJS(P,Q)=21[DKL(P∣∣Q)+DKL(Q∣∣P)].(17)