交叉熵損失函數詳解

原文鏈接:https://blog.csdn.net/m0_37870649/article/details/100706515

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

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

g(s)=\frac{1}{1+e^{-s}}

 

 

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

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

 

\hat y=P(y=1|x)

 

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

 

1-\hat y=P(y=0|x)

 

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

 

P(y|x)=\hat y^y\cdot (1-\hat y)^{1-y}

 

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

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

 

P(y=0|x)=1-\hat y

 

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

 

P(y=1|x)=\hat y

 

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

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

 

log\ P(y|x)=log(\hat y^y\cdot (1-\hat y)^{1-y})=ylog\ \hat y+(1-y)log(1-\hat y)

 

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

 

L=-[ylog\ \hat y+(1-y)log\ (1-\hat y)]

 

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

 

L=-\sum_{i=1}^Ny^{(i)}log\ \hat y^{(i)}+(1-y^{(i)})log\ (1-\hat y^{(i)})

 

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

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

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

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

 

L=-[ylog\ \hat y+(1-y)log\ (1-\hat y)]

 

我們知道,當 y = 1 時:

 

L=-log\ \hat y

 

這時候,L 與預測輸出的關係如下圖所示:

 

看了 L 的圖形,簡單明瞭!橫座標是預測輸出,縱座標是交叉熵損失函數 L。顯然,預測輸出越接近真實樣本標籤 1,損失函數 L 越小;預測輸出越接近 0,L 越大。因此,函數的變化趨勢完全符合實際需要的情況。

當 y = 0 時:

 

L=-log\ (1-\hat y)

 

這時候,L 與預測輸出的關係如下圖所示:

 

 

同樣,預測輸出越接近真實樣本標籤 0,損失函數 L 越小;預測函數越接近 1,L 越大。函數的變化趨勢也完全符合實際需要的情況。

從上面兩種圖,可以幫助我們對交叉熵損失函數有更直觀的理解。無論真實樣本標籤 y 是 0 還是 1,L 都表徵了預測輸出與 y 的差距。

另外,重點提一點的是,從圖形中我們可以發現:預測輸出與 y 差得越多,L 的值越大,也就是說對當前模型的 “ 懲罰 ” 越大,而且是非線性增大,是一種類似指數增長的級別。這是由 log 函數本身的特性所決定的。這樣的好處是模型會傾向於讓預測輸出更接近真實樣本標籤 y。

3. 交叉熵損失函數的其它形式

什麼?交叉熵損失函數還有其它形式?沒錯!我剛纔介紹的是一個典型的形式。接下來我將從另一個角度推導新的交叉熵損失函數。

這種形式下假設真實樣本的標籤爲 +1 和 -1,分別表示正類和負類。有個已知的知識點是Sigmoid 函數具有如下性質:

 

1-g(s)=g(-s)

 

這個性質我們先放在這,待會有用。

好了,我們之前說了 y = +1 時,下列等式成立:

 

P(y=+1|x)=g(s)

 

如果 y = -1 時,並引入 Sigmoid 函數的性質,下列等式成立:

 

P(y=-1|x)=1-g(s)=g(-s)

 

重點來了,因爲 y 取值爲 +1 或 -1,可以把 y 值帶入,將上面兩個式子整合到一起:

 

P(y|x)=g(ys)

 

這個比較好理解,分別令 y = +1 和 y = -1 就能得到上面兩個式子。

接下來,同樣引入 log 函數,得到:

 

log\ P(y|x)=log\ g(ys)

 

要讓概率最大,反過來,只要其負數最小即可。那麼就可以定義相應的損失函數爲:

 

L=-log g(ys)

 

還記得 Sigmoid 函數的表達式吧?將 g(ys) 帶入:

 

L=-log\frac{1}{1+e^{-ys}}=log\ (1+e^{-ys})

 

好咯,L 就是我要推導的交叉熵損失函數。如果是 N 個樣本,其交叉熵損失函數爲:

 

L=\sum_{i=1}^Nlog\ (1+e^{-ys})

 

接下來,我們從圖形化直觀角度來看。當 y = +1 時:

 

L=log\ (1+e^{-s})

 

這時候,L 與上一層得分函數 s 的關係如下圖所示:

 

橫座標是 s,縱座標是 L。顯然,s 越接近真實樣本標籤 1,損失函數 L 越小;s 越接近 -1,L 越大。

另一方面,當 y = -1 時:

 

L=log(1+e^s)

 

這時候,L 與上一層得分函數 s 的關係如下圖所示:

 

同樣,s 越接近真實樣本標籤 -1,損失函數 L 越小;s 越接近 +1,L 越大。

4. 總結

本文主要介紹了交叉熵損失函數的數學原理和推導過程,也從不同角度介紹了交叉熵損失函數的兩種形式。第一種形式在實際應用中更加常見,例如神經網絡等複雜模型;第二種多用於簡單的邏輯迴歸模型。

5.多分類交叉熵

交叉熵可在神經網絡(機器學習)中作爲損失函數,p表示真實標記的分佈,q則爲訓練後的模型的預測標記分佈,交叉熵損失函數可以衡量p與q的相似性。

 

交叉熵作爲損失函數還有一個好處是使用sigmoid函數在梯度下降時能避免均方誤差損失函數學習速率降低的問題,因爲學習速率可以被輸出的誤差所控制。

 

 

單次觀測下的多項式分佈

其中,C代表類別數。p代表向量形式的模型參數,即各個類別的發生概率,如p=[0.1, 0.1, 0.7, 0.1],則p1=0.1, p3=0.7等。即,多項式分佈的模型參數就是各個類別的發生概率!x代表one-hot形式的觀測值,如x=類別3,則x=[0, 0, 1, 0]。xi代表x的第i個元素,比如x=類別3時,x1=0,x2=0,x3=1,x4=0。

 

機器學習model對某個樣本的輸出,就代表各個類別發生的概率。但是,對於當前這一個樣本而言,它肯定只能有一個類別,所以這一個樣本就可以看成是一次實驗(觀察),而這次實驗(觀察)的結果要服從上述各個類別發生的概率,那不就是服從多項式分佈嘛!而且是單次觀察!各個類別發生的概率predict當然就是這個多項式分佈的參數阿。

對於多類分類問題,似然函數就是衡量當前這個以predict爲參數的單次觀測下的多項式分佈模型與樣本值label之間的似然度。

 

所以,根據似然函數的定義,單個樣本的似然函數即:

 

所以,整個樣本集(或者一個batch)的似然函數即:

而由於式子裏有累乘運算,所以習慣性的加個log函數來將累乘化成累加以提高運算速度(雖然對於每個樣本來說只有一個類別,但是哪怕是算0.2^0也是算了一遍指數函數啊,計算機可不會直接口算出1)。所以在累乘號前面加上log函數後,就成了所謂的對數似然函數:

 

而最大化對數似然函數就等效於最小化負對數似然函數,所以前面加個負號後不就是我們平常照着敲的公式嘛。。。

而這個形式跟交叉熵的形式是一模一樣的:

這裏X的分佈模型即樣本集label的真實分佈模型,這裏模型q(x)即想要模擬真實分佈模型的機器學習模型。可以說交叉熵是直接衡量兩個分佈,或者說兩個model之間的差異。而似然函數則是解釋以model的輸出爲參數的某分佈模型對樣本集的解釋程度。因此,可以說這兩者是“同貌不同源”,但是“殊途同歸”啦。

6.交叉熵概率分佈差異之間的理解https://juejin.im/post/5b40a5156fb9a04faf478a45

原文:https://blog.csdn.net/ccj_ok/article/details/78066619

原文https://zhuanlan.zhihu.com/p/38241764

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