本文是對 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 ...