SL解读
最近看到汐夢聆海關(guān)于SL這個工作的閱讀分享,發(fā)現(xiàn)自己工作中也有含噪聲標(biāo)簽分類的問題(甚至有些場景標(biāo)簽干脆就是置信度不高的偽標(biāo)簽)。其實由于數(shù)據(jù)量大和標(biāo)注成本受限,工業(yè)界的數(shù)據(jù)集常常會出現(xiàn)噪聲標(biāo)簽,模型對這類標(biāo)簽的擬合會導(dǎo)致學(xué)習(xí)的異常進(jìn)行。SL這個工作從數(shù)學(xué)層面對交叉熵進(jìn)行改進(jìn),提出了一種更加魯棒的Symmetric Cross Entropy(SCE)損失,可以一定程度上緩解由于noisy label帶來的訓(xùn)練問題,該工作也被ICCV2019收錄。
簡介
如何在有噪聲標(biāo)注的數(shù)據(jù)集上進(jìn)行訓(xùn)練是一直受到工業(yè)界關(guān)注的問題,也產(chǎn)生了很多不錯的工作。具體到分類任務(wù)上來看,論文作者發(fā)現(xiàn)使用交叉熵學(xué)習(xí)的深度神經(jīng)網(wǎng)絡(luò)會去過擬合那些簡單類別而在一些困難類別上欠學(xué)習(xí)。直覺上,交叉熵需要額外的一項來促進(jìn)困難類別的學(xué)習(xí),更重要的是,這一項應(yīng)該對噪聲有容忍能力以避免過擬合噪聲標(biāo)簽。受到KL散度的啟發(fā),論文提出了一種Symmetric cross entropy Learning(SL,對稱交叉熵學(xué)習(xí)),該方法通過具有噪聲魯棒性的反向交叉熵(RCE)來對稱地增強(qiáng)交叉熵。SL方法同時解決存在噪聲標(biāo)簽的情況下交叉熵的欠學(xué)習(xí)和過擬合的問題。作者對SL的進(jìn)行了理論分析,并在一系列基準(zhǔn)數(shù)據(jù)集上證明了SL優(yōu)于SOTA方法,而且SL可以方便地集成到現(xiàn)有的方法中以提高模型性能。
-
論文標(biāo)題
Symmetric Cross Entropy for Robust Learning with Noisy Labels
-
論文地址
http://arxiv.org/abs/1908.06112
-
論文源碼
https://github.com/HanxunH/SCELoss-Reproduce
介紹
目前的深度神經(jīng)網(wǎng)絡(luò)往往都是上百層有著百萬級別的訓(xùn)練參數(shù),這樣的模型需要大規(guī)模的清晰標(biāo)注的數(shù)據(jù)集才能合理訓(xùn)練。然而,時至今日,即使ImageNet這樣的高質(zhì)量數(shù)據(jù)集也存在不少的誤標(biāo),這主要是因為標(biāo)注大規(guī)模數(shù)據(jù)集確實代價昂貴并且容易出錯。因此如何在存在噪聲標(biāo)注的情況下訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)是一個非常重要的研究課題。
在這篇論文中,作者主要關(guān)注計算機(jī)視覺中常見的圖像分類任務(wù),經(jīng)過調(diào)查發(fā)現(xiàn),交叉熵(Cross Entropy,CE)雖然是分類任務(wù)最常用的損失,但是使用CE訓(xùn)練的網(wǎng)絡(luò)其實存在類別偏置現(xiàn)象:一些容易類別(“easy” class)收斂的速度快于其他的困難類別(“hard” class)。不妨看下圖,首先來看圖a,即使標(biāo)簽是干凈的,使用CE訓(xùn)練的模型在各個類別上的測試準(zhǔn)確率依然相去甚遠(yuǎn),比如class 1和class 3相差近20%;如圖b,在添加噪聲后采用CE進(jìn)行訓(xùn)練,可以看到,這種差距更加明顯,如class 6的容易類別已經(jīng)對噪聲過擬合了,像class 3這樣的困難類別依然處于欠學(xué)習(xí)狀態(tài)(即分類準(zhǔn)確率低于標(biāo)注清晰的情況);而圖c中采用了廣為人知的Label Smoothing Regularization(LSR),顯然,它依然存在欠學(xué)習(xí)問題。因此,從這些實驗結(jié)果可以看出,整體準(zhǔn)確率的低下源于難類別的準(zhǔn)確率較低,這和之前的研究認(rèn)為的僅僅是過擬合噪聲標(biāo)簽這個原因還是有區(qū)別的。
下圖是對學(xué)習(xí)到的embedding進(jìn)行可視化的結(jié)果,圖a是干凈標(biāo)注的數(shù)據(jù),圖b則是加入40%噪聲的數(shù)據(jù),顯然圖a情況下各類的邊界更加清晰,但是無論是圖a還是圖b,都存在一些容易類別的邊界清晰而一些困難類別的邊界模糊。
受到KL散度的啟發(fā),作者在CE基礎(chǔ)上添加了一個噪聲容忍的項,名為Reverse Cross Entropy(RCE),它和CE組合構(gòu)成了Symmetric
cross entropy Learning(SL)的基礎(chǔ)。SL不僅可以改進(jìn)困難類別的學(xué)習(xí),而且可以增強(qiáng)網(wǎng)絡(luò)對噪聲標(biāo)簽的魯棒性,它們的改進(jìn)效果可以從上面的圖中最后一張子圖看出來。和那些動輒修改網(wǎng)絡(luò)或者對現(xiàn)有方法改動頗多的方法相比,SL非常容易使用,只需要對現(xiàn)有訓(xùn)練流程輕微改動即可。
SL
交叉熵局限
在具體介紹SL方法之前,首先來回顧一下交叉熵?fù)p失。給定一個KKK類的數(shù)據(jù)集D={(x,y)(i)}i=1n\mathcal{D}=\left\{(x, y)^{(i)}\right\}_{i=1}^{n}D={(x,y)(i)}i=1n?,其中x∈X?Rdx \in \mathcal{X} \subset \mathbb{R}^ozvdkddzhkzdx∈X?Rd表明一個樣本的輸入是ddd維的,而y∈Y={1,?,K}y \in \mathcal{Y}=\{1, \cdots, K\}y∈Y={1,?,K}是其對應(yīng)的標(biāo)簽。對每個樣本xxx而言,一個分類器f(x)f(x)f(x)計算其屬于各個類別的概率分布,對于某個類別kkk而言,其概率為p(k∣x)=ezk∑j=1Kezjp(k \mid x)=\frac{e^{z_{k}}}{\sum_{j=1}^{K} e^{z_{j}}}p(k∣x)=∑j=1K?ezj?ezk??,這里的zjz_jzj?是概率值。不妨記xxx的GT分布為q(k∣x)q(k \mid x)q(k∣x),顯然有∑k=1Kq(k∣x)=1\sum_{k=1}^{K} q(k \mid x)=1∑k=1K?q(k∣x)=1。如果是單標(biāo)簽的情況,那么必有q(y∣x)=1q(y \mid x) = 1q(y∣x)=1且對所有k≠yk \ne yk?=y的情況有q(k∣x)=0q(k \mid x)=0q(k∣x)=0。綜上,交叉熵?fù)p失定義如下。
?ce=?∑k=1Kq(k∣x)log?p(k∣x)\ell_{c e}=-\sum_{k=1}^{K} q(k \mid \mathbf{x}) \log p(k \mid \mathbf{x}) ?ce?=?k=1∑K?q(k∣x)logp(k∣x)
作者這里在Cifar10上隨機(jī)生成了一些噪聲標(biāo)簽(40%),使用一個8層卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行分類,訓(xùn)練總共120輪,選取第10輪、第50輪和第100輪作為前期、中期和后期。 下圖所示的為CE訓(xùn)練清晰標(biāo)注和添加噪聲的標(biāo)注的測試準(zhǔn)確率,無論是清晰數(shù)據(jù)還是噪聲數(shù)據(jù),不同類別之間存在差異,但是隨著訓(xùn)練的進(jìn)行,清晰數(shù)據(jù)后期差異較小但是即使在后期,噪聲數(shù)據(jù)的差異依然存在,一些難類別并沒有得到充分訓(xùn)練,而一些容易類別已經(jīng)出現(xiàn)了過擬合現(xiàn)象。因此,得出結(jié)論,難類別的欠學(xué)習(xí)才是網(wǎng)絡(luò)整體性能下降的原因而不是過擬合噪聲標(biāo)簽。
進(jìn)一步從學(xué)習(xí)到的表示的角度來探索CE造成欠學(xué)習(xí)的原因。由于難類別的表示和其他類別的相似度較高,因此極有困難被預(yù)測為其他類別標(biāo)簽,這就是之前聚類圖上class 3沒有明顯聚類的原因。但是,class 3中仍有60%干凈的標(biāo)注,對此進(jìn)一步研究,下圖是class 3對干凈數(shù)據(jù)的預(yù)測置信度和分布情況,可以看出,即使是干凈的數(shù)據(jù),置信度也不是很高,這表示網(wǎng)絡(luò)其實沒有得到充分的訓(xùn)練。
因此,最終總結(jié)得到,CE對于難類別的學(xué)習(xí)是不夠充分的,尤其是存在噪聲標(biāo)簽的場景下。
對稱交叉熵學(xué)習(xí)
為了解決上文提到的交叉熵的局限性,作者提出了一種充分學(xué)習(xí)和噪聲魯棒性之間尋求平衡的方法,稱為Symmetric cross entropy Learning,簡稱SL。
定義
給定兩個分布qqq和ppp,交叉熵H(q,p)H(q,p)H(q,p)和KL散度KL(q∣∣p)KL(q||p)KL(q∣∣p)之間的關(guān)系如下式,H(q)H(q)H(q)表示qqq的熵,q=q(k∣x)q=q(k|x)q=q(k∣x)表示樣本xxx的真實類別分布,p(k∣x)p(k|x)p(k∣x)則是預(yù)測類別分布。從KL散度的角度來看,優(yōu)化的目的就是使得ppp接近qqq,也就是最小化兩者的KL散度KL(q∣∣p)KL(q||p)KL(q∣∣p)。
KL(q∥p)=H(q,p)?H(q)K L(q \| p)=H(q, p)-H(q) KL(q∥p)=H(q,p)?H(q)
但是,當(dāng)存在噪聲時,q(k∣x)q(k|x)q(k∣x)未必代表真實分布,反而p(k∣x)p(k|x)p(k∣x)一定程度上可以反映真實的分布,所以可以考慮另一個方向的KL散度KL(p∣∣q)KL(p||q)KL(p∣∣q),將正反向的KL散度結(jié)合從而得到對稱KL散度的公式如下所示。
SKL=KL(q∥p)+KL(p∥q)S K L=K L(q \| p)+K L(p \| q) SKL=KL(q∥p)+KL(p∥q)
將這個思路從KL散度遷移到交叉熵上面,就可以得到對稱交叉熵SCE的公式如下所示。
SCE=CE+RCE=H(q,p)+H(p,q)S C E=C E+R C E=H(q, p)+H(p, q) SCE=CE+RCE=H(q,p)+H(p,q)
這里的RCE=H(p,q)RCE = H(p,q)RCE=H(p,q)是H(q,p)H(q,p)H(q,p)的反向版本,稱為反向交叉熵Reverse Cross Entropy,RCE損失的計算式如下。
?rce=?∑k=1Kp(k∣x)log?q(k∣x)\ell_{r c e}=-\sum_{k=1}^{K} p(k \mid \mathbf{x}) \log q(k \mid \mathbf{x}) ?rce?=?k=1∑K?p(k∣x)logq(k∣x)
因此最終的對稱交叉熵?fù)p失SCE定義如下。
?sce=?ce+?rce\ell_{s c e}=\ell_{c e}+\ell_{r c e} ?sce?=?ce?+?rce?
關(guān)于RCE的噪聲容忍性下文會證明,但是CE項時對噪聲非魯棒的,但是CE對模型收斂又是非常有效的,因此為了獲得有效性和魯棒性,作者設(shè)計了兩個超參數(shù)來解耦學(xué)習(xí)框架,超參數(shù)α\alphaα用于解決CE的過擬合問題而β\betaβ則探索RCE的魯棒性,因此,形式上,SL損失如下式所示。在?rce\ell_{rce}?rce?中由于真實分布q(k∣x)q(k|x)q(k∣x)是one-hot編碼,因此含有0值,因此定義log0=Alog 0 = Alog0=A,這里的A是一個小于0的常數(shù),β\betaβ的設(shè)置也和A的值有關(guān)。
?sl=α?ce+β?rce\ell_{s l}=\alpha \ell_{c e}+\beta \ell_{r c e} ?sl?=α?ce?+β?rce?
理論分析
首先是關(guān)于魯棒性的分析,也就是?rce\ell_{rce}?rce?對噪聲是魯棒的。不妨記樣本xxx的噪聲標(biāo)簽為y^\hat{y}y^?而真實標(biāo)簽為yyy,分類器為fff且損失函數(shù)為?rce\ell_{rce}?rce?。定義fff在清晰標(biāo)簽下的風(fēng)險為R(f)=Ex,y?rceR(f)=\mathbb{E}_{\mathbf{x}, y} \ell_{r c e}R(f)=Ex,y??rce?,而在噪聲率為η\etaη的標(biāo)注下的風(fēng)險為Rη(f)=Ex,y^?rceR^{\eta}(f)=\mathbb{E}_{\mathbf{x}, \hat{y}} \ell_{r c e}Rη(f)=Ex,y^???rce?,記f?f^{*}f?和fη?f_{\eta}^{*}fη??為Rη(f)R^{\eta}(f)Rη(f)和Rη(f)R^{\eta}(f)Rη(f)的全局最小值。如果fη?f_{\eta}^{*}fη??和f?f^{*}f?在噪聲數(shù)據(jù)下有同樣的分類概率,那么稱該損失是噪聲魯棒的,也叫noise-tolerant。這個的證明過程感興趣的可以查看論文的Theorem 1部分,我這里不多贅述了,此外作者下面還繼續(xù)對SL的梯度進(jìn)行了推導(dǎo)從而分析了SL的學(xué)習(xí)過程不同于CE損失,我這里忽略推導(dǎo)過程,給出推導(dǎo)的結(jié)果,見下面的式子。
??sl?zj={??ce?zj?(Apj2?Apj),qj=qy=1??ce?zj+(?Apjpy),qj=0\frac{\partial \ell_{s l}}{\partial z_{j}}=\left\{\begin{array}{ll} \frac{\partial \ell_{c e}}{\partial z_{j}}-\left(A p_{j}^{2}-A p_{j}\right), & q_{j}=q_{y}=1 \\ \frac{\partial \ell_{c e}}{\partial z_{j}}+\left(-A p_{j} p_{y}\right), & q_{j}=0 \end{array}\right. ?zj???sl??={?zj???ce???(Apj2??Apj?),?zj???ce??+(?Apj?py?),?qj?=qy?=1qj?=0?
??ce?zj={pj?1≤0,qj=qy=1pj≥0,qj=0\frac{\partial \ell_{c e}}{\partial z_{j}}=\left\{\begin{array}{ll} p_{j}-1 \leq 0, & q_{j}=q_{y}=1 \\ p_{j} \geq 0, & q_{j}=0 \end{array}\right. ?zj???ce??={pj??1≤0,pj?≥0,?qj?=qy?=1qj?=0?
從上面的式子,學(xué)習(xí)的過程是使得pjp_jpj?趨近于1,當(dāng)pj<0.5p_j<0.5pj?<0.5時RCE會促進(jìn)學(xué)習(xí),當(dāng)pj>0.5p_j>0.5pj?>0.5時,RCE會降低樣本的學(xué)習(xí)速度。當(dāng)qj=0(??ce?zj≥0)q_{j}=0\left(\frac{\partial \ell_{c e}}{\partial z_{j}} \geq 0\right)qj?=0(?zj???ce??≥0)時,第二項?Apjpy-A p_{j} p_{y}?Apj?py?取決于pjp_jpj?和pyp_ypy?,pyp_ypy?越大說明模型越信任自己的預(yù)測,同時?Apjpy-A p_{j} p_{y}?Apj?py?也越大,其他標(biāo)簽的預(yù)測概率的下降速度就越快。當(dāng)py=0p_y=0py?=0的時候,?Apjpy-A p_{j} p_{y}?Apj?py?為0對梯度的大小沒有改變,這意味著網(wǎng)絡(luò)對標(biāo)注類別沒有信息,標(biāo)簽很有可能是錯誤的。
接著作者還證明了當(dāng)A=?2A=-2A=?2時,RCE就退化為MAE,也就是說RCE其實是MAE的推廣形式,且和GCE不同,的兩項是對稱的。最后,這里可以附上一個SCE loss的PyTorch實現(xiàn)如下。
class SCELoss(torch.nn.Module):def __init__(self, alpha=0.1, beta=1.0, num_classes=10):super(SCELoss, self).__init__()self.alpha = alphaself.beta = betaself.num_classes = num_classesdef forward(self, pred, labels):# CCEce = F.cross_entropy(pred, labels, ignore_index=-1)device = pred.device# RCEpred = F.softmax(pred, dim=1)pred = torch.clamp(pred, min=1e-7, max=1.0)label_one_hot = F.one_hot(labels, self.num_classes).float().to(device)label_one_hot = torch.clamp(label_one_hot, min=1e-4, max=1.0)rce = (-1 * torch.sum(pred * torch.log(label_one_hot), dim=1))# Lossloss = self.alpha * ce + self.beta * rce.mean()return loss實驗
關(guān)于實驗配置包括如何引入噪聲的,可以查看原論文,這里不展開敘述了。
下圖是添加60%噪聲后使用CE和SL的逐類測試準(zhǔn)確率的區(qū)別,可以發(fā)現(xiàn),SL整體性能是大大提高的,更加充分學(xué)習(xí)了每一個類別,尤其是難類別,這源于SL自適應(yīng)速度會對難類別更加充分學(xué)習(xí)。
通過可視化CE和SL訓(xùn)練后學(xué)到的Representations,可以發(fā)現(xiàn),即使面對噪聲,SL各個類別之間的分界還是非常分明的,這就是說,SL更加noise-tolerant。
作者還進(jìn)行了一些參數(shù)分析和消融實驗,我這里就不一一展示了,下圖是各個數(shù)據(jù)集上和其他方法的比較,證明了SL的SOTA性能。
總結(jié)
對于標(biāo)簽噪聲的問題,作者進(jìn)行了大量的實驗分析,最終得到了和前人不同的結(jié)論,噪聲標(biāo)簽下分類效果差的原因主要來源于難類別學(xué)習(xí)不充分而不是過擬合噪聲標(biāo)簽。受到KL散度的啟發(fā),設(shè)計了和CE對稱的RCE并組合得到了SL損失,作者理論證明了RCE的噪聲容忍能力并實驗驗證了SL的噪聲標(biāo)簽下學(xué)習(xí)的效果,是很值得關(guān)注的一個方法。本文也只是我本人從自身出發(fā)對這篇文章進(jìn)行的解讀,想要更詳細(xì)理解的強(qiáng)烈推薦閱讀原論文。最后,如果我的文章對你有所幫助,歡迎一鍵三連,你的支持是我不懈創(chuàng)作的動力。
總結(jié)
- 上一篇: Minetorch教程
- 下一篇: EANet解读