深度學習之如何處理樣本不平衡?

2021-10-07 16:53:02 字數 1923 閱讀 7458

在計算機視覺(cv)任務裡常常會碰到類別不平衡的問題, 例如:

檢測任務:現在的檢測方法如ssd和rcnn系列,都使用anchor機制。 訓練時正負anchor的比例很懸殊.

再者,除了類不平衡問題, 還有easy sample overwhelming的問題。easy sample如果太多,可能會將有效梯度稀釋掉。

這兩個問題通常都會一起出現。 如果不處理, 可能會對模型效能造成很大傷害.用focal loss裡的話說,就是訓練不給力, 且會造成模型退化.

樣例數目較多的類別在反向傳播時對權重佔主導地位。這一現象會使網路訓練初期,快速的降低數目較多類別的錯誤率,但隨著訓練的迭代次數增加,數目較少類的錯誤率會隨之上公升

常見的方法有online的, 也有非online的;有只處理類間不平衡的,有只處理easy example的, 也有同時處理兩者的。

hard negative mining, 非online的mining/boosting方法

mini-batch sampling,以fast r-cnn(2015)和faster r-cnn(2016)為代表。fast rcnn在訓練分類器, faster r-cnn在訓練rpn時,都會從n = 1或2張上隨機選取mini_batch_size/2個roi或anchor, 使用正負樣本的比例為1:1。若正樣本數量不足就用負樣本填充。

online hard example mining, ohem(2016)。將所有sample根據當前loss排序,選出loss最大的n個,其餘的拋棄。這個方法就只處理了easy sample的問題。

oline hard negative mining, ohnm, ssd(2016)裡使用的乙個ohem變種, 在focal loss裡代號為ohem 1:3。在計算loss時, 使用所有的positive anchor, 使用ohem選擇3倍於positive anchor的negative anchor。同時考慮了類間平衡與easy sample。

class balanced loss。計算loss時,正負樣本上的loss分別計算, 然後通過權重來平衡兩者。

focal loss(2017), 最近提出來的。不會像ohem那樣拋棄一部分樣本, 而是和class balance一樣考慮了每個樣本, 不同的是難易樣本上的loss權重是根據樣本難度計算出來的。

這些方法都是在計算loss時通過給樣本加權重來解決不平衡與easy example的問題。不同的是,ohem使用了hard weight(只有0或1),而focal loss使用了soft weight(0到1之間).

現在依然常用的方法特性比較如下:

method

是否處理class inbalance

是否處理easy example

權值方式

ohem

noyes

hard

ohnm(ohem 1:3)

yesyes

hard

class balanced loss

yesno

soft

focal loss

noyes

soft

從損失函式,資料處理,網路訓練,梯度下降簡要說明.

損失函式:計算loss時,正負樣本上的loss分別計算, 然後通過權重來平衡兩者

資料處理:資料擴充,針對樣本數量較少的類別進行資料擴增

網路訓練:取樣策略,增加樣本數量較少的類別的選中概率

機器學習之樣本不平衡

1.樣本不平衡導致什麼問題?在機器學習的分類問題中,以二分類為例,如果訓練集合的正例和負例的樣本不平衡,相差懸殊很大。比如針對這個不平衡的訓練結合運用邏輯回歸的時候,一般來說,邏輯回歸的閾值0 1,常取0.5,當樣本不平衡時,採用預設的分類閾值可能會導致輸出全部為反例,產生虛假的高準確度,導致分類失...

樣本不平衡問題

樣本不平衡是指 不同類別的樣本差別比較大,比如說正類和負類的樣本比例為50 1。處理樣本不平衡的原因 一般而已,如果類別不平衡比例超過4 1,那麼其分類器會大大地因為資料不平衡性而無法滿足分類要求的。因此在構建分類模型之前,需要對分類不均衡性問題進行處理。在前面,我們使用準確度這個指標來評價分類質量...

keras中處理樣本不平衡

參考文獻 兩者的區別為 class weight 主要針對的上資料不均衡問題,比如 異常檢測的二項分類問題,異常資料僅佔1 正常資料佔99 此時就要設定不同類對loss的影響。sample weight 主要解決的是樣本質量不同的問題,比如前1000個樣本的可信度,那麼它的權重就要高,後1000個樣...