1. 程式人生 > >談一談交叉熵損失函式

談一談交叉熵損失函式

關於損失函式的概念以及種類特點,可參看博主的部落格:常見的損失函式總結,談到交叉熵,就不得不提資訊熵的概念,同樣可參看博主之前的部落格:決策樹之基 —— ID3 演算法,博文中提到了資訊熵的相關知識。有了上述兩篇博文作為基礎,此文不再贅述相關概念。

交叉熵的離散函式形式

交叉熵(cross entropy)是用來評估當前訓練得到的概率分佈與真實分佈的差異情況,減少交叉熵損失就是在提高模型的預測準確率。其離散函式形式為:

H(p,q)=p(x)logq(x)
這裡,p(x)是真實分佈,q(x)是通過資料計算的估計概率。

需要說明的是,交叉熵的值越大,這種差異程度也就越大。

在二分類模型中,由於目標的可能性有兩種,因此需要分別計算預測為正例和負例概率下的交叉熵,公式為:

[ylog1yylog11]+[(1y)log11y(1y)log110]
=[ylogy+(1y)log(1y)]
其中 ylogy 是正例的交叉熵, (1y)log(1y) 則是負例的交叉熵,它們之和便構成了二分類模型的交叉熵損失函式。

兩種交叉熵損失函式的比較

下面來比較兩種交叉熵損失函式的異同。在機器學習中,會看到兩個不一樣的交叉熵損失函式,分別為:

1tjlog(yj)tjj
2tilog(yi)+(1ti)log(1yi)

該博文一開頭講到了交叉熵損失函式的離散形式,實質上,交叉熵是用來描述兩個分佈的距離的,神經網路訓練的目的就是使g(x)逼近p(x)

現在來看 softmax 作為最後一層的情況。g(x) 就是最後一層的輸出 y 。p(x) 就是我們的 one-hot 標籤。我們帶入交叉熵的定義中算一下,就會得到第一個式子。

再來看 sigmoid 作為最後一層的情況。sigmoid 作為最後一層輸出的話,應該將最後一層的每個神經元看作一個分佈,對應的 target 屬於二項分佈(target的值代表是這個類的概率),那麼第 i 個神經元交叉熵為:

tilogyi+(1ti)log(1yi)
所以,最後一層總的交叉熵損失函式就是上述所說的第二個式子。

對這兩種交叉熵損失函式的總結:這兩個交叉熵損失函式對應不同的最後一層的輸出。第一個對應的最後一層是 softmax,第二個對應的最後一層是 sigmoid。

交叉熵的優勢

最後來講講交叉熵的優勢。在模型中有時候會使用均方差作為損失函式,但是當啟用函式為 sigmoid 時,由於其在上邊界和下邊界的斜率下降十分之快。事實上,一般 sigmoid 函式的斜率最大值也只有0.25。因此,當訓練結果接近真實值時會因為梯度運算元極小,使得模型的收斂速度變得非常慢。而由於交叉熵損失函式為對數函式,在接近上邊界的時候,其仍然可以保持在高梯度狀態,因此模型的收斂速度不會受到影響