叉熵損失函數(Cross Entropy)

叉熵損失函數(Cross Entropy)

  我們在邏輯迴歸算法中引入了交叉熵函數,但是上一次,我並沒有對交叉熵損失函數做一個詳細的解釋。這裏就補上。損失函數又叫做誤差函數,用來衡量算法的運行情況.在分類中,都是和分類錯誤的數量正相關的,分類錯誤越多,損失也就越大。
  我們在邏輯迴歸中引出,交叉熵,當時說的是如果分錯一個類別,就會產生損失。J(θ)=y^lny+(1y^)ln(1y)J(θ)=\hat ylny+(1-\hat y)ln(1-y),可以看到這個公式,如果你把類別爲1的預測爲分類爲1的,則不會產生損失,同理,把類別爲0的預測爲類別爲0的也不會產生損失,此外,分錯之後,損失函數計算結果是1,就會產生損失。
  但是我們預測出來的結果y^\hat y實際上是一個概率值,不可能嚴格的等於0或者1,一般情況下還是會產生損失,但是這個函數保證了,當真實類別y=1時,預測真實類別概率接近1,產生的誤差就小,反之y=0,則預測爲類別1的概率越小,誤差越小。這個具體的分析把y=0的情況和y=1的情況帶入到損失後很容易就分析出來。
  事實上,我們知道在給定樣本的x條件下,對樣本的類別做一個估計,實際上就是求p(yx)p(y|x)的概率,如果是二分類,設類別爲1表示正例,不爲1表示負例,則p(y=1x)p(y=1|x)就表示分類爲正例的概率。這個概率使我們所要求的概率。我們假設數據的類別是服從0-1分佈的(伯努利分佈),則我們對於數據是正類的預測概率是y^\hat y。則在給定這個預測概率的條件下,我們的樣本真實的類別所服從的分佈可以記爲p(yy^)=y^y(1y^)1yy0,1p(y|\hat y)=\hat y^y(1-\hat y)^{1-y}\quad y \in {0,1}。這個公式是伯努利分佈的公式。
  我們現在假設已知y^\hat y,而y^\hat y是我們根據xx算出來的,所以它是xx的函數,我們可以把這個公式改寫成p(yx)=y^y(1y^)1yy0,1p(y|x)=\hat y^y(1-\hat y)^{1-y}\quad y \in {0,1}。我們對這個概率函數取對數,因爲對數似乎單調遞增函數,所以取對數之後不影響極值點。log p(yx)=ylogy^+(1y)log(1y^)y0,1log\ p(y|x)=ylog\hat y+(1-y)log(1-\hat y)\quad y \in {0,1},我們想要讓給定數據的條件下,算出來y的概率更大, 就是要讓這個log p(yx)log\ p(y|x)更大,也就是讓等式右邊的部分更大。但是我們採用的是梯度下降的方法,我們需要對優化目標求最小,所以前面加個負號log p(yx)=ylogy^(1y)log(1y^)y0,1-log\ p(y|x)=-ylog\hat y-(1-y)log(1-\hat y)\quad y \in {0,1},這就得到了交叉熵損失,對損失函數求最小,就是對給定樣本條件下,讓其分類的概率取最大。
  此外,作爲損失函數一般都有一個特點,如果需要使用梯度下降(包括反向傳播)系列算法的時候,一般都還有一個要求就是函數是凸(凹)函數,這是凸優化的基礎,也就意味着需要損失後函數的二階導數恆負(恆正)。
  我們對每一個訓練樣本能夠算出一個損失,如果我們把所有的樣本損失求和就得到了整個數據集的損失。我們的目的就是讓整個損失最小,我們的模型預測的也就越精確。但是事實上,很多損失函數都滿足這個特性,但是爲什麼邏輯迴歸中對交叉熵損失情有獨鍾呢?這個問題可以直接看推導。
  因爲邏輯迴歸使用的是sigmoid做了概率的歸一化,這樣我們對輸出概率做損失,然後反傳損失到參數上,相當於做了一個函數的複合。
在這裏插入圖片描述
  這個推導說明儘管我們使用了交叉熵損失和sigmoid對預測值做了概率歸一化,這兩個函數都是比較複雜的,但是將兩個函數組合起來之後,我們需要更新參數θ的時候,對θ求出來的導數卻是非常簡單,這樣在梯度下降的時候,可以省去很多複雜的計算。這也解釋了,爲什麼sigmoid和交叉熵損失是如此的搭配。

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