均方誤差(Mean Square Error,MSE)和平均絕對誤差(Mean Absolute Error,MAE) 是回歸中最常用的兩個損失函數,但是其各有優缺點。為了避免MAE和MSE各自的優缺點,在Faster R-CNN和SSD中使用\(\text{Smooth} L_1\)損失函數,當誤差在\([-1,1]\) 之間時,\(\text{Smooth} L_1\)損失函數近似於MSE,能夠快速的收斂;在其他的區間則近似於MAE,其導數為\(\pm1\),不會對離群值敏感。
本文再介紹幾種回歸常用的損失函數
- Huber Loss
- Log-Cosh Loss
- Quantile Loss
Huber Loss
Huber損失函數(\(\text{Smooth} L_1\)損失函數是其的一個特例)整合了MAE和MSE各自的優點,並避免其缺點
\(\delta\) 是Huber的一個超參數,當真實值和預測值的差值\(\mid y- f(x) \mid \leq \delta\) 時,Huber就是MSE;當差值在\((-\infty,\delta )\)或者 \((\delta,+\infty)\) 時,Huber就是MAE。這樣,當誤差較大時,使用MAE對離群點不那么敏感;在誤差較小時使用MSE,能夠快速的收斂;
這里超參數\(\delta\)的值的設定就較為重要,和真實值的差值超過該值的樣本為異常值。誤差的絕對值小於\(\delta\) 時,使用MSE;當誤差大於\(\delta\) 時,使用MAE。
下圖給出了不同的\(\delta\) 值,Huber的函數曲線。
橫軸表示真實值和預測值的差值,縱軸為Huber的函數值。可以看出,\(\delta\) 越小其曲線越趨近於MSE;越大,越趨近於MAE。
另外,使用MAE訓練神經網絡最大的一個問題就是不變的大梯度,這可能導致在使用梯度下降快要結束時,錯過了最小點。而對於MSE,梯度會隨着損失的減小而減小,使結果更加精確。
在這種情況下,Huber損失就非常有用。它會由於梯度的減小而落在最小值附近。比起MSE,它對異常點更加魯棒。因此,Huber損失結合了MSE和MAE的優點。但是,Huber損失的問題是我們可能需要不斷調整超參數\(\delta\) 。
\(\text{Smooth }L_1\) 損失函數可以看作超參數\(\delta = 1\) 的Huber函數。
Log-Cosh Loss
Log-Cosh是比\(L_2\) 更光滑的損失函數,是誤差值的雙曲余弦的對數
其中,\(y\)為真實值,\(f(x)\) 為預測值。
對於較小的誤差$\mid y - f(x) \mid $ ,其近似於MSE,收斂下降較快;對於較大的誤差\(\mid y - f(x) \mid\) 其近似等於\(\mid y-f(x) \mid - log(2)\) ,類似於MAE,不會受到離群點的影響。 Log-Cosh具有Huber 損失的所有有點,且不需要設定超參數。
相比於Huber,Log-Cosh求導比較復雜,計算量較大,在深度學習中使用不多。不過,Log-Cosh處處二階可微,這在一些機器學習模型中,還是很有用的。例如XGBoost,就是采用牛頓法來尋找最優點。而牛頓法就需要求解二階導數(Hessian)。因此對於諸如XGBoost這類機器學習框架,損失函數的二階可微是很有必要的。但Log-cosh損失也並非完美,其仍存在某些問題。比如誤差很大的話,一階梯度和Hessian會變成定值,這就導致XGBoost出現缺少分裂點的情況。
Quantile Loss 分位數損失
通常的回歸算法是擬合訓練數據的期望或者中位數,而使用分位數損失函數可以通過給定不同的分位點,擬合訓練數據的不同分位數。 如下圖
設置不同的分位數可以擬合出不同的直線。
分位數損失函數如下:
該函數是一個分段函數,\(\gamma\) 為分位數系數,\(y\)為真實值,\(f(x)\)為預測值。根據預測值和真實值的大小,分兩種情況來開考慮。\(y > f(x)\) 為高估,預測值比真實值大;\(y < f(x)\)為低估,預測值比真實值小,使用不同過得系數來控制高估和低估在整個損失值的權重 。
特別的,當\(\gamma = 0.5\) 時,分位數損失退化為平均絕對誤差MAE,也可以將MAE看成是分位數損失的一個特例 - 中位數損失。下圖是取不同的中位點\([0.25,0.5,0.7]\) 得到不同的分位數損失函數的曲線,也可以看出0.5時就是MAE。
總結
均方誤差(Mean Square Error,MSE)和平均絕對誤差(Mean Absolute Error,MAE) 可以說是回歸損失函數的基礎。但是MSE對對離群點(異常值)較敏感,MAE在梯度下降的過程中收斂較慢,就出現各種樣的分段損失函數,在loss值較小的區間使用MSE,loss值較大的區間使用MAE。
- Huber Loss ,需要一個超參數\(\delta\) ,來定義離群值。$ \text{smooth } L_1$ 是\(\delta = 1\) 的一種情況。
- Log-Cosh Loss, Log-Cosh是比\(L_2\) 更光滑的損失函數,是誤差值的雙曲余弦的對數.
- Quantile Loss , 分位數損失,則可以設置不同的分位點,控制高估和低估在loss中占的比重。