再谈类别不平衡问题:调节权重与魔改Loss的综合分析
?PaperWeekly 原創 ·?作者|蘇劍林
單位|追一科技
研究方向|NLP、神經網絡
類別不平衡問題,也稱為長尾分布問題,在之前的文章里已經有好幾次相關討論了,比如從 loss 的硬截斷、軟化到 focal loss [1] 、將“softmax+交叉熵”推廣到多標簽分類問題、通過互信息思想來緩解類別不平衡問題。
對于緩解類別不平衡,比較基本的方法就是調節樣本權重,看起來“高端”一點的方法則是各種魔改 loss了(比如 Focal Loss、Dice Loss、Logits Adjustment 等),本文希望比較系統地理解它們之間的聯系。
▲長尾分布:少數類別的樣本數目非常多,多數類別的樣本數目非常少。
從光滑準確率到交叉熵
這里的分析主要以 sigmoid 的 2 分類為主,但多數結論可以平行推廣到 softmax 的多分類。設 x 為輸入, 為目標, 為模型。理想情況下,當然是要評測什么指標,我們就去優化那個指標。對于分類問題來說,最樸素的指標當然就是準確率,但準確率并沒有辦法提供有效的梯度,所以不能直接來訓練。
為此,我們一個光滑化的指標。從之前的文章函數光滑化雜談:不可導函數的可導逼近 [2] ,準確率的光滑化近似是:
其中 是訓練數據集合。所以按道理,我們應該以 為最小化的目標。但事實上,直接優化這個目標的效果并不好,更好的是去優化交叉熵:
這就有點耐人尋味了,明明 更接近我們的評測指標,為什么用交叉熵反而對評測指標更有利呢?
這需要用梯度來解釋。對于 ,它通常是經過了 sigmoid 激活的,也就是 ,其中 ,它的導數 ,而 就是我們通常稱的“logits”。
假設 y 是 1,那么對應的 就是 ,它的梯度是:
剛才說了,y 是 1,所以訓練目標是 ,因此我們期望當 接近于0時(誤差較大),會帶來一個較大的梯度,當 接近于 1 時(誤差較小),會帶來一個較小的梯度。
但上述 顯然不是如此,它的調節項 在 0.5 處取到最大值,至于 0 和 1 都是最小值,這就意味著如果誤差太大了,梯度反而也小,這就帶來優化效率的低下,最終導致整體效果不好。相反,對于交叉熵來說,有:
剛好把梯度里邊帶來負面作用的 因子去掉了,因此優化效率更高,最終效果也好些。上述分析針對的是 y=1,如果 y=0,那么結論也是一樣的。
從光滑F1到加權交叉熵
從這個過程中,我們可以感覺到,對 loss 的各種魔改,本質上來說都只是在調整梯度,得到更合理的梯度,我們就能實現更有效的優化,得到更好的模型。此外,我們再思考上述轉換過程,本來近似目標的梯度是 ,結果 效果更好。
如果我們不去仔細分析背后的原因,直接把 當作一個“公理”來使用,那能否成立呢?會不會帶來一些有意思的結果呢?
舉個例子,當負樣本遠遠多于正樣本時,我們的評測指標通常都不再是準確率了(不然直接全部輸出 0 準確率就很高了),我們通常關心正類的 F1,而 F1 的直接優化也是不容易的,所以我們也需要一個光滑版,文章函數光滑化雜談:不可導函數的可導逼近 [3] 同樣也給出了結果:
所以我們的最小化目標原本是 。根據上述“公理”,我們先直接對 求梯度:
其中 是整體的一個縮放因子,我們主要關心的還是每個樣本的梯度,所以結果是:
根據 “公理”(負樣本則是 ),我們得到最后的梯度為:
這等價于優化目標:
的梯度(其中 不求梯度),所以這其實就是用 調節正樣本的交叉熵,用 調節負樣本的交叉熵。
一開始 F1 值會比較小,所以模型集中精力在優化正樣本,后期 F1 比較大后,模型反而集中精力在優化負樣本了,這其實正體現了 F1 指標的特殊性:對于 F1 來說,既要盡可能挖掘出正樣本,但是負樣本也不能錯得太多,所以不大適合設置固定不變的調節因子,而是需要動態的調節。
從擴大邊界到Logits調整
其實無論評測指標是什么,我們肯定都是希望每一個樣本都盡可能預測對。問題在于,樣本數目比較少的類別,因為學習得不夠充分,所以泛化性能不會太好。
讓我們從幾何角度來思考這個問題。理想情況下,在編碼空間里邊,每一類樣本都占據著自己的一個“地盤”,不同類的“地盤”是互不相交的。
樣本數目較少的類別泛化性能不大好,主要就體現為其類別所占據的“地盤”比較小,而且往往還會受到類別數目較多的樣本的“打壓”,因此“生存”幾乎都成了問題,更不用說照顧到訓練集沒有出現過的新樣本了。
怎么解決這個問題呢?其實也很形象,如果樣本數目少的類別,里邊的樣本個個都是“大佬”,一個打十個的那種,那么就算樣本少,也能在“地盤之爭”中不落下風。讓我們考慮一個 n 分類問題,某個樣本的編碼向量為 ,類別向量為 ,那么該樣本與類別向量的相似度,一般用內積 來度量。
假設每個樣本能占據半徑為 的“地盤”,這樣就是說,滿足 的任意z都算是該樣本的編碼向量,這也就意味著,滿足這個條件的任意 z,它跟 的相似度都應該大于它跟其他類別的相似度。
現在我們考慮:
由于 ,所以顯然有:
所以,為了達到“ z 跟 的相似度都應該大于它跟其他類別的相似度”這個目的,只需要“ z 跟 的最小相似度都應該大于它跟其他類別的最大相似度”,因此我們的優化目標變為:
可以看到,這其實就相當于 am-softmax、circle loss 等帶有 margin 的 softmax 變種,具體形式其實不重要,只需要為類別小的類設置更大的 margin 就好(樣本少的類別每個樣本都更“能打”)。那怎么設計每個類的 margin 呢?
之前的文章通過互信息思想來緩解類別不平衡問題就提供了一個方案:,這里的 p(y) 是先驗分布,那么就有:
這樣我們就聯系到了 logit adjustment loss 了,或者說給 logit adjustment loss 提供了一種幾何直觀理解。本質上來說,logit adjustment 也是在調節權重,只不過一般的調節權重是在損失函數的 之后調整,而 logit adjustment 則是在 之前調整。
感覺上可以小結一下了
本文就類別不平衡現象及其對策做了一些思考,主要是希望通過一些相對直觀的引導,來揭示一些魔改 loss 的思路,從中我們也可以發現,其實這些方案本質上都算是在調節樣本權重或者類權重。本文的分析思路相對來說比較散漫,基本上是筆者的頭腦風暴內容,如果錯漏之處,請讀者見諒并指出。
參考文獻
[1] https://kexue.fm/archives/4733
[2] https://kexue.fm/archives/6620
[3] https://kexue.fm/archives/6620
更多閱讀
#投 稿?通 道#
?讓你的論文被更多人看到?
如何才能讓更多的優質內容以更短路徑到達讀者群體,縮短讀者尋找優質內容的成本呢?答案就是:你不認識的人。
總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學者和學術靈感相互碰撞,迸發出更多的可能性。?
PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優質內容,可以是最新論文解讀,也可以是學習心得或技術干貨。我們的目的只有一個,讓知識真正流動起來。
?????來稿標準:
? 稿件確系個人原創作品,來稿需注明作者個人信息(姓名+學校/工作單位+學歷/職位+研究方向)?
? 如果文章并非首發,請在投稿時提醒并附上所有已發布鏈接?
? PaperWeekly 默認每篇文章都是首發,均會添加“原創”標志
?????投稿郵箱:
? 投稿郵箱:hr@paperweekly.site?
? 所有文章配圖,請單獨在附件中發送?
? 請留下即時聯系方式(微信或手機),以便我們在編輯發布時和作者溝通
????
現在,在「知乎」也能找到我們了
進入知乎首頁搜索「PaperWeekly」
點擊「關注」訂閱我們的專欄吧
關于PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
總結
以上是生活随笔為你收集整理的再谈类别不平衡问题:调节权重与魔改Loss的综合分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 英特尔 Core Ultra 9 285
- 下一篇: 农村开什么店比较合适没技术 可以考虑这