類別不均衡問題與損失函數loss


1、樣本不均衡問題

主要分為以下幾類:
1)每個類別的樣本數量不均衡
2)划分樣本所屬類別的難易程度不同

2、Focal loss

focal loss用來解決難易樣本數量不均衡,重點讓模型更多關注難分樣本,少關注易分樣本。
假設正樣本(label=1)少,負樣本多,定義focal loss如下

Loss = -[alpha*(1-y_hat)^2yln(y_hat)
+ (1-alpha)y_hat^2(1-y)*ln(1-y_hat)]
其中y_hat:(batch, seq, tags),預測出的
y: (batch, seq, tags)
alpha:(1, 1, tags)
alpha是超參數,是正樣本損失占總體的比例,初始化為 少數樣本/總樣本 的比值,調整策略如下,正樣本的precision<recall時,訓練更關注正樣本,alpha調低,反之調高。
調整策略也可以為:
正類的識別正確率與負類的識別正確率

3、GHM loss

GHM用來解決難分樣本中的離群點。模型不應過多關注易分樣本,也不應過多關注離群很遠的難分樣本(特別難分的)。

4、加權loss

用來解決樣本類別數量不均衡問題,某些類別的樣本特別多或特別少。

——————————————

模型層面主要是通過加權Loss,包括基於類別Loss、Focal Loss和GHM Loss三種加權Loss函數;


為了解決樣本不均衡的問題,最簡單的是基於類別的加權Loss,具體公式如下:

​基於類別加權的Loss其實就是添加了一個參數a,這個a主要用來控制正負樣本對Loss帶來不同的縮放效果,一般和樣本數量成反比。還拿上面的例子舉例,有100條正樣本和1W條負樣本,那么我們設置a的值為10000/10100,那么正樣本對Loss的貢獻值會乘以一個系數10000/10100,而負樣本對Loss的貢獻值則會乘以一個比較小的系數100/10100,這樣相當於控制模型更加關注正樣本對損失函數的影響。通過這種基於類別的加權的方式可以從不同類別的樣本數量角度來控制Loss值,從而一定程度上解決了樣本不均衡的問題。

 

上面基於類別加權Loss雖然在一定程度上解決了樣本不均衡的問題,但是實際的情況是不僅樣本不均衡會影響Loss,而且樣本的難易區分程度也會影響Loss。基於這個問題2017年何愷明大神在論文《Focal Loss for Dense Object Detection》中提出了非常火的Focal Loss,下面是Focal Loss的計算公式:

相比於公式2來說,Focal Loss添加了參數γ從置信的角度來加權Loss值。假如γ設置為0,那么公式3蛻變成了基於類別的加權也就是公式2;下面重點看看如何通過設置參數r來使得簡單和困難樣本對Loss的影響。當γ設置為2時,對於模型預測為正例的樣本也就是p>0.5的樣本來說,如果樣本越容易區分那么(1-p)的部分就會越小,相當於乘了一個系數很小的值使得Loss被縮小,也就是說對於那些比較容易區分的樣本Loss會被抑制,同理對於那些比較難區分的樣本Loss會被放大,這就是Focal Loss的核心:通過一個合適的函數來度量簡單樣本和困難樣本對總的損失函數的貢獻。

參考資料:

https://blog.csdn.net/angel_hben/article/details/103369346

https://zhuanlan.zhihu.com/p/321323696

https://www.zhihu.com/question/66408862/answer/1647753758

https://zhuanlan.zhihu.com/p/80594704

NLP類別不均衡問題之loss大集合 (qq.com)


免責聲明!

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



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