之前再看Fast R-CNN的時候契沫,網絡bounding boxes回歸使用的smooth L1 loss沛婴,當時并沒有去細想為什么用這個loss而不是l2 loss,這個loss有什么好督赤?直到昨天看別的論文的時候提到smooth L1具有更強的魯棒性嘁灯,為什么smooth L1 loss具有更好的魯棒性呢?上網查了下够挂,下面是知乎的一個回答旁仿,感覺非常通俗易懂,所以就轉了過來孽糖,原文——請問faster rcnn和ssd 中為什么用smooth l1 loss枯冈,和l2有什么區(qū)別?
smooth L1 loss能從兩個方面限制梯度:
- 當預測框與 ground truth 差別過大時办悟,梯度值不至于過大尘奏;
- 當預測框與 ground truth 差別很小時,梯度值足夠小病蛉。
觀察 (4),當 x 增大時 L2 損失對 x 的導數也增大铺然。這就導致訓練初期俗孝,預測值與 groud truth 差異過于大時,損失函數對預測值的梯度十分大魄健,訓練不穩(wěn)定赋铝。
根據方程 (5),L1 對 x 的導數為常數沽瘦。這就導致訓練后期革骨,預測值與 ground truth 差異很小時, L1 損失對預測值的導數的絕對值仍然為 1析恋,而 learning rate 如果不變良哲,損失函數將在穩(wěn)定值附近波動,難以繼續(xù)收斂以達到更高精度助隧。
最后觀察 (6)筑凫,smooth L1 在 x 較小時,對 x 的梯度也會變小并村,而在 x 很大時巍实,對 x 的梯度的絕對值達到上限 1,也不會太大以至于破壞網絡參數橘霎。 smooth L1 完美地避開了 L1 和 L2 損失的缺陷蔫浆。其函數圖像如下:
由圖中可以看出,它在遠離坐標原點處姐叁,圖像和 L1 loss 很接近瓦盛,而在坐標原點附近洗显,轉折十分平滑,不像 L1 loss 有個尖角原环,因此叫做 smooth L1 loss挠唆。