【原創】正負例樣本失衡及focal loss

前段時間在解決分類任務時,發現當正負例比例相差較大時,分類算法更傾向於優化比例較大的類別的loss,最終導致正負例上的正確率有極大懸殊(正例正確率遠低於負例)。
這其實是做分類任務時經常遇到的問題,即正負例比例不均衡,解決此類問題的辦法除了較常用的over-samping/under-sampling之外,還有一類方法是修改loss函數,使其能更均衡的去學習正負樣本。
比較容易想到的方法是直接對正負樣本的loss加上不同的權重,比如正樣本loss的權重爲alpha,負樣本的權重爲(1 - alpha),在我看來,這種方法本質上和over-sampling/under-sampling沒有區別,針對的是所有的正樣本或者所有的負樣本去調整weight,粒度顯得略大,因爲有些正樣本或者負樣本是被正確分類的,它們的loss不應該被放大。
於是,何愷明大神在Focal Loss for Dense Object Detection這篇論文中提出使用focal loss替換分類問題中常用的cross entropy loss,有效的解決了正負例樣本失衡問題。
正常的ce loss爲:
交叉熵損失
從上式可以看出,正樣本的loss爲-log(p),即p越小,loss越大,同理,對負樣本,p越大,loss越大;但在正負例比例有較大懸殊的時候,使用ce loss模型依然不能很好的學習(如本文開頭所言),此時需要去更加強化那些不容易分對的樣本的loss,而去弱化那些分類正確的樣本,因此一個比較自然的想法就是用殘差去對loss做一個進一步的加強或者減弱,於是便有了focal loss(下式爲正例loss,負例loss可參考 何愷明大神的「Focal Loss」,如何更好地理解?):
focal loss
focal loss中,(1-Pt)是殘差(對負例而言殘差就是Pt),gamma是超參數,當殘差(1 - Pt)或Pt較大時,說明該樣本不容易被正確分類,所以相應的loss做一個(1 - Pt)gamma的加強,乘以一個權重(1 - Pt)gamma,(負例樣本的權重爲 Ptgamma),這樣便能使得模型更加重視不容易分對的那部分樣本,一定程度上去平衡類別不均衡的問題。
在我看來focal loss就是在ce loss的基礎上增加了一個類似於均方誤差(MSE)的loss,只不過這個地方的gamma不是固定的2,用這個類似於均方誤差的loss對原本的ce loss做了一個加強或者減弱。
回到本文剛開始提到的正負例準確率懸殊的問題,focal loss是否解決了這個問題呢?答案是肯定的,因爲當在loss中多加入(1 - Pt)gamma或者Ptgamma這一項時,模型不再一味的去減小那些容易優化的負例樣本的loss,而是去減小那些難以優化的正例的loss,因爲這些正例的focal loss遠大於那些負例。但是,focal loss本質上並不是去針對正負樣本不均衡問題優化的,而是針對正確分類的困難與否優化的,只是正負例比例失衡恰好有這個問題,爲了更大程度的去平衡正負例loss,可以在上述focal loss的基礎上再對正負例loss加一個不同的權重:
正負例平衡的focal loss


FAQ

  1. 有人可能會問Pt在(0, 1)之間,無論是(1 - Pt)gamma還是Ptgamma都是在(0, 1)之間的,這樣對loss永遠是在減弱,並沒有增強啊?
    其實這裏要看的不是絕對的增強或者減弱,因爲loss的絕對值本身就沒有意義,這裏要看的是相對的增強/減弱,如果對容易分錯的樣本的減弱比不容易分錯的樣本的減弱要小,則這個loss就是有效的;又因爲多項式函數(y = xgamma)是遞增函數,所以只要殘差(1 - Pt或者Pt)越大,權重就會越大,因此對殘差更大的樣本減弱得更少,以此達到重視難分樣本的目的。
  2. 超參數gamma和alpha的選擇?他們跟正負例比例有何關係?
    參考paper中的曲線,gamma越大,loss越陡,對錯誤分類的樣本的權重增強效果就越明顯,因此越強調錯誤分類的樣本(或越弱化正確分類的樣本),則gamma應該越大,gamma與正負例比例並沒有本質上的關係。如果只調整gamma並不能解決正負例準確率失衡的問題,則需要調節alpha的值,正例比例越小,alpha越大。
    Pt與FL loss的關係

參考文獻

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章