類別不平衡問題


類別不平衡問題指分類任務中不同類別的訓練樣本數目差別很大的情況。一般來說,不平衡樣本會導致訓練模型側重樣本數目較多的類別,而“輕視”樣本數目較少類別,這樣模型在測試數據上的泛化能力就會受到影響。一個例子,訓練集中有99個正例樣本,1個負例樣本。在不考慮樣本不平衡的很多情況下,學習算法會使分類器放棄負例預測,因為把所有樣本都分為正便可獲得高達99%的訓練分類准確率。 

下面將從“數據層面“和”算法層面“兩個方面介紹不平衡樣本問題。

數據層面處理辦法

數據層面處理方法多借助數據采樣法使整體訓練集樣本趨於平衡,即各類樣本數基本一致。

1、欠采樣

去除多余的樣本,使得正負樣本數目基本一致。

注意:(1)由於丟棄了一些樣本,訓練速度相對加快了。

           (2)但是簡單的隨機丟失樣本,會造成信息丟失。欠采樣的代表算法是EasyEnsemble,是利用集成學習機制,將數目多的一類划分成若干個集合供不同學習器使用,這樣雖然對每個學習器丟失了一部分信息,但全局上看不會丟失重要信息。

2、過采樣

即增加少的一類的樣本數目,使得正負樣本數目基本一致。

注意:(1)由於多了一些樣本,訓練速度相對減慢了。

           (2)但是簡單的重采樣會帶來嚴重的過擬合,過采樣的代表性算法是SMOTE,是通過對少的一類進行插值得到額外的樣本。

 

3、類別均衡采樣

把樣本按類別分組,每個類別生成一個樣本列表,訓練過程中先隨機選擇1個或幾個類別,然后從各個類別所對應的樣本列表里選擇隨機樣本。這樣可以保證每個類別參與訓練的機會比較均等。

上述方法需要對於樣本類別較多任務首先定義與類別相等數量的列表,對於海量類別任務如ImageNet數據集等此舉極其繁瑣。海康威視研究院提出類別重組的平衡方法。

類別重組法只需要原始圖像列表即可完成同樣的均勻采樣任務,步驟如下:

首先按照類別順序對原始樣本進行排序,之后計算每個類別的樣本數目,並記錄樣本最多那個類的樣本數目。之后,根據這個最多樣本數對每類樣本產生一個隨機排列的列表, 然后用此列表中的隨機數對各自類別的樣本數取余,得到對應的索引值。接着,根據索引從該類的圖像中提取圖像,生成該類的圖像隨機列表。之后將所有類的隨機列表連在一起隨機打亂次序,即可得到最終的圖像列表,可以發現最終列表中每類樣本數目均等。根據此列表訓練模型,在訓練時列表遍歷完畢,則重頭再做一遍上述操作即可進行第二輪訓練,如此往復。 類別重組法的優點在於,只需要原始圖像列表,且所有操作均在內存中在線完成,易於實現。

4、閾值移動

閾值移動主要是用到“再縮放”的思想,以線性模型為例介紹“再縮放”。

我們把大於0.5判為正類,小於0.5判為負類,即

即令然后代入上上式。這就是“再縮放”。

閾值移動方法是使用原始訓練集訓練好分類器,而在預測時加入再縮放的思想,用來緩解類別不平衡的方法。

 

算法層面的處理方法
對於不平衡樣本導致樣本數目較少的類別”欠學習“這一現象,一個很自然的解決辦法是增加小樣本錯分的懲罰代價,並將此代價直接體現在目標函數里。這就是代價敏感的方法,這樣就可以通過優化目標函數調整模型在小樣本上的注意力。算法層面處理不平衡樣本問題的方法也多從代價敏感的角度出發。

1、帶權重的softmaxLoss

在樣本不均衡分類問題中,樣本量大的類別往往會主導訓練過程,因為其累積loss會比較大。帶權重的softmaxloss函數通過加權來決定主導訓練的類別。具體為增加pos_mult(指定某類的權重乘子)和pos_cid(指定的某類的類別編號)兩個參數來確定類別和當前類別的系數。(若pos_mult=0.5,就表示當然類別重要度減半)。

2、OHEMLoss

OHEM被稱為難例挖掘,針對模型訓練過程中導致損失值很大的一些樣本(即使模型很大概率分類錯誤的樣本),重新訓練它們.維護一個錯誤分類樣本池, 把每個batch訓練數據中的出錯率很大的樣本放入該樣本池中,當積累到一個batch以后,將這些樣本放回網絡重新訓練。通俗的講OHEM就是加強loss大樣本的訓練。

3、focalLoss 

A. 總述

Focal loss主要是為了解決one-stage目標檢測中正負樣本比例嚴重失衡的問題。該損失函數降低了大量簡單負樣本在訓練中所占的權重,也可理解為一種困難樣本挖掘。

B. 損失函數形式

Focal loss是在交叉熵損失函數基礎上進行的修改,首先回顧二分類交叉上損失:

是經過激活函數的輸出,所以在0-1之間。可見普通的交叉熵對於正樣本而言,輸出概率越大損失越小。對於負樣本而言,輸出概率越小則損失越小。此時的損失函數在大量簡單樣本的迭代過程中比較緩慢且可能無法優化至最優。那么Focal loss是怎么改進的呢?

首先在原有的基礎上加了一個因子,其中gamma>0使得減少易分類樣本的損失。使得更關注於困難的、錯分的樣本。

例如gamma為2,對於正類樣本而言,預測結果為0.95肯定是簡單樣本,所以(1-0.95)的gamma次方就會很小,這時損失函數值就變得更小。而預測概率為0.3的樣本其損失相對很大。對於負類樣本而言同樣,預測0.1的結果應當遠比預測0.7的樣本損失值要小得多。對於預測概率為0.5時,損失只減少了0.25倍,所以更加關注於這種難以區分的樣本。這樣減少了簡單樣本的影響,大量預測概率很小的樣本疊加起來后的效應才可能比較有效。

此外,加入平衡因子alpha,用來平衡正負樣本本身的比例不均:

 

只添加alpha雖然可以平衡正負樣本的重要性,但是無法解決簡單與困難樣本的問題。

lambda調節簡單樣本權重降低的速率,當lambda為0時即為交叉熵損失函數,當lambda增加時,調整因子的影響也在增加。實驗發現lambda為2是最優。

C. 總結

作者認為one-stage和two-stage的表現差異主要原因是大量前景背景類別不平衡導致。作者設計了一個簡單密集型網絡RetinaNet來訓練在保證速度的同時達到了精度最優。在雙階段算法中,在候選框階段,通過得分和nms篩選過濾掉了大量的負樣本,然后在分類回歸階段又固定了正負樣本比例,或者通過OHEM在線困難挖掘使得前景和背景相對平衡。而one-stage階段需要產生約100k的候選位置,雖然有類似的采樣,但是訓練仍然被大量負樣本所主導。

 

參考文獻:

https://blog.csdn.net/siyue0211/article/details/80318999

https://blog.csdn.net/qiu931110/article/details/86560974

https://www.cnblogs.com/king-lps/p/9497836.html


免責聲明!

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



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