看得見的資訊理論-為什麼用交叉熵作為邏輯回歸的代價函數

本文參考: Visual Information Theory, 所有插圖來自原文,內容進行了一些調整,用來解釋為什麼邏輯回歸的代價函數用交叉信息熵描述。

用新的方式思考這個世界,我喜歡這種感覺,尤其喜歡把一個模糊想法變成具體概念的過程。資訊理論就是這樣一個例子。

資訊理論是描述很多事物的一種精確語言。我有多大的不確定性? 知道問題A的答案對了解問題B的答案有多大影響?一種信仰和其他的信仰有多相似?在我是孩子的時候,就對這些有一些非正規的想法,但是,是資訊理論使這些東西變得明確,清晰。這個理論應用非常廣泛,從數據壓縮,到量子力學,到機器學習,以及它們的交叉學科。

不幸的是,資訊理論不太容易直觀理解。我不認為一定是這樣。實際上,許多核心的概念完全可以通過可視化的方式理解。

可視化概率分布

在我們涉足資訊理論之前,先看看如何可視化簡單的概率分布,為後文打基礎。這些可視化的技巧很有用處。

我在加州,加州有時會下雨,但多數是晴天,大概佔75%。很容易用下面的圖表示這個事情:

我多數時間穿半袖襯衫,穿外套時間佔38%。同樣很容易用一個圖表示:

現在考慮,如何用一個圖同時描述把這兩個事情?嗯,我們先假設這兩個事件無關,即它們是兩個相互獨立的事件。即,我穿半袖或者外套和天氣是否晴朗下雨沒有關係。我們可以用下圖表示這兩個事件:

注意上圖中間交叉的橫向和縱向的分割線,它們是直的。 直就意味著兩個變數不相關。也就是說,無論是下雨天還是晴天,我穿半袖的概率都是62%。

但實際情況,我在下雨天的時候穿外套多一些,而晴天的時候穿半袖襯衫多一些,這使得圖形變成:

上邊這個圖看起來很酷,但是用處不大,除了讓我們一頭霧水之外,並沒有提供額外有價值的信息。

讓我們關注其中一個變數,如,天氣,我們知道晴天或者雨天的概率。針對每種情況,我們可以看看它的條件概率。即,晴天的情況下(條件),我穿半袖襯衫的概率是多少(條件概率),或者雨天時,我穿外套的概率是多少?比如,如下圖所示:

下雨這個事件記做 A, 穿外套這時時間記做 B。下雨的概率是25%,記做P(A) = 25%, 穿外套的總體概率是38%,記做P(B)=38 %。事實上,僅有這兩個信息無法做進一步判斷。這時,引入另外的信息:假設,下雨時,75% 的時間我會穿外套, 即 P (B|A) = 75%。所以,我(下雨穿外套)的概率是 25% * 75% = 19%。即, P(A∩B) = P(A). P(B|A) = 25% * 75% ~= 19%。或者:

p (rain, coat) = p(rain) . p(coat | rain)

這是概率理論里最基本的公式 - 稱為條件概率公式。它提供了描述兩個變數的概率的一般方法:先看一個變數的概率(P(rain)),在看該變數條件下另一個變數的概率。(P(coat|rain))

兩個變數先看哪個結果都是一樣的。直觀上說,應該天氣是因,我穿什麼衣服是果。 但反過來考慮也成立。即:

p(rain, coat) = p(coat).p(rain|coat)

練習:我穿外套的概率是P (B) = 38%, 某一天,我穿了外套,問這天下雨的概率P(A|B)是多大?(這實際就有點推理的味道了!)

P(A|B) = P(A∩B)/P(B) = 19%/38% = 50%。

這給了我們第二種可視化概率分布的方式:

上圖中,p(t-shirt) = 62%, p(coat) = 38% 稱為邊緣概率,下雨和晴天分成了兩組,稱為條件概率。

(以上描述方式也適用於對貝葉斯定理的理解。)

辛普森悖論

這些概率分布可視化的技巧有用嗎?我認為確實是。在用它可視化資訊理論之前,先了解一下辛普森悖論。辛普森悖論是一種極端的非直觀統計現象。它在直觀的層面上很難理解。下面,我們用上面描述的技巧來解釋這個問題。

檢驗兩種治療腎結石的方法。假設:一半的病人用A方式治療,一般的病人用方法B治療,而B的成功率要高一些,如下圖所示:

但發現一個奇怪的現象:如果只統計結石小的群體,卻是A的方式成功率高,而且如果只統計結石大的群體,還是A的方式成功率高。 這怎麼可能!

問題的關鍵是這個研究沒有做好隨機採樣,進行A治療的群體,結石大的人佔了多數,而進行B治療的群體,結石小的佔了多數。而當然,結石小的總體治癒了高一些。 這是個不對等的競爭。即,A治療和B治療的差異更多的被群體分布的差異決定,而不是治療手段本身。

用3D圖會更好的描述這個現象:

這個圖一目了然:單看所有的small 或者所有的 large, A 治癒率都高於B。但當看總體時,B的治癒率高於A,因為它有更多容易的case。

編碼

有了可視化概率的方法後,下面開始研究資訊理論。

我有一個朋友,Bob,他非常喜歡動物。他總是和動物交談。假設他只說 4 個詞:dog, cat, fish, bird。

幾周前,Bob搬到澳大利亞去了,我們之間只能通過二進位 0,1 通信。為了通信,我們發明了一套編碼,用來表達他想說的那4個詞:

當發送消息時, Bob 用代碼(codewods)來代替符號(symbols) 。並把它們連在一起以代碼串的方式發送過來:

可變長度編碼

很不幸,澳大利亞到這邊的通訊費用很昂貴。每個比特的傳輸需要5美元。我和Bob開始研究怎樣能少花錢。

我們發現,Bob 說這4個字的頻率有大有小。Bob喜歡狗,他討論狗最多。偶爾會談到貓(當狗追貓的時候),分布如下:

很顯然,我們用的通信方法沒有考慮到這個分布,而是平均的都用2個比特表示每個詞。用下面的可視化圖形表示這個情況。

可能是因為我們太聰明了,我們可以採用可變長度編碼 - 用更短的編碼表示更常用的詞!這涉及到一個權衡的問題,一些編碼短了,另一些就可能會變長。為了讓信息最短,最好的方式是讓每個編碼都短,但又不可能,實際上讓最常用的變短就可以。因此,結果,常用的詞dog編碼變短,不常用的詞,如bird,變長:

讓我們在進行類似的可視化。結果是,平均編碼長度減少到1.75比特!!

(你可能會問,為什麼不用1表示cat呢,那樣豈不更好?這樣不行,因為會在解碼的時候產生歧義。後面會討論這個問題)

事實證明,這個編碼是最好的了。也就是說1.75比特是針對這個分布(1/2, 1/4, 1/8, 1/8)最優的平均編碼長度了!

事實上,這種分布下的通信,需要至少1.75比特的平均編碼長度。無論我們的編碼多聰明,都不能讓這個長度變短。我們把這個最小值稱為分布的熵(entropy)。一會我們詳細討論這個問題。

代碼空間

下面回到上面那個問題:為什麼不用1表示cat呢,那樣豈不更好?

長度為1比特的編碼有 2 個:0 和 1。長度為 2 比特的編碼有 4 個:00,01,10,11。每增加一個比特,可編碼數就加倍。下圖表示 長度為3比特的編碼能表示 8 個不同的信息。

我們對可變長度編碼感興趣,有些編碼長度大於其他編碼。

記得Bob把這些消息轉換成編碼串的方式。這裡有個小問題:接收者如何分割這個編碼串?如果是等長編碼,那就好辦,現在是不等長的。

我們希望這些編碼在解碼方面具有唯一性。它們不能有歧義。如果我們有個特殊的結尾標識,事情就簡單了,但我們沒有。

非唯一可解碼很容易看到,例如,如果 0 和 01都是編碼,則它們就存在歧義。這個性質就是,如果一個編碼作為可用編碼,則它任何一個更長的版本就不應該成為編碼。這個性質稱為前綴性質。符合這個性質的編碼稱為前綴編碼。

這個限制讓我們犧牲了一部分編碼。例如下圖中,如果 01作為編碼,任何以01為前綴的編碼都會犧牲掉:

確切的說,在01作為編碼格式後,1/4的編碼格式不能用了。這就是用2個比特(而不是3個)來編碼的代價。編碼越短,犧牲越大,這是個平衡問題。

優化編碼

長度為0的編碼代價是1(這個有點難理解),長度是1的編碼代價是1/2, 長度是2的編碼代價是1/4。一般情況下,編碼長度L(x)和代價呈現指數遞減關係,即長度越短,代價越大:

我們希望代碼短,因為我們希望平均消息短。每個代碼的概率乘以代碼長度貢獻給平均代碼長度(期望)。例如,4個比特編碼長度,50%概率,則它的平均長度貢獻就是:L(x) * p(x) = 4*50% = 2

這兩個值決定了代碼的長度。代碼的長度決定了代碼的代價。可以把它們花在一起:

代碼短,平均消息長度短,但代價高,代碼長,平均消息長度長,但代價低。

如何更有效的使用我們的預算?每個消息應該如何編碼?

就如同我們應該在使用更頻繁的工具上投資一樣,我們應該在更頻繁使用的詞上面加大投資。實現這個有個比較自然的做法:把投資按照消息的通用程度進行分配。因此,如果一個消息發生率是50%,則用50%的預算去處理。如果是1%,則用1%的預算。

這個方法很自然,但有最優的方法嗎?是的,下面進行證明:

下面這個證明是本文最難理解的部分,讀者可以跳過。

假設,事件a 發生的概率是 p(a),時間b發生的概率是p(b)。用上述自然的方式分配代價:

上圖中,cost邊界和length contribution 邊界完全吻合。這意味著什麼嗎?

(略)

熵的計算

回憶一下,長度是L的消息的代價是1/(2^L),則得到 L 的表達式: log2(1/cost), x的編碼的花費是p(x),長度 L(x) = log2(1/p(x))

例如,

當 p(x) = 50%時, L(x) = log2(2) = 1

當 p(x) = 25%時, L (x) = Log2(4) = 2

這個長度的期望就定義為這個信息通信的熵:

H (p) = Σp(x) L(x) = Σp(x) log2(1/p(x))

信息熵表達說清楚一件事需要的最少信息量。

如果事情只有一種可能,則 H(p) = 100% * log2(1/1) = 0 ,即需要0個比特信息。直觀解釋:一種可能即為確定事件,不需額外信息描述。

如果事情有等概率的兩種可能,且概率都是50%,如擲硬幣,則 H(p) = 50% * log2(1/0.5) + 50% * log2(1/5) = 1, 即需要1比特信息。如,一個比特中,0表示硬幣朝上,1表示硬幣朝下。

如果事情有等概率的64種可能,則 H(p) = 1/64 * log2(64) * 64 = 6,即需要6比特的信息。

總的來說事情越簡單,即可能性越少,需要的編碼越少。

交叉熵 Cross-Entropy

繼續前面的故事,Bob 搬到澳大利亞不久,就和alice結婚了。和Bob不一樣,Alice喜歡貓:

他們兩個說同樣的詞,但頻率是不一樣的。Bob最常說的是dog,而alice最常說的是cat。

一開始,alice使用bob的編碼方式,很明顯,它的花費太高了。Alice有不同的概率分布,當同樣的編碼用在bob概率分布上面,代碼長度是1.75時,用在alice的概率分布卻是 2.25。

同時考慮兩種概率分布的熵叫做:交叉熵(cross-entropy)。公式如下:

Hp(q) = Σq(x) log2(1/p(x))

總結:

Bob 使用他自己的編碼:H(p) = 1.75比特

Alice 使用Bob的編碼: Hp(q) = 2.25比特

Alice使用她自己的編碼:H(q) = 1.75比特

Bob 使用Alice的編碼:Hq(p) = 2.375比特

我們發現hp(q) 不等於 hq(p)。這四個值有什麼關係嗎?

下圖分別描述這四種情況:

為什麼 hp(q) 不等於 hq(p),一目了然。 也就是說 交叉熵是不對稱的。

我們為什麼這麼在意交叉熵,它有什麼用?交叉熵描述了兩個不同的概率分布p和q的差異程度! 兩個分布差異越大,則兩個交叉熵的差異越大!反之同樣。 如下兩圖所示:

再看交叉熵和熵的關係,它們差異越大,兩個分布差異越大,則這兩個關係的差異就越大。如果兩個分布是一樣的,則交叉熵和熵的差異是 0。我們把這個差異叫做相對熵 (Kullback–Leibler divergence), 也叫 KL 距離,KL 散度。Dq(p)=Hq(p)?H(p)。 它就像一個距離度量一樣,描述兩個概率分布的「距離」。這方面的學問也稱為信息幾何學。

機器學習演算法中,邏輯回歸採用交叉熵作為代價函數,原理就是,模型的分布儘可能的接近樣本的概率分布,用這樣的模型進行預測才是最優化和最準確的。


推薦閱讀:

信息與香農...

TAG:機器學習 | 資訊理論 | |