1. 如何處理數據不平衡問題
基於上一篇文章,面試被虐成渣,所以來整理和記錄下第一個問題,關於數據不平衡的問題。
以下內容參考:
https://www.cnblogs.com/charlotte77/p/10455900.html https://www.leiphone.com/news/201706/dTRE5ow9qBVLkZSY.html
數據不平衡也可稱作數據傾斜。在實際應用中,數據集的樣本特別是分類問題上,不同標簽的樣本比例很可能是不均衡的。因此,如果直接使用演算法訓練進行分類,訓練效果可能會很差。
解決實際應用中數據不平衡問題可以從三個方面入手,分別是對數據進行處理、選擇合適的評估方法和使用合適的演算法。
1)過采樣:
主動獲取更多的比例少的樣本數據。由於樣本比例不均衡,在條件允許的情況下可以嘗試獲取佔比少的類型的樣本數據。(PS:這就是為什麼我幾乎沒有遇到過數據不平衡的問題。每次測試使用的數據集都盡可能的完美均衡) 也可以通過使用 重復 、 自舉 或 合成 少數類過采樣等方法(SMOTE)來生成新的稀有樣品。
直接簡單復制重復的話,如果特徵少,會導致過擬合的問題。經過改進的過抽樣方法通過在少數類中加入隨機雜訊、干擾數據或通過一定規則產生新的合成樣本 (數據增強)。
2)欠采樣:
數據量足夠時,可以通過保留比例小的樣本數據和減少比例大的樣本數據來平衡數據集。缺點是會丟失多數類中的一些重要信息。
3)改變權重:
對不同樣本數量的類別賦予不同的權重(通常會設置為與樣本量成反比)
4)使用K-fold交叉驗證
值得注意的是,使用過采樣方法來解決不平衡問題時應適當地應用交叉驗證。這是因為過采樣會觀察到罕見的樣本,並根據分布函數應用自舉生成新的隨機數據,如果在過采樣之後應用交叉驗證,那麼我們所做的就是將我們的模型過擬合於一個特定的人工引導結果。這就是為什麼在過度采樣數據之前應該始終進行交叉驗證,就像實現特徵選擇一樣。只有重復采樣數據可以將隨機性引入到數據集中,以確保不會出現過擬合問題。
K-fold交叉驗證就是把原始數據隨機分成K個部分,在這K個部分中選擇一個作為測試數據,剩餘的K-1個作為訓練數據。交叉驗證的過程實際上是將實驗重復做K次,每次實驗都從K個部分中選擇一個不同的部分作為測試數據,剩餘的數據作為訓練數據進行實驗,最後把得到的K個實驗結果平均。
此外,還應注意訓練集和測試集的樣本的概率分布問題。若實際數據不平衡,將采樣平衡後的數據集作為訓練集訓練後,模型應用在測試集上效果仍會不好。因此,實際應用中盡可能 保持訓練和測試的樣本的概率分布是一致的。
1)謹慎選擇AUC作為評價指標:對於數據極端不平衡時,可以觀察觀察不同演算法在同一份數據下的訓練結果的precision和recall,這樣做有兩個好處,一是可以了解不同演算法對於數據的敏感程度,二是可以明確採取哪種評價指標更合適。針對機器學習中的數據不平衡問題,建議更多PR(Precision-Recall曲線),而非ROC曲線,具體原因畫圖即可得知,如果採用ROC曲線來作為評價指標,很容易因為AUC值高而忽略實際對少量樣本的效果其實並不理想的情況。
2)不要只看Accuracy:Accuracy可以說是最模糊的一個指標了,因為這個指標高可能壓根就不能代表業務的效果好,在實際生產中更關注precision/recall/mAP等具體的指標,具體側重那個指標,得結合實際情況看。
1)選擇對數據傾斜相對不敏感的演算法。如樹模型等。
2)集成學習。即多模型Bagging。首先從多數類中獨立隨機抽取出若乾子集,將每個子集與少數類數據聯合起來訓練生成多個基分類器,再加權組成新的分類器,如加法模型、Adaboost、隨機森林等。
3)轉化成異常檢測或者一分類問題。(具體內容後續有時間再跟進學習)
補充:什麼是數據增強(Data Augmentation)?
參考鏈接:https://www.jianshu.com/p/3e9f4812abbc
數據增強讓有限的數據產生更多的數據,增加訓練樣本的數量以及多樣性(雜訊數據), 提升模型魯棒性, 一般用於訓練集。神經網路需要大量的參數,許許多多的神經網路的參數都是數以百萬計,而使得這些參數可以正確工作則需要大量的數據進行訓練,但在很多實際的項目中,我們難以找到充足的數據來完成任務。隨機改變訓練樣本可以降低模型對某些屬性的依賴,從而提高模型的泛化能力。
數據增強方法:
例如,我們可以對圖像進行不同方式的裁剪,讓物體以不同的實例出現在圖像的不同位置,這同樣能夠降低模型對目標位置的敏感性。此外,調整亮度、對比度、飽和度和色調 等因素來降低模型對色彩的敏感度。再有,隨機裁剪、隨機反轉、隨機對比度增強、顏色變化等等。一般來講隨機反轉和一個小比例的random resize,再接隨機裁剪比較常用。NLP中將字和詞連接起來就形成了一個新樣本,也屬於數據增強。
數據增強的分類:
數據增強可以分為兩類,一類是離線增強,一類是在線增強。
· 離線增強 : 直接對數據集進行處理,數據的數目會變成增強因子乘以原數據集的數目,這種方法常常用於數據集很小的時候。
· 在線增強 : 這種增強的方法用於,獲得批量(batch)數據之後,然後對這個批量(batch)的數據進行增強,如旋轉、平移、翻折等相應的變化,由於有些數據集不能接受線性級別的增長,這種方法長用於大的數據集,很多機器學習框架已經支持了這種數據增強方式,並且可以使用 GPU 優化計算。
2. 目標檢測中的樣本不平衡處理方法——OHEM, Focal Loss, GHM, PISA
GitHub
CSDN
目前。計算機視覺中的性能最好的目標檢測方法主要分為兩種: one-stage 和two-stage 方法。two-stage方法分為兩步,第一步為候選區域生成階段(Proposal stage),通過如Selective Search、EdgeBoxes等方法可以生成數量相對較小候選目標檢測框;第二步為分類與回歸階段,對第一階段生成的 Candiate Proposal 進行分類和位置回歸。one-stage 代表性的方法是R-CNN系列,如 R-CNN, Fast R-CNN, Faster R-CNN。 而one-stage 方法直接對圖像的大量 Candiate Proposals 進行分類與回歸。
這兩類方法中均存在類別不平衡問題,two-stage 方法通過第一步已經將當量的候選區域降低到一個數量較小的范圍,同時又在第二步通過一些啟發式原則,將正負樣本的比例降低到一定程度。而 one-stage 優於沒有這降低候選框的步驟,因此,候選區域的數量大大超過 two-stage 方法,因此,在精度上,two-stage 仍然優於 one-stage 方法,但是在速度和模型復雜度上, one-stage 占優勢。
類別不平衡會使檢測器評估 的候選位置,但是通常只有少量的位置存在目標,這回導致兩個問題:
因此,解決樣本不平衡問題是提高目標檢測精度的一個關鍵技術之一。
論文題目: Training Region-based Object Detectors with Online Hard Example Mining
OHEM 是通過改進 Hard Example Mining 方法,使其適應online learning演算法特別是基於SGD的神經網路方法。Hard Example Mining 通過交替地用當前樣本集訓練模型,然後將模型固定,選擇 False Positive 樣本來重新組建用於下一次模型訓練的樣本集。但是因為訓練神經網路本事就是一個耗時的操作,這樣在訓練中固定模型,這樣會急劇降低模型的訓練進程。
Hard Examples Mining通常有兩種方法:
OHEM演算法的大致流程是: 首先計算出每個ROI的loss, 然後按loss從高到低來排列每個 ROI, 然後為每張圖片選擇 個損失最高的 ROI 作為Hard Examples,其中 B 表示總的 ROI 數量, 表示batch-size 的大小,在 Fast R-CNN 中, N=2, B=128時,效果很好。
但是如果直接按照 loss 對所有的 ROI 進行選擇,會有一個缺點,由於 ROI 很多,這樣 很多 ROI 的位置就會相關並重疊,如果和某個高 Loss 的 ROI 重合度很高的其它 ROI很多, 這樣, 這些 ROI 的 Loss 通常也會很多,這樣這些樣本都會被選擇,但是它們可以近似認為時同一個,這樣就會給其它較低 Loss 的 ROI 更少的選擇餘地,這樣就會存在冗餘。為了消除這種冗餘,作者提出先使用 NMS (non-maximum suppression) 刪除部分重合度很高的 ROI, 在使用上述方法進行 選擇 Hard Example。
實現技巧:
論文,作者將該方法是現在 Fsat R-CNN 目標檢測方法中。最簡單做法是更改損失函數層,損失函數層首先計算所有 ROI 的 loss, 然後根據 loss 對 ROI 進行排序,並選擇 hard RoIs, 讓 那些 non-RoIs的損失變為0. 這種方法雖然很簡單,但是非常不高效,因為還需要為所有的 RoIs 分配進行反向傳播時需要的內存空間。
為了克服這個缺點,作者對下面的 Figure 1 進行改進, 如下面的 Figure 2.該改進時使用兩份同樣的 RoI network。 其中一個是只讀的(readonly), 即只進行前向計算,不進行反向傳播優化,所以只需要為前向傳播分配內存,它的參數實時保持和另一個 RoI network(regular RoI network)保持一樣。在每次迭代時,首先使用 readonly RoI network 對每個 ROI 計算起 loss,然後用上面描述的選擇 hard RoIs 的方法選擇 hard RoIs. 然後利用 regular RoI network來對選擇的 hard RoIs 進行前向和後向計算來優化網路。
論文題目 Focal Loss for Dense Object Detection
在改論文中,作者認為樣本類別的不平衡可以歸結為難易樣本的不平衡,從而更改交叉熵損失函數,重新對樣本賦予不同的權值,之前的模型這些樣本都是同等重要的,從而使模型訓練更加關注 hard examples。
首先引入交叉熵的公式:
其中, ,表示真實類別, 表示我們預測的概率,為了方便,我們定義:
因此, ,該方法在 較大時,該loss是一個較小的量級, 如下圖的連線所示所示,因為存在大量的易分類樣本,相加後會淹沒正樣本的loss。
一個常見的解決類別不平衡的方式是引入一個加權因子 來表示正樣本的權重, 表示負樣本的權重。我們按照定義 的方法重新定義 為 , 定義如下:
雖然可以平衡 positive和negative的重要性,但是對 easy/hard 樣本還是無法區分, Focal loss 通過更 Cross loss來達到區分easy/hard的目的:
上圖展示了不同 取值對應的 loss,通過分析上述公式,我們發現,當 非常小時,即樣本被分類錯誤,此時 接近1, loss幾乎不受影響,當 接近於1時,即樣本被分類正確,此時 接近0,此時降低了該樣本的權重,比如,取 , 當時 時,該樣本的 loss 會降低100倍,
在實際應用中,作者使用了該 Focal loss的變體,即加入了 平衡因子:
作者提出,對於二分類,一般模型的模型初始化會同概率的對待正負樣本,由於類別不平衡,負樣本的 loss 會佔主導,作者提出在訓練初始階段對正樣本的概率估計「prior」的概念,用 表示, 通過設置它來達到正樣本的輸出概率低的效果,比如為0.01,從而使模型更加關注正樣本。實際操作中,出了最後一個用於分類的卷積層,其餘卷積層的參數初始化為bias ,而最後一層 , 實驗中設置為 0.01.
兩個實現細節
論文題目: Gradient Harmonized Single-stage Detector
改論文提出 Focal Loss 存在兩個缺點:
該論文有一句概括該篇論文的核心思想的一句話: 類別的不平衡可以歸結為難易樣本的不平衡,難易樣本的不平衡可以歸結為梯度的不平衡原話如下:
如下圖所示:
左邊是樣本數量關於梯度的分布,中間表示各個修正後的函數的梯度(使用了log scale)對原始梯度的,右邊表示所有樣本集的梯度貢獻的分布。
定義 是模型未經過 sigmoid 之前的輸出, 則 ,得出該損失函數對 的梯度為:
定義梯度的模長(norm) 為:
訓練樣本的梯度密度(Gradient Density)定義如下:
其中, 是第 k 個樣本的gradient norm,
這個公式可以理解為,以梯度 為中心,寬度為 的區域內的樣本密度。
梯度密度協調參數:
分母是對梯度位於 范圍的部分樣本進行歸一化,如果所有樣本的梯度時均分分布,那麼對於任意 都有 .(這里不是很理解為什麼N,可以理解它們相等)
通過將梯度密度協調參數將 GHM 嵌入到損失函數中,則 GHM-C Loss 為:
計算公式11時,求和有一個N,再求 時會遍歷所有的樣本,因此該公式的時間復雜度為 .如果並行的化,每個計算單元也有N的計算量。對gradient norm進行排序的最好的演算法復雜度為 ,然後用一個隊列去掃描樣本得到梯度密度的時間復雜度為 n 。基於排序的方法即使並行也不能較快的計算,因為N往往是 甚至 ,仍然是非常耗時的.
作者提出的近似求解的方法如下:
根據上述定義,得出近似梯度密度函數為:
利用上面的公式,由於我們可以事先求好 , 在求和時只需查找 即可,因此時間復雜度為 .
因為loss的計算是基於梯度密度函數,而梯度密度函數根據一個batch中的數據得到,一個batch的統計結果是有雜訊的。與batch normalization相同,作者用Exponential moving average來解決這個問題,也就是
將模型魚的的偏移量定義為 , 將真實的偏移量定義為 ,回歸loss採用 Smooth L1 loss:
其中
則 關於 的梯度為:
從公式可以看出,當樣本操作 時, 所有樣本都有相同的梯度 1, 這就使依賴梯度范數來區分不同樣本是不可能的, 一種簡單的替代方法時直接使用 作為衡量標准,但是該值理論上無限大,導致 無法實現,
為了將 GHM 應用到回歸損失上,作者修改了原始的 損失函數:
該函數和 具有類似的屬性,當d的絕對值很小時,近似 L2 loss, 當d的絕對值比較大時, 近似 L1 loss, 關於d的梯度為:
這樣就將梯度值限制在
定義 , 則 GHM-R Loss 為:
論文題目: Prime Sample Attention in Object Detection
PISA 方法和 Focal loss 和 GHM 有著不同, Focal loss 和 GHM 是利用 loss 來度量樣本的難以程度,而本篇論文作者從 mAP 出法來度量樣本的難易程度。
作者提出提出改論文的方法考慮了兩個方面:
Prime Samples 是指那些對檢測性能有著巨大影響的樣本。作者研究表明樣本的重要程度依賴於它和ground truth 的 IoU值,因此作者提出了一種 IOU-HLR 排序。
在目標檢測中時如何定義正樣本(True Positive)的呢?
剩餘的標注為負樣本。
mAP 的原理揭露了對目標檢測器更重要的 兩個准則 :
基於上述分析,作者提出了一種稱為 IoU-HLR 的排序方法,它既反映了局部的IoU關系(每個ground truth目標周圍),也反映了全局的IoU關系(覆蓋整個圖像或小批圖像)。值得注意的是,不同於回歸前的邊界框坐標,IoU-HLR是根據樣本的最終定位位置來計算的,因為mAP是根據回歸後的樣本位置來計算的。
該排序方法的大致流程如下圖所示,其原理如下:
IoU-HLR遵循上述兩個准則。首先,它通過局部排序(即上面的步驟2)將每個單獨的 GT 的 對應的樣本中 IoU 較高的樣本放在前面,其次通過重采樣和排序(步驟3, 4)將不同 GT 的 對應的樣本中, 將 IoU 較高的放在了前面。
作者提出Prime Sample Attention,一種簡單且有效的采樣策略,該采樣策略將更多的注意力集中到 Prime examples 上, PISA 由兩部分組成: Importance- based Sample Reweighting(ISR)和Classification Aware Regression Loss(為CARL).
PISA 的訓練過程是基於 prime samples 而不是同等對待所有樣本。
作者提出一種基於 soft sampling 的方法: Importance-based Sample Reweighting (ISR), 他給不同樣本根據重要性賦予不同的權重。首先它將Iou-HLR排序轉化為線性映射的真實值。 IoU-HLR在每個類中分別進行計算。對於類 , 假設總共有 個樣本, 通過 IoU-HLR 表示為 . 其中 ,使用一個線性轉換函數將 轉換為 , 表示第 類中的第 個樣本的重要程度:
採用指數函數的形式來京一部將樣本重要性 轉換為 loss 的權值 , 表示對重要樣本給予多大的優先權的程度因子, 決定最小樣本權值的偏差(感覺就是一個決定最小的權值大小的一個變數)。
根據上面得到的權重值,重寫交叉熵:
其中 n 和 m 分別表示真樣本和負樣本的數量, 和 分別表示預測分數和分類目標,需要注意的是,如果只是簡單的添加 loss 權值將會改變 loss 的值,並改變正負樣本的比例,因此為了保持正樣本的總的 loss 值不變, 作者將 歸一化為
(這里不是很理解,歡迎大家解惑)
5.3.1 已經介紹如何染個分類器知道 prime samples, 那麼如何讓回歸其也知道 prime sample,作者提出了 Classification-Aware Regression Loss(CARL) 來聯合優化分類器和回歸其兩個分支。CARL可以提升主要樣本的分數,同時抑制其他樣本的分數。回歸質量決定了樣本的重要性,我們期望分類器對重要樣本輸出更高的分數。兩個分支的優化應該是相互關聯的,而不是相互獨立的。
作者的方法是讓回歸器知道分類器的分數,這樣梯度就可以從回歸器傳播到分期其分支。公式如下:
表示相應類別的預測分數, 表示輸出的回歸偏移量。利用一個指數函數將 轉化為 ,隨後根據所有樣本的平均值對它進行縮放。為了保持損失規模不變,對具有分類感知的 進行歸一化。 是常用的smooth L1 loss。
關於 的梯度與原回歸損失 成正比。 p_i mathcal{L}(d_i, hat d_i) mathcal{L}(d_i, hat d_i)$ 反映了樣本i的定位質量,因此可以認為是一個IoU的估計,進一步可以看作是一個IoU-HLR的估計。可以近似認為,排序靠前的樣本有較低的回歸損失,於是分類得分的梯度較小。對於CARL來說,分類分支受到回歸損失的監督。 不重要樣本的得分被極大的抑制掉,而對重要樣本的關注得到加強。
待續。。。
上面的方法大致可以分為兩種:
Focal Loss認為正負樣本的不平衡,本質上是因為難易樣本的不平衡,於是通過修改交叉熵,使得訓練過程更加關注那些困難樣本,而GHM在Focal Loss的基礎上繼續研究,發現難易樣本的不平衡本質上是因為梯度范數分布的不平衡,和Focal Loss的最大區別是GHM認為最困難的那些樣本應當認為是異常樣本,讓檢測器強行去擬合異常樣本對訓練過程是沒有幫助的。PISA則是跳出了Focal Loss的思路,認為采樣策略應當從mAP這個指標出發,通過IoU Hierarchical Local Rank (IoU-HLR),對樣本進行排序並權值重標定,從而使得recall和precision都能夠提升。