樣本不平衡問題
如在二分類中正負樣本比例存在較大差距,導致模型的預測偏向某一類別。如果正樣本占據1%,而負樣本占據99%,那么模型只需要對所有樣本輸出預測為負樣本,那么模型輕松可以達到99%的正確率。一般此時需使用其他度量標准來判斷模型性能。比如召回率ReCall(查全率:樣本中所有標記為正樣本的有多少被模型預測為正樣本)。
從數據層解決辦法:
1、欠采樣(undersampling):將模型中類別較多的樣例除去一些,使類別樣本數量平衡。但此法由於除去一些樣本,導致丟失許多信息。一種改進辦法是EasyEnsemble,將數量多的類別分成幾份,分別與少數類別組合,形成N份數據集。從全局上看信息沒有丟失。還有one-sided selection;data decontamination
2、過采樣(oversampling):增加數量少的類別樣本。簡單方法使用直接復制、數據增強、添加噪聲等。典型算法是SMOTE 算法:通過對少數樣本進行插值來獲取新樣本的。一般過采樣的效果要好於前采樣。推薦了解:Synthetic Minority Over-sampling Technique(SMOTE:在樣本和其相鄰的樣本之間產生一個樣本) ;Ranked Minority Over-sampling (RAMO:通過判斷樣本周圍正負樣本的比例來判斷其難分程度,根據權重生成少類數據集,再使用SMOTE生成樣本);Random Balance (RB:在數據集數量相同的情況下,隨機設置正負比例率,生成一堆不平衡數據集);Cluster-based oversampling;DataBoost-IM;class-aware sampling
從模型層解決辦法:
1、閾值移動:在二分類中,若 y/(1-y) > 1,則預測為正例。然而只有當樣本中正反比例為1:1時,閾值設置為0.5才是合理的。對於樣本不平衡(m+ 代表正例個數, m- 代表負例個數),改進決策規則:若 y/(1-y) > (m+) / (m-) ,則預測為正例。因為訓練集是總體樣本的無偏采樣,觀測幾率就代表真實幾率,決策規則中 ( (m+) / (m-) ) 代表樣本中正例的觀測幾率,只要分類器中的預測幾率高於觀測幾率達到改進判定結果的目標。
2、代價敏感學習:在醫療中,“將病人誤診為健康人的代價”與“將健康人誤診為病人的代價”不同。通常,不同的代價被表示成為一個N×N的矩陣Cost中,其中N是類別的個數。Cost[i, j]表示將一個i 類的對象錯分到j 類中的代價。代價敏感分類就是為不同類型的錯誤分配不同的代價,使得在分類時,高代價錯誤產生的數量和錯誤分類的代價總和最小。
其他方法:
1、One-class classification單分類,針對極端不平衡分類問題效果不錯。
2、融合上述方法:EasyEnsemble ; BalanceCascade ;SMOTEBoost;two-phase
training(現在平衡數據集上預訓練網絡,然后在不平衡數據集上fine-tuning最后輸出層)
更多信息
難分樣本問題 Online Hard Example Mining,OHEM
個人感覺難分樣本指的是模型對某個樣本學習困難,難以學得其特征。而數據不平衡會導致某一類別在模型中學習迭代次數較少,逐漸成為一種難分樣本。
一般解決辦法:
1、focal loss:通過模型預測的概率pt,使用(1-Pt)來代表樣本難分程度。可以理解為模型對某個樣本預測屬於其真實label的概率越高,則說明該樣本對此模型比較容易學習,反之則難分。
2、《ScreenerNet: Learning Self-Paced Curriculum for Deep Neural Networks》論文提出一個附加網絡來幫助主網絡區分樣本難易程度。
3、《Fine-tuning Convolutional Neural Networks for Biomedical Image Analysis》論文通過對一張圖像進行數據增強生成多張圖像,然后使用模型預測每張圖像的概率。根據多張相同label的增強圖像的概率分布區分其樣本難易程度。
4、《OHEM: Training Region-based Object Detectors with Online Hard Example Mining》論文提出先使用模型輸出概率,據此選出部分難分樣本,然后根據這些樣本,更新網絡參數。
OHEM: 
上圖綠色和紅色分為兩個網絡但共享權限,通過將提取的RoI傳入綠色的只讀網絡(只進行forward),計算出每個RoI的loss。根據loss排序(可使用NMS)選出部分樣本,再輸入紅色網絡(進行forward和backward)學習並進行梯度傳播。文中提出另一種辦法,在反向傳播時,只對選出的樣本的梯度/殘差回傳,而其他的props的梯度/殘差設為0。但容易導致顯存顯著增加,迭代時間增加。
《Fine-tuning Convolutional Neural Networks for Biomedical Image Analysis》中
提出首先對一張圖像做數據增強,生成一個batches圖像,由於這些圖像同屬一個類別,按理模型預測的結果應該近似,但如果模型預測的不理想,則一定程度上說明圖像比較難分。上公式R用於計算圖像的難分程度。其思想就是對一張圖像的多種變化后進行預測,輸出loss后計算樣本難分度。focal loss其實就是一種簡版,直接根據輸出概率計算難分。
ScreenerNet:提出附加網絡來輸出樣本權重,使用該權重與主網絡輸出結合對主網絡參數進行更新。同時使用主網絡輸出和附網絡輸出來更新附網絡參數。(圖中數字為算法運行步驟)
值得注意是在沒有label情況下,對附網絡的目標函數的設定: 
