AAAI 2019 | 把Cross Entropy梯度分布拉「平」,就能輕鬆超越Focal Loss

2021-01-14 機器之心

單階段物體檢測(One-stage Object Detection)方法在模型訓練過程中始終面臨著樣本分布嚴重不均衡的問題,來自香港中文大學的研究者們在論文 Gradient Harmonized Single-stage Detector 提出了一個新的視角——梯度分布上看待樣本數量和難易不均衡。直接把 cross entropy 產生的 gradient distribution 標準化到 uniform 就可以輕鬆訓練單階段物體檢測模型。


該論文已經被 AAAI 2019 會議接受為 Oral 論文,基於 PyTorch+MMDet 的代碼已經放出。


作者丨Lovely Zeng

學校丨CUHK

研究方向丨Detection




引言


物體檢測的方法主要分為單階段與兩階段兩大類。雖然兩階段的物體檢測器在準確率上的表現往往更優,但單階段檢測器因其簡潔的結構和相對更快的速度同樣得到了研究者們的重視。


在 2017 年,Focal Loss 的作者指出了單階段檢測器中樣本類別(前景與背景)嚴重不均衡(class imbalance)的問題,並通過設計一個新的損失函數來抑制大量的簡單背景樣本對模型訓練的影響,從而改善了訓練效果。


而在這篇論文中,研究者對樣本不均衡的本質影響進行了進一步探討,找到了梯度分布這個更為深入的角度,並以此入手改進了單階段檢測器的訓練過程。 


實際上,不同類別樣本數不同並不是影響單階段檢測器的訓練的本質問題,因為背景樣本雖然大部分非常容易識別(well classified),但其中也會存在著比較像某類物體的難樣本(hard negative),而前景類中也有許多網絡很容易正確判斷的樣本(easy positive)。所以產生本質影響的問題是不同難度樣本的分布不均衡。


更進一步來看,每個樣本對模型訓練的實質作用是產生一個梯度用以更新模型的參數,不同樣本對參數更新會產生不同的貢獻。


在單階段檢測器的訓練中,簡單樣本的數量非常大,它們產生的累計貢獻就在模型更新中就會有巨大的影響力甚至佔據主導作用,而由於它們本身已經被模型很好的判別,所以這部分的參數更新並不會改善模型的判斷能力,也就使整個訓練變得低效。


基於這一點,研究者對樣本梯度的分布進行了統計,並根據這個分布設計了一個梯度均衡機制(Gradient Harmonizing mechanism),使得模型訓練更加高效與穩健,並可以收斂到更好的結果(實驗中取得了好於 Focal Loss 的表現)。


梯度均衡機制


首先我們要定義統計對象——梯度模長(gradient norm)。考慮簡單的二分類交叉熵損失函數(binary cross entropy loss):



其中 p=sigmoid(x) 為模型所預測的樣本類別的概率,p* 是對應的監督。則其對 x 的梯度(導數)為:



於是我們可以定義一個梯度模長,g=|p-p*|。


對一個交叉熵損失函數訓練收斂的單階段檢測模型,樣本梯度模長的分布統計如下圖:



可以看到,絕大多數樣本都是十分容易預測的(well-classified),這些可以被準確預測的樣本所佔的比重非常大,正因如此圖中採用對數坐標來更清楚地展示分布。


此外,還可以發現在 g 接近 1 的時候,樣本比例也相對較大,研究者認為這是一些離群樣本(outlier),可能是由於數據標註本身不夠準確或是樣本比較特殊極難學習而造成的。對一個已收斂的模型來說,強行學好這些離群樣本可能會導致模型參數的較大偏差,反而會影響大多數已經可以較好識別的樣本的判斷準確率。


基於以上現象與分析,研究者提出了梯度均衡機制,即根據樣本梯度模長分布的比例,進行一個相應的標準化(normalization),使得各種類型的樣本對模型參數更新有更均衡的貢獻,進而讓模型訓練更加高效可靠。


由於梯度均衡本質上是對不同樣本產生的梯度進行一個加權,進而改變它們的貢獻量,而這個權重加在損失函數上也可以達到同樣的效果,此研究中,梯度均衡機制便是通過重構損失函數來實現的。


為了清楚地描述新的損失函數,我們需要先定義梯度密度(gradient density)這一概念。仿照物理上對於密度的定義(單位體積內的質量),我們把梯度密度定義為單位取值區域內分布的樣本數量。


具體來說,我們將梯度模長的取值範圍劃分為若干個單位區域(unit region)。對於一個樣本,若它的梯度模長為 g,它的密度就定義為處於它所在的單位區域內的樣本數量除以這個單位區域的長度 ε:



而梯度密度的倒數就是樣本計算 loss 後要乘的權值:



這裡乘樣本數量 N,是為了保證均勻分布或只劃分一個單位區域時,該權值為 1,即 loss 不變。 


由於這個損失函數是為分類設計的,所以記為 GHM-C Loss。下面我們通過與傳統交叉熵算是函數以及 Focal Loss 的比較,來進一步解釋 GHM 的作用:



左圖為樣本梯度模長的分布。中圖為不同損失函數對樣本梯度產生的作用,橫坐標為在交叉熵(CE)損失函數下樣本的梯度模長,縱坐標為新的損失函數下同樣的樣本新的梯度模長,由於範圍較大所以依然採用對數坐標展示。其中淺藍色的線為交叉熵函數本身,作為參考線。


可以看到,Focal Loss 本質上是對簡單樣本進行相對的抑制,越簡單的樣本受抑制的程度越大,這一點和 GHM-C 所做的均衡是十分相似的。此外,GHM-C 還對一些離群樣本進行了相對的抑制,這可以使得模型訓練更具穩定性。


右圖為不同損失函數下,各種難度樣本的累計貢獻大小。由此可以看出,梯度均衡機制的作用就是讓各種難度類型的樣本有均衡的累計貢獻。


在分類之外,研究者還對於候選框的回歸問題做了類似的統計並設計了相應的 GHM-R Loss。


需要指出的是,由於常用的 Smooth L1 Loss 是個分段函數,在 L1 的這部分倒數的模長恆定為 1,也就是偏差超過臨界值的樣本都會落到 g=1 這一點上,沒有難度的區分,這樣的統計並不合理。為了解決這個問題,研究者引入了 ASL1 Loss:



在此基礎上對梯度模長的分布進行統計並實施均衡化的操作。


實驗結果


在 COCO 的 minival 集上,GHM-C Loss 與標準 Cross Entropy Loss,使用 OHEM 採樣下 Cross Entropy,以及 Focal Loss 的比較如下:



GHM-R 與 Smooth L1 Loss 以及 ASL1 Loss 的 baseline 比較如下:



在 COCO test 集上,GHM 與其他 state-of-the-art 的方法比較如下:



此外,在 AAAI 2019 的演示文稿中,研究者還展示了在 pascal voc 2007 這樣的小數據集上,GHM 相對於 Focal Loss 不需要過多的 warmup iteration 就可以保持訓練的穩定:



討論


這篇研究的主要貢獻是提供了一個新視角,較為深入地探討了單階段檢測中樣本分布不均衡所產生的影響及解決方案。


此研究對梯度模長的分布進行統計並劃分單位區域的方式,實際上可以看作是依據梯度貢獻大小對樣本進行聚類的過程。而這裡的梯度只是模型頂部獲得的偏導數的大小,並不是全部參數對應的梯度向量,所以聚類依據可能有更嚴謹更有區分度的選取方式,然而統計整體參數的梯度分布會極大增加計算量,所以本研究中的統計方式仍是一種快速且有效的選擇。


此研究進行均衡化操作實際上是以各梯度模長的樣本產生均勻的累計貢獻為目標的,但是這個目標是否就是最優的梯度分布,暫時無法給出理論上的證明。從實驗結果上,我們可以認為這個目標是明顯優於無均衡的分布的。然而研究者認為,真正的最優分布難以定義,並需要後續的深入研究。



本文為機器之心專欄,轉載請聯繫本公眾號獲得授權

✄---

加入機器之心(全職記者 / 實習生):hr@jiqizhixin.com

投稿或尋求報導:content@jiqizhixin.com

廣告 & 商務合作:bd@jiqizhixin.com

相關焦點

  • AAAI 2019 |把Cross Entropy梯度分布拉「平」,就能輕鬆超越Focal...
    Detector提出了一個新的視角——梯度分布上看待樣本數量和難易不均衡。直接把 cross entropy 產生的 gradient distribution 標準化到 uniform 就可以輕鬆訓練單階段物體檢測模型。該論文已經被 AAAI 2019 會議接受為 Oral 論文,基於 PyTorch+MMDet 的代碼已經放出。
  • 敘敘loss(總算來一更)
    函數處處可導,且隨著誤差的減小,梯度也在減小。但是,在初期不穩定,容易梯度爆炸。def l2_loss(y_predict, y_true):    return tf.reduce_mean(tf.square(y_predict - y_true))3、smooth L1 loss
  • 語義分割之dice loss深度分析(梯度可視化)
    意味著某像素點的loss以及梯度值不僅和該點的label以及預測值相關,和其他點的label以及預測值也相關,這點和ce (交叉熵cross entropy) loss 不同。因此分析起來比較複雜,這裡我們簡化一下,首先從loss曲線和求導曲線對單點輸出方式分析。然後對於多點輸出的情況,利用模擬預測輸出來分析其梯度。
  • 「技術綜述」一文道盡softmax loss及其變種
    softmax loss實際上是由softmax和cross-entropy loss組合而成,兩者放一起數值計算更加穩定。這裡我們將其數學推導一起回顧一遍。令z是softmax層的輸入,f(z)是softmax的輸出,則單個像素i的softmax loss等於cross-entropy error如下:展開上式:在caffe實現中,z即bottom blob,l(y,z)是top blob,反向傳播時,就是要根據top blob diff得到bottom blob diff,所以要得到
  • 可視化理解 Binary Cross-Entropy
    介紹如果你正在訓練一個二分類器,很有可能你正在使用的損失函數是二值交叉熵/對數(binary cross-entropy / log)。你是否想過使用此損失函數到底意味著什麼?問題是,鑑於如今庫和框架的易用性,很容易讓人忽略所使用損失函數的真正含義。
  • 什麼是機器學習中的cross entropy
    entropy是用於表示二元分類器的誤差,而cross entropy則用於表示多元分類器的誤差。對於一個用的測試樣本的元分類器,那麼cross entropy的計算公式如下:比如一個三元分類問題,有兩個測試樣本,第一個樣本:預測出來的概率為,實際標籤為,寫成one-hot的形式是;第二個樣本:預測出來概率為
  • TensorFlow四種Cross Entropy算法實現和應用
    ➤TensorFlow的交叉熵函數TensorFlow針對分類問題,實現了四個交叉熵函數,分別是tf.nn.sigmoid_cross_entropy_with_logits、tf.nn.softmax_cross_entropy_with_logits、tf.nn.sparse_softmax_cross_entropy_with_logits
  • TensorFlow四種Cross Entropy算法的實現和應用
    sigmoid_cross_entropy_with_logits我們先看sigmoid_cross_entropy_with_logits,為什麼呢,因為它的實現和前面的交叉熵算法定義是一樣的,也是TensorFlow最早實現的交叉熵算法。
  • 削弱顯著特徵為細粒度分類帶來提升|AAAI 2020
    因此,論文建議分散attention來構建多樣的分布在特徵圖上的特徵。因為在特徵層面進行attention分散,在預測時則需要反過來,例如只關注最相似的類別來提高模型的辨別能力。通過關注相似的類別以及分散模型的attention,論文實際是在讓模型避免對訓練集的overfiting,增加泛化能力。
  • 天生一對,硬核微分方程與深度學習的「聯姻」之路
    近日,北京智源人工智慧研究院開展了第一次論壇,其以「人工智慧的數理基礎」這一重大研究方向為主題,從數學、統計和計算等角度討論了智能系統應該怎樣融合數學系統。在論壇中,北京大學董彬副教授、林偉研究院和張志華教授等研究者從基礎出發介紹了「數學」眼中的機器學習是什麼樣的。
  • 技術| 深度解讀最流行的優化算法:梯度下降
    因此批量梯度下降法的速度會比較慢,甚至對於較大的、內存無法容納的數據集,該方法都無法被使用。同時,梯度下降法不能以「在線」的形式更新我們的模型,也就是不能再運行中加入新的樣本進行運算。如果你希望自己寫代碼求出梯度值,那麼「梯度檢查」會是一個不錯的注意。(你可以參考這裡,了解關於如何檢查梯度的相關建議。) 然後,我們對參數減去梯度值乘學習率的值,也就是在反梯度方向,更新我們參數。當目標函數 J(θ) 是一凸函數時,則批量梯度下降法必然會在全局最小值處收斂;否則,目標函數則可能會局部極小值處收斂。