當咱們開發一個分類模型的時候,咱們的目標是把輸入映射到預測的機率上,當咱們訓練模型的時候就不停地調整參數使得咱們預測出來的機率和真是的機率更加接近。api
這篇文章咱們關注在咱們的模型假設這些類都是明確區分的,假設咱們是開發一個二分類模型,那麼對應於一個輸入數據,咱們將他標記爲要麼絕對是正,要麼絕對是負。好比,咱們輸入的是一張圖片,來判斷這張圖片是蘋果仍是梨子。函數
在訓練過程當中,咱們可能輸入了一張圖片表示的是蘋果,那麼對於這張輸入圖片的真實機率分佈爲y=(蘋果:1,梨子:0),可是咱們的模型可能預測出來的是另外一種機率分佈y`(蘋果:0.4,梨子:0.6),而後咱們發現了在這張輸入圖片上的真實機率分佈和預測出來的機率分佈差異很大,因此咱們要調整參數,來使得這兩個分佈更加接近。工具
可是咱們怎麼定義這個接近呢?也就是咱們如何去衡量y,y`的接近程度?編碼
在這裏咱們介紹一下一種衡量方式交叉熵(Cross-Entropy),而後說明一下爲何這種方式適用於分類問題。3d
熵的概念來自物理中的熱力學,表示熱力學系統中的無序程度,咱們說的熵是信息論中的熵,表示對不肯定性的測量,熵越高,能傳輸的信息越多,熵越少,傳輸的信息越少。舉個例子說,當你站在一條公路旁邊,看着車流來來每每,而後,你想告訴你的朋友每一個車型號,可是隻有一個二進制的信道,僅僅能夠傳輸0,1序列,而後這個通信至關的昂貴,十元1bit。你須要不少個二進制序列來表示每個車型號。那麼你該怎麼來編碼這些車的型號呢?會使用相同長度的bit來表示豐田Camry和奧迪Q7麼? 固然不會了,由於你知道豐田Camry比奧迪Q7廣泛多了,因此你會用更少的bit來編碼豐田。換成數學的角度來看,其實就是咱們把這個隨便通過一個車,把這個車是豐田Camry仍是奧迪Q7當作隨機事件,用隨機變量X表示,因此咱們在作的就是用X的分佈來減小咱們發送的bit的平均長度。blog
也就是咱們如今有了觀測到的機率分佈y,y_i = P(X=x_i)。咱們要使用平均最小的bit,因此咱們應該爲x_i 分配log(1/y_i) 個比特。對全部的x_i 咱們都有一個對應的最小須要分配的bit長度,那麼咱們對這個log(1/y_i)求指望也就獲得了X的熵的定義了:事件
假如說咱們用這個分佈來做爲咱們來對事件編碼的一個工具,熵就衡量了咱們用這個正確的分佈y來對事件編碼所能用的最小的bit 長度,咱們不能用更短的bit來編碼這些事件或者符號了。圖片
相對的,交叉熵是咱們要對y這個分佈去編碼,可是咱們用了一些模型估計分佈y`。這裏的話經過y`這個分佈咱們獲得的關於x_i的最小編碼長度就變成了log(1/y`_i),可是呢,咱們的指望還是關於真是分佈y的。因此交叉熵的定義就變成了:開發
交叉熵是大於等於熵的,由於咱們使用了錯誤的分佈y`會帶來更多的bit使用。當y和y`相等的時候,交叉熵就等於熵了。數學
KL鬆散度和交叉熵的區別比較小,KL鬆散度又叫作相對熵,從定義很好看出區別:
這個意思就是說咱們要編碼一個服從y分佈的隨機變量,假設咱們使用了一些數據估計出來這個隨機變量的分佈是y`,那麼咱們須要用比真實的最小bit多多少來編碼這個隨機變量。這個值是大於等於0的,而且當,y和y`相等的時候才爲0。注意這裏對交叉熵求最小和對KL鬆散度求最小是同樣的。也就是咱們要調整參數使得交叉熵和熵更接近,KL鬆散度越接近0,也就是y`越接近y。
經過上面的描述和介紹,咱們應該很高興使用交叉熵來比較兩個分佈y,y`之間的不一樣,而後咱們能夠用全部訓練數據的交叉熵的和來做爲咱們的損失,假如用n來表示咱們訓練數據的數量,則損失loss爲:
來對這個函數求最小值咱們就能夠求到最好的參數來使得y和y`最接近。
咱們來看看另外一種關於兩個分佈之間差別的測量標準–似然,這種標準更加直接,似然越大說明兩個分佈越接近,在分類問題中,咱們會選擇那些多數時候預測對了的模型。由於咱們老是假設全部的數據點都是獨立同分布的,對於全部數據的似然就能夠定義爲全部單個數據點的似然的乘積:
對於第n個數據他的似然怎麼算呢?其實很簡單,就是簡單的y*y,來看一下咱們最初的那個例子y={蘋果:1,梨子:0},y`={蘋果:0.4,梨子:0.6},因此似然就等於:
因此這裏咱們是否是能夠考慮一下使用極大似然估計法來求最優參數呢?也就是求似然函數的極大值點。咱們來對這個似然函數動一點點手腳。
咱們知道對數函數使連續單調函數,咱們要求似然函數的極大值等同於咱們要求對數似然函數的極大值,而後咱們取一個負,就等同於求負對數似然函數的極小值:
這樣,咱們就能夠把似然函數中的累積連乘變成累加了。並且咱們知道咱們的觀測結果y中兩個元素必有一個元素是1,另外一個元素是0.則對數似然函數爲:
而後咱們看看全部的數據的負對數似然:
看着有沒有一點眼熟?這就是咱們上面的全部數據的交叉熵:
當咱們作一個分類模型的時候,咱們須要一種方法去衡量真實機率分佈y和預測機率分佈y`之間的差別,而後在訓練過程當中調整參數來減少這個差別。在這篇文章中咱們能夠看到交叉熵是一種不錯的可行的選擇,經過上面的這些等式能夠看到,咱們求交叉熵的極小值也就等同於咱們求負對數似然的極小值。