交叉熵、KL散度、極大似然和對數似然

前言:

      本文整理自https://www.cnblogs.com/silent-stranger/p/7987708.html,感謝MaHaLo的淵博知識。

1.介紹:

      當我們開發一個分類模型的時候,我們的目標是把輸入映射到預測的概率上,當我們訓練模型的時候就不停地調整參數使得我們預測出來的概率和真是的概率更加接近。

      這篇文章我們關注在我們的模型假設這些類都是明確區分的,假設我們是開發一個二分類模型,那麼對應於一個輸入數據,我們將他標記爲要麼絕對是正,要麼絕對是負。比如,我們輸入的是一張圖片,來判斷這張圖片是蘋果還是梨子。

      在訓練過程中,我們可能輸入了一張圖片表示的是蘋果,那麼對於這張輸入圖片的真實概率分佈爲y=(蘋果:1,梨子:0),但是我們的模型可能預測出來的是另一種概率分佈y`(蘋果:0.4,梨子:0.6),然後我們發現了在這張輸入圖片上的真實概率分佈和預測出來的概率分佈差別很大,所以我們要調整參數,來使得這兩個分佈更加接近。

      但是我們怎麼定義這個接近呢?也就是我們如何去衡量預測概率分佈yi^和真實概率分佈y的接近程度?

2.熵(Entropy):

      熵的概念來自物理中的熱力學,表示熱力學系統中的無序程度,我們說的熵是信息論中的熵,表示對不確定性的測量,熵越高,能傳輸的信息越多,熵越少,傳輸的信息越少。對發生概率較高的事件,用短比特表示;對發生概率較低的事件,用長比特表示,以此來減少傳送相同信息所需要的比特長度。

      也就是我們現在有了觀測到的概率分佈y,y_i = P(X=x_i)。我們要使用平均最小的bit,所以我們應該爲x_i 分配log(1/y_i) 個比特。對所有的x_i 我們都有一個對應的最小需要分配的bit長度,那麼我們對這個log(1/y_i)求期望也就得到了X的熵的定義了:

3.交叉熵(Cross-Entropy):

      假如說我們用這個分佈來作爲我們來對事件編碼的一個工具,熵就衡量了我們用這個正確的分佈y來對事件編碼所能用的最小的bit 長度,我們不能用更短的bit來編碼這些事件或者符號了。

      相對的,交叉熵是我們要對y這個分佈去編碼,但是我們用了一些模型估計分佈y`。這裏的話通過y`這個分佈我們得到的關於x_i的最小編碼長度就變成了log(1/y`_i),但是呢,我們的期望仍是關於真是分佈y的。所以交叉熵的定義就變成了:

      交叉熵是大於等於熵的,因爲我們使用了錯誤的分佈y`會帶來更多的bit使用。當y和y`相等的時候,交叉熵就等於熵了。

4.KL 散度(KL Divergence):

       KL散度和交叉熵的區別比較小,KL散度又叫做相對熵,從定義很好看出區別:

       這個意思就是說我們要編碼一個服從y分佈的隨機變量,假設我們使用了一些數據估計出來這個隨機變量的分佈是y`,那麼我們需要用比真實的最小bit多多少來編碼這個隨機變量。這個值是大於等於0的,並且當,y和y`相等的時候才爲0。注意這裏對交叉熵求最小和對KL鬆散度求最小是一樣的。也就是我們要調整參數使得交叉熵和熵更接近,KL鬆散度越接近0,也就是y`越接近y。

       從公式可以看出,KL散度=|交叉熵|-|熵|,對於一個確定的真實概率分佈yi,它的熵是不會跟隨預測概率分佈yi^變動的常數。因此KL散度等價於交叉熵,它們之間相差一個固定的常數值。

5.預測:

       通過上面的描述和介紹,我們應該很高興使用交叉熵來比較兩個分佈y,y^之間的不同,然後我們可以用所有訓練數據的交叉熵的和來作爲我們的損失,假如用n來表示我們訓練數據的數量,則損失loss爲:

       來對這個函數求最小值我們就可以求到最好的參數來使得y和y^最接近。

6.概率和似然(Probability and Likelihood):

       “概率”描述了給定模型參數後,描述結果的合理性,而不涉及任何觀察到的數據。

       拋一枚均勻的硬幣,拋20次,問15次拋得正面的可能性有多大? 這裏的可能性就是”概率”,均勻的硬幣就是給定參數θ=0.5,“拋20次15次正面”是觀測值O。求概率P(H=15|θ=0.5)=?的概率。

       “似然”描述了給定了特定觀測值後,描述模型參數是否合理。

       拋一枚硬幣,拋20次,結果15次正面向上,問其爲均勻的可能性? 這裏的可能性就是”似然”,“拋20次15次正面”爲觀測值O爲已知,參數θ=?並不知道,求L(θ|H=15)=P(H=15|θ=0.5)的最大化下的θ 值。

       在很多實際問題中,比如機器學習領域,我們更關注的是似然函數的最大值,我們需要根據已知事件(觀測值)來找出產生這種結果最有可能的條件(參數θ),這就是極大似然。

7.對數似然(Log Likelihood):

      似然作爲衡量兩個分佈之間差異的測量標準更加直接,似然越大說明兩個分佈越接近,在分類問題中,我們會選擇那些多數時候預測對了的模型。因爲我們總是假設所有的數據點都是獨立同分布的,對於所有數據的似然就可以定義爲所有單個數據點的似然的乘積:

      對於第n個數據他的似然怎麼算呢?其實很簡單,就是簡單的y*y,來看一下我們最初的那個例子y={蘋果:1,梨子:0},y`={蘋果:0.4,梨子:0.6},所以似然就等於:

      所以這裏我們是不是可以考慮一下使用極大似然估計法來求最優參數呢?也就是求似然函數的極大值點。我們來對這個似然函數動一點點手腳。

      我們知道對數函數使連續單調函數,我們要求似然函數的極大值等同於我們要求對數似然函數的極大值,然後我們取一個負,就等同於求負對數似然函數的極小值:

      這樣,我們就可以把似然函數中的累積連乘變成累加了。而且我們知道我們的觀測結果y中兩個元素必有一個元素是1,另一個元素是0.則對數似然函數爲:

     然後我們看看所有的數據的負對數似然:

     看着有沒有一點眼熟?這就是我們上面的所有數據的交叉熵:

8.總結:

      當我們做一個分類模型的時候,我們需要一種方法去衡量真實概率分佈y和預測概率分佈y^之間的差異,然後在訓練過程中調整參數來減小這個差異。在這篇文章中我們可以看到交叉熵、KL散度、對數似然其實是等價的概念,我們可以求交叉熵、KL散度和負對數似然的極小值,來減小我們的loss。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章