損失函數的目的是為了定量描述不同模型(例如神經網絡模型和人腦模型)的差異。
交叉熵,顧名思義,與熵有關,先把模型換成熵這么一個數值,然后用這個數值比較不同模型之間的差異。
為什么要做這一步轉換,原因是要直接比較兩個模型,前提是兩個模型是同一種類型,比如都是高斯分布,我們可以比較均值和方差。但現實中,我們要比較的兩種模型往往不是同一種類型,甚至我們都不知道是什么類型。所以我們通過熵實現不同類型概率模型的公度。
熵的前置知識
1. 信息量
衡量一個信息有沒有信息量,不是看這個消息你知不知道,關鍵是看能帶來多少確定性,也可以說能消除多少不確定性。
例如有8支隊伍參加比賽,其中一支隊伍名為“AI小隊”。理論上來說,“AI小隊”奪冠概率為1/8。但如果告訴你“AI小隊”奪冠了,奪冠概率從1/8變為百分之百;但如果告訴你“AI小隊”進入總決賽了,奪冠概率從1/8變為1/2,但直觀上感覺這個信息量不如奪冠信息的信息量高。
通過上述例子我們大概能明白不同的信息,含有的信息量是不同的。那如何定義信息量呢?
***題外話***
所謂定義,就是人為規定它的意義,給出一個表達式,至于這個表達式為什么這么寫而不那么寫,原因是最先提出的人就是這么寫的,并且邏輯得到了自洽,后人為了統一標準,便沿用了這個定義。你也可以給出自己的定義,但為了讓體系自洽,可能其他與該定義相關的表達式就要重寫。
首先,從直觀上來說,一件事發生的概率越低,其包含的信息量越大;反之一件事發生的概率越大,包含的信息量越少。例如,我告訴你太陽每天東升西落,這對你來說沒有任何信息量,因為這件事情的概率是1;但假如我告訴你下一期雙色球中獎號碼是某某某(假如是正確的話),那這個消息的信息量就很大了。因此信息量與事件發生的概率是相關的。
其次,假如一個事件可以被分解成多個事件,該事件的信息量等于多個事件信息量的和。現在我們假設是信息量的一個表達式,根據上面舉的例子,該表達式應該滿足如下要求:
(AI小隊奪冠(進決賽且贏得決賽)) =?
(AI小隊進入決賽)+
(AI小隊進入決賽后還贏了決賽)
乘法變加法,熟悉的感覺,是log!!!信息量能不能定義成呢,其中
為事件
發生的概率。如此以來第二個條件滿足了,但是這樣的話信息量會隨著事件發生概率的增大而增大,那怎么辦呢?加個負號。
所以如果我們把一個事件的信息量定義為如下公式,邏輯就能自洽:
通常我們log以2為底,計算出的信息量的單位是比特(bit)。原因是計算機是二進制的,我們的信息量衡量了一個信息的最短編碼(不理解的同學可忽略)。
2.熵
通過上面的分析,我們給出了信息量的定義。信息量可以理解成一個事件從原來的不確定性變得確定難度有多大,信息量比較大說明難度比較高。熵的理解也類似,不過熵衡量的不是某個具體事件,而是一個系統中所有的事件,即一個系統從原來的不確定到確定,其難度有多大。
我們可以把一場比賽看作一個系統。假如兩個實力相近的隊伍比賽,兩只隊伍勝利的概率都是,那這兩只隊伍贏球的信息量都是:
但如果是兩只實力懸殊的隊伍比賽,隊伍A勝利的概率是99%,隊伍B勝利的概率為1%,那兩只隊伍贏球的信息量分別為:
那球賽的熵是兩只隊伍贏球的信息量的加和么?
顯然不是,因為如果是加和的話,實力懸殊隊伍的比賽結果相對來說是確定的,大概率是實力強的隊伍贏得比賽,所以它的不確定性是低的,但此時它的熵卻是高的,所以熵并不是信息量的簡單加和。
我們需要考慮每個事件對系統貢獻的信息量,事件只有發生了,才會貢獻信息量,所以系統的熵定義為信息量的期望:
3.相對熵(KL散度)
我們的目的是要比較兩個模型,最簡單的方法就是把概率模型的熵計算出來然后直接比較熵的數值,但并不是所有概率模型我們都能求熵。因此引出另外一個概念——相對熵,也叫KL散度,其定義如下:
KL散度等于0表明兩個分布是一樣的,不等于0表示兩者有差別。其中和
分別表示兩個概率分布,
表示以
為基準(
在前),用
近似
式損失了多少信息,
表示某個事件在系統Q中的信息量,
表示交叉熵,
表示概率分布
的熵,我們以
為基準的話,這個值是不會變的。
由公式可知,和
都是大于0的,但是兩者誰更大呢?這是很重要的,因為如果KL散度大于零,要使得KL越接近于0,就得讓交叉熵越小;如果KL散度小于0,要使得KL散度越接近于0,就得讓交叉熵越大。
吉布斯不等式已經證明KL散度是恒大于等于0的(感興趣的小伙伴可自行檢索證明過程),那現在我們如果想讓概率分布接近
,只需要最小化兩者的交叉熵即可,也就是說交叉熵可作為損失函數對模型進行優化。
通過前置知識,我們引出了交叉熵,并且明白了為什么交叉熵可以衡量兩個概率分布之間的差異,也就是說可以用作損失函數。那么在神經網絡中,我們該如何利用交叉熵呢?首先我們回顧一下交叉熵的定義:
我們只需要用訓練神經網絡場景中的變量替換公式中的變量即可。
表示分類的個數,在判斷圖像是不是貓的二分類任務中,
的取值只有兩個,即
表示圖像是貓,
表示圖像不是貓;對應的,
表示每個事件發生的概率,即當前圖像是貓的概率和不是貓的概率,在模型訓練場景中,我們以人腦中的概率模型為基準,即以標簽為基準,所以
,
,其中
表示人類給圖像的標簽,是貓為1,不是貓為0;
則對應模型預測的當前圖像是貓的概率,即
,而不是貓的概率就是
,所以交叉熵用于神經網絡中的形式如下:
當然這里是二分類的情況,如果是多分類,交叉熵可進一步寫為:
其中表示類別數,
表示是類別
的概率(標簽),
表示模型預測的是類別
的概率。
至此,我們通過信息量和熵引出交叉熵,并介紹了交叉熵是如何用于損失計算的,希望能夠對有需要的伙伴提供幫助,如果文中有歧義或者有錯誤的地方,歡迎大家在評論區指出!