看图理解信息理论中的“熵”、“交叉熵”等概念



正文:

作者在首段简要描述了一下信息理论(Information Theory):他认为信息理论给人一种全新的思路去理解这个世界。它给一些含糊不清的想法塑造了具体的概念。借助信息理论,我们可以用精确的语言描述很多事物,比如对于一件事情我们有多少的不确定性。 信息理论的很多基础概念有非常广泛的应用,从数据压缩,量子物理,到机器学习等众多领域都有涉及到信息理论的知识。遗憾的是,信息理论的很多生硬的概念读起来都有点“吓人”,因此作者将在下文中提供几个信息理论中核心概念的可视化解释。

可视化概率分布

以作者所在的加利福尼亚州是否下雨为例子。它晴天的概率是75%,如下图表示:

image

另一方面,作者是否穿外套构成了另一个概率分布,假设他大部分时候(62%)都穿T恤,如下图:
image

现在假设这两个事件是相互独立的(作者举的例子是“今天穿什么”和“下周什么天气”是相互独立的)。换句话说就是,下周不管是什么天气都不会影响到作者今天是否穿外套,反之亦然。我们可以用一个二维的图表示这两件事:
image

上图中的水平和竖直的线都是笔直的,这就意味这两个事件相互独立。作者今天穿外套的概率不会因为下周是否下雨而改变。也就是说,作者今天穿外套并且下周下雨的概率是作者穿外套的概率乘以下周下雨的概率。这两件事互不相干。
另一方面,当两个事件会相互影响的情况下,某几对情况出现的概率会增加,有一些则会减小。比如“今天下雨”和“作者今天外套”这两件事不是相互独立的,因为下雨天更倾向于穿外套,所以这两个事件同时发生的概率并不是今天下雨的概率和作者穿外套的概率相乘这么简单。在这种情况下这两个事件的概率发布可粗略的用下图表示:
image

虽然上图看起来比较酷,但是它并不能帮助我们理解这个例子。所以让我们先专注于一个随机变量(事件),今天的天气。对于这一件事情,我们能通过天气预报知道作者所在地今天下雨和不下雨的概率,而在这两种情况下他的穿衣概率是不一样的。在这种情况下作者的穿衣概率我们称之为条件概率:
image

这里作者假设他那里下雨的概率是25%。在下雨的情况下,他穿外套的概率是75%。所以他在下雨天穿外套的概率是25\% \times 75\% \approx 19 \%. 用抽象的公式表示这种情况就是:
p(rain,coat)=p(rain)\cdot p(coat|rain)
再抽象出来就是概率论中至关重要的概念之一:
p(x,y)=p(x)\cdot p(y|x)
上面描述的过程就是拆解这个联合分布,把它拆解成两部分的乘机。首先只关注一个事件的概率发布,比如天气,然后对于该事件的每一种可能情况分别考虑另一个事件的概率分布,比如在下雨天和晴天分别考虑穿衣服的概率发布。
从哪个事件开始考虑是无关紧要的(上面我们是从天气开始推),我们也可以从穿衣概率开始推,尽管人们的穿衣情况并不能左右天气,但是它依旧能反映出当下的天气情况,比如街上大部分人都穿着雨衣外套那么今天外面很可能是在下雨。
接下来我们就从作者的穿衣情况开始思考,得出不同穿衣情况下的天气概率,然后像上面一样得出联合概率。作者提出他自己在不知道天气如何的情况下有38%的概率会选择穿外套出门。那么如果我们已知作者今天穿了外套出门,那今天外面下雨的可能性有多大呢?虽然作者在雨天更倾向于穿外套,但是考虑到加利福尼亚地区很少下雨,所以即使作者今天穿了外套出门,根据以往的经验,外面下雨的概率只有50%。得到了上述信息之后我们就可以算出作者穿外套出门并且外面在下雨的概率,就是他不知道天气如何的情况下随机选择穿外套的概率(38%)乘以他以前的日子里穿外套的情况下外面在下雨的概率(50%),大约是19%。
p(rain,coat) = p(coat)\cdot p(rain|coat)
这就是从另一个角度思考同一个概率分布:
image

作者这里也提到了贝叶斯定理。如果读者熟悉贝叶斯定理的话不难发现,前文两种描述同一个联合概率分布的不同方法可以用贝叶斯定理相互转换。

相关:辛普森悖论

为了让读者对这种概率分布的可视化方法更加熟悉,作者想用这种可视化方法来解释辛普森悖论。辛普森悖论是个有点违反直觉的统计现象。作者提到了Michael Nielsen写过一篇不错的论文用各种不同方法来解释这一现象。而他想用上文提出的概率分布可视化方法来解释这种现象。
现在有两种肾结石的治疗方法待测试。让一半的患者接受疗法A,另一半患者接受疗法B。结果显示,接受B疗法的患者治愈率比接受A疗法的患者高:

image

然而,患有小型结石的病人中接受疗法A的病人治愈率比接受疗法B的病人高,患有大型结石的病人中也是接受疗法A的病人治愈率比较高。
所以事实上疗法A的效果要比疗法B的效果好,但是为什么总体上接受疗法A的病人比接受疗法B的病人治愈率低呢?这个问题的核心就在于一开始选择测试患者的时候出现了偏差。接受疗法A的那一半病人中,患有大结石的病人占绝大多数,而接受疗法B的那一半病人中患有小结石的人比较多。大结石本就比小结石难治愈,所以纵使疗法A对于大小结石的疗效都比疗法B要好一点,也抵销不掉大结石病人太多对它造成的不良影响。用上面作者提出的可视化方法表示如下:
image

为了更好的理解上述情况,我们可以在上图上再添加治愈率使之成为一个三维柱状图:
image

从上图我们能清楚的看到疗法A不管在小结石和大结石的患者中的治愈率都比疗法B要高,但是因为接受疗法A的患者大部分是大结石患者,本身治愈难度就比小结石患者大,因此看上去总体的治愈率比不上疗法B。

编码

熟悉这种概率表现方法之后,我们就可以开始深入了解信息理论了。

作者这里提出了一个简易的模拟情景:他想要用二进制编码和他的一个朋友(Bob)交流暗号(每个位置不是0就是1)。二进制编码后的消息如下图所示:
image

暗号内容简化为4个单词:dog、cat、fish、bird。为了能够使他们用二进制正常交流,他们俩必须约定一套编码规则,就是让这四个暗号分别和不同的二进制编码对应。
image

为了发送消息,他们需要先把文字暗号转化为对应的号码然后将各个号码拼成一串二进制编码发送出去。接受消息的一方接受到二进制编码的消息后需要有一个解码过程来得到对方想表达的暗号。


image

可变长度编码

现在作者他们俩遇到了一个问题,Bob所在的地区信息的传输非常昂贵,二进制编码中每传输一位(bit)的单价都很高。所以他们想换一种编码方式,使他们的暗号的平均编码长度最低。
在直观感觉上他们只需要将平时用的最多的暗号的编码长度变短就能降低他们的平均编码长度,于是Bob专门跑到了加利福尼亚找作者讨论他们平时用哪个暗号最多。我们先只讨论单方向的信息传输,后面再讨论两个人信息的互相传输的情况。先只考虑Bob发送暗号给作者的情况。于是Bob说他平时用“dog”这暗号最多,然后是“cat”,其它两个暗号用的相对较少,具体的概率分布想这样:


image

上面提到的那种编码方法(所有暗号都用两位二进制编码),不管这四个暗号的使用概率如何分布,平均编码长度都是2。如下图这种表示方法可以很好的表示出平均编码长度。我们用垂直方向的高度表示该单词的使用概率,p(x) ,用水平方向的长度表示该单词的编码长度,L(x)。在这种定义下,它们组成的面积就表示这种编码方式的平均长度。

image

当我们去尝试缩短一个单词的编码长度的时候,我们会发现我们不得不使另一些单词的编码长度增大(在接下来的章节中会解释原因)。这使得我们必须有所取舍,就像前面提到的,我们直观上会感觉应该先把最常用到的单词的编码长度变短,这样即使我们不常用的单词的编码长度边长了,但是因为这些单词的使用频率很低,所以对平均长度的影响也没有常用单词那么大。下面我们来看一下下面这种编码方式:


image

让我们用上面那种表示方法来表示这种编码方式。我们可以看到缩短“dog”的编码长度之后,即使“fish”和“bird”的编码长度都变长了,我们的平均编码长度(下图的总面积)还是减小了,缩小到了1.75.


image

(你可能注意到了,上诉的编码方式有个特点就是除了编码最长的单词,别的单词都只能以0结尾,这是为了防止解码时不产生歧义,这会在后面详细解释。)
上述这种新的编码方式其实是在Bob使用单词的概率分布下最优的编码方式了。也就是说已经找不到更好的编码的方式可以使各个暗号的平均编码长度小于1.75的。不管找一个多聪明的人,他都不可能想出一个平均编码长度更短的编码方式。这种在编码中无法超越的下限就是我们常提到的“熵”,entropy。更确切的说是对应于这种概率分布的熵。


image

理解这种限制(熵)的关键就是要能理解这种权衡关系,让一些词的编码变短的代价是让另一些词的编码变长。

编码空间

长度为1的编码可以最多表示2个单词:0,1。长度为2的编码可以最多表示4个单词,00,01,10,11。每增加一位,我们可编码的单词数就增加一倍。


image

我们已经讨论过等长的编码方式(用两位编码4个单词或者用三位编码8个单词,以此类推),这种等长的编码方式的平均长度是不会变得。接下来我们详细讨论一下不等长的编码方式(就像上节中提到的平均编码长度为1.75的那种编码方式)。回忆一下Bob给作者发消息时的编码过程,先找到每个单词对应的编码,然后将这些01编码拼接在一起。


image

当作者接收到Bob发给他的二进制文本后('0100111'),需要对这串数字进行解码。当各个单词编码长度一致时,解码就很简单,只要按照固定长度截断。但是当各个单词的编码长度不一致的时候,解码过程就没有这么简单了,感兴趣的读者可以自己定义一版编码方式然后让另一个人写个信息给你然后自己解码试试。这样尝试过之后就会发现,我们需要一种只有唯一解码结果的编码方式。举个栗子,如果我们定义一个词的编码为‘0’并有另外两个词的编码为‘01’和‘10’,当我们遇到对方发送过来的代码为‘010011’时就不能确定他想表达的第一个词是‘0’还是‘01’。把这个问题再抽象出来,就是我们需要一种编码方式,当我们看到一段特定的代码时,比如‘0’或者‘10’,不存在以他们为前缀的另一个词对应的代码,如‘101’。我们称它为前缀性质,遵循这种性质的编码方式我们称之为前缀编码。
作者这里提到了一种理解前缀编码的好办法:我们每确定一个代码都意味着牺牲掉了编码空间中的一部分。如果我采用了“01”这个代码,我就不能为采用以“01”为前缀的代码了,比如“010”和“011010110”。


image

从上图可以看出,有 \frac{1}{4} 的(长度大于2的)代码是以“01”开头的, 这意味着如果我们选取“01”作为我们一个单词的编码则失去了所有编码可能中的\frac{1}{4}编码(所有已“01”开头的编码)。我们可以把这种“牺牲”看作是选用一个长度仅为2的编码的代价。我们选了一个长度越短的编码(我们总是希望暗号的总编码长度越短越好),付出的代价就越大(需要抛弃的越多)。这是一个取舍问题(trade off),短的编码会“牺牲”掉编码空间中很多的编码可能使得我们在剩余的编码工作中不得不使用更长的编码,然而我们又想尽可能多的采用短编码。所以我们需要做的就是在这个取舍问题中找到一种利益最大化的解法。

最优编码

选用长度为1的编码(假设“0”)的代价为 \frac{1}{2} ,因为有一半的编码是以“0”开头的,如果我们选取了“0”作为一个暗号的编码,就意味着我们不能再选取这一半以“0”开头的编码中的任何一个。以此类推,长度为2的编码(假设“01”)的代价为 \frac{1}{4} ,因为有四分之一的编码是以“01”开头的。规律是,代价随着编码的长度成指数级递减趋势。

  • 注意:作者在这里提到,如果这个代价函数中分母的底为自然底数(\frac{1}{e^{L(x)}})则上图右边阴影部分的高度和面积在数值上相等,都可以用来表示代价的多少。然而这个性质在底数为2的上述公式中是不成立的。但是作者为了避免使用大量的公式进行证明,提高可视化效果,读者们可以认为我们这个cost函数也有类似性质

 
回到我们最初的目的,尽可能降低作者与他朋友Bob交流所需的数据量。把这个问题抽象出来就是:最小化他们通信所需要的平均编码长度。单个暗号( x )的编码长度的平均编码长度可以通过它被使用的概率( p(x) )乘以它的编码长度( L(x) )获得。举个例子,假设一个暗号(比如“dog”)对应的编码长度为4(比如“1100”),并且这个暗号的使用的概率是50%(意思是他们交流的100个暗号里面会大概出现50个“dog”),则暗号“dog”的平均编码长度为2。将所有会用的暗号的平均编码长度相加就是我们这套编码方式的平均编码长度。

image

因此我们看到,代价( cost=\sum \frac{1}{2^{L(x)}} )和平均编码长度( \sum (p(x)\times L(x)) )都和编码的长度( L(x) )有关:我们所需要付出的代价(cost)取决于各个编码的长度,另一方面各个编码的长度也决定了它们分别会提高多少的平均编码长度。结合上面两个图示,我们可以看到下图,

[图片上传失败...(image-198b01-1615883309965)]

从上图我们可以形象的看到:短的编码( L(x)小 )可以减小平均编码长度(长方形面积)但是需要付出更多代价(右边不规则图形面积/或者高度)。

image

理清楚利害关系之后就是怎么权衡的问题。很容易想到的一个想法是,我们希望常用到的暗号使用短的编码而不常用的暗号给他们分配剩余可选的稍长的编码。接下来的问题就是常用的暗号应该短到什么程度,从另一个角度思考就是我们愿意花费编码空间中的多少比例来使得常用的暗号编码尽可能短。这里没有接触到过类似问题的读者可以自己思考一个策略试试看,然后继续往后阅读。这其实需要取决于常用的暗号有多常用,即它们被使用到的具体概率。我们可以吧整个编码空间看作是我们可以使用的所有预算,问题就变成了:我们如何使用这笔预算使得平均编码长度最小化。一个自然而然的想法是:如果一个暗号经常被使用,假设概率为80,我们就愿意花80%的预算在它身上;如果一个暗号很少被用到(1%),那我们只愿意花1%的预算给它。

这看上去是一个很随意的很自然的想法,但其实它就是我们要找的最优分配方法。下面我们来证明这个想法的最优性。

  • 原文作者提醒:下面的证明过程是本博客中最难的一部分,读者如果觉得理解困难,可以放心跳过这个证明过程,把上述方法当做一个给定的性质来理解。

 
举一个只有两个暗号的例子,单词 a 和单词 b。单词 a 使用的概率是 p(a),单词 b 相应的概率为 p(b)。 我们用上述“随意的”想法来分配我们的预算,花费 p(a) 的预算给单词 a, 留 p(b) 的预算给单词 b

image

接下来思考如果我们稍微改变上述两种编码长度会发生什么(长度体现在上图中矩形的水平方向长度)。如果我们稍微加长一个编码(a或b)的长度,这个编码的平均长度的增长与它的使用概率(上图中矩形的高)成正比,同样的,它的花费的减小量也与它的使用概率(上图中的矩形的高)成正比。反之亦然。 理解这句话对于后面的内容非常关键,我本人是用面积的导数来理解的。

image

因此,我们可以理解将单词 a 的编码长度稍微缩短所需要多付出的代价为 \lambda p(a),而且我们获得的收益(省下的平均编码长度)也是 \lambda p(a)。这里 \lambda 与具体缩短的长度有关。如果以单词 b 为讨论对象也能得到一样的结果。

所以我们看到了一个有趣的现象:在上述的分配状态下,稍微调整两个编码的收益/花费比率都为1( \frac{p(a)}{p(b)}=\frac{p(b)}{p(b)}=1 )。这与他们具体被用到的概率( p(x) )无关,只要根据 Cost=p(x) 来分配预算就有这种性质。

image

从这个相等的收益/花费比率已经可以看出,我们已经不需要再对这种“投资”方案作出调整。但这还不够证明这种方案就是最优的分配预算的方案。我们还需要证明别的方案都没有这种方案合理。所以我们假设在单词 b 上的投资预算减少 \epsilon,将这部分省下的预算投资给 a。这就意味着单词 a 的编码可以更短,但单词 b 的编码需要加长。

我们再用相同的思路来计算这种情况下的收益/花费比率。这个时候稍微缩短单词 a 的编码长度所需多付出的代价为 p(a)+\epsilon(方便起见忽律 \lambda),相应的稍微缩短单词 b 的编码长度所需要多付出的代价为 p(b)-\epsilon。收益都不变,见下图,依旧可以用面积的导数来理解。因此这导致了给单词 a 增加预算的收益/花费比率为 \frac{p(a)}{p(a)+\epsilon},而增加单词 b 的“投资”的收益/花费比率为 \frac{p(b)}{p(b)-\epsilon}

image

我们可以看到这种情况下给单词 b 增加预算的收益/花费比率大于1,而单词 a 的小于1。所以我们自然而然的会去调整预算,多分配一点预算给单词 b,结构就是我们又回到了 Cost=P(x) 的状态。(虽然我们这里只讨论了两个编码的情况,其实很容易用这种思想去理解需要编码的对象更多的情况)

  • 原文作者注:细心的读者可能已经注意到了我们这种最优预算方法很可能会得出非整数的编码长度。这看起来确实不够严谨。虽然,在实际使用中,如果我们是想用编码的方式去交流确实需要对长度进行取整。但就像本文后面会讲到的,有一个真实场景确实有可能在我们一次性发送很多编码的时候我们会有小数型长度的单个编码

 

回忆一下上文中提到的代价和编码长度的关系,cost=\frac{1}{2^L}。所以也可以通过给定的代价算出这个代价对应的编码长度, L=\log_{2}(\frac{1}{cost})。再注意到我们上文中证明的最优分配方法是 cost=p(x),所以对应的每个编码的长度就可以根据他们被使用的概率推算出来,L=\log_2(\frac{1}{p(x)})。这样推算出的编码长度就是最优分配。

image

更早的,我们已经在可变长度编码一节提到过熵(entropy)的概念。这一节我们就系统的讨论这个概念。一般的,对于一批具有具体概率分布(p)的事件来说(事件就是前文例子中我们需要编码的单词),用来编码这些事件的平均编码长度是有一个下限的,就是所谓的最短平均编码长度,不存在比这个最短长度还短的编码方案。这个对应于概率分布 p 的最短平均编码长度,我们称之为对应于概率分布 p 的熵,记作 H(p)。根据上图我们可以轻松的写出 H(p) 的计算方法,就是上图中各矩阵的面积和。

\begin{split} H(p) &= \sum_{x}p(x)\log_2(\frac{1}{p(x)}) \\ &= -\sum_{x}p(x)\log_2(p(x)) \end{split}

我们已经了解到熵可以用来估计人们交流通信时需要用到的最小平均信息量。但是我们知道这个指标有什么用呢?一个很直观的用途就是作为数据压缩的指标。而作者这里提出了一个想法:熵可以用来描述我们的不确定性,用来量化信息。

解释一下。如果作者完全知道并确定Bob每天哪个时刻会给他发什么暗号,那Bob就不需要发任何message给作者了。如果Bob只可能给作者发两个暗号,每个暗号被使用的概率都是50%,他们就只需要用到1位编码,“0”或者“1”。如果Bob会给作者发送64个暗号中的一个,每个暗号被选到的概率相等,则他们至少需要平均长度6位的编码方案。总之,概率分布越集中,就越容易制定出平均编码长度短的编码方案;反之概率越发散,需要用到的编码长度就越长。

反应在我们的日常生活中的现象就是:事件结果的不确定性越高,则我们理清事件发生的起因经过结果所需要学习的东西就越多。

交叉熵

前面提到作者和Bob的例子里面我们只需要考虑了单向发送信息,只考虑在一种概率分布下的信息熵。就是说,这个例子中用到的都只是Bob使用各个暗号的概率分布,然后以这个概率分布来算信息熵。但作者使用各个暗号的偏好大概率与Bob的使用偏好不完全一致,Bob比较喜欢用“dog”这个暗号而作者可能更容易用到”cat“,因此作者应该也有一套对应于自己使用偏好概率分布的最短编码策略。他们俩各自使用各自的最优编码方式能达到对应于他们各自概率分布的熵值(最短)编码,但如果他们使用对方的最优编码方式会发生什么?这其实就是交叉熵的概念。

image

以上述图中的概率分布为例,左边为Bob的单词使用概率分布,右边为作者的。上文中我们已经计算出Bob使用最优编码方式可以达到1.75位的平均编码长度,但是作者使用Bob的编码方式算出的平均编码长度为2.25,高于作者的单词概率分布的信息熵1.75。若两者的概率分布差异更大,作者使用Bob的比编码方式对应的平均编码长度会更长。我们用一种事件的概率分布所得出的最优编码方式给另一种事件进行编码所得到的平均编码长度称为交叉熵

H_p(q)=\sum_xq(x)\log_2\left(\frac{1}{p(x)}\right)

上述公式表示的是作者(p)对于 Bob (q)的交叉熵。

image

所以现在,有两个概率分布(作者和Bob)分别对应了两种最优编码。一共4种组合:

  • Bob用自己的最优编码方式:H(p)=1.75\ bit
  • 作者用Bob的最优编码方式:H_p(q)=2.25\ bit
  • 作者使用自己的最优编码方式:H(q)=1.75\ bit
  • Bob使用作者的最优编码方式:H_q(p)=2.375\ bit

上述结果表明 H_p(q) \lt H_q(p), 这意味着两个人的最优编码方式混用导致的结果并不一致。在下图中作者用可视化的方式解释了这种差异。这四幅图就是将上述四种情况用“可变长度编码”一节中的可视化方法表示出来。

image

通过上图就能很直观的感受到为什么 H_p(q) \ne H_Q(p):有一个在 p (Bob)概率很高的事件(单词)在 q 中概率很低,因此概率分布 q 对应的最优编码对于这个单词的编码很长,因此将 q 对应的最佳编码应用于 p就意味着用最长的代码来编码最常用的单词,可想而知结果会非常糟糕。反过来,以为 q 中最常见的时间并不是 p 中最不常见的时间,因此用 p 对应的最优编码来编码 q 的单词虽然不能得到最短编码长度,也比前者的平均编码长度短。

交叉熵是非对称的!

因此,我们可以用交叉熵来定量的表达这种概率分布之间的差别。概率分布 pq 之间的差别越大,则 p 对应于 q 的交叉熵高出 p 自身的信息熵的部分也越多。

image

类似的,概率分布 p 偏离 q 越大, 则 q 相对于 p 的交叉熵高出 q 自身的信息熵的部分也越多。

image

值得关注的地方是信息熵和交叉熵之间的差值。这个差值的大小对应于我们需要为使用其它概率分布的最优编码方式增加多少的平均编码长度。如果两种概率分布一致或差别不大,则混用最优编码方式对平均编码长度的影响就很小。反之如果概率分布差异越大,则影响也越大。
这种信息熵和交叉熵之间的差值称之为 the Kullback-Leibler divergence (KL 散度)。就像上面两幅图所示, p 相对于 q 的 KL 散度记为 D_q(p):

D_q(p)=H_q(p)-H(p)

我们可以把 KL 散度理解为两个概率分布之间的距离。它衡量了两个分布的差异有多大。

交叉熵和 KL 散度在机器学习里面非常常用。因为我们经常希望我们预测的概率分布越来越接近真实分布。

熵和多个变量

回到本文最早的天气和穿衣的例子:

image

现在的场景是,作者想要告诉 Bob 他所在地当天的天气和他穿什么衣服。那么作者需要多少位来编码这4个事件?

这时最容易想到的方法便是像上文中编码单词类似,将这4种事件看作是独立的事件:

image

然后我们可以得到这个概率分布对应的最优编码方式并计算出平均编码长度 (L=-\log_2 p(x)):

image

我们称这为 XY 的联合熵:

H(X,Y)=\sum_{x,y}p(x,y)\log_2\left( \frac{1}{p(x,y)} \right)

目前为止看上去好像和我们上面对普通熵的定义类似,只是这里是连个变量。

可能有人会觉得把上面正方形表示的概率分布强行躺平来分析有点变扭,这是为了把熵值表示成二维图标上是柱状图。但其实有一个更好的可视化方法,就是保持方形的概率分布不变,然后用三维图标中的高度来表示编码长度,如下图。用这种方式表示的熵值就变成了柱体的体积,对应于原来二维图标中矩形的面积。

image

现在假设 Bob 能在天气预报上得知作者所在地的天气情况。在这种情况下,作者又需要发送多少的长度的信息?

假设某一天确定是晴天,则作者需要发送的信息就只包含两个变量(穿T恤还是外套),而且这两个变量在下雨天和晴天的概率分布是不同的。所以作者可以根据不同的天气制定不同的最优编码来达到最短的编码长度。

image

要获得这种编码方式的平均编码长度,就只要将这两种情况按比例混合。

image

我们称这位条件熵。如果用公式表示就是:

\begin{split} H(X|Y) &= \sum_{y}p(y)\sum_{x}p(x|y)\log_2\left( \frac{1}{p(x|y)} \right) \\ &=\sum_{x,y}p(x,y)\log_2\left( \frac{1}{p(x|y)} \right) \end{split}

互信息

上节中的例子可以看出,当两类变量相互有关联,当我们能确定其中某一个变量后,编码另一个变量的信息量也随之减小了。

一种比较好的理解方法是,如下图,将我们需要编码的信息想象成一个纸条。如果两个变量相互有关联就是两个变量对应的纸条有重叠。举个例子,两个随机变量 XY 是相互关联,互相影响的,类似天气和穿衣,则他们的关系就像下图。

image

有这种思想就很好理解为什么我们同时编码两个随机变量需要的编码长度(联合熵)比编码单个变量的平均编码长度(普通熵)要大。而且其中一个变量确定的情况下编码另一个变量需要的平均长度(条件熵)比普通熵要小,如下图。

image

上述关系乍看一眼好像有点复杂,但是结合上面“纸条”的思想就很好理解了。联合熵要比普通熵大应该和好理解,因为普通熵是单个变量的信息量而联合熵是结合了两个变量的信息量,虽然两个变量的信息有重叠,但是两个的总和还是比单个变量的信息量要大,体现在“纸条”表示方法上就是 H(X,Y) 的纸条比单个的 H(X)H(Y) 都要长。如果其中一个变量已经确定,假设 Y 确定(可以理解为天气能确定),则意味这 XY 变量重叠的那部分信息也已经确定,因此我们只需要编码变量 X 中非重叠部分,即 H(X|Y)

image

另外一个从上图中可以看出来的隐藏关系是 H(X,Y)=H(Y)+H(X|Y)。 这个公式的含义是,XY 的联合信息量等于 Y 的信息量加上 X 的信息量中不与 Y 重叠的那部分。

image

这些性质如果单纯用数学公式证明的话相当复杂而且不能给人直观的信息量感受,但是本文的作者用简单的几个例子辅以几幅可视化的图标就把这些知识讲的明明白白。

所谓的互信息(Mutual Information)就是那部分重叠,或者说共享的信息,记作 I(X,Y),定义为:

I(X,Y)=H(X)+H(Y)-H(X,Y)

这个式子结合上面的“纸条”图应该很好理解。

另外一个和互信息相关的概念是 the variation of information (找不到合适的翻译,自己意会一下吧...),它指的是两个变量不重叠的部分,即:

V(X,Y)=H(X,Y)-I(X,Y)

细心的读者可能已经发现了,这个 variatin of information 反应了两个变量的关联程度,如果两个随机变量是完全相互关联的,即如果下雨天就一定要穿外套晴天只会穿T恤,则 V(X,Y) 的信息量为 0。反之,如果两个变量毫无关联,读者朋友可以尝试自己推理 V(X,Y) 有哪些性质。

细心的读者可能又发现了,这个 variation of information 好像和 KL 散度有点类似,都是用来描述不同概率分布之间的关系/距离。其中 KL 散度是对于同一个随机变量来说,两个不同概率分布之间的差异,而 variation of information 则是用来描述两个不同变量之间的相关度,即信息的不重叠程度。如果通用一个随机变量可以完全推断出另一个变量,则可以理解为这两个变量完全相关,他们的信息不重叠程度为 0

image

非整数位

最后一节作者提到了算出来的最优编码长度是小数的情况。因为我们用公式:L=-\log_2p(x) 来计算各个事件/单词的最优编码长度,因此大部分情况下我们得到的是小数结果,不如0.5,1.7这种长度,然而有计算机理论基础的同学应该知道,计算机中的bit是最小单位,每一位非0即1,没有小数位一说。

作者对于信息理论计算出的小数bit的解释是,只要我们一起编码的事件/单词/字母很多,我们对这些小数取整之后产生的偏差就会微乎其微,所以算出来的小数是合理的,无伤大雅。我本人感觉理解起来有点困难(所以我这里就不详细翻译了,感兴趣的读者可以开最上方原文链接查看原文最后一节 “fractional bits”),所以我自己的理解是信息理论为我们提供了一个下届,而我们由于技术原因无法达到这个下届所以我们用取整的方式力所能及的来达到这种下届,即理想情况。

作者还提到在实际应用中人们会常用一些实用的编码算法,例如哈夫曼编码,算术编码等,能很好的解决小数bit问题,能够得到我们当前计算机技术下能得到的最优编码。

结论

如果我们关注的是交流所需的最短编码,本博客所描述的这些概念和思路现然是最基本的。如果我们关心的是数据的压缩,这些信息理论解决了其中的核心问题并给我们提供了基本准确的抽象概念。但是如果我们这些都不关心,他们还能是什么?

这些信息理论中的想法其实已经被用到很多别的领域中:机器学习、量子物理、遗传学、热力学、甚至是赌博。在这些领域中的实践者一般不会很关心什么是信息理论,他们只会汲取他们所需要的一部分知识,有些人甚至不知道他们正在应用信息理论中的知识。量子纠缠可以用熵的概念来描述;统计学和热力学中的很多结论可以在假设熵值最大的条件下推导出来;一场赌博中的赢家和输家都与 KL 散度有很直接的关系。

信息理论出现在上述的这些地方是因为它为我们需要表达的很多抽象的概念提供了一种具体的,规则明确的形式化表达方式。它给我们提供了一些测量和表达“非确定性”的方式,告诉我们一个问题的答案对于另一个相关的问题意味着什么。

作者是从事机器学习研究的学者,所以她举了机器学习里面的一个例子。分类问题是机器学习中很常见的一种任务。现在我们需要完成一个机器学习程序来识别猫或者狗的照片。对于一张狗的照片,一个经过初步训练的模型可能得出这样的结论,“这张照片有80%的概率是狗,有20%的概率是猫”。那么,基于这个预测结果,我们想评价这个模型到底有多好或者多差,这时候就可以用信息理论中的概念来定量的描述。定量的衡量一个模型的好坏对于机器学习来说非常重要,有了这个标准程序才知道应该怎么优化它自己,并在下一次预测时得到更好的结果。

总的来说,信息理论提供了一个新的框架来理解这个世界。这篇博客仅仅只是描述了信息理论比较核心的一些理论,有很多信息理论中有名的知识并没有涉及,作者希望通过这篇博客让大家了解到信息理论有用和有趣之处。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272

推荐阅读更多精彩内容