詳細剖析機器學習中的損失函數---交叉熵

上一篇文章總結了機器學習需要掌握的數學知識點—詳細整理,這一節針對裏面的第八章,第一節的前四個小段內容進行一個詳細的整理,如有不當之處,歡迎各位大神指出。

所謂機器學習,就是“使用算法解析數據,從中學習,然後對世界上的某件事情做出決定或預測”。這句話就表明,建立一個合適的數學模型是機器學習的核心任務。那麼問題來了,什麼纔是合適的數學模型?是否隨意建立一個數學模型就可以讓計算機去學了?答案顯然不是。只有預測結果令人滿意的數學模型纔是我們需要的,通過‘最小化損失函數’的方法可以達到這一目的。本章節的重點就是圍繞機器學習中的損失函數進行深入淺出的說明。

本章節涉及的主要知識點如下:

l 信息論與交叉熵損失函數的關係
l 交叉熵損失函數的定義及應用
l 如何通過代碼實現交叉熵損失函數
l 解決多分類與二分類的損失函數
l 均方差損失函數與其他自定義損失函數

8.1 交叉熵損失函數

本節重點介紹機器學習中最常用的損失函數,交叉熵損失函數的概念及應用。通過舉例的方式讓讀者對交叉熵的概念有一個直觀的瞭解。

信息論與交叉熵

信息論

前面我們說了,“使用算法解析數據,從中學習,然後對世界上的某件事情做出決定或預測”即所謂機器學習。這裏學習的依據是什麼?就是我們獲取的外部信息。那麼這與信息論與交叉熵又有什麼關係呢?我們先來看一看信息論要說什麼。

信息論是做什麼的呢?信息論是從物理學中借鑑而來,它是一種用來描述概率分佈或者概率分佈之間相似性的手段。它的基本思想就是,小概率事件的發生一定伴隨着大量的信息。通俗的說就是,一個不太可能或者很少見的事情發生了一定比通常時常發生的常態事件包含更多外部信息。比如有一則消息是,‘一個女生結婚三個月後懷孕了’,這是一件很平常的事情,信息量非常的少且不會引起關注。但是如果消息改爲‘一個男生結婚三個月後懷孕了’,這就是一件超乎想象的事情了,信息量就非常的大。

我們通過信息論的基本思想對信息進行量化,通常遵循以下三個性質:

• 非常可能發生的事件信息量要比較少,並且極端情況下,確定能夠發生的事件應該沒有信息量。

• 較不可能發生的事件具有更高的信息量。

• 獨立事件應具有倍增量的信息。例如,投擲的硬幣兩次正面朝上傳遞的信息量,應該是投擲一次硬幣正面朝上的信息量的兩倍。

爲了滿足上述三點性質,我們可以定義一個事件的自信息(self-information)爲:
在這裏插入圖片描述
對上述公式的說明:

  1. P(x)P(x)是隨機事件X=xX=x發生的概率,因此是大於0且小於1(這裏要注意的是P(x)P(x)一定是大於0,否則無意義);

  2. 我們用loglog來表示自然對數,其底數爲ee,這個對數是一個增函數,因此我們在前面增加一個負號:事件發生的可能性越大,I(x)I(x)就越小;

  3. I(x)I(x) 的單位是奈特,1奈特代表一個事件發生概率爲1/e1/e時所傳遞的信息量。


介紹了信息論關於機器學習的相關數學知識後,我們再來介紹另外一個重要的概念:熵。

什麼是熵?熵就是描述上述信息量的期望值的一種術語,數學表述如下:
在這裏插入圖片描述
這裏關於期望值的概念大家可以參考7.1節-數學期望進行回顧。在實際應用中,我們會通過香農熵(Shannon entropy)對整個事件概率分佈的不確定性總量進行量化。數學表述如下:
在這裏插入圖片描述
不難發現公式8.3和公式8.2其實是同一個公式,E(X)E(X)就是隨機變量的數學期望,相關公式如下:

離散時:
在這裏插入圖片描述

連續時:
在這裏插入圖片描述
帶入公式8.3後得到:

離散時:
在這裏插入圖片描述
連續時:
在這裏插入圖片描述
上述公式中kk代表類別,nn代表類別總數。

爲了便於讀者對這一概念的理解,我們舉一個簡單的例子。

小王一家有六口人,大家喫飯的偏好各不相同,爲了滿足大家各自的需要同時又不會增加過大的做飯工作量,小王家對喫飯主食的規定如下:

早餐:一律吃麪包

午餐:三份米飯,三份麪條

晚餐:兩份水餃,兩份包子,兩份米飯

現在我們來分別計算一下這三頓主食的香農熵。
在這裏插入圖片描述
很顯然,按照這種生活模式,早上吃麪包是必然事件,中午喫米飯或者麪條的可能性居中,晚上的主食變動較大,難以猜測。
在這裏插入圖片描述
圖8.1形象的展示了香農熵與事件概率之間的關係,從上圖我們很容易發現,概率接近1或者0這種確定性事件時,香農熵取值變小,當概率趨近0.5(均勻分佈)的時候,香農熵取值達到最大。

交叉熵的定義

前面我們介紹了信息論和熵的基本概念,現在進入本節的主題-交叉熵。交叉熵是如何應用到機器學習或者深度學習中的呢?

要想搞明白這個問題,我們先來看一看什麼是損失函數。損失函數(loss function)是用來估量模型的預測值與真實值的不一致程度,它是一個非負函數。一般來說,損失函數越小,模型的魯棒性越好。這裏的‘損失’指我們爲了實現某一個目的而搭建的模型的預測結果與與真實結果之間的差距。(說明:現實生活中,我們往往知道真實事件的結果,但是通向這個結果的真是模型是不存在的,我們要做的就是搭建一個逼近真實模型的近似模型,並利用這個模型對輸入條件進行預測)

在這裏插入圖片描述

上圖描述了損失函數的基本原理,損失函數最大的作用就是衡量機器學習的預測能力,減少損失函數的目的就是儘量使得真實曲線接近預測曲線(當然也不是越接近越好,詳細的說明見過擬合和欠擬合的章節)。

現在我們再來看一看交叉熵的定義是如何說明的,在深度學習領域,交叉熵是用來刻畫兩個概率分佈方向向量之間的距離的,是分類問題中使用比較廣的一種損失函數。從這句話我們顯然知道,距離越小,函數越精確。那麼問題來了,我們如何判斷兩個概率分佈之間的這個距離是大還是小?我們接着往下看-交叉熵的計算公式。

交叉熵的計算公式

在這裏插入圖片描述

式8.9即爲交叉熵的計算公式,看起來與式8.6和8.7類似,區別在於公式的左邊是H(P,Q)H(P,Q)而非H(X)H(X),前者代表概率分佈QQ對概率分佈PP估計的準確程度。所以在使用交叉熵損失函數時,一般設定PP代表準確結果,QQ代表預測值。

現在的問題是公式8.9是如何得到的?通過8.1.1節我們知道,一個分佈的香農熵是指遵循這個分佈的事件所產生的期望信息總量。這裏我們做一個約定,對於XX的同一個隨機變量如果有兩個單獨的概率分佈P(x)P(x)Q(x)Q(x),則可以使用KLKL散度來衡量這兩個分佈之間的距離,相關公式如下:

在這裏插入圖片描述
KLKL散度的定義我們知道它是一個非負值,當DKLD_{KL}取0時,表示P(x)P(x)Q(x)Q(x)取值處處相同。在機器學習算法中,經常會用到KLKL散度來衡量兩個概率分佈之間的距離,但是實際做法中我們不會直接使用KLKL散度,而是使用它的替代形式,也就是公式8.9所示的交叉熵。交叉熵和KLKL散度關係密切,用H(P,Q)H(P,Q)表示交叉熵,則有:
在這裏插入圖片描述
將8.6、8.10帶入8.11得到
在這裏插入圖片描述公式8.12簡化後得到
在這裏插入圖片描述
很顯然,式8.9就是式8.13的loss函數形式。

交叉熵的應用

我們現在搞明白了交叉熵的計算模型,爲了便於理解,我們以MINIST手寫體數字識別爲例,詳細說明交叉熵是如何判斷數學模型的預測結果是否與真實值接近的。

手寫體識別問題可以被歸納爲一個十分類問題,主要是判斷一張圖片中的阿拉伯數字是0-9中的哪一個。解決此類分類問題最常用的方法是設置n個網絡的輸出節點,節點的個數要與類別的個數一致。對於網絡輸入的每一個樣本,神經網絡的輸出都是一個n維的向量,向量中的每一個結果都對應n個類別中的某一類別的概率值。

例如,在理想情況下,如果一個樣本屬於類別k,那麼這個類別所對應的輸出節點的輸出值應該爲1,其他節點的輸出值均爲0.以手寫體識別數字1爲例,網絡模型的輸出結果可能是【0.1,0.8,0.1,.0,.0,.0,.0,.0,.0,.0】或者【0.2,0.5,0.2,0.1,.0,.0,.0,.0,.0,.0,】。根據輸出結果,我們的直覺是選擇其中概率最大的那個作爲最終答案,所以這兩個結果都能判斷出數字的結果爲1.當然最理想的輸出結果一定是這樣的【.0,1.0,.0,.0,.0,.0,.0,.0,.0,.0,】.

現在我們利用交叉熵的公式分別對網絡模型的兩個輸出結果進行計算,判斷哪個結果與理想結果最爲接近。計算過程如下:

針對結果【0.1,0.8,0.1,.0,.0,.0,.0,.0,.0,.0】
在這裏插入圖片描述
針對結果【0.2,0.5,0.2,0.1,.0,.0,.0,.0,.0,.0,】

在這裏插入圖片描述
顯然,我們會更傾向於第一個結果。

在這裏插入圖片描述
關於機器學習需要掌握的數學知識點的其餘內容,我會持續更新,如有不當之處,歡迎指正,不勝感激。

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