信息論基礎(chǔ)
??在講述熵的時候,我想先引入一個新的東西——信息量勾笆,信息是用來減少隨機不確定性的東西(即不確定性的減少)贝淤。對于事件來說,它發(fā)生的概率越大制市,那么它所含有的信息量就越低,這很好理解,例如你今天去吃飯這個事件,這件事假定是一個必然事件的話收擦,那么它所含有的信息只有吃飯這一件,那么假設(shè)這件事的概率越低禀酱,你也許會因為生病而不想吃飯,也許你隨著心情來決定是否吃飯牧嫉,它所含有的信息量就變大了剂跟。那么對于交叉熵中的熵,這又是一個什么東西呢酣藻?
??對于理工科的讀者來說曹洽,這個東西并不難以理解,高中化學(xué)曾經(jīng)學(xué)習(xí)過熵的一些概念辽剧∷拖化學(xué)中的熵是指一個體系中的混亂程度,事實上對應(yīng)我們機器學(xué)習(xí)中的熵是類似的怕轿。一個事物越混亂偷崩,那么很顯然它就包含了更多的信息。
??熵有許多種撞羽,交叉阐斜、信息熵、相對熵以及條件熵等等诀紊。
信息熵
??信息熵是由信息論之父香農(nóng)提出來的谒出,它用于隨機變量的不確定性度量,先上信息熵的函數(shù)圖片邻奠。
??先上信息熵的公式:
??我們可以用
??可以看到信息熵的公式,其實就是
??注意這個公式有個默認前提鸠项,就是X分布下的隨機變量x彼此之間相互獨立。還有l(wèi)og的底默認為2子姜,實際上底是多少都可以祟绊,但是在信息論中我們經(jīng)常討論的是二進制和比特,所以用2哥捕。
??信息熵在聯(lián)合概率分布的自然推廣牧抽,就得到了聯(lián)合熵:
??當(dāng)X, Y相互獨立時,
??當(dāng)X和Y不獨立時遥赚,可以用
??下面這個例子很好的說明了這個問題
取自知乎
比如賭馬比賽凫佛,有4匹馬{ A, B, C, D}讲坎,獲勝概率分別為{ 1/2, 1/4, 1/8, 1/8 },將哪一匹馬獲勝視為隨機變量X屬于 { A, B, C, D } 愧薛。
假定我們需要用盡可能少的二元問題來確定隨機變量 X 的取值晨炕。
例如,問題1:A獲勝了嗎毫炉? 問題2:B獲勝了嗎瓮栗? 問題3:C獲勝了嗎?
最后我們可以通過最多3個二元問題瞄勾,來確定取值费奸。
如果X = A,那么需要問1次(問題1:是不是A进陡?)货邓,概率為1/2
如果X = B,那么需要問2次(問題1:是不是A四濒?問題2:是不是B换况?),概率為1/4
如果X = C盗蟆,那么需要問3次(問題1戈二,問題2,問題3)喳资,概率為1/8
如果X = D觉吭,那么需要問3次(問題1,問題2仆邓,問題3)鲜滩,概率為1/8
那么為確定X取值的二元問題的數(shù)量為
回到信息熵的定義伴鳖,會發(fā)現(xiàn)通過之前的信息熵公式,神奇地得到了:
在二進制計算機中徙硅,一個比特為0或1榜聂,其實就代表了一個二元問題的回答。也就是說嗓蘑,在計算機中须肆,我們給哪一匹馬奪冠這個事件進行編碼,所需要的平均碼長為1.75個比特桩皿。
很顯然豌汇,為了盡可能減少碼長,我們要給發(fā)生概率較大的事件泄隔,分配較短的碼長拒贱。這個問題深入討論,可以得出霍夫曼編碼的概念佛嬉。
霍夫曼編碼就是利用了這種大概率事件分配短碼的思想逻澳,而且可以證明這種編碼方式是最優(yōu)的。我們可以證明上述現(xiàn)象:
為了獲得信息熵為的隨機變量的一個樣本巷燥,平均需要拋擲均勻硬幣(或二元問題)次(參考猜賽馬問題的案例)
信息熵是數(shù)據(jù)壓縮的一個臨界值(參考碼長部分的案例)
*Kullback-Leibler*****散度
??我們通常將 Kullback-Leibler 散度稱之為相對熵或者 KL距離 赡盘,如果我們對于同一個隨機變量 x 有兩個單獨的概率分布和号枕,我們可以使用KL散度來衡量這兩個分布的差異缰揪。
??在機器學(xué)習(xí)中,P往往用來表示樣本的真實分布葱淳,比如[1,0,0]表示當(dāng)前樣本屬于第一類钝腺。Q用來表示模型所預(yù)測的分布,比如[0.7,0.2,0.1]赞厕。直觀的理解就是如果用P來描述樣本艳狐,那么就非常完美。而用Q來描述樣本皿桑,雖然可以大致描述毫目,但是不是那么的完美,信息量不足诲侮,需要額外的一些“信息增量”才能達到和P一樣完美的描述镀虐。如果我們的Q通過反復(fù)訓(xùn)練,也能完美的描述樣本沟绪,那么就不再需要額外的“信息增量”刮便,Q等價于P。
??KL散度的計算公式:
為事件所有的可能性绽慈,的值與恨旱、分布接近程度呈正相關(guān)關(guān)系辈毯。
交叉熵
??交叉熵可以看做 Kullback-Leibler散度 的特例,展開KL散度的公式:
??而之前我們給出的信息熵的公式是:
??交叉熵公式是:
??很容易發(fā)現(xiàn)搜贤,谆沃。也就是說,如果是一個常量的時候入客,交叉熵和相對熵是完全等價的管毙。
??看到這里,你也許會困惑為什么有KL散度和交叉熵兩種算法桌硫?為什么他們可以用來求分布的不同夭咬?什么時候可以等價使用?這是一種解釋:
- 熵的意義是對A事件中的隨機變量進行編碼所需的最小字節(jié)數(shù)铆隘。
- KL散度的意義是“額外所需的編碼長度”如果我們用B的編碼來表示A卓舵。
- 交叉熵指的是當(dāng)你用B作為密碼本來表示A時所需要的“平均的編碼長度”。
??大多數(shù)情況下膀钠,交叉熵和相對熵都是等價的掏湾,那么既然等價,顯然使用更為簡單的公式肿嘲。
一點總結(jié)
??說了那么多融击,你或許會問,熵究竟有什么用處雳窟。交叉熵常常用作算法中的損失函數(shù)尊浪。為什么可以這樣?因為機器學(xué)習(xí)算法本質(zhì)上就是讓模型學(xué)習(xí)到的分布與真實數(shù)據(jù)之間的分布越小越好封救。我們的 Kullback-Leibler 散度反映的不就是擬合程度嗎拇涤?交叉熵可以和很多概率模型完美的結(jié)合。所以一般邏輯思路是誉结,為了讓學(xué)到的模型分布更貼近真實數(shù)據(jù)分布鹅士,我們最小化模型數(shù)據(jù)分布與訓(xùn)練數(shù)據(jù)之間的KL散度,而因為訓(xùn)練數(shù)據(jù)的分布是固定的惩坑,因此最小化KL散度等價于最小化交叉熵掉盅。因為等價,而且交叉熵更簡單更好計算以舒,所以我們還是使用交叉熵做為主要的計算公式趾痘。
我的掘金:WarrenRyan
我的簡書:WarrenRyan
歡迎關(guān)注我的博客獲得第一時間更新 https://blog.tity.online
我的Github:StevenEco