解決的問題:消除正負樣本比例不平衡(One-Stage算法需要產生超大量的預選框,模型被大量負樣本所主導,Focal Loss對此種情況卓有成效。),並且挖掘難負樣本(難負樣本即為一些很難區分是正樣本還是負樣本的負樣本。其對立的就是一些簡單的負樣本,很容易區分出來是負樣本,其前向傳播的loss很小,模型很容易認出,因此在模型后期這些大量的簡單樣本會浪費大量的時間。)
Focal loss是在交叉熵損失函數基礎上進行的修改,Focal loss損失函數降低了大量簡單負樣本在訓練中所占的權重。首先回顧二分類交叉上損失:
其中 y 是真實樣本的標簽(1正0負), y’ 是經過 sigmoid 激活函數的預測輸出(數值在0-1之間)。可見普通的交叉熵對於正樣本而言,輸出概率越大損失越小。對於負樣本而言,輸出概率越小則損失越小。此時的損失函數在大量簡單樣本的迭代過程中比較緩慢且可能無法優化至最優。
在此背景下,Focal Loss函數提出來了,
它在原有的基礎之上加了一個γ,其中γ>0使得減少易分類樣本的損失,使得模型更關注於困難的、錯分的樣本。
下圖是γ的不同取值對損失函數曲線的影響
例如:
γ為2時,對於正類樣本而言,預測結果為0.95肯定是簡單樣本,所以(1-0.95)的γ次方就會很小,這時損失函數值就變得比沒有γ次方時更小,而預測概率為0.3的樣本其損失相對很大,都加快了模型收斂的速度。
對於負類樣本而言,預測0.1的結果應當遠比預測0.7的樣本損失值要小得多。對於預測概率為0.5時,損失值減少了0.25倍。所以更加關注於這種難以區分的樣本。這樣減少了簡單樣本的影響,大量預測概率很小的樣本疊加起來后的效應才可能比較有效。
此外,加入平衡因子α,用來平衡正負樣本本身的比例不均:論文中α取0.25,即正樣本要比負樣本占比小,這是因為負例易分。
只添加α雖然可以平衡正負樣本的重要性,但是無法解決簡單與困難樣本的問題。
γ調節簡單樣本權重降低的速率,當γ為0時即為交叉熵損失函數,當γ增加時,調整因子的影響也在增加。實驗發現γ為2時最優。