一、常見的MSE、MAE損失函數
1.1 均方誤差、平方損失
均方誤差(MSE)是回歸損失函數中最常用的誤差,它是預測值與目標值之間差值的平方和,其公式如下所示:
下圖是均方根誤差值的曲線分布,其中最小值為預測值為目標值的位置。
優點:各點都連續光滑,方便求導,具有較為穩定的解
缺點:不是特別的穩健,為什么?因為當函數的輸入值距離中心值較遠的時候,使用梯度下降法求解的時候梯度很大,可能導致梯度爆炸。
什么是梯度爆炸?誤差梯度是神經網絡訓練過程中計算的方向和數量,用於以正確的方向和合適的量更新網絡權重。
在深層網絡或循環神經網絡中,誤差梯度可在更新中累積,變成非常大的梯度,然后導致網絡權重的大幅更新,並因此使網絡變得不穩定。在極端情況下,權重的值變得非常大,以至於溢出,導致 NaN 值。
網絡層之間的梯度(值大於 1.0)重復相乘導致的指數級增長會產生梯度爆炸。
梯度爆炸引發的問題
在深度多層感知機網絡中,梯度爆炸會引起網絡不穩定,最好的結果是無法從訓練數據中學習,而最壞的結果是出現無法再更新的 NaN 權重值。
1.2 平均絕對誤差
平均絕對誤差(MAE)是另一種常用的回歸損失函數,它是目標值與預測值之差絕對值的和,表示了預測值的平均誤差幅度,而不需要考慮誤差的方向,范圍是0到∞,其公式如下所示:
在這里插入圖片描述
在這里插入圖片描述
優點:無論對於什么樣的輸入值,都有着穩定的梯度,不會導致梯度爆炸問題,具有較為穩健性的解。
缺點:在中心點是折點,不能求導,不方便求解。
上面的兩種損失函數也被稱之為L2損失和L1損失。
二、L1_Loss和L2_Loss
2.1 L1_Loss和L2_Loss的公式
L1范數損失函數,也被稱為最小絕對值偏差(LAD),最小絕對值誤差(LAE)。總的說來,它是把目標值(Yi)與估計值(f(xi))的絕對差值的總和(S)最小化:
在這里插入圖片描述
L2范數損失函數,也被稱為最小平方誤差(LSE)。總的來說,它是把目標值(Yi)與估計值(f(xi))的差值的平方和(S)最小化:
在這里插入圖片描述
1 import numpy as np 2 3 def L1(yhat, y): 4 loss = np.sum(np.abs(y - yhat)) 5 return loss 6 7 def L2(yhat, y): 8 loss =np.sum(np.power((y - yhat), 2)) 9 return loss 10 #調用 11 yhat = np.array([0.1, 0.2, 0.3, 0.4, 0.5]) 12 y = np.array([1, 1, 0, 1, 1]) 13 14 print("L1 = " ,(L1(yhat,y))) 15 print("L2 = " ,(L2(yhat,y)))
L1范數與L2范數作為損失函數的區別能快速地總結如下:
在這里插入圖片描述
2.2 幾個關鍵的概念
(1)魯棒性
最小絕對值偏差之所以是魯棒的,是因為它能處理數據中的異常值。這或許在那些異常值可能被安全地和有效地忽略的研究中很有用。如果需要考慮任一或全部的異常值,那么最小絕對值偏差是更好的選擇。
從直觀上說,因為L2范數將誤差平方化(如果誤差大於1,則誤差會放大很多),模型的誤差會比L1范數來得大,因此模型會對這個樣本更加敏感,這就需要調整模型來最小化誤差。如果這個樣本是一個異常值,模型就需要調整以適應單個的異常值,這會犧牲許多其它正常的樣本,因為這些正常樣本的誤差比這單個的異常值的誤差小。
(2)穩定性
最小絕對值偏差方法的不穩定性意味着,對於數據集的一個小的水平方向的波動,回歸線也許會跳躍很大(如,在轉折點處求導)。在一些數據結構上,該方法有許多連續解;但是,對數據集的一個微小移動,就會跳過某個數據結構在一定區域內的許多連續解。在跳過這個區域內的解后,最小絕對值偏差線可能會比之前的線有更大的傾斜。
相反地,最小平方法的解是穩定的,因為對於一個數據點的任何微小波動,回歸線總是只會發生輕微移動;也就說,回歸參數是數據集的連續函數。
三、smooth L1損失函數
其實顧名思義,smooth L1說的是光滑之后的L1,前面說過了L1損失的缺點就是有折點,不光滑,導致不穩定,那如何讓其變得光滑呢?smooth L1損失函數為:
在這里插入圖片描述
smooth L1損失函數曲線如下圖所示,作者這樣設置的目的是想讓loss對於離群點更加魯棒,相比於L2損失函數,其對離群點(指的是距離中心較遠的點)、異常值(outlier)不敏感,可控制梯度的量級使訓練時不容易跑飛。
在這里插入圖片描述