機器學習常用分類的損失函數


前言

在監督式機器學習中,無論是回歸問題還是分類問題,都少不了使用損失函數(Loss Function)。**損失函數(Loss Function)**是用來估量模型的預測值 f(x) 與真實值 y 的不一致程度。

若損失函數很小,表明機器學習模型與數據真實分布很接近,則模型性能良好;若損失函數很大,表明機器學習模型與數據真實分布差別較大,則模型性能不佳。

我們訓練模型的主要任務就是使用優化方法來尋找損失函數最小化對應的模型參數。
在討論分類問題的損失函數之前,我想先說一下模型的輸出 g(s)。一般來說,二分類機器學習模型包含兩個部分:線性輸出 s 和非線性輸出 g(s)。其中,線性輸出一般是模型輸入 x 與 參數 w 的乘積,簡寫成:s = wx;非線性輸出一般是 Sigmoid 函數,經過 Sigmoid 函數,g(s) 值被限定在 [0,1] 之間,若 s ≥ 0,g(s) ≥ 0.5,則預測為正類;若 s < 0,g(s) < 0.5,則預測為負類。
關於正類和負類的表示,通常有兩種方式:一種是用 {+1, -1} 表示正負類;另一種是用 {1, 0} 表示正負類。下文默認使用 {+1, -1},因為這種表示方法有種好處。如果使用 {+1, -1} 表示正負類,我們來看預測類別與真實類別的四種情況:

  • s ≥ 0, y = +1: 預測正確
  • s ≥ 0, y = -1: 預測錯誤
  • s < 0, y = +1: 預測錯誤
  • s < 0, y = -1: 預測正確

顯然,上面四個式子可以整合成直接看 ys 的符號即可:

  • 若 ys ≥ 0,則預測正確
  • 若 ys < 0,則預測錯誤

這里的 ys 類似於回歸模型中的殘差y-s(其中yg(s)被稱為函數間隔(“margin”));最小化分類問題中的損失函數可以看做是最大化margin的過程,任何合格的分類損失函數都應該對margin<0的樣本更大的“懲罰”。因此,在比較分類問題的各個損失函數的時候,我們就可以把 ys 當作自變量 x 軸即可,這樣更加方便。

0-1 Loss(0-1損失函數)

0-1 Loss 是最簡單也是最容易直觀理解的一種損失函數。對於二分類問題,如果預測類別 y_hat 與真實類別 y 不同(樣本分類錯誤),則 L=1;如果預測類別 y_hat 與 真實類別 y 相同(樣本分類正確),則 L=0(L 表示損失函數)。0-1 Loss 的表達式為:
在這里插入圖片描述
0-1 Loss 的曲線如下圖所示:
在這里插入圖片描述
0-1 Loss 的特點就是非常直觀容易理解。但是它存在兩個缺點

  • 0-1 Loss 對每個錯分類點都施以相同的懲罰(損失為 1),這樣對犯錯比較大的點(ys 遠小於 0,極端一點即margin接近負無窮)無法進行較大的懲罰,所有犯錯點都同等看待,這不符合常理,不太合適。
  • 0-1 Loss 不連續、非凸、不可導,難以使用梯度優化算法
    因此,實際應用中,0-1 Loss 很少使用。

Cross Entropy Loss(交叉熵損失函數)

Cross Entropy Loss 是非常重要的損失函數,也是應用最多的損失函數之一。二分類問題的交叉熵 Loss 主要有兩種形式(標簽y的定義不同):
(1)基於輸出標簽 label 的表示方式為 {0,1},也最為常見。它的 Loss 表達式為:
在這里插入圖片描述
推導過程:
從極大似然性的角度出發,預測類別的概率可以寫成:
在這里插入圖片描述
當真實樣本標簽 y = 1 時,上面式子第二項就為 1,概率等式轉化為:
在這里插入圖片描述
當真實樣本標簽 y = 0 時,上面式子第一項就為 1,概率等式轉化為:
在這里插入圖片描述
我們希望的是概率 P(y|x) 越大越好。首先,我們對 P(y|x) 引入 log 函數,因為 log 運算並不會影響函數本身的單調性。則有:
在這里插入圖片描述
希望 log P(y|x) 越大越好,反過來,只要 log P(y|x) 的負值 -log P(y|x) 越小就行了。那我們就可以引入損失函數,且令 Loss = -log P(y|x) 即可。則得到損失函數為:
在這里插入圖片描述
我們來看,當 y = 1 時:
在這里插入圖片描述
代入
在這里插入圖片描述

在這里插入圖片描述
這時候,Loss 的曲線如下圖所示:

在這里插入圖片描述
從圖中明顯能夠看出,s 越大於零,L 越小,函數的變化趨勢也完全符合實際需要的情況;
當 y = 0 時:
在這里插入圖片描述
對上式進行整理,同樣能得到:
在這里插入圖片描述
這時候,Loss 的曲線如下圖所示:

在這里插入圖片描述
從圖中明顯能夠看出,s 越小於零,L 越小,函數的變化趨勢也完全符合實際需要的情況。

(2)基於輸出標簽 label 的表示方式為 {-1,+1} (Logistics Loss),也比較常見。它的 Loss 表達式為:
在這里插入圖片描述
下面對上式做個簡單的推導,我們在 0 小節說過,ys 的符號反映了預測的准確性。除此之外,ys 的數值大小也反映了預測的置信程度。所以,從概率角度來看,預測類別的概率可以寫成:
在這里插入圖片描述
接下來,同樣引入 log 函數,要讓概率最大,反過來,只要其負數最小即可。那么就可以定義相應的損失函數為:
在這里插入圖片描述
這時候,我們以 ys 為橫坐標,可以繪制 Loss 的曲線如下圖所示:
在這里插入圖片描述
其實上面介紹的兩種形式的交叉熵 Loss 是一樣的,只不過由於標簽 label 的表示方式不同,公式稍有變化。標簽用 {-1,+1} 表示的好處是可以把 ys 整合在一起,作為橫坐標,容易作圖且具有實際的物理意義。

總結一下,交叉熵 Loss 的優點是在整個實數域內,Loss 近似線性變化。尤其是當 ys << 0 的時候,Loss 更近似線性。這樣,模型受異常點的干擾就較小。 而且,交叉熵 Loss 連續可導,便於求導計算,是使用最廣泛的損失函數之一。

Hinge Loss(合頁損失函數)

在這里插入圖片描述
Hinge Loss 的曲線如下圖所示:

在這里插入圖片描述
Hinge Loss 的形狀就像一本要合上的書,故稱為合頁損失。顯然,只有當 ys < 1 時,Loss 才大於零;對於 ys > 1 的情況,Loss 始終為零。Hinge Loss 一般多用於支持向量機(SVM)中,體現了 SVM 距離最大化的思想。而且,當 Loss 大於零時,是線性函數,便於梯度下降算法求導。
Hinge Loss 的另一個優點是使得 ys > 0 的樣本損失皆為 0,由此帶來了稀疏解,使得 SVM 僅通過少量的支持向量就能確定最終超平面。

Exponential Loss(指數損失函數)

Exponential Loss,又稱指數損失,其表達式如下:
在這里插入圖片描述
可以對上式進行一個直觀的理解,類似於上文提到的第二種形式的交叉熵 Loss,去掉 log 和 log 中的常數 1,並不影響 Loss 的單調性。因此,推導得出了 Exponential Loss 的表達式。
Exponential Loss 的曲線如下圖所示:
在這里插入圖片描述
Exponential Loss 與交叉熵 Loss 類似,但它是指數下降的,因此梯度較其它 Loss 來說,更大一些。
Exponential Loss 一般多用於AdaBoost 中。因為使用 Exponential Loss 能比較方便地利用加法模型推導出 AdaBoost算法。該損失函數對異常點較為敏感,相對於其他損失函數robust性較差

Modified Huber Loss(Huber損失函數的變形)

Huber Loss,它**結合了均方損失(MSE)和絕對值損失(MAE) ** 的優點,當|y-f(x)|小於一個實現指定的δ時,變為平方損失,大於δ時變為絕對值損失,比前兩者更為robust。而Huber Loss既可以用於回歸問題,Huber Loss 也能應用於分類問題中,稱為 Modified Huber Loss,其表達是如下:
在這里插入圖片描述
Modified Huber Loss 的曲線如下圖所示:
在這里插入圖片描述
從表達式和 Loss 圖形上看,Modified Huber Loss 結合了 Hinge Loss 和 交叉熵 Loss 的優點。一方面能在 ys > 1 時產生稀疏解提高訓練效率;另一方面對於 ys < −1 樣本的懲罰以線性增加,這意味着受異常點的干擾較少。scikit-learn 中的 SGDClassifier 就使用了 Modified Huber Loss。

Softmax Loss

對於多分類問題,也可以使用 Softmax Loss。
機器學習模型的 Softmax 層,正確類別對於的輸出是:
在這里插入圖片描述
其中,C 為類別個數,小寫字母 s 是正確類別對應的 Softmax 輸入,大寫字母 S 是正確類別對應的 Softmax 輸出。
在這里插入圖片描述
Softmax Loss 的曲線如下圖所示:
在這里插入圖片描述
上圖中,當 s << 0 時,Softmax 近似線性;當 s>>0 時,Softmax 趨向於零。Softmax 同樣受異常點的干擾較小,多用於神經網絡多分類問題中。

最后,我們將 0-1 Loss、Cross Entropy Loss、Hinge Loss、Exponential Loss、Modified Huber Loss 畫在一張圖中:
在這里插入圖片描述
從上圖可以看出上面介紹的損失函數都可以看作0-1損失的單調連續近似函數,而因為這些損失函數為凸的連續函數,可以用來替代0-1損失進行優化,其相同點在於margin趨向於負無窮時加大“懲罰”;不同點在於,交叉熵損失和合頁損失都是線性增長,而指數損失是以指數增長:
上圖 ys 的取值范圍是 [-2,+2],若我們把 ys 的坐標范圍取得更大一些,上面 5 種 Loss 的差別會更大一些,見下圖:
在這里插入圖片描述
顯然,這時候 Exponential Loss 會遠遠大於其它 Loss。從訓練的角度來看,模型會更加偏向於懲罰較大的點,賦予其更大的權重。如果樣本中存在離群點,Exponential Loss 會給離群點賦予更高的權重,但卻可能是以犧牲其他正常數據點的預測效果為代價,可能會降低模型的整體性能,使得模型不夠健壯(robust)。

相比 Exponential Loss,其它四個 Loss,包括 Softmax Loss,都對離群點有較好的“容忍性”,受異常點的干擾較小,模型較為健壯。

注意:最小化損失函數是通過最大化似然函數實現,而最大化似然函數又是通過最小化負對數似然來實現,有些拗口但的確如此。

擴展:意外發現一位博主寫的有關損失函數還可以,現給出鏈接如下(可以相互借鑒學習);

https://zhuanlan.zhihu.com/p/77686118

參考:https://blog.csdn.net/weixin_41065383/article/details/89413819


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM