关于熵(entropy)的简单理解

在机器学习领域有一种叫entropy目标函数,我们想通过调整参数(w,θ)去优化这种目标函数,以达到寻找到的含有某个参数(w,θ)的模型,最大程度上来表示我们想要描述的事件。

但是,对于没有接触过熵这种概念的同学,实在是很困惑,熵到底是什么?为什么熵能够代表对原信息的一种度量标准(criteria)?这种想法,也一直困扰着我,感觉"熵"这种高大上的东西,

感觉就像"量子物理"的"量子"概念一样,让人肃然起敬,但又捕捉不到,虚无缥缈,这真的存在吗?

直到有一天,我看到了PATTERN RECOGNITION AND MACHINE LEARNNING By BISHOP,里面的章节,才有那么一丝醍醐灌顶的感觉.我们从小最关注的就是"学识"二字,学,只是知识的积累,识,需要靠的是理解,而理解的最重要的方式与方法,当然是用一种最能贴近人生活的事物来阐述和关联知识点,这样形成的概念与意识才是相对来说比较稳固,才能非常自然地够达到创新的程度,也就达到了有"学识"的人,而不是死记硬背式的"知识添补机器".

今天,我就想结合BISHOP大师的方式与方法,来让大家能够自然而然地理解"熵"代表的含义,还有它所能代表的是什么.

首先,在进入"熵"这个话题之前,我会问这么一个问题:之前的那几段话,我提供给你的"信息量":到底有多少?也就是说,我之前说的话,对你来说,有多么重要,你能用几个词来表示我想表达的含义吗?其实,我自己试着用这么一句话来代表之前的信息:我只想让你知道熵是什么!仅此而已!    我ca,你或许会问?那你说那么多干嘛,这不明显在浪费我的时间吗?呵呵,说真的,我就是在浪费你时间

..是不是很surprise?是不是很激动,想拿一个棒子来锤我?不好意思,我已经脱离你们这帮世俗很久了,我已经皈依佛门,你们是找不到我地....言归正传,其实"熵"在一定程度上代表的就是对信息"degree of surprise"-----一种信息获取的惊讶程度,用一个数学等式来表示:

h(x)=entropy = degree of suiprise,                                                                                                                                                     (1)

更一般的,在信息论中我们都习惯地用h(x)来代表"熵",其中x代表一个变量,比如一个字,或者一段话,一个输入数据等等,反正就是数据,通常我们会假设数据是来自于某个分布(高斯,t,z.....)的一个随机数据.写到这,我不得不佩服香农大神,因为"熵"就出自于他的手笔,也是他首要地定义了并提出了"熵"的概念,就好像牛顿提出"万有引力"一样,发现了一个伟大的定理,但是在当时还是鲜有人知,这也注定奠定了香农大神在信息论中的绝对领导地位.

那么问题来了,光是只知道惊讶程度还不够,那是一种感性的认识,作为一种科学,那必然是需要一种用数学的方式(量化)来确切地表达这个概念.在用数学来表达这种概念之前,我们先对"熵"做一次全身体检,我们体检什么呢?就是要找到几种性质,然后呢,数学公式又能很好地满足我们找到的那几种性质,这样不就完美解决了"量化"问题吗?那么我就带领大家,进入这个神奇的量化过程吧............

首先,我们知道了,"熵"代表一种"惊讶程度",那么,我们试着这样想,我获得的惊讶程度越大,"熵"越大,这样好不好?当然你也可以反向定义:我获得信息越surprise,熵越小,后者的定义我们一般很少使用,直觉告诉我们,前者的这样表述更加自然,"熵"越大,我们获得的惊讶越大.

其次,"熵"值我们要大于零,为啥?惊讶不惊讶,你是否定个负值?首先我们知道数学上或者量化一个"变量",当这个"变量"存在有一种感情的倾向(通常具有褒贬概念)的时候,比如,我"讨厌"你,给你赋个负值(-1),要是我喜欢你,我就给你赋个正值(1111),这样我们能给"喜欢""讨厌"这样一对反义词分别赋,"正"和"负",这样也能很好理解对吧?但是对于"惊讶",我们有褒贬的意味吗?小学生都知道啊,比如说哇,今天下雪了,我感到很"惊讶",我可以给天打个"赞",如果今天天气也很"平常",你会感觉到"惊讶"吗?你都没感觉好不好,没感觉,你还无缘无辜给"天"打个××,打个"负"标签,你这不诚心跟"天"过意不去嘛,这样会被遭天谴地........所以,我们很自然地定义熵是一种大于等于"0"的函数.

最后,你是不是很自然想到,"熵"其实代表这一种不确定性,就想刚刚讲到的关于今天"天气"的"惊讶程度"一样,一旦"天气"出现了平时很难出现的"天气"(比如下雪,下冰雹,下"蛤蟆雨")的时候,才会感觉到很惊讶,你说对不对,这样很自然地与"概率论"中的概率联系在一起,我们观察一个event,当它的全概率(可以简单理解成发生的概率)很小的时候,却在你观察的时候发生了,那不是很惊讶吗?你说这自然不自然,我们是不是能用一种概率来表示这种熵呢?其实答案是很显然的,熵大多数是关于概率的函数,我们可以先假设熵可以表达如下的形式: 

h(x) = f(p(x))                                                                                                                          (2)

其中x是一个event,p(x)是这个x事件发生的概率,h(x)就是关于x概率分布的一个函数.现在我们接下来找找,熵具体张啥样子?我们要找到了,那我不也成了香农二世了?哈哈..

之前的量化过程,还只是找到一个熵的雏形,说明,我们还有一些特性还没有关注到,之前是只对当个变量进行的描述,我们换两个不相关事件,假设事件x与事件y,他们发生的概率

p(x,y)=p(x)*p(y).                                                                                                                    (3)

那么我们现在衡量这两个事件总共的信息熵h(x,y)是多少,我们是不是很自然地想到,这两种信息量由于不相关,他们的信息熵应该是两种事件信息熵的总和也就是

h(x,y) = h(x)+h(y)                                                                                                                  (4) 

首先我们对(3)公式做logarithm,也就是等式两边取个关于log的变换,那么(2)公式就会变成

log(p(x,y)) = log(p(x))+log(p(y))       (5)

你看看,(4)跟(5),长得像不像,这不很明显,h(x)与log(p(x))之前有着一种千丝万缕的关系嘛,感觉找到宝了,终点快要到来了,胜利的彼岸就在不远处,激不激动,我很激动,因为我找到了一条通向成功的路.那么我们把(2)公式转换成

h(x)=f(   log(  p(x)  )    ) (6)

因为我们知道p(x)在[0,1]之间取值,我们log一般习惯性地选择以2为底数的log值,这个跟计算机以二进制存储数据的特点有着天然的联系,所以,log(p(x))一般是小于0的,之前我们知道h(x)大于零,惊讶程度不能为负对吧,所以,我们很自然地把公式(6)改成

h(x) = f(  - ln(  p(x  )  ) (7)

之前的步骤,我相信很多人都能想到,那是因为这很自然,本来就是这样子对吧.那么,我们现在进入最后一个头脑大爆炸inference.也是最后得到熵的最终成就,

你们还记得开篇提到的那个问题吗?试问我那几段话的信息量有多大?我说了,那里一堆的废话,最终我尝试地用一句很简单的话来总结我说的话!这样的方式我们叫总结,也就是信息的凝聚,我们很多人其实更多地关注的部分是总结的内容,而不是那些废话,对吧.其实那一大堆话的熵h(一大堆话)与我简单介绍的话h(总结),这两者之间的信息熵是一样的,大家是不是很自然这么想呢?对了,用公式就是

h(一大堆废话) = h(几个简单的总结话)

所以我这里给两个事件,①一大堆的废话,里面包含很多文字的事件,②总结话语.且两个事件中的每个文字,我们看成是一个从说话人(也就是我啦)的中文文字表达习惯分布中抽取出来的文字的组合.这里有个关键点:

我们假设①的文字变量为x1,x2,..xn,有n个文字,每个文字我们用p(xi) i =1..n 来表示出现的概率,那么h(①) = -f(ln(x1,x2,x3,x4...xn))

同理我们假设②的文字变量y1,y2,ym 有m个文字,且m<<n(m数字远小于n文字),文字②的熵用h(②)=-f(ln(y1,y2,..ym)

而且我们通过②文字中的变量观察可以发现,y1,y2,..ym均在①文字变量中出现,对吧,比如"熵"我在ym中,同时肯定也在①中,那么我们最终要确保

h(①) = h(②),你觉得如果我们把h(x)简单定义为 h(x) = -ln( p(x) )这样的方式是否能使h(①) = h(②)等式成立,,细心的读者发现等式显然是不成立的对吧,而且h(②)<h(①)

那么我们直接定义熵  h(x) = -ln( p(x) ) 是不适合的.

那么问题来了,使得h(①) = h(②)成立,这个意味着什么?我们学过统计学的同学都知道统计指标的含义吧,比如均值\期望\方差,等等概念是对变量的平均.那么对于接受者来说①和②所代表的信息量是一样的,那么我们就很容易想到为啥我们不也像设计统计指标一样来定义熵的,这个想法在香农信息伦中,简单阐述为

the entropy can measure an average amount of information.

也就是H(x) = p(x1)ln(x1) + p(x2)ln(x2).....,这就是平均信息熵的概念.

这样我们很容易就能得到 h(①) = h(②),

熵就是惊讶程度,熵越大越惊讶,熵越小越确定所以我就不惊讶了............熵还有熵增技术,那么我们是否很容易就想到,熵增就是惊讶增长的程度呢?

希望这篇文章对你有所帮助,也希望大家踊跃参与,我也是一个初识庐山真面目的茫茫沧海一粟.

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏james大数据架构

C#日期格式转换

DateTime dt = DateTime.Now; // Label1.Text = dt.ToString();//2005-11-5 13:21:25 ...

1995
来自专栏用户画像

SQL Server 数据库连接类

1014
来自专栏海说

Java应用中常见的JDBC连接字符串(SQLite、MySQL、Oracle、Sybase、SQLServer、DB2)

Java应用中常见的JDBC连接字符串 Java应用中连接数据库是不可或缺的,于是便整理一些可能用到的JDBC的jar包及其相匹配的URL,以备日后查阅。 1)...

2940
来自专栏积累沉淀

Hive2.0.0操作HBase 1.2.1报错解决

首先看错  org.apache.hive.service.cli.HiveSQLException: Failed to open new session: ...

2549
来自专栏跟着阿笨一起玩NET

GB2312转换成UTF-8与utf_8转换成GB2312

2251
来自专栏吴伟祥

Java Calendar 类的时间操作 原

Calendar 的 month 从 0 开始,也就是全年 12 个月由 0 ~ 11 进行表示。

863
来自专栏听雨堂

想修改CSS

      下载了一个“通用”的CSS文件,本来想偷懒的,结果发现有问题,就是它用的颜色是变量定义的,无法识别。我又找不到在哪里可以定义。 BODY{     ...

22010
来自专栏张善友的专栏

Using sqlite with .NET

The other day I found that there is a .NET wrapper for sqlite. sqlite is a very ...

2488
来自专栏c#开发者

C# : row-clickable GridView and get and set gridview rows using JavaScript

Complete C# code: ---------------- using System; using System.ComponentModel; ...

3136
来自专栏码匠的流水账

聊聊EurekaRibbonClientConfiguration

spring-cloud-netflix-eureka-client-2.0.0.RELEASE-sources.jar!/org/springframewor...

1411

扫码关注云+社区