損失函數最小化機器學習的「目標函數」,它是模型評估的重要指標
損失函數一般分為回歸問題和分類問題
回歸問題最常用的是均方誤差(MSE)和平均絕對誤差(MAE)
MAE梯度自始至終是一樣的,當損失接近0時,MSE梯度下降
MSE對離群點賦予更多的權值,MAE比MSE對異常值更加穩健
分類問題最常用的是交叉熵損失
熵是衡量事件包含信息量的大小,交叉熵是衡量兩個概率分布差異的大小
機器學習,是指在給定任務(T)下,對數據集(D)做一定特徵工程(F)後建立相應的模型(M),並通過模型評估(E)來評價模型好壞。
機器學習的模型評估,主要包括兩部分:
損失函數是性能度量的一個部分,而損失函數又分很多種,因此單獨作為一篇介紹損失函數。
機器學習中的所有算法都依賴於最小化或最大化一個函數,我們稱之為「目標函數」。最小化的函數稱為「損失函數」,損失函數衡量的是模型預測預期結果的能力。通常情況下,損失函數分為二類:回歸問題和分類問題。
1.回歸問題
回歸問題損失函數主要有:均方誤差、絕對平均誤差、Huber損失、Log-Cosh損失和分位數損失。其中最重要的的是均方誤差和絕對平均誤差。下面重點介紹。
均方誤差(MSE)也稱二次損失或L2損失,它是最常用的回歸損失函數,MSE是目標變量和預測值之間距離的平方和:
平均絕對誤差(MAE)也稱L1損失,是目標值和預測值之間絕對差的總和的平均值:
由於MSE平方了誤差(y - y_predicted = e),若e大於1,誤差(e)的將會增加很多。
如果我們有一個離群值,e的值會大大增大,且MSE的值會遠遠大於e,這將會使MSE損失模型比MAE損失模型給離群值更多的權重。
若將RMSE作為損失的模型進行調整,損失模型將最小化異常點,而犧牲其他觀測值,這會降低其整體性能。
如果訓練數據被異常值破壞,MAE損失是有用的,也就是說我們在訓練數據中錯誤地收集了不現實的極大的負值和正值,而不是在測試環境中。
如果我們只需要對所有試圖最小化MSE的觀測結果給出一個預測,那麼這個預測應該是所有目標值的平均值。但如果我們試著最小化MAE,這個預測就是所有觀測值的中位數。
我們不難知道中位數比平均值對異常值更穩健,因此使得MAE比MSE對異常值更穩健
MAE損失函數的一個大問題是:它的梯度始終是相同的,這意味著即使損失值很小,梯度也會很大
當損失值較大時,MSE損失的梯度較高;當損失接近0時,MSE損失的梯度下降,使其在訓練結束時更加精確
如果異常值表示對業務很重要,那麼我們應該使用MSE,另一方面,如果我們認為異常值只是代表無用的數據,那麼我們應該選擇MAE作為損失函數
Huber損失,也稱平滑平均絕對誤差:
它對數據中的異常值不那麼敏感,它在0處也是可微的。當誤差很小的時候就變成了二次誤差,誤差有多小才能變成二次函數取決於超參數 𝛿 (delta),這個超參數是可調的。
超參數 𝛿的選擇是很關鍵的,因為它決定了你願意考慮哪些異常值,大於 𝛿 的殘差用L1最小化,因為L1對較大的異常值不太敏感,而小於 𝛿 的殘差用L2最小化。
Huber損失結合了MSE和MAE的優點:
使用MAE訓練的一個大問題是它的梯度是一個比較大的常數,這可能導致在使用梯度下降訓練結束時,丟失了最小值。
對於MSE,梯度隨著損失函數接近其最小值而減小,從而更容易找到最小值。Huber損失在這種情況下是很有幫助的,因為它在最小值附近減小了梯度,而且比MSE更健壯。
Log-Cosh損失比L2更平滑,是預測誤差的雙曲線餘弦的對數:
優點:當 x 較小時,log(cosh(x))近似等於(x**2)/2;x 較大時,近似等於 abs(x) - log(2)。這意味這「logcosh」的工作原理與MSE非常相似,但不會受到偶爾出現異常值的影響。它具有Huber損失的所有優點,且在任何情況下都是可微的。
缺點:logcosh損失並不完美,當預測值與真實值偏差較大時,梯度和二階微分是一個常數
分位數損失可以用在了解預測的範圍(而不是僅了解點估計):
在現實世界的大多數預測問題中,我們常常對預測中的不確定性感興趣。因此預測範圍可以極大地改進許多業務問題的決策過程。
2.分類問題
分類問題損失函數主要有交叉熵損失、0-1損失、合頁損失、指數損失和Modified Huber 損失。其中最重要的是交叉熵損失。本文對它做一個重點介紹。
交叉熵損失也稱負對數似然,它是二分類問題中最常用的損失函數,比如邏輯回歸。
要理解交叉熵,先要理解熵。熵是資訊理論中最基本、最核心的一個概念,它衡量一個概率分布的隨機程度,或者說包含的信息量的大小。
我們知道,如果一個事件發生的概率越大,它所包含的信息量越少,反之則越多。比如事件「太陽從東邊升起」,這幾乎是100%確定的事情,有用的信息量很少。因此,事件包含的信息量與事件發生的概率成反比。
接著進一步思考,如果是獨立的兩個事件,那麼其信息量應該是求和,而它們同時發生的可能,應該是概率的乘積。所以,我們要找到一個指標,能夠衡量概率和信息的之間的這種直觀關係,天才的數學家們想到了這樣一個指標:
p(x)是事件發生的概率,h(x)表示事件包含的信息量。可以看到,指標h(x)滿足上述兩個要求:信息量與概率成反比;兩個獨立事件發生的信息量是各自求和。
有了以上定義,熵的概念自然而然就出來了,上面是考察了一個確定事件下的信息量,那麼如果這個事件是一個隨機變量呢(記得嗎,學習概率論的時候也是從事件到隨機事件的過度,這個就是天才數學家們的思維,你學到了嗎),就用數學期望衡量其信息量的大小。這個數學期望就是我們要的熵:
這裡,隨機變量越均勻(隨機),熵越大,反之越小。
有了熵的概念,我們就可以引出交叉熵了。交叉熵是定義在兩個概率分布而不是一個概率分布之上,它衡量了兩個概率分布的差異。其值越大,兩個概率分布相差越大;其值越小,則兩個概率分布的差異越小。
可以證明,當兩個分布相等時,交叉熵有極小值:
進一步證明當p=q是,交叉熵是極小值,交叉熵hessian矩陣為:
該矩陣是正定的,故函數有最小值。
有了交叉熵概念,我們就知道交叉熵損失的意義的,對於二分類問題,往往求解是概率分布,當然希望,預測的概率分布與真實的概率分布接近。因此,最小化損失其各自(0類和1類,或好人和壞人)交叉熵。
0-1損失是最簡單也是最容易直觀理解的一種損失函數
0-1 Loss 的特點就是非常直觀容易理解。但是它存在兩個缺點:
0-1 Loss 對每個錯分類點都施以相同的懲罰(損失為 1),這樣對犯錯比較大的點(ys 遠小於 0)無法進行較大的懲罰,所有犯錯點都同等看待,這不符合常理,不太合適。
0-1 Loss 不連續、非凸、不可導,難以使用梯度優化算法。
合頁損失,又稱Hinge Loss
它的形狀就像一本要合上的書,故稱為合頁損失。顯然,只有當 ys < 1 時,Loss 才大於零;對於 ys > 1 的情況,Loss 始終為零。一般多用於支持向量機(SVM)中,體現了 SVM 距離最大化的思想。
指數損失,又稱Exponential Loss。
它與交叉熵 Loss 類似,但它是指數下降的,因此梯度較其它 Loss 來說,更大一些。一般多用於AdaBoost 中
Modified Huber損失
結合了 Hinge Loss 和 交叉熵 Loss 的優點。一方面能在 ys > 1 時產生稀疏解提高訓練效率;另一方面對於 ys < −1 樣本的懲罰以線性增加,這意味著受異常點的幹擾較少
最後,給出sklearn下損失函數的調用方式:
from sklearn.metrics import mean_squared_error from sklearn.metrics import mean_absolute_error from sklearn.metrics import log_loss from sklearn.metrics import zero_one_loss from sklearn.metrics import hinge_loss
mean_squared_error(squared=False)
參考資料:
《機器學習(周志華著)》
https://mp.weixin.qq.com/s/de6SkZjbNrmf0Dd1k5p_Lw
https://mp.weixin.qq.com/s/AdpO4xxTi0G7YiTfjEz_ig
https://mp.weixin.qq.com/s/O1cc2W8M3thJoKN6-uRmEQ