1 信息量
信息量即信息多少的度量。跟我们认识中秒是时间多少的度量,米是长度多少的量度是一样的意思。
百度百科上定义秒:铯133原子基态的两个超精细能阶之间跃迁时所辐射的电磁波的周期的9,192,631,770倍 的时间 。
那信息的多少怎么衡量呢?一个人告诉你一件事,比如太阳从东方升起;你说这是常识啊,大家都知道。一个人告诉你,明天某个时间在某个地方待着,将有一个亿支票掉下来,这个事情概率比较低,信息量非常大,知道了这个事情价值非常大。感性上我们可以理解信息量为给我带来价值的多少(给你带来多少价值,对等的就是要付出多少代价,似乎有点绕)。实质工程中,信息量的引入是与信息的传输和存储相关的。举个例子:
世界杯比赛,假如最后剩下巴西,法国,比利时,英格兰,巴西得冠军的概率1/2,法国得冠军的概率1/4,比利时得冠军的概率1/8,英格兰冠军概率1/8(非球迷,错了勿怪)。我们要设计协议,传输某个队伍得了冠军的信息。如何设计呢?有人说简单,用两个比特:
00:巴西队得冠军
01:法国队得冠军
10:比利时得冠军
11:英格兰得冠军
但是这样设计合理吗?无论哪个队得冠军,我们都得传输2个比特。我们前面知道了各个队得冠军的概率,如果这样设计
1:巴西队得冠军
0:法国队得冠军
01:比利时得冠军
11:英格兰得冠军
因为巴西队和法国队得冠军的概率比较大,大概率我们只需传输一个比特就行了。基于这样的设计,概率越小我们需要传输的比特位越多。如果以比特位的多少来衡量信息量的多少,也就是概率越低信息量越大。
基于此,给出信息量的一个量化公式:
即如果信源的概率越大,该信源携带的信息量越小(传输存储代价越小);信源概率越小,该信源携带的信息越大(传输存储代价越大)。
2 信息熵
我们直接给出公式定义:
从公式中我们可以知道信息熵其实是系统(信源系统)信息量的期望。但是这个期望代表了一个系统的不确定性,信息熵越大,不确定性越大。如何理解呢?我们基于信息传输代价来理解,其实就是如果信源产生一个信息,我们要传输这个信息需要花费代价的最小平均比特位数。
---------------------
作者:idwtwt
来源:CSDN
原文:https://blog.csdn.net/idwtwt/article/details/81043942
版权声明:本文为博主原创文章,转载请附上博文链接!
信息熵 (information entropy)
熵
(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) 的对数有关 (因为对数的运算法则是loga(mn)=logam+logan
)。因此,我们有
I(x)=−logp(x)
其中负号是用来保证信息量是正数或者零。而log
函数基的选择是任意的(信息论中基常常选择为2,因此信息的单位为比特bits;而机器学习中基常常选择为自然常数,因此单位常常被称为奈特nats)。I(x)也被称为随机变量x
的自信息 (self-information),描述的是随机变量的某个事件发生所带来的信息量。图像如图:
最后,我们正式引出信息熵。 现在假设一个发送者想传送一个随机变量的值给接收者。那么在这个过程中,他们传输的平均信息量可以通过求I(x)=−logp(x)
关于概率分布p(x)
的期望得到,即:
H(X)=−∑xp(x)logp(x)=−∑i=1np(xi)logp(xi)
H(X)
就被称为随机变量x
的熵,它是表示随机变量不确定的度量,是对所有可能发生的事件产生的信息量的期望。
从公式可得,随机变量的取值个数越多,状态数也就越多,信息熵就越大,混乱程度就越大。当随机分布为均匀分布时,熵最大,且0≤H(X)≤logn
。稍后证明。将一维随机变量分布推广到多维随机变量分布,则其联合熵 (Joint entropy) 为:
H(X,Y)=−∑x,yp(x,y)logp(x,y)=−∑i=1n∑j=1mp(xi,yi)logp(xi,yi)
注意点:1、熵只依赖于随机变量的分布,与随机变量取值无关,所以也可以将X
的熵记作H(p)
。2、令0log0=0(因为某个取值概率可能为0)。
那么这些定义有着什么样的性质呢?考虑一个随机变量x
。这个随机变量有4种可能的状态,每个状态都是等可能的。为了把x的值传给接收者,我们需要传输2比特的消息。H(X)=−4×14log214=2 bits
现在考虑一个具有4种可能的状态{a,b,c,d}
的随机变量,每个状态各自的概率为(12,14,18,18)
这种情形下的熵为:
H(X)=−12log212−14log214−18log218−18log218=1.75 bits
我们可以看到,非均匀分布比均匀分布的熵要小。现在让我们考虑如何把变量状态的类别传递给接收者。与之前一样,我们可以使用一个2比特的数字来完成这件事情。然而,我们可以利用非均匀分布这个特点,使用更短的编码来描述更可能的事件,使用更长的编码来描述不太可能的事件。我们希望这样做能够得到一个更短的平均编码长度。我们可以使用下面的编码串(哈夫曼编码):0、10、110、111来表示状态{a,b,c,d}
。传输的编码的平均长度就是:
average code length =12×1+14×2+2×18×3=1.75 bits
这个值与上方的随机变量的熵相等。熵和最短编码长度的这种关系是一种普遍的情形。Shannon 编码定理https://baike.baidu.com/item/Shannon%20%E7%BC%96%E7%A0%81%E5%AE%9A%E7%90%86/15585931?fr=aladdin表明熵是传输一个随机变量状态值所需的比特位下界(最短平均编码长度)。因此,信息熵可以应用在数据压缩方面。这里这篇文章http://www.ruanyifeng.com/blog/2014/09/information-entropy.html讲的很详细了,我就不赘述了。
证明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
1、定义拉格朗日函数:
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)
2、L(p(1),p(2),…,p(n),λ)
分别对p(1),p(2),p(n),λ求偏导数,令偏导数为0
:
λ−log(e⋅p(1))=0
λ−log(e⋅p(2))=0
……
λ−log(e⋅p(n))=0
p(1)+p(2)+⋯+p(n)−1=0
3、求出p(1),p(2),…,p(n)
的值:
解方程得,p(1)=p(2)=⋯=p(n)=1n
代入f(p(1),p(2),…,p(n))
中得到目标函数的极值为f(1n,1n,…,1n)=−(1nlog1n+1nlog1n+⋯+1nlog1n)=−log(1n)=logn
由此可证logn
为最大值。
2、条件熵(Conditional entropy)
条件熵H(Y|X)
表示在已知随机变量X的条件下随机变量Y的不确定性。条件熵H(Y|X)定义为X给定条件下Y的条件概率分布的熵对X
的数学期望:
条件熵H(Y|X)
相当于联合熵H(X,Y)减去单独的熵H(X)
,即
H(Y|X)=H(X,Y)−H(X)
,证明如下:
举个例子,比如环境温度是低还是高,和我穿短袖还是外套这两个事件可以组成联合概率分布H(X,Y)
,因为两个事件加起来的信息量肯定是大于单一事件的信息量的。假设H(X)对应着今天环境温度的信息量,由于今天环境温度和今天我穿什么衣服这两个事件并不是独立分布的,所以在已知今天环境温度的情况下,我穿什么衣服的信息量或者说不确定性是被减少了。当已知H(X)这个信息量的时候,H(X,Y)
剩下的信息量就是条件熵:
H(Y|X)=H(X,Y)−H(X)
因此,可以这样理解,描述X
和Y所需的信息是描述X自己所需的信息,加上给定X的条件下具体化Y
所需的额外信息。关于条件熵的例子可以看这篇文章,讲得很详细。https://zhuanlan.zhihu.com/p/26551798
3、相对熵(Relative entropy),也称KL散度 (Kullback–Leibler divergence)
设p(x)
、q(x)是 离散随机变量X中取值的两个概率分布,则p对q
的相对熵是:
DKL(p||q)=∑xp(x)logp(x)q(x)=Ep(x)logp(x)q(x)
性质:
1、如果p(x)
和q(x)
两个分布相同,那么相对熵等于0
2、DKL(p||q)≠DKL(q||p)
,相对熵具有不对称性。大家可以举个简单例子算一下。
3、DKL(p||q)≥0
证明如下(利用Jensen不等式https://en.wikipedia.org/wiki/Jensen%27s_inequality):
因为:
∑xp(x)=1
所以:
DKL(p||q)≥0
总结:相对熵可以用来衡量两个概率分布之间的差异,上面公式的意义就是求p
与q之间的对数差在p
上的期望值。
4、交叉熵(Cross entropy)
现在有关于样本集的两个概率分布p(x)
和q(x),其中p(x)为真实分布,q(x)非真实分布。如果用真实分布p(x)
来衡量识别别一个样本所需要编码长度的期望(平均编码长度)为:
H(p)=∑xp(x)log1p(x)
如果使用非真实分布q(x)
来表示来自真实分布p(x)
的平均编码长度,则是:
H(p,q)=∑xp(x)log1q(x)
。(因为用q(x)来编码的样本来自于分布q(x),所以H(p,q)中的概率是p(x))。此时就将H(p,q)称之为交叉熵。举个例子。考虑一个随机变量x,真实分布p(x)=(12,14,18,18),非真实分布q(x)=(14,14,14,14),则H(p)=1.75 bits(最短平均码长),交叉熵H(p,q)=12log24+14log24+18log24+18log24=2 bits。由此可以看出根据非真实分布q(x)得到的平均码长大于根据真实分布p(x)
得到的平均码长。
我们再化简一下相对熵的公式。DKL(p||q)=∑xp(x)logp(x)q(x)=∑xp(x)logp(x)−p(x)logq(x)
有没有发现什么?
熵的公式H(p)=−∑xp(x)logp(x)
交叉熵的公式H(p,q)=∑xp(x)log1q(x)=−∑xp(x)logq(x)
所以有:
DKL(p||q)=H(p,q)−H(p)
(当用非真实分布q(x)得到的平均码长比真实分布p(x)
得到的平均码长多出的比特数就是相对熵)
又因为DKL(p||q)≥0
所以H(p,q)≥H(p)
(当p(x)=q(x)
时取等号,此时交叉熵等于信息熵)
并且当H(p)
为常量时(注:在机器学习中,训练数据分布是固定的),最小化相对熵DKL(p||q)等价于最小化交叉熵H(p,q)
也等价于最大化似然估计(具体参考Deep Learning 5.5)。
在机器学习中,我们希望在训练数据上模型学到的分布P(model)
和真实数据的分布P(real) 越接近越好,所以我们可以使其相对熵最小。但是我们没有真实数据的分布,所以只能希望模型学到的分布P(model)和训练数据的分布P(train)
尽量相同。假设训练数据是从总体中独立同分布采样的,那么我们可以通过最小化训练数据的经验误差来降低模型的泛化误差。即:
希望学到的模型的分布和真实分布一致,P(model)≃P(real)
但是真实分布不可知,假设训练数据是从真实数据中独立同分布采样的,P(train)≃P(real)
因此,我们希望学到的模型分布至少和训练数据的分布一致,P(train)≃P(model)
根据之前的描述,最小化训练数据上的分布P(train)
与最小化模型分布P(model)的差异等价于最小化相对熵,即DKL(P(train)||P(model))。此时,P(train)就是DKL(p||q)中的p,即真实分布,P(model)就是q。又因为训练数据的分布p是给定的,所以求DKL(p||q)等价于求H(p,q)
。得证,交叉熵可以用来计算学习模型分布与训练分布之间的差异。交叉熵广泛用于逻辑回归的Sigmoid和Softmax函数中作为损失函数使用。这篇文章先不说了。
5、总结
信息熵是衡量随机变量分布的混乱程度,是随机分布各事件发生的信息量的期望值,随机变量的取值个数越多,状态数也就越多,信息熵就越大,混乱程度就越大。当随机分布为均匀分布时,熵最大;信息熵推广到多维领域,则可得到联合信息熵;条件熵表示的是在X
给定条件下,Y的条件概率分布的熵对X
的期望。
相对熵可以用来衡量两个概率分布之间的差异。
交叉熵可以来衡量在给定的真实分布下,使用非真实分布所指定的策略消除系统的不确定性所需要付出的努力的大小。
或者:
信息熵是传输一个随机变量状态值所需的比特位下界(最短平均编码长度)。
相对熵是指用q
来表示分布p
额外需要的编码长度。
交叉熵是指用分布q
来表示本来表示分布p
的平均编码长度。
6、参考
1、吴军《数学之美》
2、李航《统计学习方法》
3、马春鹏《模式识别与机器学习》
3、https://www.zhihu.com/question/41252833 如何通俗的解释交叉熵与相对熵
4、https://www.zhihu.com/question/65288314/answer/244557337为什么交叉熵(cross-entropy)可以用于计算代价?
5、https://baike.baidu.com/item/%E4%BA%A4%E5%8F%89%E7%86%B5/8983241?fr=aladdin 交叉熵的百度百科解释
6、https://blog.csdn.net/saltriver/article/details/53056816信息熵到底是什么
7、后记
本人不是大神,大牛。目前写博客是为了让我自己更深刻地记忆学过的知识和对知识进行梳理。这篇博客是我的第一篇,其中借鉴了不少其他博主的博客里的分享,都有标注来源,如有遗忘,劳烦提醒,衷心感谢他们对自己所掌握的知识的分享。这篇博客可能还存在着一些错误,如有发现,请求斧正,谢谢。