資料集按類劃分 用特別設計的損失處理非均衡資料

2021-10-16 02:51:17 字數 1941 閱讀 4182

本文是對 cvpr 2019 **「class-balanced loss based on effective number of samples」的一篇點評,全文如下:

這篇**針對最常用的損耗(softmax 交叉熵、focal loss 等)提出了一種按類重新加權的方案,以快速提高精度,特別是在處理類高度不平衡的資料時尤其有用。

有效樣本數

在處理長尾資料集(乙個資料集的大多數樣本屬於少數類,而其它許多類的資料很少)時,決定如何權衡不同類的損失是很棘手的。通常,權重設定為類支援的逆或類支援的平方根的逆。

然而,如上圖所示,這種現象是因為隨著樣本數的增加,新資料點帶來的額外好處減少了。在訓練神經網路時使用重資料增強(如重縮放、隨機裁剪、翻轉等)時,新新增的樣本很可能是現有樣本的近似副本。用有效樣本數重新加權得到了較好的結果。

有效樣本數可以想象為 n 個樣本覆蓋的實際體積,其中總體積 n 由總樣本數表示。

我們寫出其公式:

有效樣本數

我們也可以像下面這樣寫:

每個樣本的貢獻

這意味著第 j 個樣本對有效樣本數貢獻為 β^(j-1)。

上述方程的另乙個含義是,如果 β=0,則 en=1。同時,en=n 則 β=1。後者可以很容易地用 l'hopital's 法則證明。這意味著當 n 很大時,有效樣本數與樣本數相同。在這種情況下,唯一原型數 n 很大,每個樣本都是唯一的。然而,如果 n=1,這意味著所有資料都可以用乙個原型表示。

類平衡損失

如果沒有額外的資訊,我們不能為每個類設定單獨的 β 值,因此,使用整個資料,我們會將其設定為特定值(通常設定為0.9、0.99、0.999、0.9999 之一的數值)。

因此,類平衡損失可以寫成:

cb 損失

這裡,l(p,y) 可以是任何損失函式。

類平衡 focal loss

類平衡 focal loss

原始版本的 focal loss 有乙個 alpha 平衡變數。相反,我們將使用每個類的有效樣本數對其重新加權。

類似地,這種重新加權項也可以應用於其他著名的損失(sigmoid 交叉熵、softmax 交叉熵等)。

應用

在開始應用之前,在使用基於 sigmoid 的損耗進行訓練時要注意一點:用 b=-log(c-1)初始化最後一層的偏差,其中類的數量是 c,而不是 0。這是因為設定 b=0 在訓練開始時會導致巨大的損失——每個類的輸出概率接近 0.5。因此,我們可以假設類 prior 是 1/c,並相應地設定值 b。

類的權重計算

計算標準化權重

上面的**行是乙個簡單的實現,獲取權重並將其標準化。

在這裡,我們得到權重的 one hot 值,這樣它們就可以分別與每個類的損失值相乘。

實驗

結論

利用有效樣本數的概念,可以解決資料重合的問題。由於我們沒有對資料集本身做任何假設,因此重新加權項通常適用於多個資料集和多個損失函式。因此,類不平衡的問題可以用乙個更合適的結構來解決,這一點很重要,因為現實世界中的大多數資料集都存在大量的資料不平衡。

參考

[1] class-balanced loss based on effective number of samples:

via:

雷鋒網雷鋒網雷鋒網

資料集按類劃分 資料集劃分方法

留出法 直接將資料集d劃分為兩個互斥的集合,乙個為訓練集s,乙個為測試集t,即d s t,s t 在s上進行模型學習,然後用t來評估其測試誤差,作為對泛化誤差的估計。單次使用留出法得到的估計結果往往不夠穩定可靠,在使用留出法時,一般要採用若干次隨機劃分 重複進行模型評估後取平均值作為留出法的評估結果...

資料集的劃分

在機器學習演算法中,我們通常將原始資料集劃分為三個部分 劃分要盡可能保持資料分布的一致性 1 training set 訓練集 訓練模型 2 validation set 驗證集 選擇模型 3 testing set 測試集 評估模型 其中validation set的作用是用來避免過擬合的。在訓練...

劃分資料集的方法

train split方法 1 匯入包 fromsklearn.model selectionimport train test split 2 函式介紹 train split arrays,test size,train size,random state,shuffle,stratify 3 ...