任何关于算法、编程、AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主在线答疑~此外,公众号内还有更多AI、算法、编程和大数据知识分享,以及免费的SSR节点和学习资料。其他平台(知乎/B站)也是同名「图灵的猫」,不要迷路哦~

信息是我们一直在谈论的东西,但信息这个概念本身依然比较抽象。在百度百科中的定义:信息,泛指人类社会传播的一切内容,指音讯、消息、通信系统传输和处理的对象。

但信息可不可以被量化,怎样量化?答案当然是有的,那就是“信息熵”。早在1948年,香农(Shannon)在他著名的《通信的数学原理》论文中指出:“信息是用来消除随机不确定性的东西”,并提出了“信息熵”的概念(借用了热力学中熵的概念),来解决信息的度量问题。 
 
下面结合自身的一些认识,谈谈对信息熵的理解。

1. 信息熵是消除不确定性所需信息量的度量,也即未知事件可能含有的信息量。

一个事件或一个系统,准确的说是一个随机变量,它有着一定的不确定性。例如,“除东道主俄罗斯外,哪31个国家能进军2018年俄罗斯世界杯决赛圈”,这个随机变量的不确定性很高,要消除这个不确定性,就需要引入很多的信息,这些很多信息的度量就用“信息熵”表达。需要引入消除不确定性的信息量越多,则信息熵越高,反之则越低。例如“中国男足进军2018年俄罗斯世界杯决赛圈”,这个因为确定性很高,几乎不需要引入信息,因此信息熵很低。 
 
那信息熵如何计算呢?举个吴军在《数学之美》中一样的例子,假设世界杯决赛圈32强已经产生,那么随机变量“2018年俄罗斯世界杯足球赛32强中,谁是世界杯冠军?”的信息量是多少呢? 
 
根据香农(Shannon)给出的信息熵公式,对于任意一个随机变量X,它的信息熵定义如下,单位为比特(bit):

H(X)=−∑xεXP(x)logP(x))

那么上述随机变量(谁获得冠军)的信息量是:

H=-(p1·logp1+p2·logp2+…p32·logp32)

其中,p1,p2,…,p32分别是这32强球队夺冠的概率。 
吴军的书中给出了几个结论:一是32强球队夺冠概率相同时,H=5;二是夺冠概率不同时,H<5;三是H不可能大于5。

对于第一个结论:结果是很显然的,夺冠概率相同,即每个球队夺冠概率都是1/32,所以H=-((1/32)·log(1/32)+(1/32)·log(1/32)+…+(1/32)·log(1/32))=-log(1/32)=log(32)=5(bit)

对于第二个结论和第三个结论:使用拉格朗日乘子法进行证明,详见《求约束条件下极值的拉格朗日乘子法》。这实际上是说系统中各种随机性的概率越均等,信息熵越大,反之越小。

从香农给出的数学公式上可以看出,信息熵其实是一个随机变量信息量的数学期望。

2.日常语境中的信息量与信息熵的关系。

日常生活中,我们经常说某人说话言简意赅,信息量却很大,某些人口若悬河,但是废话连篇,没啥信息量;这个电视剧情节太拖沓,一集都快演完了也没演啥内容。这里的信息量/内容与信息熵有什么关系呢?

很多人把这些东西与信息熵混为一谈,得出“说话信息量越大,信息熵越高”“语言越言简意赅,信息熵越高;语言越冗余堆积,信息熵越低。”等等结论。

不是说这些说法错了,而是容易引起误导。个人认为,这里日常语境的信息量与其说是信息量,不如说是信息质量和信息传递效率问题,有没有干货,有没有观点,有没有思想,并且在一定的文字长度/播放时间内,能不能有效的表达出来,这个其实是人的能力问题,和信息熵没啥关系好不!

3.在自然语言处理中,信息熵只反映内容的随机性(不确定性)和编码情况,与内容本身无关。

信息熵的一个重要应用领域就是自然语言处理。例如,一本50万字的中文书平均有多少信息量。我们知道,常用的汉字约7000字。假如每个汉字等概率,那么大约需要约13比特(即13位二进制数,213=8192)表示一个汉字。 
应用信息熵就是,一个汉字有7000种可能性,每个可能性等概率,所以一个汉字的信息熵是:

H=-((1/7000)·log(1/7000)+(1/7000)·log(1/7000)+…(1/7000)·log(1/7000))=12.77(bit)

实际上由于前10%汉字占常用文本的95%以上,再考虑词语等上下文,每个汉字的信息熵大约是5比特左右。所以一本50万字的中文书,信息量大约是250万比特。需要注意这里的250万比特是个平均数。 
再看下面两个句子。 
(1)落霞与孤鹜齐飞,秋水共长天一色。 
(2)落日下的晚霞与孤独的大雁一同飞翔,晚秋的江水和深远的天空连成一片。 
 
按照信息熵的计算,第二句比第一句的信息熵要高1倍以上,你会觉得第二句比第一句水平要高,信息量更大么?在自然语言处理中出现较大的信息熵,只表示可能出现的语言字符较多,并不意味着你可以从中得到更多的信息。

所以,信息熵高,不代表你说的话,写的文字中蕴含的信息量就比别人高了。更确切的,信息熵在自然语言处理中是用来对语言文字进行数据压缩的,与语言素养无关。当然条件熵、相对熵等应该是自然语言处理中更有用的概念,这个以后有机会再说。

4.随机变量的信息熵大小是客观的,又是主观的,与观测者的观测粒度有关。

信息熵描述的是随机变量的不确定性。对于同一个随机变量,不同观测者从不同粒度上观察,得到的信息熵是不一样的。

还是举上面世界杯谁夺得冠军的例子,32强谁夺得冠军的信息熵是5比特;如果粒度再粗些,有人关注是哪个州夺得冠军,那么其可能性是5种(欧洲,南美,非洲,中北美州,亚洲),信息熵是2.32比特;如果我们只关注亚洲是否夺冠,那么可能性是2种,信息熵是1比特。 
 
再举个更随机的例子,中国股市的涨跌(假设非涨即跌,不算平盘),明天是涨还是跌,只有2种可能,信息量(信息熵)是1比特;假设股市只有蓝筹板,中小板,创业板3个板块,这三个板块的涨跌的可能性合计是8种,信息熵是3比特;如果关注的是每个股票的涨跌,2000个股票的可能性合计是22000种,信息熵是2000比特。

因此,对于不同的观测者来说,信息量(信息熵)是不同的,观测粒度越细则信息量(信息熵)越大,观测粒度越粗则信息量(信息熵)越小。

5.信息熵与热力学熵有相似之处,但不是同一个东西。

很多人看到信息熵的数学公式和热力学熵(有宏观形式和微观形式2种)的数学表达式非常相似,觉得两者不存在本质区别。但个人认为至少在目前看来是完全不一样的东西。

  • 首先,两者的应用领域完全不一样。热力学熵主要用于热力学、量子物理等领域。而信息熵主要用于通信和和计算机等领域。

  • 其次,两者形成于不同的理论体系,含义、研究对象都有较大区别,连量纲都不一样,一个是焦耳/开尔文,一个是比特bit。举个可能不太恰当的例子,计算机科学中借用了植物学中“树”的概念,虽然计算机科学中的“树”与植物学中的“树”很多地方类似,但显然不是同一个东西。 

  • 最后,不排除将来有一套统一理论体系能够将信息熵和热力学熵都包含进去。但在现在看来,信息论和热力学并没有统一的迹象,生搬硬套的将这两种熵联系在一起,只会起到概念含混,逻辑脆弱的反作用。

关于信息熵的简单理解相关推荐

  1. android 点击事件消费,Android View事件分发和消费源码简单理解

    Android View事件分发和消费源码简单理解 前言: 开发过程中觉得View事件这块是特别烧脑的,看了好久,才自认为看明白.中间上网查了下singwhatiwanna粉丝的读书笔记,有种茅塞顿开 ...

  2. 【转载】Deep learning:十九(RBM简单理解)

    Deep learning:十九(RBM简单理解) 这篇博客主要用来简单介绍下RBM网络,因为deep learning中的一个重要网络结构DBN就可以由RBM网络叠加而成,所以对RBM的理解有利于我 ...

  3. 学习:双机热备、集群、负载均衡、SQL故障转移群集简单理解(转)

    双机热备.集群.负载均衡.SQL故障转移群集简单理解平常,大家常提到几个技术名词:双机热备.集群.负载均衡.SQL故障转移群集.这里,就我的理解,和大家简单探讨下,有不足或错误之处还请各位指出! 这些 ...

  4. 字符串匹配算法Java_如何简单理解字符串匹配算法?

    这篇文章来说说如何简单理解KMP,BM算法.之前看过一些文章说,KMP算法很难理解. 可我并不觉得. 我反而觉得它容易理解.平时我们写java代码的时候, 判断一个字符串是否存在包含另一个字符串都是直 ...

  5. python yield的简单理解

    2019独角兽企业重金招聘Python工程师标准>>> yield是个生成器,它可以使一个方法变成可迭代的方法,每次迭代返回yield后面的值 简单理解: >>>d ...

  6. linun——SElinux的简单理解

    SElinux简单理解 一.什么是SElinux? SELinux 全称 Security Enhanced Linux (安全强化 Linux),是 MAC (Mandatory Access Co ...

  7. git pull 是到工作区还是暂存区_每天一Git之简单理解工作区和暂存区

    每天一Git之简单理解工作区和暂存区 1. 工作区与暂存区命令初体验 1.1. 暂存区文件与文件夹管理 [root@number ~]# cd GitDir/git_learning/ [root@n ...

  8. c语言理解参数,c语言中对可变参数列表的简单理解

    函数原型中一般情况下参数的数目是固定的,但是如果想在不同的时候接收不定数目的参数时该怎么办呢?c语言提供了可变参数列表来实现. 可变参数列表是通过宏来实现的,这些宏定义在stdarg.h的头文件中.头 ...

  9. QGraphicsScene 的简单理解--关于手册的简要翻译

    文章目录 QGraphicsScene 的简单理解--关于手册的简要翻译 简介: 一般操作: 关于scene's bounding rect: the location of items. scene ...

  10. QTextStream 的简单理解

    文章目录 QTextStream 的简单理解 QTextStream类提供了使用QIODevice读写文本的基本功能. 还有一种通常的用法就是控制台命令的读写 除了QTextStream的构造函数,还 ...

最新文章

  1. JavaScript的语言组成
  2. java facets_Java UIComponent.getFacets方法代码示例
  3. python多线程之threading
  4. yii2.0 elasticsearch模糊查询
  5. 从产品经理到创业者如何拿到第一个1000万融资
  6. 【机器学习】三层神经网络
  7. Linux内核设计与实现---进程地址空间
  8. Intent.ACTION_PICK
  9. hadoop jps 没有命令_【问题解决方案】之 hadoop 用jps命令后缺少namenode的问题
  10. IOS图像拉伸解决方案
  11. Windows 8和CentOS 6.4(64)双系统硬盘安装教程
  12. 计算机二级vfp程序语言,2012年计算机二级VFP语言基础学习教程
  13. 传染病SIR模型及蒙特卡洛方法
  14. 目前降噪效果最好的耳机,十大降噪蓝牙耳机排名
  15. iOS 第三方库、插件、知名博客总结
  16. SEO新手入门必读,系统学习SEO知识理念
  17. 张德芬 如何自我成长
  18. The Untended Antiquity (二维树状数组 哈希)
  19. 基于cocos2d-x简易泡泡龙游戏二
  20. java学习笔记2(datawhale教程):运算符和表达式、流程控制、数组

热门文章

  1. 关于%@ include file= %与jsp:include page=/jsp:include中的那些问题?
  2. ThinkPHP项目笔记之RBAC(权限)补充篇
  3. 关于ABAP事件的一张图
  4. Win7服务器搭建实例教程:教你Win7如何搭建Web服务器【转载】
  5. XPath 元素及属性查找
  6. Windows和linux(ubuntu)互传文件简便快捷的方法
  7. oracle 给用户授权
  8. 一个好用的在线微信二维码设计网站
  9. mongodb的连接和开启安全验证
  10. Java中使用开源库JSoup解析HTML文件实例