可视化信息理论(Visual Information Theory) (下)

Calculating Entropy

计算熵
知道一个长度为L的密文,他的代价就是 12L 。再做一个简单的变换后,一个代价为cost的密文,它的长度就是: log2(1cost)
前面的文章说过,在事件出现的概率和代价相同时,那么平均信息长度会是最短的,即最佳的编码方法。用这种最佳方法得到的平均长度成为信息的熵(H(p)),现在知道密文的最佳长度就可以算出信息的熵:

H(p)=xp(x)log2(1p(x))

(一般情况下,人们都会把上面这个式子写成 H(p)=p(x)log2(p(x)) ,用第一种表现方式更容易理解这个公式的由来)
无论怎么做,在随机发送信息的时候,信息平均长度最少都是这个值。这个需要发送的信息的平均长度对信息的压缩有明显的影响,这个熵还有其它方面的意义吗?当然!它描述了随机性,并且提供了一种量化信息的方式。
如果我知道将要发送什么事情,我就不必发送信息。如果有两种事情可能发生,我只用发送1bit。如果有64件不同的事情发生,就需要6bits。发生的概率越集中在某一件事上,就越能用巧妙的编码方式来减少信息的平均长度。发生的概率越分散到不同事情上,我需要发送的信息平均长度就越长。结果越不明确,在发生事情时就能学到越多的东西。

Cross-Entropy

交叉熵
在Bob前不久搬家去澳大利亚,Bob娶了Alice(当然这是继续编故事)。但是不同的是Alice不太喜欢狗,更多的信号猫。虽然是这样,他们两人还是可以在动物爱好方面共同交流。




他们两人还是说相同的单词,但是对于不同的单词,都有他们自己不同的出现频率。Alice说猫比较多,Bob说狗比较多。
首先,Alice用Bob的编码方式给我发送信息,不幸的是,她的消息比实际需要的信息要长,Bob的编码方式是按照他的概率分布来说是最佳的。而Alice的概率分布与Bob的就不太一样,编码方式对Alice来说就欠佳。Bob编码方式的平均长度是1.75bit,而Alice用编码长度就是2.25。
用其它分布的最佳编码方式来传送另一种分布时,信息的平均长度就是交叉熵(This length – the average length of communicating an event from one distribution with the optimal code for another distribution – is called the cross-entropy.)一般的,我们定义交叉熵:
Hp(q)=xq(x)log2(1p(x))

在这个事例中,交叉熵是Alice说词频率分布相对于Bob说词频率分布。



为了降低Alice交流的代价,我们需要让她使用自己的编码方式。为了降低她平均信息长度。但是又出现了一个新的问题,当Bob用Alice最优的编码方式时,Bob信息的平均长度更长了,比Alice用Bob的最优方式还长。
所以现在有4中情况:

  • Bob用自己的最优编码: H(p)=1.75bits
  • Alice用Bob的最优编码: Hp(q)=2.25bits
  • Alice用她自己的最优编码: H(q)=1.75bits
  • Bob用Alice的最优编码: Hq(p)=2.375bits
    这不太直观,这四种值之间是否有一定的关联在里面呢?
    下面的这张图标中,每一张子图都表示其中的一个式子。每一子图都是按照前文的方式来表示密文长度和分布的关系。相同的编码都是在同一列上,相同的分布都是在一行上,这样相同分布或相同编码情况下的对比:



    这里就可以看到各个分布情况下的不同对比了, Hq(p) 比较大因为蓝色时间频率较高但是它的密文长度也比较长,换句话说,q下面的高频率事件用的密文长度比p下面的密文长度要短,所以 Hp(q) 不会太大。
    交叉熵不是对称的。
    所以我们为什么要关心交叉熵?交叉熵表示了两个概率分布的差异程度。p和q的差异越大,那么p关于q的交叉熵就比p的熵更大。



    同样的,p与q差异越大,q关于p的交叉熵就会比q的熵更大。



    真正有意义的部分是交叉熵和本身的熵之间的差异。这之间的差异都是因为我们针对不同分布的使用同一个编码产生的。如果分布都是相同,那么这个差异就是零。如果差异越大,这值就越大。
    我们称这个差异为Kullback–Leibler divergence(KL divergence)。p相对于q的KL divergence写作 Dq(p) ,定义如下:
    Dq(p)=Hq(p)H(p)

    它就像2个分布之间的距离一样,它表示了分布差异的程度。如果继续研究这个概念就会进入信息几何的领域。
    交叉熵和KL divergence在机器学习领域都非常的适用。通常,我们希望一个分布逼近另外一个分布,比如我们需要用一个预测的分布来逼近实际真是的分布。KL divergence提供了一个很好的解决办法。所以它可能会经常出现。

Entropy and Multiple Variables

熵和多变量
我们回到之前天气和衣着的例子中:




像许多母亲一样,都担心我的衣着跟天气不搭配。所以她需要知道今天的天气和穿着,那么我需要多少bit来给她传递信息呢?
为了更方便的分析这个问题,我们把概率扁平化分析:



现在可以画出针对不同时间的最优密文,然后来计算密文的平均长度:



我们把这个叫做X和Y的联合熵,定义如下:
H(x,y)=x,yp(x,y)log21p(x,y)

这与我们之前的正常定义很相似,不同的是变量从一个变成了两个。
我们再把这个图形表现得更形象话一些,加入第三个维度,让图形更立体,我们加入密文长度:



假设已经通过新闻知道了每天的天气如何,那么我该如何提供信息呢?
看上去我需要提供一些具体穿衣的信息,但是我事实上可以发送的更少的信息,因为天气与衣着有很密切的联系。让我们分别考虑雨天和晴天下的情况:



对于这两种情况来说,我都不需要发送太多的信息,因为在知道天气的情况下,已经有了一个很好的前提条件。当是晴天的时候,可以用晴天的最优编码,当是雨天的时候可以用雨天的最优编码。分别在这两种情况下用不同的编码会比用同一种通用编码的长度少很多。



我们称之为条件熵。
转换为公式:
H(X|Y)=yp(y)xp(x|y)log2(1p(x|y))=x,yp(x,y)log2(1p(x|y))

Mutual Information

交互信息
在之前的章节中,我们可以看到知道了一个变量,可以让其它相关的变量传送的信息更短。
把这种问题形象化为条码可以更好的分析,这些条码如果有共享的信息,那么他们就会重叠。比如,X和Y中的一些信息共享了,那么H(X)和H(Y)的条码就重叠,由于H(X,Y)是共同信息,那么它就是H(x)和H(Y)的集合:




当我们用这种方法思考问题时,很多事情就可以变得很简单明了。
比如,之前讨论过的,如果要传输X和Y(相关熵,H(X,Y)),需要的密文长度比单独传输X(marginal entropy,“边际熵”)更长,但是如果你已经知道了Y,那么它会用更少的密文来传输X(条件熵,(conditional entropy),H(X|Y))。



这个看上去有些复杂,但是我们把它们表示成条形的时候,就会变得非常简单。H(X|Y)就代表,已经知道了Y,需要发送信息来表示X。形式上,就代表H(X|Y)就是不重叠H(Y)的属于H(X)的那一部分。



另一种解释是 H(X,Y)=H(Y)+H(X|Y) 。就是X和Y共同的信息等于Y加上X里那一部分不属于Y的信息。



对于等式来说,很不好理解,如果使用条码形式化后,就很容易理解了。
在这一点上,意味着我们把X和Y的信息按照不同的方式拆分成为了不同的组成部分。我们有不同变量的信息,H(X),H(Y)。信息的共同部分,H(X,Y)。在其中变量之一而没有在另一个变量中的部分,H(X|Y),H(Y|X)。这些信息都像是围绕在变量间共享信息(变量信息的交集)一样。我们称这交集部分的信息为交互信息(“mutual information”):
I(X,Y)=H(X)+H(Y)H(X,Y)

H(X)+H(Y)这个集合中有2个部分的交互信息,将H(X,Y)减去就成为,X和Y的并集。
与交互信息相关的是信息变化( the variation of information),这个信息是不会在信息间共享的,定义如下:
V(X,Y)=H(X,Y)I(X,Y)

这个变化的信息给我们一个变量间差异的度量,如果此类信息量为零,那么告诉了其中一个变量的信息,那么就可以知道另一类变量的信息。如果变化信息越大,就代表变量间越独立。
同样是体现差异的概念,这与KL divergence有什么关联?KL 散度表明了对相同的变量不同分布的差异。相反的,信息变化是两个联合分布变量之间的差异。KL divergence是针对不同分布的。而KL 散度是针对同一个分布的。
下面把这些概念总结到同一个条形图下:


Fractional Bits

对于信息理论,我们可以产生bit为单位的分数,这就有些奇怪,为什么会有一半的bit产生?
答案很简答:我们通常关心的是信息的平均长度,而不去关心具体某个信息的长度。如果一半时间都传送的一个bit,而另一半时间传送的是2个bit,那么他们的平均值就是1.5bit。这样就不足为奇了。
但是这种回答就避开了这个问题了。通常密文的最佳长度是有分数的,这又意味着什么呢?
为了看清楚这个问题,我们来假设有一个分布,其中事件a有71%的概率发生,而另外一个时间b有29%的概率发生。




根据我们之前的算法,算出我们需要0.5bit来表示事件a,用1.7bit表示事件b。但是当我们要单独发送这些bit显然是不可能的。我们需要强制把它转化成为整数,并以平均长度为1bit来发送信息。
但是如果我们一次性发送多条信息,我们就可以做得更好。假设针对这个分布,我们需要发送2个事件。如果我们分别发送这2个事件我们需要2个bit,我们能优化这种情况吗?



我们有一半的概率需要传送aa,21%的概率传送ab或ba,剩下8%的概率来传送bb,最佳的长度还是涉及到了分数bit。



如果我们把密文的长度取整后,我们将得到:



这样我们就有平均长度为1.8bit。这比我们单独传送需要2bit要少。也可以这样想,我们传送一个事件平均就需要0.9bit,如果一次性传送更多的信息,那么平均传送一个事件的长度就会更少。当事件的个数趋近于无穷大时,取整的开销就会弱化不计。每一个密文需要的bit数就会接近熵。
进一步说,a事件的理想密文长度是0.5bit,而aa事件的密文长度是1bit。当他们是分数的时候,密文的长度也会增长。那么如果我们一次性传送很多事件时,密文长度也会增加。
这样就真正理解到为什么bit数会有分数的情况了。
(实际上,人们对不同情况都会有不同的编码策略。霍夫曼编码就试是用我们以上的方法来进行编码,对分数形式的bit不是很友好,它会用各种方法,让密文的长度接近熵界限,算术编码就有些不一样,它比较好的处理分数形式的bit以接近最优结果)

Conclusion

如果我们关系在信息传递的时候用最少的bit来传输,以上讲到的都是基本原理。如果我们关系数据压缩,信息理论指出了核心问题,并提供了一些基本正确的抽象概念。但如果我们不关心这些东西,还有其它方面需要我们关注的吗?
信息理论的概念出现在很多领域:机器学习,量子物理,遗传学,热力学,甚至是赌博。在这些特别领域的实践者们都不关心信息理论,因为他们想压缩信息。他们关注是因为与他们的领域有很强的联系。
信息理论在许多领域出现,是因为它能提供一个具体的能形象的表达概念。提供了一种表示不确定性的刻度和程度,如两种信仰有何不同。对于生活中一些抽象的概念,一些无法描述的想法,都可以通过信息理论来表达。
信息理论在机器学习中也有重要地位。在机器学习中,有一种很普遍的算法就是分类。假如给定一张图片,需要判定图片中是狗还是猫。我们建立的算法模型可能会输出这样一种结果:”有80%的概率是狗,有20%的概率像猫“。而正确的答案是狗。那么我们如何来评价这个模型有多好或者有的坏?如果它说85%概率是狗,那么这个模型又有多好?
这是一个很重要的问题,我们需要关心我们的模型是好是坏,以便于更进一步优化它。我们如何来优化?正确的答案取决于我们用的什么模型:我们仅仅关心猜测的结果是否正确还是关心我们对这个模型有多大信心?对此没有正确的回答,并且这个模型不知道会不会运用于一个我们最终关心的问题上。遇到这种情形,交叉熵就起到了很好的作用。很多时候,我们不能准确的知道我们关心什么,交叉熵就是一个很好的代理。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值