使用一個(gè)特別設(shè)計(jì)的損失來(lái)處理類別不均衡的數(shù)據(jù)集
點(diǎn)擊上方“小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時(shí)間送達(dá)
本文是谷歌對(duì)CVPR ' 19上發(fā)表的一篇文章的綜述,文章的標(biāo)題是Class-Balanced Loss Based on Effective Number of Samples。它為最常用的損耗(softmax-cross-entropy、focal loss等)提出了一個(gè)針對(duì)每個(gè)類別的重新加權(quán)方案,能夠快速提高精度,特別是在處理高度類不平衡的數(shù)據(jù)時(shí)。
本文是谷歌對(duì)CVPR ' 19上發(fā)表的一篇文章的綜述,文章的標(biāo)題是Class-Balanced Loss Based on Effective Number of Samples。
它為最常用的損耗(softmax-cross-entropy、focal loss等)提出了一個(gè)針對(duì)每個(gè)類別的重新加權(quán)方案,能夠快速提高精度,特別是在處理高度類不平衡的數(shù)據(jù)時(shí)
論文的PyTorch實(shí)現(xiàn)源碼:https://github.com/vandit15/Class-balanced-loss-pytorch
在處理長(zhǎng)尾數(shù)據(jù)集(其中大部分樣本屬于很少的類,而許多其他類的樣本非常少)的時(shí)候,如何對(duì)不同類的損失進(jìn)行加權(quán)可能比較棘手。通常,權(quán)重設(shè)置為類樣本的倒數(shù)或類樣本的平方根的倒數(shù)。

然而,正如上面的圖所示,這一過(guò)度是因?yàn)?em style="box-sizing: border-box;">隨著樣本數(shù)量的增加,新數(shù)據(jù)點(diǎn)的帶來(lái)的好處會(huì)減少。新添加的樣本極有可能是現(xiàn)有樣本的近似副本,特別是在訓(xùn)練神經(jīng)網(wǎng)絡(luò)時(shí)使用大量數(shù)據(jù)增強(qiáng)(如重新縮放、隨機(jī)裁剪、翻轉(zhuǎn)等)的時(shí)候,很多都是這樣的樣本。用有效樣本數(shù)重新加權(quán)可以得到較好的結(jié)果。
有效樣本數(shù)可以想象為n個(gè)樣本所覆蓋的實(shí)際體積,其中總體積N由總樣本表示。

我們寫成:

我們還可以寫成下面這樣:

這意味著第j個(gè)樣本對(duì)有效樣本數(shù)的貢獻(xiàn)為βj-1。
上式的另一個(gè)含義是,如果β=0,則En=1。同樣,當(dāng)β→1的時(shí)候En→n。后者可以很容易地用洛必達(dá)法則證明。這意味著當(dāng)N很大時(shí),有效樣本數(shù)與樣本數(shù)N相同。在這種情況下,唯一原型數(shù)N很大,每個(gè)樣本都是唯一的。然而,如果N=1,這意味著所有數(shù)據(jù)都可以用一個(gè)原型表示。
如果沒有額外的信息,我們不能為每個(gè)類設(shè)置單獨(dú)的Beta值,因此,使用整個(gè)數(shù)據(jù)的時(shí)候,我們將把它設(shè)置為一個(gè)特定的值(通常設(shè)置為0.9、0.99、0.999、0.9999中的一個(gè))。
因此,類別均衡損失可表示為:

這里, L(p,y) 可以是任意的損失。

原始版本的focal loss有一個(gè)α平衡變量。這里,我們將使用每個(gè)類的有效樣本數(shù)對(duì)其重新加權(quán)。
類似地,這樣一個(gè)重新加權(quán)的項(xiàng)也可以應(yīng)用于其他著名的損失(sigmod -cross-entropy, softmax-cross-entropy等)。
在開始實(shí)現(xiàn)之前,需要注意的一點(diǎn)是,在使用基于sigmoid的損失進(jìn)行訓(xùn)練時(shí),使用b=-log(C-1)初始化最后一層的偏差,其中C是類的數(shù)量,而不是0。這是因?yàn)樵O(shè)置b=0會(huì)在訓(xùn)練開始時(shí)造成巨大的損失,因?yàn)槊總€(gè)類的輸出概率接近0.5。因此,我們可以假設(shè)先驗(yàn)類是1/C,并相應(yīng)地設(shè)置b的值。
每個(gè)類的權(quán)值的計(jì)算

上面的代碼行是獲取權(quán)重并將其標(biāo)準(zhǔn)化的簡(jiǎn)單實(shí)現(xiàn)。

在這里,我們得到權(quán)重的獨(dú)熱值,這樣它們就可以分別與每個(gè)類的損失值相乘。

類平衡提供了顯著的收益,特別是當(dāng)數(shù)據(jù)集高度不平衡時(shí)(不平衡= 200,100)。
利用有效樣本數(shù)的概念,可以解決數(shù)據(jù)重疊問(wèn)題。由于我們沒有對(duì)數(shù)據(jù)集本身做任何假設(shè),因此重新加權(quán)通常適用于多個(gè)數(shù)據(jù)集和多個(gè)損失函數(shù)。因此,可以使用更合適的結(jié)構(gòu)來(lái)處理類不平衡問(wèn)題,這一點(diǎn)很重要,因?yàn)榇蠖鄶?shù)實(shí)際數(shù)據(jù)集都存在大量的數(shù)據(jù)不平衡。

英文原文:https://towardsdatascience.com/handling-class-imbalanced-data-using-a-loss-specifically-made-for-it-6e58fd65ffab
交流群
歡迎加入公眾號(hào)讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動(dòng)駕駛、計(jì)算攝影、檢測(cè)、分割、識(shí)別、醫(yī)學(xué)影像、GAN、算法競(jìng)賽等微信群(以后會(huì)逐漸細(xì)分),請(qǐng)掃描下面微信號(hào)加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三?+?上海交大?+?視覺SLAM“。請(qǐng)按照格式備注,否則不予通過(guò)。添加成功后會(huì)根據(jù)研究方向邀請(qǐng)進(jìn)入相關(guān)微信群。請(qǐng)勿在群內(nèi)發(fā)送廣告,否則會(huì)請(qǐng)出群,謝謝理解~
