softmax中的margin控制

轉載鏈接如下:

 Softmax理解之margin - 王峯的文章 - 知乎 https://zhuanlan.zhihu.com/p/52108088

在瞭解如何引入 margin 之前,我們首先要知道爲何要加margin。在SVM時代,margin (以下稱作間隔)被認爲是模型泛化能力的保證,但在神經網絡時代使用的最多的損失函數 Softmax 交叉熵損失中並沒有顯式地引入間隔項。從第一篇和第三篇文章中我們知道通過 smooth 化,可以在類間引入一定的間隔,而這個間隔與特徵幅度和最後一個內機層的權重幅度有關。但這種間隔的大小主要是由網絡自行調整,並不是我們人爲指定的,網絡自行調整的間隔並不一定是最優的。實際上爲了減小損失函數的值,margin 爲零甚至 margin 爲負才是神經網絡自認爲正確的優化方向。

此外,在人臉認證、圖像檢索、重識別任務中,是通過特徵與特徵之間的距離來判斷兩個樣本的相似度的。因此我們一般不使用整個網絡模型,而是將最後的分類層丟掉,僅僅使用模型提取特徵。例如下圖的一個二分類問題:

紅色點和綠色點可以被一條分界線很好地分開,作爲一個分類模型,這條分界線的表現很不錯,識別率100%。但如果要進行特徵比對任務,這個模型就遠遠不夠精確了:從圖上我們可以看到,分界線兩側的兩個點之間的距離(黃色箭頭)可能會遠小於類內的最大距離(藍色箭頭)。所以使用分類器來訓練特徵比對任務是遠遠不夠的,我們必須將類間的間隔拉得更大,才能保證“類間距離大於類內距離”這一目標。

可以這麼說:度量學習(特徵比對)是比分類更難的問題。至於究竟難多少,SphereFace這篇文章的 Property 3 指出,度量學習比分類困難3倍。當然說一個問題比另一個問題困難幾倍這種說法本身就不太科學,大家有個大致的概念即可,不要過於糾結這個數字。

 

下面就來談談如何提高間隔。在我們這個系列的第一篇文章中,使用瞭如下優化目標:

輸出C個分數,使目標分數比最大的非目標分數更大。

其對應的損失函數爲:

[公式] 。

參考 hinge loss,引入間隔項:

[公式] ,

這個損失函數的意義是:

輸出C個分數,使目標分數比最大的非目標分數還要大 m。

這裏的m由我們手動進行調節,m 越大,則我們會強行要求目標與非目標分數之間拉開更大的差距。但注意到,如果我們不限制分數 [公式] 的取值範圍,那網絡會自動優化使得分數 [公式] 整體取值都非常大,這樣會使得我們所設置的 m 相對變小,非常不便。

因此我們需要使用第三篇文章中提到的歸一化方法,讓分數 [公式] 由余弦層後接一個尺度因子 s 來得到。這樣我們就可以手動控制分數 [公式] 的取值範圍,以方便設置參數 m。

於是損失函數變爲:

[公式] ,

這裏的 s 看似是一個冗餘項,損失函數乘以一個常數並不影響其優化。但因爲我們後面要將這個損失函數 smooth 化,所以這裏仍然保留着 s 項。接下來使用第一篇文章中的 smooth 技巧,將損失函數化爲:

[公式] 。

因爲這裏的 m 與分數 [公式] 之間是加減的關係,所以我們稱這個損失函數爲“帶有加性間隔的 Softmax 交叉熵損失函數”。

這個損失函數中有兩個參數,一個 s 一個 m。其中 s 的設置參照第三篇文章,其實只要超過一定的閾值就可以了,一般來說需要設置一個最小值,然後讓 s 按照正常的神經網絡參數的更新方式來更新。對於 m 的設置目前還需要手動調節,下一篇文章會介紹一些自動設置的方法,但效果還是不如調參師手工調整的好。

下面給大家直觀地展示一下兩個參數的效果,因爲我們對特徵和類向量進行了 [公式] 歸一化,所以特徵和類向量全部分佈在單位球上。我隨便訓練了一個MNIST模型,取出最後10個類向量,然後遍歷整個球上的點,計算每個點所對應的最高概率值。由於Softmax交叉熵損失的定義爲概率值的負對數,所以通過概率值我們就能夠(間接地)看出損失函數的表面形狀。

在不加間隔,即 [公式] 時,不同的 s 會產生不同的邊界形狀:

s 越小,邊界變化會越平緩。這樣會使得每個類的點更加向類中心收攏,其實也可以起到一定的增加類間間隔的作用。但根據第三篇文章,過小的 s 會帶來近似不準確的缺點,所以通過縮小 s 來增加間隔並不是一個好方法。想要添加類間間隔當然還是直接顯式地添加比較好。

 [公式] 的基礎上添加間隔項 m 的效果如下:

對比這張圖和上邊的(c)圖,可以看到每個類別所佔據的區域減小了,樣本只有落在紅色區域內才被認爲是分類正確的。從這張圖上可以看出,由於限制了特徵空間在單位球上,添加間隔項 m 可以同時增大類間距離並縮小類內距離。而且這個間隔可以由我們來手動調節,在過擬合嚴重的數據集上,我們可以增加 m 來使得目標更難,起到約束的作用,從而降低過擬合效應。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章