可视化信息论(2015年10月14日)
這里是原文
我熱愛用一種新的方式去思考世界。我尤其熱愛當(dāng)有一些模糊的想法形式化成某些具體的概念。信息論就是一個(gè)非常好的例子。
信息論給了我們一個(gè)具體的語言來描述很多事情,我是多么的善變?知道問題A的答案對(duì)于知道問題B的答案有什么幫助?一些想法和另一些想法有多么的相似?當(dāng)我還是小孩的時(shí)候,我就有一些關(guān)于這些問題的粗略想法,但是信息論把這些問題抽象成具體的,強(qiáng)大的概念。不管是從數(shù)據(jù)壓縮,量子物理還是機(jī)器學(xué)習(xí),以及其他很多和這三者有關(guān)的領(lǐng)域,信息論的概念都有著大量多樣的應(yīng)用。
不幸的是信息論總被認(rèn)為挺難的,我其實(shí)不是很理解,可能是有些書寫的太糟糕了,事實(shí)上,它完全可以用可視化的方法簡單的說清楚。
可視化概率分布
在我們深入到信息論之前,讓我們先想一下如何可視化一個(gè)簡單的概率分布。這在之后會(huì)有用,我們也能在這里方便的解釋它。這些可視化概率的技巧不僅在理解概率本身而且在其它應(yīng)用上都會(huì)非常有用。
我住在California。有時(shí)候會(huì)下雨,但大部分時(shí)候是出太陽的。我們假設(shè)它有75%的時(shí)間是下雨的,這可以這樣可視化的表達(dá):
大部分的時(shí)間我是穿T恤的,但有時(shí)候我也會(huì)穿外套。假如我們有38%的時(shí)間在穿外套,圖片的表述也很簡單。
那么我們?cè)趺赐瑫r(shí)可視化這兩件事情呢?如果這兩個(gè)事件不相交的話,也就是說它們是獨(dú)立的話,這是一件簡單的事情。比如我今天穿不穿T恤確實(shí)不影響下周的天氣。這樣我們可以一個(gè)維度畫一個(gè)變量得到以下的圖:
注意到水平和垂直方向上都是直線,這就是兩個(gè)獨(dú)立事件圖形表示的特點(diǎn)。我今天是否穿外套的概率不會(huì)隨著未來一周天氣的變化而變化。也就是下周下雨且我在今天穿外套的概率就等于我在今天穿外套的概率乘以下周下雨的概率。它們不相交。
當(dāng)兩個(gè)事件相交,對(duì)于某些對(duì)變量來說就會(huì)增加額外的概率,而某些對(duì)變量來說就會(huì)減少概率。比如,我穿外套且下雨這個(gè)事件就會(huì)增加額外的概率,因?yàn)檫@兩個(gè)變量是相關(guān)的,它們使得各自都變得更加有可能發(fā)生。我在下雨天穿外套的概率比在一個(gè)不知道下不下雨的天氣里面穿外套的概率要大。
可視化的表示就是有些方塊變得膨脹了,而另外一些方塊因?yàn)閮杉唧w的事情同時(shí)發(fā)生的概率比較低,變得收縮了。
這看起來還不錯(cuò)的,但是這其實(shí)對(duì)于理解問題的關(guān)鍵幫助還是不大。下面,我們只考慮一個(gè)變量,比如說天氣。我們知道下雨或出太陽的概率大概有多大。對(duì)于這兩個(gè)具體的事件我們?cè)偃タ疾鞐l件概率。如果是晴天我有多大可能穿T恤?我在下雨天穿外套的概率又有多大?
有25%的概率會(huì)下雨,如果下雨,我有75%的概率會(huì)穿外套。所以我穿外套而且天氣在下雨的概率是25%乘以75%,大概是19%。
這是概率論中一個(gè)基本等式的應(yīng)用。
p(x,y)=p(x)×p(y?|?x)
我們分解了這個(gè)分布,將它分解成兩個(gè)分布的乘積。首先我們看某個(gè)變量,比如天氣,分布的一個(gè)特定的值。然后再看另一個(gè)變量,我的衣著,也就是給定第一個(gè)變量條件下的分布。
其實(shí)選擇哪個(gè)變量來開始是隨意的。我們可以從我的衣著開始,然后以這個(gè)為條件來考慮天氣。這看起來可能不是很直觀,因?yàn)槲覀冎乐挥刑鞖庥绊懸轮幸蚬P(guān)系,反之沒有。但這樣同樣是對(duì)的。
讓我們看一個(gè)例子,隨便選一天,有38%的概率我會(huì)穿外套。如果我知道我穿了外套,有多大可能是雨天呢?我在下雨天穿外套的可能性比較大,但是加州下雨的可能性又不是很大,所以說50%的可能是下雨的也是說的通的。這樣的話,我穿外套且下雨的概率就是38%乘以50%大概是19%。
p(rain,coat)=p(coat)×p(rain?|?coat)
這給了我們另外一個(gè)可視化同一個(gè)分布的圖。
我們注意到,標(biāo)簽上和上一副圖有不同的意義。現(xiàn)在T恤和外套是邊緣概率。另一方面,有兩組下雨和出太陽的標(biāo)簽,各自是對(duì)應(yīng)在我穿外套和我穿T恤條件下的情況。(你可能聽說過貝葉斯分布,你可以放在一起看看這兩種不同看待概率的不同角度。)
題外話:辛普森悖論
這些可視化概率分布的方法真的有用嗎?我認(rèn)為有用的。在沒有用來解釋信息論之前,看上去用處還不太大,這里我們先用這種方法來解釋一下辛普森悖論,看看這種方法的作用。辛普森悖論是一個(gè)非常unintutitive的統(tǒng)計(jì)情景。在直覺上,真的是很難理解。Michel Nielsen給出了一個(gè)挺漂亮的解釋,Reinventing Explanation,我打算用我的方法來試試做自己的解釋。
要測試兩種治療腎結(jié)石的方案。一半的人用方案A,而另一半用方案B。用方案B的人好像存活率高于方案A。
然而,有小腎結(jié)石的病人用方案A的存活率高于用方案B。而且有大腎結(jié)石的病人用方案A的存活率也要高。怎么會(huì)這樣呢?
問題的關(guān)鍵是這個(gè)研究沒有足夠的隨機(jī)化。用方案A的病人傾向于有大腎結(jié)石,而用方案B的病人傾向于有小腎結(jié)石。從結(jié)果上看有小腎結(jié)石的病人本身更加容易存活。
為了更好的理解它,結(jié)合之前的兩個(gè)圖,我們得到一個(gè)三維的圖。
從圖中我們可以看出不管是對(duì)于小腎結(jié)石的病人還是大腎結(jié)石的病人,方案A都要優(yōu)于方案B。方案B之所以看起來優(yōu)秀,因?yàn)樗鼞?yīng)用的病人更加容易存活。
編碼
好了現(xiàn)在有了可視化信息論的方法,我們可以看看信息論了。從我們的一個(gè)想象的朋友Bob開始。Bob十分喜歡動(dòng)物,它經(jīng)常說動(dòng)物的事情。事實(shí)上,它一直只說4個(gè)詞,“dog”,“cat”,“fish”和“bird”。
在我的虛構(gòu)下,幾個(gè)禮拜前,Bob搬到了澳大利亞。而且,這個(gè)sb決定只用二進(jìn)制進(jìn)行通信。所有從Bob那邊傳過來的信息都是這個(gè)樣子的:
我要和Bob進(jìn)行通訊的話,必須要進(jìn)行編碼,這樣才能將詞映射成二進(jìn)制碼。
要發(fā)送信息,Bob將每個(gè)詞用對(duì)應(yīng)的二進(jìn)制碼代替,然后連接起來形成編碼字符串。
可變長編碼
不幸的事情是,在虛構(gòu)的澳大利亞通信的費(fèi)用非常昂貴。從Bob那里接收每一位,都要花費(fèi)至少5美元。而且我有說過,Bob很嘮叨嗎?為了不讓自己破產(chǎn),Bob和我決定好好研究研究是否存在什么方法讓我們平均的通訊成本盡可能的低。
因?yàn)锽ob說每一詞的頻率是不一樣的。Bob喜歡狗,所以他說狗的概率是最大的。有時(shí)候,他也會(huì)說說其它動(dòng)物,比如老是和他的狗打鬧的貓。下面是他的詞頻圖:
看起來我們抓住了問題的關(guān)鍵。之前不管我們用詞匯的頻率是怎么樣的,我們給每個(gè)詞匯都分配兩位。
如果用可視化的方法來表示這個(gè)方法看上去可能會(huì)直觀一點(diǎn)。在下圖中,我們用垂直的軸來表示每一個(gè)詞的概率p(x),用水平軸來表示對(duì)應(yīng)的編碼長度,L(x)。在這里我們平均發(fā)送一個(gè)詞的成本是2位。
也許我們足夠聰明,可以找到一種編碼方式,使得概率最高的詞匯有非常短的編碼。對(duì)我們的挑戰(zhàn)主要是編碼之間存在競爭關(guān)系——使得某些編碼變短,意味著有些編碼要變長。要最小化平均的成本,理想上我們希望所有的編碼都盡可能的短,但是我們尤其希望最常用的詞有短的編碼。所以最后得到的編碼使得常用的詞(“dog”)有相對(duì)短的編碼,而不常用的詞(“bird”)有相對(duì)長的編碼。
從另一個(gè)角度再來看一下這種編碼方式。最常用的詞有最短的編碼,而不常用的詞有較長的編碼。最后的結(jié)果是我們得到了更少的區(qū)域。也就是得到了每個(gè)詞更短的期望編碼長度。現(xiàn)在這個(gè)數(shù)字是1.75位了。
(你也許想知道:為什么不用1去作為一個(gè)編碼,可惜的是,這樣做會(huì)得到一個(gè)在解碼時(shí)不明確的編碼字符串。我們會(huì)在接下去繼續(xù)討論這個(gè)問題。)
告訴你一個(gè)事實(shí),上面的這種方式其實(shí)是最優(yōu)的編碼方式。也就是對(duì)于這個(gè)分布,p(x),沒有其它的編碼方式可以得到小于1.75的期望編碼長度。無論我們多么的聰明,我們都不能找到更好的了。我們把這個(gè)基本的約束叫做分布的熵——我們會(huì)馬上詳細(xì)的討論它。
要理解這個(gè)約束的關(guān)鍵是理解要使得某些編碼變短會(huì)使得另一些編碼變長。一旦我們理解了這一點(diǎn),我們就能大致想象最佳的編碼方式了。
編碼空間
1位的編碼有2個(gè)編碼:0和1。2位的編碼有4個(gè)編碼:00,01,10和11。每增加1位,可能的編碼就會(huì)翻番。
我們關(guān)心的是變長的編碼,也就是有些編碼長,有些編碼短。我們可能會(huì)有簡單的情形,比如在3位編碼下有8種編碼。我們也可能有更加復(fù)雜的情形。比如2個(gè)編碼用兩位,而4個(gè)編碼用3位。那么怎么確定不同長度的編碼到底有幾個(gè)?
我們回憶一下Bob,通過用詞的編碼連接起來,他把消息映射到編碼字符串。
有一個(gè)關(guān)鍵的問題我們要考慮的就是,當(dāng)我們選用一個(gè)編碼方案,我們還要考慮它是否能夠唯一的解碼。當(dāng)每個(gè)編碼是一樣長的時(shí)候很簡單——只要按步長分割編碼字符串就可以了。但是由于編碼的長度不相同,解碼的時(shí)候就需要關(guān)注編碼的內(nèi)容了。
我們要求解碼結(jié)果的唯一性。如果我們?cè)诿恳粋€(gè)編碼后面放一個(gè)終止編碼,這個(gè)問題就又變得簡單了。但是我們不放,我們只發(fā)送0和1,我們要從編碼字符串本身來解碼。
很有可能我們得到的編碼不能唯一的解碼。比如想象一下,0和01是兩種編碼。這樣的話,編碼字符串0100111的第一個(gè)編碼是什么就變得不確定了。我們要得到的特性是,如果我們看到一個(gè)特定的編碼,不應(yīng)該還有一個(gè)編碼是以它為前綴的。這被叫做前綴特性,遵守這種規(guī)則的編碼叫做前綴編碼。
一種有用的理解方式是,獲得每一個(gè)編碼就需要在編碼空間上作出犧牲。如果我們用了編碼01,我們就不能用以01為前綴的編碼了。因?yàn)榻獯a唯一性的要求,我們不能再用010或者011010110了,我們失去了它們。
因?yàn)橛?span id="ze8trgl8bvbq" class="MathJax_Preview">14的編碼是以01開頭的,我們就犧牲了14的可能編碼。這就是我們要獲得一個(gè)只有兩位的編碼的花費(fèi)。也就是這樣的犧牲要求某些編碼變得更加長。這里面就有不同長度編碼之間的權(quán)衡。一個(gè)短的編碼需要犧牲更加大的編碼空間,從而阻礙其它編碼變短。我們要搞清楚的是,什么是最好的權(quán)衡。
最優(yōu)編碼
你可以想象一下你只有有限的預(yù)算來獲得短的編碼。我們要獲得一個(gè)編碼的成本是犧牲掉可能的編碼。
要獲得一個(gè)長度為0的編碼的成本是1,也就是所有可能的編碼——也就是你要獲得一個(gè)長度為0的編碼,你就不能再有其它編碼了。有一個(gè)長度是1的編碼的成本是12,比如“0”,這樣你就不再可能用那一半以“0”開始的編碼了。要獲得一個(gè)長度為2的編碼,比如“01”,的成本是14,因?yàn)橛?span id="ze8trgl8bvbq" class="MathJax_Preview">14的編碼以“01”開頭。總的來說,成本隨著編碼長度指數(shù)的下降。
我們想要得到短的編碼是因?yàn)槲覀兿胍玫蕉痰钠骄畔㈤L度。編碼的長度乘以概率直接影響平均消息長度。比如我們以50%的概率發(fā)送4位的編碼,我們的平均消息長度相對(duì)不發(fā)送這個(gè)編碼就增加了2位。我們可以畫一個(gè)長方形。
平均消息長度和成本這兩個(gè)量通過編碼的長度相關(guān)。我們的成本決定了編碼的長度。編碼的長度控制了對(duì)平均消息長度的增加量。我們可以把兩個(gè)量畫在一起。
短的編碼降低了平均消息長度,但是成本很高。長的編碼增加了平均信息長度但是很便宜。
什么是最好的使用有限預(yù)算的方法?對(duì)于每個(gè)詞的編碼我們應(yīng)該用多少位?
就像人們更加愿意在經(jīng)常使用的工具上花費(fèi)更多的錢一樣。有一種自然的預(yù)算分配方法是按照和使用頻率成正比的方式分配預(yù)算。所以有一個(gè)詞出現(xiàn)的概率是50%,那么就用50%的預(yù)算去定義編碼長度。如果一個(gè)詞出現(xiàn)的概率是1%,我們就只用1%的預(yù)算,因?yàn)槲覀兤鋵?shí)并不是很關(guān)心到底這個(gè)編碼有多長。這是一件很自然的事情,但是這是最優(yōu)的方式嗎?是的,它確實(shí)是。下面我將證明它。
下面是問題的可視化的證明,但是我相信需要花費(fèi)一定的力氣才能理解,因?yàn)檫@是本文當(dāng)中最難的一部分。讀者也可以選擇跳過這部分,直接進(jìn)入下一部分。
首先我們畫一個(gè)具體的例子,我們只用兩個(gè)詞進(jìn)行通信。詞 a 發(fā)生的概率是 p(a),詞 b 的概率是p(b)。我們用上面描述的這種自然的方式分配我們的預(yù)算。用p(a)的預(yù)算為 a 獲得一個(gè)短的編碼,用 p(b) 的預(yù)算為 b 獲得一個(gè)短的編碼。
成本(Cost)和長度分布(Length Contribution)重合了。這有什么意義嗎?
考慮一下,當(dāng)我們輕微的改變一下編碼長度,成本和長度分布會(huì)有什么變化。如果我們輕微的增加編碼長度,消息分布長度會(huì)隨著邊界高度成比例的增加,而成本會(huì)隨著邊界高度下降而下降。
所以要使得 a 的編碼稍微變短的成本是 p(a) 。同時(shí),我們并不需要每個(gè)編碼等長,而是需要它隨著對(duì)應(yīng)詞使用頻率的增加而成比例的變短。這個(gè)頻率對(duì)于 a 來說,就是 p(a)。所以使得 a 的編碼稍微變短獲得的收益是 p(a)。
有趣的事情是兩個(gè)導(dǎo)數(shù)是相等的。這意味著初始預(yù)算有一個(gè)有趣的特性,如果你有一點(diǎn)點(diǎn)多的預(yù)算,那么你不管是用來使得哪個(gè)編碼更加短,獲得的效果都是一樣的。我們真正關(guān)心的事情是 收益成本比——這決定了我們會(huì)將多余的預(yù)算花在哪一個(gè)編碼上面。在這里面,這個(gè)比是 p(a)p(a),等于1。它獨(dú)立于p(a)——恒定于1。另一個(gè)也一樣。所以要多投資一點(diǎn)點(diǎn)的話對(duì)一任意一個(gè)編碼效果都是一樣的。
對(duì)于極小的量來說,其實(shí)也不算改變了預(yù)算。所以說,上面的論述并沒有證明之前的方法是最佳的預(yù)算分配方案。要真正證明,我們需要從一個(gè)不同的預(yù)算方案開始入手,這里我們?cè)?a 上花費(fèi)更多的預(yù)算,相應(yīng)的在b上花費(fèi)少一些的預(yù)算。我們從 b 的預(yù)算中拿出 ? 投資到 a 當(dāng)中。這使得 a 的編碼變短,b的編碼變長。
現(xiàn)在,為 a 購買一個(gè)較短的編碼的成本是 p(a)+?,為 b 購買一個(gè)較短的編碼的成本是 p(b)+?。但是收益是不變的。這使得購買 a 的編碼的收益成本比是 p(a)p(a)+?,小于1。另一方面,購買 b 的編碼的收益成本比是 p(b)p(b)??,大于1。
這時(shí)候價(jià)格就不再平衡了。投資于 b 的收益要大于投資于 a。投資著就會(huì)嚷到“買 b, 賣 a!”。我們這么做了,然后回到了最原始的方案。所有的其它預(yù)算方案,都可以通過改進(jìn)變化到我們最原始的方案。
最原始的方案——隨著使用頻率成比例的投資于不同的詞匯——并不僅僅是自然的方式,而且是最佳的方案。(這里用兩個(gè)詞來證明,但是這很容易擴(kuò)展到更多的詞)。
(仔細(xì)的讀者可能會(huì)發(fā)現(xiàn),我們的最佳預(yù)算方案會(huì)產(chǎn)生分?jǐn)?shù)長度的編碼。這好像是一個(gè)問題。這意味著什么?當(dāng)然,在實(shí)踐的時(shí)候,當(dāng)你要發(fā)送一個(gè)編碼的時(shí)候需要取整。但是我們會(huì)看到,當(dāng)我們發(fā)送很多次編碼的時(shí)候,能夠發(fā)送分?jǐn)?shù)的編碼是有很重要的意義的。所以希望你能耐心的看文章的下一部分。)
計(jì)算熵
回憶一下,長度為 L 的編碼的成本是 12L。我們可以通過逆運(yùn)算來獲得給定成本可以得到的編碼長度: log2(1cost)。因?yàn)槲覀冊(cè)谠~匯 x 上花費(fèi)的成本是 p(x) , 所以長度是 log2(1x)。以下便是各個(gè)詞的編碼長度的最佳選擇。
在上一部分里面,我們相當(dāng)于討論了給定概率分布 p 通信的平均消息長度的基本約束。這個(gè)約束,也就是使用最佳編碼方式得到的平均消息長度,被叫做分布 p 的熵, H(p)。我們知道了各個(gè)編碼的最佳長度,我們可以計(jì)算熵了。
(人們往往利用恒等式 log(1a)=?log(a)將熵寫成 H(p)=?∑p(x)log2(p(x)),我認(rèn)為第一種方式更加直接,所以文章將繼續(xù)使用這種形式。)
不管怎樣做,如果我要通信,我就至少要花費(fèi)這么多的位。
通信需要的平均信息量很明顯可以用來壓縮數(shù)據(jù)。它還能用在什么地方呢?是的,它可以用來描述我的不確定性也給了我們一種量化信息的方式。
如果我確定一件事情要發(fā)生,我就不需要發(fā)送信息。如果有兩件事各以50%的概率發(fā)生,我只需要發(fā)送1位。如果有64件事情等概率的發(fā)生,那么我們就需要6位。概率的分布越是集中,我們就越有機(jī)會(huì)用變長編碼的方式去降低通信的成本。概率越是分散,那么需要的通信成本越大。
不確定性越大,當(dāng)我們發(fā)現(xiàn)了什么事情發(fā)生的時(shí)候,我們學(xué)到的東西就越多。
交叉熵
在Bob出發(fā)去澳大利亞前不久,Bob和Alice結(jié)婚了,毫無疑問也是我虛構(gòu)的。我自己都感到驚訝,也許是頭腦中的另一種性格,Alice并不是一個(gè)愛狗者,而是一個(gè)愛貓者。盡管如此,他們還是能夠找到沉迷動(dòng)物的共同語言,并且擁有非常有限的詞匯。
他們只以不同的頻率說著相同的詞匯。Bob經(jīng)常說狗,而Alice經(jīng)常說貓。
剛開始Alice用Bob的編碼方式給我發(fā)消息。不幸的是,她用的成本本可以低很多的,因?yàn)锽ob的編碼是根據(jù)Bob的詞匯分布優(yōu)化的。Bob用的時(shí)候平均編碼長度是1.75。而Alice用Bob的編碼的話就變成了2.25。如果這兩個(gè)人用的分布不是這么相似的話,Alice用的平均編碼長度會(huì)更加長。
長度——用另一個(gè)分布的最佳編碼,來通信的平均編碼長度——叫做交叉熵。正式的,我們可以這樣定義交叉熵:
在這里,交叉熵是關(guān)于愛狗者Bob的詞頻的愛貓者詞頻。
為了降低通信成本,我讓Alice用她自己的編碼。這降低了她的平均通信長度。但是這帶來了一個(gè)新的問題:有時(shí)候Bob會(huì)無意的使用Alice的編碼。令人奇怪的是,Bob用Alice的編碼表現(xiàn)比Alice用Bob的編碼更加糟糕。
所以,現(xiàn)在我們有四個(gè)量:
- Bob用他自己的編碼(H(p)= 1.75位)
- Ailce用她自己的編碼(H(q)=1.75位)
- Alice用Bob的編碼(Hp(q)=2.25位)
- Bob用Alice的編碼(Hq(p)=2.375位)
這個(gè)結(jié)果并不像想象中的那么直觀。比如 Hp(q)≠Hq(p)。能看出來這4個(gè)值之間的差別嗎?
在下面的圖中,每個(gè)子圖各表示4種可能中的一種。每個(gè)子圖像之前圖一樣可視化了平均消息長度。它們是方形的組織形式。水平的兩幅圖來自相同的分布,垂直的兩幅圖使用同一套編碼。這讓你視覺上方便的去對(duì)比。
你能看出來為什么 Hp(q)≠Hq(p)? Hq(p)因?yàn)樵诜植?p 下面有一個(gè)詞(藍(lán)色)非常的常見,但是因?yàn)樵?span id="ze8trgl8bvbq" class="MathJax_Preview">q下面非常不常見而得到了一個(gè)長的編碼。另一方面q分布下的常見詞(粉色)在p下面并不常見,但是這個(gè)差異沒有這么的明顯,所以Hp(q)就沒有Hq(p)那么大。
恩,那么為什么我們要關(guān)心交叉熵?交叉熵給了我們一種表達(dá)兩種分布差異的方法。p和q的差異有多大,p關(guān)于q的交叉熵就會(huì)比p的熵大多少。
反之亦然。
真正有趣的事情是熵和交叉熵之間的差異。這個(gè)差異是來自因?yàn)橛昧私o別的分布優(yōu)化的編碼造成的。如果分布相同,這個(gè)差異就是0。隨著分布間差異的變大,這個(gè)差值就會(huì)變大。
我們把這個(gè)差值叫做Kullback-Leibler分歧,或者直接叫KL分歧,p關(guān)于q的KL分歧是,Dq(p),如下定義:
KL分歧的有意思的地方是它就像兩個(gè)分布之間的距離。衡量著兩個(gè)分布之間的差異。(如果你認(rèn)真的研究這個(gè)問題,你就會(huì)發(fā)現(xiàn)另一門叫做信息幾何的學(xué)科)。
交叉熵和KL分歧在機(jī)器學(xué)習(xí)領(lǐng)域令人難以置信的有用。機(jī)器學(xué)習(xí)中,往往我們希望一個(gè)分布盡可能的和另一個(gè)分布相似。比如我們希望一個(gè)被預(yù)測的分布和想要的分布盡可能的相似。KL分歧很自然的在這里得到應(yīng)用,所以它出現(xiàn)在機(jī)器學(xué)習(xí)的很多地方。
熵和多變量
讓我們回到先前將天氣和穿衣的例子。
我媽,像很多父母一樣,有時(shí)候會(huì)擔(dān)心我是否穿了合適的衣服。(她有理由擔(dān)心——因?yàn)槲医?jīng)常在冬天不穿外套)。所以她常常想知道天氣和我穿什么衣服。我要發(fā)送多少位來通信呢?
最簡單的方式就是展開這個(gè)分布:
現(xiàn)在我們可以畫出這些詞的分布的最優(yōu)編碼以及計(jì)算平均消息長度。
我們把這個(gè)叫做X和Y的聯(lián)合熵。定義成:
這和我們之前看到的一般的分布是一樣的,除了是兩個(gè)變量而不是一個(gè)。
一個(gè)稍微好一點(diǎn)的理解的方式不是展開它,而是在第三維上戰(zhàn)士編碼長度。這樣的話熵就是體積。
假設(shè)我媽已經(jīng)知道天氣了,比方說她可以從電視上查看天氣。這樣我需要發(fā)送多少的信息呢?
看上去我好像不管怎樣也要發(fā)送說清我穿什么的信息吧。但是事實(shí)上我只需要發(fā)更少的信息,因?yàn)樘鞖鈴?qiáng)烈的暗示著我穿了什么衣服。讓我們分別考慮下雨天和出太陽的情況。
在這兩種情況下,平均來說我都不需要發(fā)送多少的信息,因?yàn)樘鞖饨o出了要獲得正確就結(jié)果的輔助信息。當(dāng)下雨的時(shí)候,我可以用根據(jù)下雨優(yōu)化過的編碼。當(dāng)出太陽的時(shí)候,我可以用根據(jù)出太陽優(yōu)化過的編碼。在這兩種個(gè)情況下,我都可以相對(duì)使用通用編碼少發(fā)送信息。我要計(jì)算的平均信息量只要將這兩個(gè)分布結(jié)合起來就可以了。
我們把這個(gè)叫做條件熵。如果用公式寫出來,是這個(gè)樣子的:
交互信息
在上一部分,我們看到,知道一個(gè)變量,意味著通信另一個(gè)變量可以需要更少的信息。
一個(gè)不錯(cuò)的思考這個(gè)問題的方式是將信息想象成條。如果這些bars之間有共享的信息,那么它們會(huì)相互重疊。比如X和Y中的某些信息共享,H(X)和H(Y)就是重疊的條。因?yàn)?span id="ze8trgl8bvbq" class="MathJax_Preview">H(X,Y)是X和Y中的信息,所以它是條H(X)和H(Y)聯(lián)合。
一旦我們這樣看待問題,很多事情的理解變得簡單了。
比如,我們之前提到的通信X和Y(聯(lián)合熵H(X,Y))相比只通信X(邊緣熵H(X))花費(fèi)更多的信息。但是如果你已知Y,那么你相對(duì)來說只需要更少的信息來通信X(條件熵,H(X|Y))。
這看起來有點(diǎn)復(fù)雜,但是我們?nèi)绻麖腷ar的角度來看又變得簡單了。H(X|Y)是我們要發(fā)送給已經(jīng)知道Y的人來通信X所需要的信息,也就是只在X中的信息而不在Y中的信息。視覺上,這意味著H(X|Y)是H(X)中不和H(Y)重疊的部分。
你現(xiàn)在可以根據(jù)下圖來看不等式H(X,Y)≥H(X)≥H(X|Y)。
另外一個(gè)等式H(X,Y)=H(Y)+H(X|Y)。這就是X和Y中的信息,等于Y中的信息加上X中不在Y中的信息。
再一次這個(gè)等式是很難想到的,但是從信息bar的重疊角度看這個(gè)問題又變得簡單了。
到現(xiàn)在為止,我們已經(jīng)用多種方式解釋了X和Y中的信息。我們有在每個(gè)變量中的信息,H(X)和H(Y)。我們有兩個(gè)量聯(lián)合中的信息,H(X,Y)。我們有只在一個(gè)量中的信息H(X|Y)和H(Y|X)。其中在兩個(gè)變量間共享的信息反復(fù)出現(xiàn),信息之間的交集。我們把它叫做”交互信息”,I(X,Y),定義如下:
有這個(gè)定義是因?yàn)? H(X)+H(Y)中有兩份交互信息,因?yàn)榻换バ畔⒃? X和Y中都存在。而 H(X,Y)中只有一份。(考慮之前的bar圖)。
和交互信息密切相關(guān)的一個(gè)量是變異信息。變異信息是指變量間不共享的信息。我們可以這樣定義:
V(X,Y)=H(X,Y)?I(X,Y)
變異信息也有點(diǎn)意思,因?yàn)樗步o了我們一個(gè)度量標(biāo)準(zhǔn),變量間的一個(gè)距離的概念。如果知道一個(gè)量就知道另一個(gè)量,那么這兩個(gè)量的變異信息就是0。變異信息隨著變量之間的獨(dú)立程度的增加而增加。
那么這和KL分歧有什么關(guān)系?它同樣給了我們一個(gè)距離的概念。KL分歧給了我們同一個(gè)變量或者同一組變量的兩個(gè)不同分布之間的距離度量。而變異信息給了我們一個(gè)聯(lián)合分布的兩個(gè)變量之間的距離度量。KL分歧衡量同一個(gè)分布,而變異信息衡量同一個(gè)分布中的不同變量。我們可以把以上講到的不同的信息畫到同一幅圖中:
分?jǐn)?shù)位
信息論中一個(gè)非常unintutitive的事情是我們可以有分?jǐn)?shù)量的位。這很奇怪,有半個(gè)位意味著什么?
有一個(gè)簡單的答案:往往我們關(guān)心的是期望消息長度,而不是某一個(gè)具體的消息長度。如果一半的時(shí)間發(fā)送1位,而另一半的時(shí)間發(fā)送2位,那么期望消息長度是1.5位。期望長度是分?jǐn)?shù)沒有什么好意外的。
但是這個(gè)答案避開了問題的關(guān)鍵。往往,最優(yōu)編碼長度是分?jǐn)?shù)的,這意味著什么?
為了具體化,我們考慮一個(gè)概率分布,事件a發(fā)生的概率是71%,事件b發(fā)生的概率是29% 。最優(yōu)編碼使用0.5位來表示a,使用1.7位來表示b。如果我們要發(fā)送這樣的編碼是不可能的, 我們必須取整數(shù)的位,并期望發(fā)送1位。
但是如果我們想要每次發(fā)送多個(gè)位,我們其實(shí)可以做的更好。我們考慮從這個(gè)分布出發(fā)發(fā)送兩個(gè)事件。如果獨(dú)立的發(fā)送它們,我們需要2位。那么我們能做的更好嗎?
一半的時(shí)間我們?cè)谕ㄐ?span id="ze8trgl8bvbq" class="MathJax_Preview">aa,各21%的時(shí)間我們?cè)诎l(fā)送ab和ba,而8%的時(shí)間我們通信bb。再一次,我們理想的編碼涉及分?jǐn)?shù)。
如果取整編碼長度我們得到下圖:
這個(gè)編碼方案給了我們1.8的平均消息長度。這和我們之前獨(dú)立的發(fā)送需要2位來說要少。另一種思考這個(gè)問題的方式是現(xiàn)在我們對(duì)于每個(gè)事件只需要通信0.9位。如果我們一次發(fā)送更多的事件,這個(gè)值會(huì)變得更小。當(dāng)n趨向無窮大,由于取整造成的消息長度增加就會(huì)消失。而編碼的位數(shù)就會(huì)接近熵。
進(jìn)一步,a的理想編碼長度是0.5位,aa的理想編碼長度是1位。即使它是分?jǐn)?shù),理想編碼長度也會(huì)增加。所以我們每次要通信多個(gè)事件,期望消息長度就會(huì)增加。
即使實(shí)際只能用整數(shù)的位,可以有分?jǐn)?shù)位的信息長度也有很重要的意義。
(在實(shí)際應(yīng)用中,人們使用在不同范圍內(nèi)都有效果的霍夫曼編碼,基本上就是上面的方法,它處理分?jǐn)?shù)位問題并不是非常優(yōu)雅,和上面一樣你需要對(duì)符號(hào)進(jìn)行分組或者使用更加復(fù)雜的技巧來逼近熵的約束。算術(shù)編碼稍有不同,但是它優(yōu)雅的處理了分?jǐn)?shù)位問題,使得期望消息長度逼近最優(yōu))。
總結(jié)
如果我們關(guān)心的最少的位,這里提到的思想很明顯是相當(dāng)基本的。如果我們關(guān)心數(shù)據(jù)壓縮,信息論解答了核心問題并且給出了基礎(chǔ)的抽象。但是假如我們不關(guān)心這些,除了好奇心還有其它什么?
信息論中的思想出現(xiàn)在很多的領(lǐng)域里面: 機(jī)器學(xué)習(xí),量子物理,遺傳學(xué),熱力學(xué),甚至是賭博。這些領(lǐng)域的實(shí)踐者一般不會(huì)因?yàn)橄胍獕嚎s信息而關(guān)心信息論。他們關(guān)心是因?yàn)檫@些知識(shí)和他們的領(lǐng)域有密切的聯(lián)系。量子糾纏可以用熵來解釋。統(tǒng)計(jì)力學(xué)和熱力學(xué)中的很多結(jié)論可以通過假設(shè)事件的最大熵不知道的前提下推導(dǎo)出來。賭徒的輸或者贏跟KL分歧有直接聯(lián)系,尤其是迭代設(shè)置。
信息論出現(xiàn)在所有這些地方,因?yàn)樗峁┝司唧w的,我們所要表達(dá)的很多事情的有根據(jù)的形式化。它給了我們衡量和表達(dá)不確定性的方法。兩組判定之間有多大的差異,一個(gè)問題的答案可以告訴我們另一個(gè)問題什么東西:概率分布有多么的分散,概率分布之間的距離有多大,兩個(gè)變量之間有多大的獨(dú)立程度。有沒有替代的相似的想法?有的。但是信息論中的想法干凈,而且有很好的特性,以及一個(gè)有根據(jù)的出發(fā)點(diǎn)。在有些情景下,信息論中的觀點(diǎn)就是你想要的,在很多其它情景下它也是這個(gè)混亂世界的一個(gè)很方便的解釋。
機(jī)器學(xué)習(xí)是我知道的最多的領(lǐng)域,所以讓我來講一講它吧。機(jī)器學(xué)習(xí)中的一個(gè)非常常見的任務(wù)就是分類。假如給我們一張圖片,讓我們預(yù)測圖片里面是狗還是貓。我們的模型也許會(huì)告訴我們“80%的概率是狗,20%的概率是貓。”假如結(jié)果就是狗——那么我們只說80%概率是狗這個(gè)說法有多好?如果說85%的概率是狗,那么這種說法又提高了多少?
這是一個(gè)很重要的問題,因?yàn)槲覀冃枰粋€(gè)概念去衡量我們模型的好壞,從而去優(yōu)化它。我們需要提高什么呢?正確的答案往往跟我們使用模型的目的有關(guān):我們只關(guān)心概率最大的那個(gè)結(jié)果?或者我們關(guān)心正確的結(jié)果概率有多大?有很大的概率得到錯(cuò)誤的結(jié)果這樣有多么的糟糕?沒有一個(gè)標(biāo)準(zhǔn)的答案。因?yàn)椴恢牢覀兊哪P偷降锥啻蟪潭壬掀ヅ湮覀冏罱K需要的結(jié)果,所以往往不可能知道正確的答案。盡管并不是總是正確,結(jié)果表明交叉熵都是一個(gè)用來衡量模型好壞的一個(gè)不錯(cuò)的概念。很多時(shí)候我們不知道我們具體關(guān)心的是什么,但是交叉熵就是一個(gè)不錯(cuò)的概念。
信息給了我們一個(gè)新的強(qiáng)大的框架來看待世界。有時(shí)候它完美匹配我們手頭的問題。也有時(shí)候盡管它并沒有完美匹配,但是也非常有用。這篇文章只是寫了一點(diǎn)信息論的皮毛——還有很多主題,比如說糾錯(cuò)編碼,我們就完全沒有提及——但是我希望我已經(jīng)展示了信息論是一門很優(yōu)美的學(xué)科,你并不需要感到害怕。
閱讀材料
Claude Shannon的關(guān)于信息論的paper,通信的數(shù)學(xué)原理是卓越的工作。(它貌似在早期信息論文章中反復(fù)的出現(xiàn)。它是一個(gè)時(shí)代?沒有頁碼限制?還是貝爾實(shí)驗(yàn)室的文化輸出?)
Cover & Thomas的The element of information theory貌似是標(biāo)準(zhǔn)的材料,我發(fā)現(xiàn)它很有用。
感謝
非常感謝Dan Mane,David Andersen,Emma Pierson以及Dario Amodei。感覺他們關(guān)于本文仔細(xì)的有深度的評(píng)論。也感謝Michel Nielson,Greg Corrado,Youshua Bengio,Aaron Courville,Nick Beckstead, Jon Shlens(http://research.google.com/pubs/JonathonShlens.html), Andrew Dai, ChristianHoward,以及Martin Wattenberg的評(píng)論。
也感謝我最早的兩個(gè)神經(jīng)網(wǎng)絡(luò)討論班,得以演示我文中提到的想法。
最后感謝發(fā)現(xiàn)錯(cuò)誤和失誤的讀者。尤其感謝Connor Zwick, Kai Arulkumaran, Jonathan Heusser, Otavio Good, 以及一個(gè)匿名的評(píng)論者。
總結(jié)
以上是生活随笔為你收集整理的可视化信息论(2015年10月14日)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 宿舍管理系统教学,java学校
- 下一篇: Android报错:The proces