1.介紹:
當我們開發一個分類模型的時候,我們的目標是把輸入映射到預測的概率上,當我們訓練模型的時候就不停地調整參數使得我們預測出來的概率和真是的概率更加接近。
這篇文章我們關注在我們的模型假設這些類都是明確區分的,假設我們是開發一個二分類模型,那么對應於一個輸入數據,我們將他標記為要么絕對是正,要么絕對是負。比如,我們輸入的是一張圖片,來判斷這張圖片是蘋果還是梨子。
在訓練過程中,我們可能輸入了一張圖片表示的是蘋果,那么對於這張輸入圖片的真實概率分布為y=(蘋果:1,梨子:0),但是我們的模型可能預測出來的是另一種概率分布y`(蘋果:0.4,梨子:0.6),然后我們發現了在這張輸入圖片上的真實概率分布和預測出來的概率分布差別很大,所以我們要調整參數,來使得這兩個分布更加接近。
但是我們怎么定義這個接近呢?也就是我們如何去衡量y,y`的接近程度?
在這里我們介紹一下一種衡量方式交叉熵(Cross-Entropy),然后說明一下為什么這種方式適用於分類問題。
2.熵(Entropy):
熵的概念來自物理中的熱力學,表示熱力學系統中的無序程度,我們說的熵是信息論中的熵,表示對不確定性的測量,熵越高,能傳輸的信息越多,熵越少,傳輸的信息越少。舉個例子說,當你站在一條公路旁邊,看着車流來來往往,然后,你想告訴你的朋友每個車型號,但是只有一個二進制的信道,僅僅可以傳輸0,1序列,然后這個通訊相當的昂貴,十元1bit。你需要很多個二進制序列來表示每一個車型號。那么你該怎么來編碼這些車的型號呢?會使用相同長度的bit來表示豐田Camry和奧迪Q7么? 當然不會了,因為你知道豐田Camry比奧迪Q7普遍多了,所以你會用更少的bit來編碼豐田。換成數學的角度來看,其實就是我們把這個隨便經過一個車,把這個車是豐田Camry還是奧迪Q7看成隨機事件,用隨機變量X表示,所以我們在做的就是用X的分布來減少我們發送的bit的平均長度。
也就是我們現在有了觀測到的概率分布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。
5.預測:
通過上面的描述和介紹,我們應該很高興使用交叉熵來比較兩個分布y,y`之間的不同,然后我們可以用所有訓練數據的交叉熵的和來作為我們的損失,假如用n來表示我們訓練數據的數量,則損失loss為:
來對這個函數求最小值我們就可以求到最好的參數來使得y和y`最接近。
6.似然(Likelihood):
我們來看看另一種關於兩個分布之間差異的測量標准–似然,這種標准更加直接,似然越大說明兩個分布越接近,在分類問題中,我們會選擇那些多數時候預測對了的模型。因為我們總是假設所有的數據點都是獨立同分布的,對於所有數據的似然就可以定義為所有單個數據點的似然的乘積:
對於第n個數據他的似然怎么算呢?其實很簡單,就是簡單的y*y,來看一下我們最初的那個例子y={蘋果:1,梨子:0},y`={蘋果:0.4,梨子:0.6},所以似然就等於:
所以這里我們是不是可以考慮一下使用極大似然估計法來求最優參數呢?也就是求似然函數的極大值點。我們來對這個似然函數動一點點手腳。
我們知道對數函數使連續單調函數,我們要求似然函數的極大值等同於我們要求對數似然函數的極大值,然后我們取一個負,就等同於求負對數似然函數的極小值:
這樣,我們就可以把似然函數中的累積連乘變成累加了。而且我們知道我們的觀測結果y中兩個元素必有一個元素是1,另一個元素是0.則對數似然函數為:
然后我們看看所有的數據的負對數似然:
看着有沒有一點眼熟?這就是我們上面的所有數據的交叉熵:
7.總結:
當我們做一個分類模型的時候,我們需要一種方法去衡量真實概率分布y和預測概率分布y`之間的差異,然后在訓練過程中調整參數來減小這個差異。在這篇文章中我們可以看到交叉熵是一種不錯的可行的選擇,通過上面的這些等式可以看到,我們求交叉熵的極小值也就等同於我們求負對數似然的極小值。