熵是信息论与编码理论的中心概念。至于条件熵以及互信息都是某种意义上的熵。对于熵的理解是最根本的。几乎所有的信息论教材无一列外的提到熵是刻画信息的多少或者不确定性的。这当然也没有什么问题,但是却立即让人如堕五里雾中,不知熵到底是什么意义。只要稍微钻一下牛角尖,刻画信息或者不确定性为什么非要用这种形式不可呢?在这些书上就难以找到好的答案了。实际上这些定义可以直接从对数的定义得到很清晰的解释。而不需要绕一个圈子从什么信息量、不确定性的角度。刻画信息量或者不确定性可以作为某种解说,但不是最根本最清晰的解说。假定熵的定义公式中对数都是以2为底,那么一个字符序列的熵就是用二进制代码来表示这个字符序列的每个字的最少的平均长度,也就是平均每个字最少要用几个二进制代码。这种说法才是熵的本质意义所在。所以熵这个概念天然地和编码联系在一起,而不是单纯的为了刻画什么信息量或者不确定度之类不着边际的概念。熵就是用来刻画编码的程度或者效率的。可见学信息论必然要学编码。
如果追索熵是刻画不确定性这一说法的根源,可以追索到信息论创始人Claude E. Shannon的开创性文章[1]的某些部分,比如引出了熵的具体数学形式之后Shannon自己在[1]的393页评论说“(熵这一类的数量) play a central role in information theory as measures of information, choice and uncertainty.” 这个说法也许导致了大多数信息论的教材都采用了熵是某种不确定性的度量这一说法。熵这个概念在Shannon的[1]文之前已经出现,比如Shannon在[1]中393页自己提到1938年出版的一本统计力学就有形式一样的熵。只不过用在通信领域是Shannon的首创。
1. 熵的直观意义
对于一个离散的随机变量X,取值为{x_1,x_2,…x_n}相应的概率为{p_1,p_2,…,p_n}。熵的定义为H(X)=Sum_{i}p_i*log(1/p_i)。在引入比较细致一点的书中,一般会先介绍一个概率事件[X=x_1]的信息量定义为log(1/p_1)=-log(p_1)。一般的书会用小的概率事件含有很大的信息量,大的概率事件含有较少的信息量来解说这个定义。在Shannon的[1]文中还用公理化的方法推导了这个形式。然而这些都掩盖了这种定义内涵的直观含义。实际上这些定义可以直接从对数的定义得到很清晰的解释。为确定起见,这里假定公式中出现的对数(log)都是以2为底的。从对数的定义可以知道log(N)可以理解为用二进制来表示N大约需要多少位。比如log(7)=2.8074,用二进制表示7为三位数字111。那么概率的倒数(1/p_1)是什么意思呢?概率我们知道可以理解为频率,比如一个字符在一个字符序列中出现的概率(频率)是0.1,那么,频率的倒数1/0.1=10。按照比例的意思来理解就是大约在长度为10的字符串中这个字符很可能出现一次,因为这样频率才能是1/10等于概率0.1了。所以一个概率事件的信息量就是观测到这个字符一次(这个事件发生一次)相应的字符串大约多长(用相应的二进制代码长度)。
一个概率事件的信息量按照以上的二进制代码长度来理解之后,那么,熵的意义就很明显了。那就是所有概率事件的相应的二进制代码的平均长度。从对数的定义角度来理解熵在[1]文中也可以找到依据。比如在[1]的380页对于为什么引入对数(尤其是以2为底的对数)做了说明,同时引出了比特这个概念。从这个说法出发,熵的概念就已经是十分清楚的;而不需要说什么信息的度量、不确定性的度量等。
这里用一个具体例子来说明熵的二进制代码长度含义。
例1. X表示全空间为符号序列{贤者辟世 其次辟地 其次辟色 其次辟言}的随机变量。
用符号出现频率来计算概率。可知
P[X=贤]=1/16,P[X=者]=1/16,P[X=辟]=4/16,P[X=世]=1/16,P[X=其]=3/16,P[X=次]=3/16,P[X=地]=1/16,P[X=色]=1/16,P[X=言]=1/16.
熵可计算为H(X)=6*1/16log16+1/4*log4+2*3/16log16/3=2.9464。
这里用Huffman码来对以上符号序列进行二进制编码来说明熵的意义。
Huffman码的编排思想即选择较少两个概率进行组合,概率相加,一直到只有两个分支为止。其实质就是建立了一个二分支的树的结构,再根据此树的结构进行唯一确定的二进制编码。将以上概率从小到大排成一列,列一个表格如下:
P[X=贤]=1/16 | 1/8 | 4/16 | 9/16 |
P[X=者]=1/16 | |||
P[X=世]=1/16 | 1/8 | ||
P[X=地]=1/16 | |||
P[X=色]=1/16 | 1/8 | 5/16 | |
P[X=言]=1/16 | |||
P[X=其]=3/16 | |||
P[X=次]=3/16 | 7/16 | ||
P[X=辟]=4/16 |
上表中从右到左按照上为0下为1的二分岔规则编码,就得到了Huffman码:
贤0000, 者0001, 世0010, 地0011, 色0100, 言0101, 其011, 次10, 辟11.
原文二进制代码为{0000, 0001, 11, 0010; 011,10,11,0011; 011,10,11,0100; 011,10,11,0101} 共计47个代码。而16*H(X)=16*2.9464=47.1424。两者相当之接近。如果用等长代码,由于有9个不同源符号,需要用4位二进制代码,那么原文的二进制代码总长为16*4=64。可见Huffman码的效率高,接近了熵的估计值。这个例子也印证了以上熵的解释。
转自:点我
定义:
最近用到信息论的知识表较多,自己也总结下。
1 信息熵(entropy)
定义式:
其中P(x)是变量出现的概率。从直观上,信息熵越大,变量包含的信息量越大,变量的不确定性也越大。一个事物内部会存在随机性,也就是不确定性,而从外部消除这个不确定性唯一的办法是引入信息。如果没有信息,任何公式或者数字的游戏都无法排除不确定性。几乎所有的自然语言处理,信息与信号处理的应用都是一个消除不确定性的过程。
2 条件熵(conditional entropy)
知道的信息越多,随机事件的不确定性就越小。
定义式:
3 联合熵
设X Y为两个随机变量,对于给定条件Y=y下,X的条件熵定义为:
4 左右熵
一般用于统计方法的新词发现。
计算一对词之间的左熵和右熵,熵越大,越说明是一个新词。因为熵表示不确定性,所以熵越大,不确定越大,也就是这对词左右搭配越丰富,越多选择。如: 屌丝,这个词,我们希望左右熵都很大,希望屌丝这个词左右边搭配尽可能丰富,如左边:这屌丝、臭屌丝、穷屌丝;右边:屌丝的,屌丝样、屌丝命等。左右搭配丰富。
5 互信息(mutual information)
两个事件的互信息定义为:I(X;Y)=H(X)+H(Y)-H(X,Y),也就是用来衡量两个信息的相关性大小的量。
互信息是计算语言学模型分析的常用方法,它度量两个对象之间的相互性。
定义式:
应用:
(1)去计算一个变量的不确定性,可以考虑信息熵;在研究显著性时,可以用信息熵去计算一个区域的信息量的大小,近而来判断其为显著性区域;
(2)计算两个变量之间的相关性,可以考虑条件熵;