一、概述
SmoothL1損失函數是一種介於L1和L2之間的一種損失函數,是斜率為1的絕對值函數與平方函數的交點作為拐點而得到的藉助插值而得到的損失函數。它主要在回歸模型的訓練中被使用,能夠很好的處理異常值。同時也具有可微性和更好的數學性質。
二、SmoothL1與L1、L2的比較
與L1損失函數相比,
SmoothL1在斜率為1的拐點處是可導的,而L1不可導。SmoothL1損失的一階導數在拐點處是連續的,而L1的不連續點卻在極值位置,可能會影響最終模型的優化結果。
與L2損失函數相比,
SmoothL1可以更好地處理離群點的情況,並且SmoothL1在非離散位的損失衰減速率是更慢的,這意味著即使殘差很大,仍然能夠通過權重逐漸學習它們的特徵,這在一些特殊應用情形下能夠得到更好的效果。
三、SmoothL1與HuberLoss的比較
Huber loss和SmoothL1損失函數都能夠處理壞值(outlier),但是在許多應用中,SmoothL1表現 更好,因為它在拐點處二次微分也是連續的,這對優化演算法過程中的收斂貢獻非常大。
四、SmoothL1代碼示例
import torch import torch.nn.functional as F # 創建預測值tensor以及標籤值tensor prediction = torch.randn(3, 5) label = torch.randn(3, 5) # 使用SmoothL1計算損失函數 loss = F.smooth_l1_loss(prediction, label) print(loss)
五、SmoothL1的應用舉例
SmoothL1損失函數廣泛應用於深度學習模型的回歸問題中。如在目標檢測中,YOLO系列演算法大量使用SmoothL1作為回歸器的損失函數。在單目深度估計問題中,SmoothL1也常常作為損失函數。在機器人領域,SmoothL1也被用來作為機器人行為的獎勵函數。
原創文章,作者:QBUVL,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/369294.html