信息熵

来源:互联网 发布:精密减速机 知乎 编辑:程序博客网 时间:2024/05/22 13:13

信息编码

我所知道的信息量是来源于信息编码,例如,我们有一篇英文文章,我要对这篇文章尽进行二进制编码,以达到压缩文章的效果,我该如何编码。我们知道,ASIIC编码都是使用相同长度的二进制来编码的(8位长),例如,

A0100 0001B0100 0010 a0110 0001b0110 0010 10011 000120011 0010

可是我们也知道文章中有的字符出现的次数比较多,有些字符出现的很少,如果我们将出现次数多的字符用短的二进制编码,出现少的字符用稍微长的字符编码,这样好像更合理。例如一篇文章有800个字符,a有400个,b有200个,c有100个,d有100个。如果使用自然编码,这篇文章有800*2=1600bit。

字符 a b c d 编码 00 01 10 11

如果使用变长编码,编码长度为400*1+200*2+100*3+100*3=1400bit。

字符 a b c d 编码 0 10 110 111

平均编码

实际上我们一般获得的都是字符的统计特性,我们可以使用平均编码来度量编码的好坏。例如上面的例子写成分布

字符 a b c d 比例 0.5 0.25 0.125 0.125 编码长度 2 2 2 2

所以期望长度就是0.5*2+0.25*2+0.125*2+0.125*2=2,另一种变长编码

字符 a b c d 比例 0.5 0.25 0.125 0.125 编码长度 1 2 3 3

期望长度就是0.5*1+0.25*2+0.125*3+0.125*3=1.75。这样很明显变长编码要比自然编码短。那该如何寻找更好的编码方式呢?

自信息

自信息是指,一个随机产生的事件所包含的自信息数量,只与事件发生的概率相关。公式为

I(x)=log(1/p)=log(p)
想想如果一个事件的出现的概率很大,比如明天太阳会升起,这句话很明显是废话,没任何信息量,I()=log1=0,计算得到的信息量也是零。如果log的底是2,那么得到的信息量的单位就是bit。如字符a,出现的概率(也就是统计频率)是0.5,I(a)=log20.5=1bit,我们对其使用一个字节的编码,以此类推

字符 X= a b c d 概率P(X) 0.5 0.25 0.125 0.125 自信息I(X) 1 2 3 3

我们根据自信息得到的信息量,就是这个字符所需要的最少编码。也就是说我们没有任何冗余的表达了这个字符的信息量。

信息熵

我们可以得到某个事件X的期望,也就是

H(p)=E(X)=Σxp(x)I(X)=Σxp(x)log(p(x))
这样我们就可以通过期望来度量编码方式的好坏,拥有最小期望的编码方式最好。一个随机事件所包含的自信息数量,只与事件发生的概率相关。事件发生的概率越低,在事件真的发生时,接收到的信息中,包含的自信息越大。而信息量的期望表示接收的每条消息中包含的信息的平均量,我们使用熵来表示,这里,“消息”代表来自分布或数据流中的事件、样本或特征。熵是为了度量随机变量或整个系统的不确定程度,熵越大,随机变量或系统的不确定性就越大。例如,掷一枚硬币,正面是0.9,反面是0.1,那么其实当我们掷的时候对结果就已经比较确定了,很可能是0.9.但是当我们掷一枚均匀的硬币是,正反面都是0.5,结果就很不确定。用熵度量就是(0.9log0.9+0.1log0.1)<(0.5log0.5+0.5log0.5)

交叉熵与相对熵

有时候我们需要对一篇文章编码,但是文章太长了,我们只能拿到一部分进行统计,然后进行编码(局部最优编码),对其余部分我们就直接使用第一部分得到的最优编码来编码。这样得到的平均编码长度(也就是信息熵)很可能不是全局最优的编码长度。我们用局部的分布q(x)得到的编码logq(x)和真实分布p(x)得到平均编码,写出公式

H(p,q)=xp(x)logq(x)
两个分布交叉在意一起的熵就是交叉熵。
因为没有得到全局的概率分布,所以我们使用局部概率分布得到编码比最优编码要长,具体就是
KL(p,q)=H(p,q)H(p)=xp(x)logp(x)q(x)

这就是使用局部分布计算的信息量与真实分布信息量的差值,我们称之为相对熵。我们可以对应到机器学习算法上,机器学习算法训练过程中会得到一个分布q,我们用这个分布来近似真实的的分布p,我们希望q越接近p越好,这说明我们训练的模型越接近真实的模型,所以相对熵越小模型越好。相对熵也可以看作是一种距离,但是这个距离不是对称的,即KL(p,q)̸KL(q,p)


交叉熵
如何通俗的解释交叉熵与相对熵?