熵的来源及相关定义

熵是信息论与编码理论的中心概念。至于条件熵以及互信息都是某种意义上的熵。对于熵的理解是最根本的。几乎所有的信息论教材无一列外的提到熵是刻画信息的多少或者不确定性的。这当然也没有什么问题,但是却立即让人如堕五里雾中,不知熵到底是什么意义。只要稍微钻一下牛角尖,刻画信息或者不确定性为什么非要用这种形式不可呢?在这些书上就难以找到好的答案了。实际上这些定义可以直接从对数的定义得到很清晰的解释。而不需要绕一个圈子从什么信息量、不确定性的角度。刻画信息量或者不确定性可以作为某种解说,但不是最根本最清晰的解说。假定熵的定义公式中对数都是以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)计算两个变量之间的相关性,可以考虑条件熵;

时间: 2024-10-13 02:20:59

熵的来源及相关定义的相关文章

大整数算法[01] 大整数的表示和相关定义

★ 相关的数据类型定义 在干正事之前,先定义好各种数据类型还是很有必要的,避免在以后的编码中引起混乱. uintX   X位无符号整形,如uint32表示32位无符号整形 intX    X位有符号整形,如int32表示32位有符号整形 基本数据类型定义: #ifdef _MSC_VER            typedef __int8              int8;            typedef __int16             int16;            typ

多线程-相关定义

进程的定义: 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 线程的定义: 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程) 线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行 线程的串行: 1个线程中任务的执行是串行(顺序执行的)的 如果要在1个线程中执行多个任务,那么只能一个一个地按顺序执行这些任务 也就是说,在同一时间内,1个线程只能执行1个任务 多线程的定义: 1个进程中可以开启多条线程,每条线程可

数据结构——第四章图:01图相关定义

1.图的定义:图是一种网状数据结构,形式化定义如下:图Graph = (V, R),V = {x | x ∈ DataObject},R = {VR},VR = {<x, y> | P(x, y) ∧ (x, y ∈ V)}.集合DataObject中的所有元素具有相同的特性.V中的数据元素通常为顶点(vertex),VR是两个顶点之间关系的集合,P(x, y)表示x和y之间有特定的关系属性P. (1)若<x, y> ∈ VR,则<x, y>表示从顶点x到顶点y的一条弧

C++primer 第七章 类(有关类的相关定义)

 类的基本思想:数据抽象和封装.数据抽象是一种依赖于接口和实现分离的编程技术.类的接口包括用户所能执行的操作:类的实现则包括类的数据成员.负责接口实现的函数体以及所需的各种私有函数.封装实现了类的接口和实现的分离(用自己的话讲,就是封装把类的实现隐藏了,别人已将功能的实现帮你完成了,你只需要直接调用).       1.定义抽象数据类型:        类作用域:类本身就是一个作用域.       编译器分两步处理类:首先编译成员的声明:然后才是成员函数体.       A.定义read和pri

统计学习的相关定义

1. 什么是统计学习? 统计学习(statistical learning)是关于计算机基于数据构建概率统计模型并运用模型对数据进行预测与分析的一门学科.具有以下特点: (1)以计算机和网络为平台:(2)以数据为对象,数据驱动的学科:(3)目的是对数据进行预测和分析:(4)以方法为中心,统计学习方法构建模型并应用模型进行预测和分析:(5)概率论.信息论.计算理论.最优化理论及计算机学习的交叉学科. 统计学习方法的步骤: (1)得到一个有限的训练数据集合:(2)得到包含所有可能的模型的假设空间,即

SQL执行计划相关定义

1.Physical Operation (物理运算)     将在数据库引擎上发生的物理运算. 2.Logical Operation(逻辑运算) 与微软的查询处理概念模型相对应的逻辑运算. (例如,对于联接运算符,其Physical Operation属性表示使用的联接算法(嵌套循环.合并.哈希),Logical Operation属性表示使用的逻辑联接类型(内联接.外联接.半联接,等).当运算符没有相应的逻辑运算时,该项的值和物理运算显示的值相同.) 3.Actual Number of

二叉树的相关定义及实现

一.一些概念 树,子树,节点,叶子(终端节点),分支节点(分终端节点): 节点的度表示该节点拥有的子树个数,树的度是树内各节点度的最大值: 子节点(孩子),父节点(双亲),兄弟节点,祖先,子孙,堂兄弟,深度或高度: 森林是指若干棵或不相交的树,对于树中的每个节点,其子树的集合即为森林: 二叉树,满二叉树: 完全二叉树指 原文地址:https://www.cnblogs.com/lbrs/p/11746376.html

交叉熵损失函数来源及求导推导

记录一下,方便复习 总结: 原文地址:https://www.cnblogs.com/zhibei/p/12334238.html

继承与派生定义及相关程序调用举例

一.面向对象程序设计的特点:抽象,封装,继承,多态性. 二.3种成员访问限定符及其继承关系: 问题: private/protected限定符都是限定直接访问,那他们之间有什么区别? 解答:在本类中,private和protected作用是相同的,但是protected可以被继承,而private却不能. 三种继承关系下基类成员的在派生类的访问关系变化如下表所示: 总结: 1.基类的私有成员在派生类中是不能被访问的,如果一些基类成员不想被基类对象直接访问,但需要在派生类中能访问,就定义为保护成员