Softmax-based Loss Functions

2021-03-02 揚蘇子

Softmax loss是圖像分類領域常用的損失函數。在本文中,softmax loss表示一組操作:最後的全連接層,softmax函數和交叉熵損失函數,如圖1所示。

Softmax loss的數學表達式如下:

其中是樣本數量;是類別數量;可以被視為一個類別的中心, 是輸入softmax loss的樣本特徵向量,被稱為logit, 用于衡量樣本和類別之間的相似度。

將使用softmax loss訓練獲得的特徵向量用於retrieval和verification等「需要設置閾值」的任務時,效果可能不足夠好,這其中的原因是:softmax loss儘可能使得所有樣本能夠被正確地分類;而retrieval和verification等任務要求一個具有優良泛化性能的度量空間;這兩種目的的相關性很強,但是不直接等價。近年來,在人臉識別等領域對softmax loss進行了改進,使得既能夠充分利用softmax loss收斂快等良好性質,又能夠訓練獲得一個具有優良泛化性能的度量空間。這些改進方法大概能夠被劃分為歸一化(normalization)和增加margin.歸一化優化softmax loss需要增大,根據定義,增大可能會出現以下情況:1)增大正確類別的;2)增大;3)減小之間的夾角。

Ranjan等人[1]發現高質量正臉圖片的特徵向量L2-norm大,低質量側臉圖片的特徵向量L2-norm小,如圖2所示。這使得softmax loss不能夠同等對待高質量和低質量圖片。Ranjan等人提出了L2-softmax來緩解這個問題,即固定,從而使得softmax loss能夠同等對待高質量和低質量圖片。在SphereFace [4]的附錄中,Liu等人提出的大小與該類別樣本數量相關,當該類別樣本數量越大時,越大。因此,本人認為L2-softmax產生作用的前提是各類別樣本數量相當,在這個前提下,L2-softrmax可以優化之間的夾角。圖3展示了L2-softmax的結構圖,其中可以人工設定或者學習獲得。

圖2:Images with high, medium and low L2-norm

Wang等人[2]發現在優化softmax loss時,我們使用內積衡量相似度,但是在測試時,我們使用歸一化的內積(餘弦相似度)衡量相似度,這導致我們在訓練和測試時使用了不同的相似度指標。圖4展示了使用softmax loss優化之後的MNIST數據集在2維空間的分布,數據分布呈現輻射狀。Proposition 1 [2]解釋了數據分布呈現輻射狀的原因,即softmax loss會使得容易被正確分類的樣本特徵向量的L2-norm變大。假設使用歐氏距離來衡量,同類別的f2和f3之間的距離大於不同類別的f2和f1之間的距離,這會導致f2被錯分;根據數據分布,使用餘弦相似度更加合理。因此,我們需要固定,使得softmax loss優化之間的夾角,即它們之間的餘弦相似度。為了統一在訓練和測試時使用餘弦相似度,Wang等人提出了NormFace, 即, , 從而優化之間的夾角。為了緩解歸一化帶來的收斂性問題,作者建議增加一個縮放層(a scale layer)。為了避免偏置項的影響,Wang等人在分析中將. 本人認為NormFace的研究動機更加清晰直接,而且具有詳細的理論分析和充分的實驗結果。

圖4:使用softmax loss優化之後的MNIST數據集在2維空間的分布增加margin

在face verification等任務中,我們需要一個度量空間使得「類內樣本差異小」和「類間樣本差異大」,這不是softmax loss直接優化的目標,但是可以通過優化softmax loss間接達成這個目標。在接下來的分析中,我們統一將偏置項.

Margin是機器學習領域的經典思想,用於softmax based loss是一個有意義的創新。L-softmax (large-margin softmax) [3]是將margin引入softmax的一篇開創性工作。L-softmax的目標是增大特徵向量在角度空間中的區分性。以二分類為例,傳統softmax loss的分類邊界是, L-softmax的分類邊界是),其中是一個正整數。圖5展示了L-softmax分類邊界的幾何解釋,由於的引入,兩個類別有不同的分類邊界,兩者之間存在angular margin, 從而使得每個類別的特徵向量被壓縮到一個更小的空間。

L-softmax的數學表達式是

其中要求在區間內單調遞減,作者在[3]中的定義如下

歸一化和增加margin是兩個不同的研究方向,幾乎在同一時期被研究,根據下文的研究工作,我們發現在增加margin方向,研究者也討論了特徵歸一化和權重歸一化的作用。L-softmax沒有引入權重歸一化。在L-softmax的基礎上,通過引入,Liu等人[4]提出了A-softmax (angular softmax, SphereFace). 根據圖6的結果,A-softmax在angular空間可以獲得區分性更好的特徵向量。此外,作者在附錄中通過實驗證明將可以減輕不同類別樣本數量不均衡的影響。A-softmax的數學表達式是

其中與L-softmax相同。

圖6:在某數據集上,經A-softmax優化之後的特徵向量分布

但是,在引入margin之後,L-softmax和A-softmax的優化變得非常困難。作者提出使用組合退火策略來緩解優化問題。L-softmax和A-softmax的優化問題來源於乘性margin:

1)乘性margin將餘弦函數的單調區間壓縮到了.

2)乘性margin導致不均勻margin, 當兩個類別的區分性較弱時,乘性margin接近0.

為了緩解乘性margin的優化問題,Hao Wang等人[5]和Feng Wang等人[6]提出了加性margin. 這兩篇論文的思路是一致的,在[5]中,作者稱之為CosFace (large margin cosine loss); 在[6]中,作者稱之為AM-softmax (additive margin softmax). 通過將, AM-softmax的數學表達式是

相比於L-softmax和A-softmax, AM-softmax更加容易優化。

Deng等人[7]將前人的工作總結統一至同一個框架,並提出了ArcFace (additive angular margin loss)

SphereFace, CosFace和ArcFace的統一數學表達式是

圖7展示了不同softmax-based loss functions的分類邊界,從圖7中我們可以認識到:1)softmax loss沒有margin; 2)SphereFace的乘性margin分布是不均勻的;3)CosFace的cosine margin分布是非線性的;4)ArcFace的angular margin分布是線性的。

圖7:二分類情況下,不同softmax-based loss functions的分類邊界

為了便於分析和比較,表1展示了這些softmax-based loss functions. 根據表1,我們可以認識到:AM-softmax和ArcFace可以被視為在NormFace的基礎上分別引入cosine margin和angular margin獲得。

總結

本文梳理了softmax loss的兩個重要改進方向:歸一化和增加margin. 歸一化可以緩解簡單與困難樣本的問題和類間樣本數量不均衡問題;增加margin可以使得softmax loss的度量空間的區分性更好。

[1] Ranjan et al., L2-constrained softmax loss for discriminative face verification, arXiv 2017.

[2] Wang et al., NormFace: L2 hypersphere embedding for face verification, MM 2017.

[3] Liu et al., Large-margin softmax loss for convolutional neural networks, ICML 2016.

[4] Liu et al., SphereFace: Deep hypersphere embedding for face recognition, CVPR 2017.

[5] Wang et al., CosFace: Large margin cosine loss for deep face recognition, CVPR 2018.

[6] Wang et al., Additive margin softmax for face verification, IEEE Signal Processing Letters, 2018.

[7] Deng et al., ArcFace: Additive angular margin loss for deep face recognition, CVPR 2019.

[8] 曠視科技,人臉識別中softmax-based loss的演化史,https://zhuanlan.zhihu.com/p/76391405

相關焦點

  • 卷積神經網絡系列之softmax,softmax loss和cross entropy的講解
    你對softmax,softmax loss,cross entropy了解嗎?相信很多人不一定清楚。雖然網上的資料很多,但是質量參差不齊,常常看得眼花繚亂。為了讓大家少走彎路,特地整理了下這些知識點的來龍去脈,希望不僅幫助自己鞏固知識,也能幫到他人理解這些內容。這一篇主要介紹全連接層和損失層的內容,算是網絡裡面比較基礎的一塊內容。
  • 「技術綜述」一文道盡softmax loss及其變種
    本文首發於知乎專欄《有三AI學院》,https://zhuanlan.zhihu.com/c_151876233今天來說說softmax loss以及它的變種1 softmax losssoftmax loss是我們最熟悉的loss之一了,分類任務中使用它,分割任務中依然使用它。
  • 度量學習中的pair-based loss
    在深度學習中,很多度量學習的方法都是使用成對成對的樣本進行loss計算的,這類方法被稱為 pair-based deep metric learning。例如,在訓練模型的過程,我們隨意的選取兩個樣本,使用模型提取特徵,並計算他們特徵之間的距離。
  • 常見的損失函數(loss function)總結
    指數損失函數(exponential loss)指數損失函數的標準形式如下:特點:(1)對離群點、噪聲非常敏感。經常用在AdaBoost算法中。感知損失(perceptron loss)函數感知損失函數的標準形式如下:特點:(1)是Hinge損失函數的一個變種,Hinge loss對判定邊界附近的點(正確端)懲罰力度很高。而perceptron loss只要樣本的判定類別正確的話,它就滿意,不管其判定邊界的距離。
  • 敘敘loss(總算來一更)
    與smooth L1 loss一樣,結合了L1 loss和L2 loss,具有兩者的優點,但是多了一個參數趨於無窮時,Huber loss趨向於L2 loss.Huber loss對於離群點非常的有效。
  • 以色列理工暑期學習-機器學習中Loss函數的小結
    藉助文獻中的原話:「the loss function measures 「how bad」 the mistake is.中soft margin情況:下圖中紅色線)對數函數即 log loss(用於邏輯回歸、交叉熵損失:下圖中黃色線)平方損失即 square loss(用於線性回歸:下圖中黑色線)指數損失即 exponential loss(用於boost情況:下圖中綠色線)
  • Softmax函數與交叉熵
    softmax的計算與數值穩定性在Python中,softmax函數為:def softmax(x): exp_x = np.exp(x) return exp_x / np.sum(exp_x)傳入[1, 2, 3, 4, 5]的向量>>> softmax([1, 2, 3,
  • 超詳細的語義分割中的Loss大盤點
    這個Loss結合了Focal Loss以及Dice loss。(1)softmax函數 首先再來明確一下softmax函數,一般softmax函數是用來做分類任務的輸出層。softmaelse: dW[:, j] += softmax_output * X[i] loss /= num_train loss += 0.5 * reg * np.sum(W * W) dW = dW / num_train + reg * W return loss, dWdef softmax_loss_vectorized(W, X,
  • 深度學習中的損失函數總結以及Center Loss函數筆記
    (手寫數字,28*28圖像,10分類問題)categorical crossentropy(softmax loss)的問題通常會使用softmax loss多分類損失函數.解決辦法:很多,如故意讓softmax也去模擬下均勻分布輸出而不僅僅是one_hot.這裡只涉及其中一種也就是centerloss.那麼換一個損失函數吧.均方誤差損失?如下圖:
  • 用Python實現機器學習算法——Softmax 回歸算法
    ;第 2 步:用 softmax 函數作為激活函數,將得分值轉化為概率值形式。- learning_rate * dw.T            self.bias = self.bias - learning_rate * db            if i % 100 == 0:                print(f'Iteration number: {i}, loss: {np.round(loss, 4)}')
  • 算法工程師分析Center Loss在人臉識別中的應用
    通過添加center loss使得簡單的softmax就能夠訓練出擁有內聚性的特徵。該特點在人臉識別上尤為重要,從而使得在很少的數據情況下訓練出來的模型也能有不俗的性能。本文嘗試用一種比較容易理解的方式來解釋這篇文章。我覺得在開始正式介紹center loss之前,我有必要講一個故事。請大家回答我,做人臉研究,最期待的事情是什麼?
  • 從最優化的角度看待 Softmax 損失函數
    Softmax交叉熵損失函數應該是目前最常用的分類損失函數了,在大部分文章中,Softmax交叉熵損失函數都是從概率角度來解釋的,本周二極市就推送了一篇Softmax相關文章:一文道盡softmax loss及其變種。本文將嘗試從最優化的角度來推導出Softmax交叉熵損失函數,希望能夠啟發出更多的研究思路。
  • 【損失函數合集】超詳細的語義分割中Loss盤點
    (1)softmax函數 首先再來明確一下softmax函數,一般softmax函數是用來做分類任務的輸出層。y[i]] + np.log(sum(np.exp(shift_scores))) loss += loss_i for j in xrange(num_classes): softmax_output = np.exp(shift_scores[j]) / sum(np.exp(shift_scores))
  • 【小知識】Softmax函數與交叉熵
    softmax的計算與數值穩定性在Python中,softmax函數為:def softmax(x): exp_x = np.exp(x) return exp_x / np.sum(exp_x)傳入[1, 2, 3, 4, 5]的向量>>> softmax([1, 2, 3,
  • 從最優化的角度看待Softmax損失函數
    這樣我們就推導出了hinge loss...唔,好像跑題了,我們本來不是要說Softmax的麼...不過既然跑題了就多說點,為什麼hinge loss在SVM時代大放異彩,但在神經網絡時代就不好用了呢?主要就是因為svm時代我們用的是二分類,通過使用一些小技巧比如1 vs 1、1 vs n等方式來做多分類問題。
  • Pytorch的19個Loss Function(上)
    ignore_index:指定一個類別值,該類別的數據將不會對loss計算有影響,也不會參與梯度計算,比如一共五個類[0,1,2,3,4],指定ignore_index=3, 則label=3的數據不會參與loss計算和梯度下降。
  • 一種寫法統一人臉Loss:Pytorch實現及Mnist可視化
    loss = F.cross_entropy(self.s * cosine, label) return cosine, lossSphereFace:A-softmax為了進一步約束特徵向量之間的餘弦距離,我們人為地增加收斂難度,給兩個向量之間的夾角乘上一個因子:m公式推導Pytorch代碼實現class SphereFace(nn.Module
  • Gumbel Softmax 是什麼?
    這裡sample引入隨機性的意義其實就是"探索",讓模型嘗試各種可能的選擇,然後根據loss回傳梯度調整參數,這樣才能訓練嘛。而為了在採樣的同時不破壞計算圖的梯度傳播,我們不直接在p上進行隨機性操作,而是引入了Gumbel分布,通過它來提供我們需要的隨機性。 其中G就是服從Gumbel分布的噪音,它負責為我們提供採樣所需的隨機性。
  • 反向傳播原來這麼簡單 | 神經網絡 | 損失函數與Softmax(1)
    def one_hot(labels, class_num=10):    return np.eye(class_num, dtype=float)[labels]y = one_hot(nums_8x8.target[13:16], class_num=10)loss = dl.cross_entropy(y, y_pred)