L1和L2 loss的區別


引自:https://zhuanlan.zhihu.com/p/83131026

1、L1 loss 在零點不平滑,用的較少 ,、一般來說,L1正則會制造稀疏的特征,大部分無用特征的權重會被置為0
2、Smooth L1 Loss 修改零點不平滑問題 , L1-smooth比L2范數的對異常值的魯棒性更強。

3、L2 loss:對離群點比較敏感,如果feature 是 unbounded的話,需要好好調整學習率,防止出現梯度爆炸的情況[fast rcnn]。 L2正則會讓特征的權重不過大,使得特征的權重比較平均。

L1Loss

也就是L1 Loss了,它有幾個別稱:

  • L1 范數損失
  • 最小絕對值偏差(LAD)
  • 最小絕對值誤差(LAE)

最常看到的MAE也是指L1 Loss損失函數。 它是把目標值 [公式] 與模型輸出(估計值) [公式] 做絕對值得到的誤差。

[公式]

什么時候使用?

  1. 回歸任務
  2. 簡單的模型
  3. 由於神經網絡通常是解決復雜問題,所以很少使用。

L2Loss

也就是L2 Loss了,它有幾個別稱:

  • L2 范數損失
  • 最小均方值偏差(LSD)
  • 最小均方值誤差(LSE)

最常看到的MSE也是指L2 Loss損失函數,PyTorch中也將其命名為torch.nn.MSELoss

它是把目標值 [公式] 與模型輸出(估計值) [公式] 做差然后平方得到的誤差

[公式]

什么時候使用?

  1. 回歸任務
  2. 數值特征不大
  3. 問題維度不高

SmoothL1Loss

簡單來說就是平滑版的L1 Loss。

原理

SoothL1Loss的函數如下:

[公式]

仔細觀察可以看到,當預測值和ground truth差別較小的時候(絕對值差小於1),其實使用的是L2 Loss;而當差別大的時候,是L1 Loss的平移。SooothL1Loss其實是L2Loss和L1Loss的結合,它同時擁有L2 Loss和L1 Loss的部分優點。

1. 當預測值和ground truth差別較小的時候(絕對值差小於1),梯度不至於太大。(損失函數相較L1 Loss比較圓滑)
2. 當差別大的時候,梯度值足夠小(較穩定,不容易梯度爆炸)。

什么時候使用?

  1. 回歸
  2. 當特征中有較大的數值
  3. 適合大多數問題

size_average=True or False

在pytorch中,所有的損失函數都帶這個參數,默認設置為True。

當size_average為True的時候,計算出來的結果會對mini-batch取平均。反之,為False的時候,那算出來的絕對值不會除以n。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM