機器學習常用損失函數總覽:基本形式、原理、特點

2021-02-21 七月在線實驗室

機器學習中的監督學習本質上是給定一系列訓練樣本 

而損失函數(Loss Function)則是這個過程中關鍵的一個組成部分,用來衡量模型的輸出 與真實的 之間的差距,給模型的優化指明方向。

本文將介紹機器學習、深度學習中分類與回歸常用的幾種損失函數,包括均方差損失 Mean Squared Loss、平均絕對誤差損失 Mean Absolute Error Loss、Huber Loss、分位數損失 Quantile Loss、交叉熵損失函數 Cross Entropy Loss、Hinge 損失 Hinge Loss。

主要介紹各種損失函數的基本形式、原理、特點等方面。

目錄:均方差損失 Mean Squared Error Loss平均絕對誤差損失 Mean Absolute Error Loss

在正文開始之前,先說下關於 Loss Function、Cost Function 和 Objective Function 的區別和聯繫。在機器學習的語境下這三個術語經常被交叉使用。

- 損失函數 Loss Function 通常是針對單個訓練樣本而言,給定一個模型輸出 針對整個訓練集(或者在使用 mini-batch gradient descent 時一個 mini-batch)的總損失 

一句話總結三者的關係就是:A loss function is a part of a cost function which is a type of an objective function.

由於損失函數和代價函數只是在針對樣本集上有區別,因此在本文中統一使用了損失函數這個術語,但下文的相關公式實際上採用的是代價函數 Cost Function 的形式,請讀者自行留意。

均方差損失Mean Squared Error Loss基本形式與原理:

均方差 Mean Squared Error (MSE) 損失是機器學習、深度學習回歸任務中最常用的一種損失函數,也稱為 L2 Loss。其基本形式如下

從直覺上理解均方差損失,這個損失函數的最小值為 0(當預測等於真實值時),最大值為無窮大。下圖是對於真實值 

橫軸是不同的預測值,縱軸是均方差損失,可以看到隨著預測與真實值絕對誤差 

背後的假設:

實際上在一定的假設下,我們可以使用最大化似然得到均方差損失的形式。假設模型預測與真實值之間的誤差服從標準高斯分布( 

進一步我們假設數據集中 N 個樣本點之間相互獨立,則給定所有 

通常為了計算方便,我們通常最大化對數似然 Log-Likelihood

去掉與 

可以看到這個實際上就是均方差損失的形式。也就是說在模型輸出與真實值的誤差服從高斯分布的假設下,最小化均方差損失函數與極大似然估計本質上是一致的。

因此在這個假設能被滿足的場景中(比如回歸),均方差損失是一個很好的損失函數選擇;當這個假設沒能被滿足的場景中(比如分類),均方差損失不是一個好的選擇。

基本形式與原理:

平均絕對誤差 Mean Absolute Error (MAE) 是另一類常用的損失函數,也稱為 L1 Loss。其基本形式如下

同樣的我們可以對這個損失函數進行可視化如下圖,MAE 損失的最小值為 0(當預測等於真實值時),最大值為無窮大。可以看到隨著預測與真實值絕對誤差 

背後的假設:

同樣的我們可以在一定的假設下通過最大化似然得到 MAE 損失的形式,假設模型預測與真實值之間的誤差服從拉普拉斯分布 Laplace distribution( 

與上面推導 MSE 時類似,我們可以得到的負對數似然實際上就是 MAE 損失的形式

MAE 與 MSE 區別:

MAE 和 MSE 作為損失函數的主要區別是:MSE 損失相比 MAE 通常可以更快地收斂,但 MAE 損失對於 outlier 更加健壯,即更加不易受到 outlier 影響。

MSE 通常比 MAE 可以更快地收斂。當使用梯度下降算法時,MSE 損失的梯度為 

當然你可以通過在訓練過程中動態調整學習率緩解這個問題,但是總的來說,損失函數梯度之間的差異導致了 MSE 在大部分時候比 MAE 收斂地更快。

這個也是 MSE 更為流行的原因。

MAE 對於 outlier 更加 robust。我們可以從兩個角度來理解這一點:

第一個角度是直觀地理解,下圖是 MAE 和 MSE 損失畫到同一張圖裡面,由於MAE 損失與絕對誤差之間是線性關係,MSE 損失與誤差是平方關係,當誤差非常大的時候,MSE 損失會遠遠大於 MAE 損失。因此當數據中出現一個誤差非常大的 outlier 時,MSE 會產生一個非常大的損失,對模型的訓練會產生較大的影響。

第二個角度是從兩個損失函數的假設出發,MSE 假設了誤差服從高斯分布,MAE 假設了誤差服從拉普拉斯分布。拉普拉斯分布本身對於 outlier 更加 robust。

參考下圖(來源:Machine Learning: A Probabilistic Perspective 2.4.3 The Laplace distribution Figure 2.8),當右圖右側出現了 outliers 時,拉普拉斯分布相比高斯分布受到的影響要小很多。

因此以拉普拉斯分布為假設的 MAE 對 outlier 比高斯分布為假設的 MSE 更加 robust。

上文我們分別介紹了 MSE 和 MAE 損失以及各自的優缺點,MSE 損失收斂快但容易受 outlier 影響,MAE 對 outlier 更加健壯但是收斂慢,Huber Loss 則是一種將 MSE 與 MAE 結合起來,取兩者優點的損失函數,也被稱作 Smooth Mean Absolute Error Loss 。

其原理很簡單,就是在誤差接近 0 時使用 MSE,誤差較大時使用 MAE,公式為

上式中 

上式等號右邊第一項是 MSE 的部分,第二項是 MAE 部分,在 MAE 的部分公式為 

下圖是 

Huber Loss 的特點:

Huber Loss 結合了 MSE 和 MAE 損失,在誤差接近 0 時使用 MSE,使損失函數可導並且梯度更加穩定;在誤差較大時使用 MAE 可以降低 outlier 的影響,使訓練對 outlier 更加健壯。缺點是需要額外地設置一個 

分位數回歸 Quantile Regression 是一類在實際應用中非常有用的回歸算法,通常的回歸算法是擬合目標值的期望或者中位數,而分位數回歸可以通過給定不同的分位點,擬合目標值的不同分位數。

例如我們可以分別擬合出多個分位點,得到一個置信區間,如下圖所示(圖片來自筆者的一個分位數回歸代碼 demo Quantile Regression Demo)

分位數回歸是通過使用分位數損失 Quantile Loss 來實現這一點的,分位數損失形式如下,式中的 r 分位數係數。

我們如何理解這個損失函數呢?這個損失函數是一個分段的函數 ,將 

當 分別用不同的係數控制高估和低估的損失,進而實現分位數回歸

特別地,當 

下圖是取不同的分位點 0.2、0.5、0.6 得到的三個不同的分位損失函數的可視化,可以看到 0.2 和 0.6 在高估和低估兩種情況下損失是不同的,而 0.5 實際上就是 MAE。

上文介紹的幾種損失函數都是適用於回歸問題損失函數,對於分類問題,最常用的損失函數是交叉熵損失函數 Cross Entropy Loss。

二分類:

考慮二分類,在二分類中我們通常使用 Sigmoid 函數將模型的輸出壓縮到 (0, 1) 區間內 

將兩條式子合併成一條

假設數據點之間獨立同分布,則似然可以表示為

對似然取對數,然後加負號變成最小化負對數似然,即為交叉熵損失函數的形式

下圖是對二分類的交叉熵損失函數的可視化,藍線是目標值為 0 時輸出不同輸出的損失,黃線是目標值為 1 時的損失。

可以看到約接近目標值損失越小,隨著誤差變差,損失呈指數增長。

多分類:

在多分類的任務中,交叉熵損失函數的推導思路和二分類是一樣的,變化的地方是真實值 

Softmax 函數將每個維度的輸出範圍都限定在 

其中 

由於 

其中 

Cross Entropy is good. But WHY?

分類中為什麼不用均方差損失?上文在介紹均方差損失的時候講到實際上均方差損失假設了誤差服從高斯分布,在分類任務下這個假設沒辦法被滿足,因此效果會很差。

為什麼是交叉熵損失呢?有兩個角度可以解釋這個事情,一個角度從最大似然的角度,也就是我們上面的推導;另一個角度是可以用資訊理論來解釋交叉熵損失:

假設對於樣本 

其中第一項為分布 

由於我們希望兩個分布儘量相近,因此我們最小化 KL 散度。同時由於上式第一項信息熵僅與最優分布本身相關,因此我們在最小化的過程中可以忽略掉,變成最小化

我們並不知道最優分布 

這個是針對單個訓練樣本的損失函數,如果考慮整個數據集,則

可以看到通過最小化交叉熵的角度推導出來的結果和使用最大化似然得到的結果是一致的

合頁損失 Hinge Loss 是另外一種二分類損失函數,適用於 maximum-margin 的分類,支持向量機 Support Vector Machine (SVM) 模型的損失函數本質上就是 Hinge Loss + L2 正則化。

合頁損失的公式如下

下圖是 

可以看到當 

即合頁損失不僅懲罰預測錯的,並且對於預測對了但是置信度不高的也會給一個懲罰,只有置信度高的才會有零損失。

使用合頁損失直覺上理解是要找到一個決策邊界,使得所有數據點被這個邊界正確地、高置信地被分類

本文針對機器學習中最常用的幾種損失函數進行相關介紹,首先是適用於回歸的均方差損失 Mean Squared Loss、平均絕對誤差損失 Mean Absolute Error Loss,兩者的區別以及兩者相結合得到的 Huber Loss,接著是應用於分位數回歸的分位數損失 Quantile Loss,表明了平均絕對誤差損失實際上是分位數損失的一種特例。

在分類場景下,本文討論了最常用的交叉熵損失函數 Cross Entropy Loss,包括二分類和多分類下的形式,並從資訊理論的角度解釋了交叉熵損失函數,最後簡單介紹了應用於 SVM 中的 Hinge 損失 Hinge Loss。

受限於時間,本文還有其他許多損失函數沒有提及,比如應用於 Adaboost 模型中的指數損失 Exponential Loss,0-1 損失函數等。

另外通常在損失函數中還會有正則項(L1/L2 正則),這些正則項作為損失函數的一部分,通過約束參數的絕對值大小以及增加參數稀疏性來降低模型的複雜度,防止模型過擬合,這部分內容在本文中也沒有詳細展開。

讀者有興趣可以查閱相關的資料進一步了解。That’s all. Thanks for reading.

參考資料:

Machine Learning: A Probabilistic PerspectivePicking Loss Functions - A comparison between MSE, Cross Entropy, and Hinge Loss5 Regression Loss Functions All Machine Learners Should Know

相關焦點

  • 機器學習常用損失函數小結
    本文將介紹機器學習、深度學習中分類與回歸常用的幾種損失函數,包括均方差損失 Mean Squared Loss、平均絕對誤差損失 Mean Absolute Error Loss、Huber Loss、分位數損失 Quantile Loss、交叉熵損失函數 Cross Entropy Loss、Hinge 損失 Hinge Loss。
  • 機器學習中常用的5種回歸損失函數
    那你了解Huber損失、Log-Cosh損失、以及常用於計算預測區間的分位數損失麼?這些可都是機器學習大牛最常用的回歸損失函數哦!機器學習中所有的算法都需要最大化或最小化一個函數,這個函數被稱為「目標函數」。其中,我們一般把最小化的一類函數,稱為「損失函數」。它能根據預測結果,衡量出模型預測能力的好壞。
  • 入門| 機器學習中常用的損失函數你知多少?
    選自towards data science作者:Ravindra Parmar機器之心編譯參與:李詩萌、王淑婷本文作者將常用的損失函數分為了兩大類:分類和回歸。然後又分別對這兩類進行了細分和講解,其中回歸中包含了一種不太常見的損失函數:平均偏差誤差,可以用來確定模型中存在正偏差還是負偏差。
  • 【深度學習】一文讀懂機器學習常用損失函數(Loss Function)
    而邏輯回歸併沒有求似然函數的極值,而是把極大化當做是一種思想,進而推導出它的經驗風險函數為:最小化負的似然函數(即max F(y, f(x)) —> min -F(y, f(x)))。從損失函數的視角來看,它就成了log損失函數了。log損失函數的標準形式:
  • 機器學習常見的損失函數以及何時使用它們
    每一個機器學習工程師都應該知道機器學習中這些常見的損失函數以及何時使用它們。在數學優化和決策理論中,損失函數或成本函數將一個或多個變量的值映射為一個實數,該實數直觀地表示與該事件相關的一些「成本」。損失函數是機器學習算法中的一個重要部分,主要用於進行算法對特徵數據集建模效果的評估,衡量算法的性能。損失函數是每個樣本預測值和真實值的差值,而成本函數是所有損失函數的平均值。但是一般兩者語義沒有明顯的區分。 損失函數直接反映了機器學習模型的預測結果。一般而言,損失函數越低,所建立的模型所提供的結果就越好。
  • 機器學習經典損失函數比較
    機器學習經典損失函數比較 胡薇 發表於 2018-06-13 17:53:53 所有的機器學習算法都或多或少的依賴於對目標函數最大化或者最小化的過程。
  • 機器學習大牛最常用的5個回歸損失函數,你知道幾個?
    L1、L2損失函數相信大多數人都早已不陌生。那你了解Huber損失、Log-Cosh損失、以及常用於計算預測區間的分位數損失麼?這些可都是機器學習大牛最常用的回歸損失函數哦!機器學習中所有的算法都需要最大化或最小化一個函數,這個函數被稱為「目標函數」。
  • 【損失函數】常見的損失函數(loss function)總結
    特點:(1)經常應用與回歸問題5. 特點:(1)對離群點、噪聲非常敏感。經常用在AdaBoost算法中。6. 特點:(1)hinge損失函數表示如果被分類正確,損失為0,否則損失就為 感知損失(perceptron loss)函數感知損失函數的標準形式如下:
  • 機器學習從業者必知的5種回歸損失函數
    損失函數也能衡量預測模型在預測期望結果方面的性能。找到函數的最小值點的最常用方法是「梯度下降」。如果把損失函數比作連綿起伏的山巒,那麼梯度下降就好比愚公一樣盡力削低山脈,讓山達到最低點。損失函數,並非只有一種。根據不同的因素,包括是否存在異常值,所選機器學習算法,梯度下降的的時效,找到預測的置信度和導數的難易度,我們可以選擇不同的損失函數。
  • 常見的損失函數(loss function)總結
    :log對數損失函數的標準形式如下:特點:(1) log對數損失函數能非常好的表徵概率分布,在很多場景尤其是多分類,如果需要知道結果屬於每個類別的置信度,那它非常適合。(3)邏輯回歸的損失函數就是log對數損失函數。5. 指數損失函數(exponential loss)指數損失函數的標準形式如下:特點:(1)對離群點、噪聲非常敏感。
  • 機器學習中的目標函數總結
    對於離散型隨機變量X,p(x)和q(x)是兩個概率分布的概率質量函數,交叉熵定義為其值越大,兩個概率分布的差異越大;其值越小,則兩個概率分布的差異越小。交叉熵常用於構造機器學習的目標函數,如logistic回歸與softmax回歸。此時可從最大似然估計導出交叉熵損失函數的形式。
  • 機器學習-損失函數
    損失函數是經驗風險函數的核心部分,也是結構風險函數重要組成部分。在機器學習中,通常指的都是後一種情況。三、指數損失函數(Adaboost)學過Adaboost算法的人都知道,它是前向分步加法算法的特例,是一個加和模型,損失函數就是指數函數。
  • 機器學習初學者都應該知道的5類回歸損失函數
    最小化的函數稱為「損失函數」,損失函數衡量的是模型預測預期結果的能力,最常用的最小化損失函數的方法是「梯度下降法」,把損失函數想像成起伏的山脈,梯度下降法就像從山上滑下來到達最低點。沒有一個損失函數適用於所有類型的數據,它取決於許多因素,包括異常值的存在,機器學習算法的選擇,梯度下降法的時間效率和預測的置信度等。本文的目的是了解不同的損失函數以及它們是如何幫助數據科學家。
  • 機器學習算法中的7個損失函數的詳細指南
    介紹想像一下-你已經在給定的數據集上訓練了機器學習模型,並準備好將它交付給客戶。但是,你如何確定該模型能夠提供最佳結果?是否有指標或技術可以幫助你快速評估數據集上的模型?當然是有的,簡而言之,機器學習中損失函數可以解決以上問題。
  • Python機器學習算法中的7個損失函數的詳細指南
    介紹想像一下-你已經在給定的數據集上訓練了機器學習模型,並準備好將它交付給客戶。但是,你如何確定該模型能夠提供最佳結果?是否有指標或技術可以幫助你快速評估數據集上的模型?當然是有的,簡而言之,機器學習中損失函數可以解決以上問題。
  • 對抗樣本的基本原理
    梯度算法和損失函數對抗樣本其實對機器學習模型都有效,不過研究的重點還是在神經網絡尤其是深度學習網絡領域。理解對抗樣本算法,需要一定的神經網絡的知識。在深度學習模型裡面,經常需要使用梯度算法,針對損失函數的反饋不斷調整各層的參數,使得損失函數最小化。
  • ...實現機器學習之邏輯回歸:邏輯回歸介紹、應用場景、原理、損失...
    作者 | 汪雯琦責編 | Carol來源 | CSDN 博客學習目標知道邏輯回歸的損失函數知道邏輯回歸的優化方法知道sigmoid函數知道邏輯回歸的應用場景應用LogisticRegression實現邏輯回歸預測知道精確率、召回率指標的區別知道如何解決樣本不均衡情況下的評估了解
  • 機器學習中的 7 大損失函數實戰總結(附 Python 代碼)
    概述介紹想像一下-你已經在給定的數據集上訓練了機器學習模型,並準備好將它交付給客戶。但是,你如何確定該模型能夠提供最佳結果?是否有指標或技術可以幫助你快速評估數據集上的模型?當然是有的,簡而言之,機器學習中損失函數可以解決以上問題。損失函數是我們喜歡使用的機器學習算法的核心。但大多數初學者和愛好者不清楚如何以及在何處使用它們。
  • 機器學習中常用優化算法介紹
    > 作者 | Walker編輯 | 磐石出品 | 磐創AI技術團隊【磐創AI導讀】:本文主要介紹了常用的一些機器學習中常用的優化算法
  • 理解損失函數(理論篇)機器學習你會遇到的「坑」
    性能度量與損失函數機器學習的三要素就是而評估指的是模型在數據上表現的量化形式,我們選取合適的函數來表示什麼樣子的模型是好的,性能度量就是評估。在前兩步都完成了以後,最後要做的就是優化,就是對評估函數進行求解,找出最合適的解,來確定最終的模型。