均方誤差

均方誤差(MSE)是最常用的回歸損失函數(shù),計算方法是求預測值與真實值之間距離的平方和,公式如圖。
下圖是MSE函數(shù)的圖像,其中目標值是100,預測值的范圍從-10000到10000,Y軸代表的MSE取值范圍是從0到正無窮,并且在預測值為100處達到最小。

平均絕對值誤差(也稱L1損失)

平均絕對誤差(MAE)是另一種用于回歸模型的損失函數(shù)。MAE是目標值和預測值之差的絕對值之和。其只衡量了預測值誤差的平均模長,而不考慮方向,取值范圍也是從0到正無窮(如果考慮方向,則是殘差/誤差的總和——平均偏差(MBE))。

MSE(L2損失)與MAE(L1損失)的比較
簡單來說,MSE計算簡便,但MAE對異常點有更好的魯棒性。下面就來介紹導致二者差異的原因。
訓練一個機器學習模型時,我們的目標就是找到損失函數(shù)達到極小值的點。當預測值等于真實值時,這兩種函數(shù)都能達到最小。
下面是這兩種損失函數(shù)的python代碼。你可以自己編寫函數(shù),也可以使用sklearn內(nèi)置的函數(shù)。
# true: Array of true target variable
# pred: Array of predictions
def mse(true, pred):
return np.sum((true - pred)**2)/len(true)
def mae(true, pred):
return np.sum(np.abs(true - pred))/len(true)
# also available in sklearn
# from sklearn.metrics import mean_squared_errorfrom
# sklearn.metrics import mean_absolute_error
下面讓我們觀察MAE和RMSE(即MSE的平方根,同MAE在同一量級中)在兩個例子中的計算結(jié)果。第一個例子中,預測值和真實值很接近,而且誤差的方差也較小。第二個例子中,因為存在一個異常點,而導致誤差非常大。

左圖:誤差比較接近 右圖:有一個誤差遠大于其他誤差
從圖中可以知道什么?應當如何選擇損失函數(shù)?
MSE對誤差取了平方(令e=真實值-預測值),因此若e>1,則MSE會進一步增大誤差。如果數(shù)據(jù)中存在異常點,那么e值就會很大,而e則會遠大于|e|。
因此,相對于使用MAE計算損失,使用MSE的模型會賦予異常點更大的權(quán)重。在第二個例子中,用RMSE計算損失的模型會以犧牲了其他樣本的誤差為代價,朝著減小異常點誤差的方向更新。然而這就會降低模型的整體性能。
如果訓練數(shù)據(jù)被異常點所污染,那么MAE損失就更好用(比如,在訓練數(shù)據(jù)中存在大量錯誤的反例和正例標記,但是在測試集中沒有這個問題)。
直觀上可以這樣理解:如果我們最小化MSE來對所有的樣本點只給出一個預測值,那么這個值一定是所有目標值的平均值。但如果是最小化MAE,那么這個值,則會是所有樣本點目標值的中位數(shù)。眾所周知,對異常值而言,中位數(shù)比均值更加魯棒,因此MAE對于異常值也比MSE更穩(wěn)定。
然而MAE存在一個嚴重的問題(特別是對于神經(jīng)網(wǎng)絡):更新的梯度始終相同,也就是說,即使對于很小的損失值,梯度也很大。這樣不利于模型的學習。為了解決這個缺陷,我們可以使用變化的學習率,在損失接近最小值時降低學習率。
而MSE在這種情況下的表現(xiàn)就很好,即便使用固定的學習率也可以有效收斂。MSE損失的梯度隨損失增大而增大,而損失趨于0時則會減小。這使得在訓練結(jié)束時,使用MSE模型的結(jié)果會更精確。

根據(jù)不同情況選擇損失函數(shù)
如果異常點代表在商業(yè)中很重要的異常情況,并且需要被檢測出來,則應選用MSE損失函數(shù)。相反,如果只把異常值當作受損數(shù)據(jù),則應選用MAE損失函數(shù)。
總而言之,處理異常點時,L1損失函數(shù)更穩(wěn)定,但它的導數(shù)不連續(xù),因此求解效率較低。L2損失函數(shù)對異常點更敏感,但通過令其導數(shù)為0,可以得到更穩(wěn)定的封閉解。
二者兼有的問題是:在某些情況下,上述兩種損失函數(shù)都不能滿足需求。例如,若數(shù)據(jù)中90%的樣本對應的目標值為150,剩下10%在0到30之間。那么使用MAE作為損失函數(shù)的模型可能會忽視10%的異常點,而對所有樣本的預測值都為150。
這是因為模型會按中位數(shù)來預測。而使用MSE的模型則會給出很多介于0到30的預測值,因為模型會向異常點偏移。上述兩種結(jié)果在許多商業(yè)場景中都是不可取的。
這些情況下應該怎么辦呢?最簡單的辦法是對目標變量進行變換。而另一種辦法則是換一個損失函數(shù)。如Huber損失,Log-Cosh損失,分位數(shù)損失。
也有些時候可以將利用MAE與MSE訓練出的模型進行融合。
參考文獻
https://baijiahao.baidu.com/s?id=1603857666277651546&wfr=spider&for=pc