1. 程式人生 > >簡單的交叉熵損失函式,你真的懂了嗎?

簡單的交叉熵損失函式,你真的懂了嗎?

說起交叉熵損失函式「Cross Entropy Loss」,腦海中立馬浮現出它的公式:

L=[ylogy^+(1y)log(1y^)]

我們已經對這個交叉熵函式非常熟悉,大多數情況下都是直接拿來使用就好。但是它是怎麼來的?為什麼它能表徵真實樣本標籤和預測概率之間的差值?上面的交叉熵函式是否有其它變種?也許很多朋友還不是很清楚!沒關係,接下來我將盡可能以最通俗的語言回答上面這幾個問題。

1. 交叉熵損失函式的數學原理

我們知道,在二分類問題模型:例如邏輯迴歸「Logistic Regression」、神經網路「Neural Network」等,真實樣本的標籤為 [0,1],分別表示負類和正類。模型的最後通常會經過一個 Sigmoid 函式,輸出一個概率值,這個概率值反映了預測為正類的可能性:概率越大,可能性越大。

Sigmoid 函式的表示式和圖形如下所示:

g(s)=11+es
這裡寫圖片描述

其中 s 是模型上一層的輸出,Sigmoid 函式有這樣的特點:s = 0 時,g(s) = 0.5;s >> 0 時, g ≈ 1,s << 0 時,g ≈ 0。顯然,g(s) 將前一級的線性輸出對映到 [0,1] 之間的數值概率上。這裡的 g(s) 就是交叉熵公式中的模型預測輸出 。

我們說了,預測輸出即 Sigmoid 函式的輸出表徵了當前樣本標籤為 1 的概率:

y^=P(y=1|x)

很明顯,當前樣本標籤為 0 的概率就可以表達成:

1y^=P(y=0|x)

重點來了,如果我們從極大似然性的角度出發,把上面兩種情況整合到一起:

P(y|x)=y^y(1y^)1y

不懂極大似然估計也沒關係。我們可以這麼來看:

當真實樣本標籤 y = 0 時,上面式子第一項就為 1,概率等式轉化為:

P(y=0|x)=1y^

當真實樣本標籤 y = 1 時,上面式子第二項就為 1,概率等式轉化為:

P(y=1|x)=y^

兩種情況下概率表示式跟之前的完全一致,只不過我們把兩種情況整合在一起了。

重點看一下整合之後的概率表示式,我們希望的是概率 P(y|x) 越大越好。首先,我們對 P(y|x) 引入 log 函式,因為 log 運算並不會影響函式本身的單調性。則有:

logP(y|x)=log(y^y(1y^)1y)=ylogy^+(1y)log(1y^)

我們希望 log P(y|x) 越大越好,反過來,只要 log P(y|x) 的負值 -log P(y|x) 越小就行了。那我們就可以引入損失函式,且令 Loss = -log P(y|x)即可。則得到損失函式為:

L=[ylogy^+(1y)log(1y^)]

非常簡單,我們已經推匯出了單個樣本的損失函式,是如果是計算 N 個樣本的總的損失函式,只要將 N 個 Loss 疊加起來就可以了:

L=i=1Ny(i)logy^(i)+(1y(i))log(1y^(i))

這樣,我們已經完整地實現了交叉熵損失函式的推導過程。

2. 交叉熵損失函式的直觀理解

可能會有讀者說,我已經知道了交叉熵損失函式的推導過程。但是能不能從更直觀的角度去理解這個表示式呢?而不是僅僅記住這個公式。好問題!接下來,我們從圖形的角度,分析交叉熵函式,加深大家的理解。

首先,還是寫出單個樣本的交叉熵損失函式: