參考博客:
L-margin softmax loss:https://blog.csdn.net/u014380165/article/details/76864572
A-softmax loss:https://blog.csdn.net/u011808673/article/details/80491361
AM-softmax loss:https://blog.csdn.net/fire_light_/article/details/79602310
arcface:https://blog.csdn.net/Fire_Light_/article/details/79602705
softmax loss:
N是樣本的數量,i代表第i個樣本,j代表第j個類別,fyi代表着第i個樣本所屬的類別的分數
fyi是全連接層的輸出,代表着每一個類別的分數,
每一個分數即為權重W和特征向量X的內積
每個樣本的softmax值即為:
L-softmax loss:
假設一個2分類問題,x屬於類別1,那么原來的softmax肯定是希望:
也就是屬於類別1的概率大於類別2的概率,這個式子和下式是等效的:
large margin softmax就是將上面不等式替換為:
m是正整數,cos函數在0到π范圍又是單調遞減的,所以cos(mx)要小於cos(x)。通過這種方式定義損失會逼得模型學到類間距離更大的,類內距離更小的特征。
從幾何的角度看兩種損失的差別:
設置為cos(mx)后,使得學習到的W參數更加的扁平,可以加大樣本的類間距離。
Large-Margin Softmax的實驗效果:
A-softmax loss
A-softmax loss簡單講就是在large margin softmax loss的基礎上添加了兩個限制條件||W||=1和b=0,使得預測僅取決於W和x之間的角度。
softmax的計算:
可以寫成
若引入兩個限制條件,和
decision boundary變為,只取決於角度了
則損失函數變為:
在這兩個限制條件的基礎上,作者又添加了和large margin softmax loss一樣的角度參數,使得公式變為:
AM-softmax
在A-softmax的基礎上,修改Cos(mθ)為一個新函數:
與ASoftmax中定的的類似,可以達到減小對應標簽項的概率,增大損失的效果,因此對同一類的聚合更有幫助
然后根據Normface,對f進行歸一化,乘上縮放系數s,最終的損失函數變為:
這樣做的好處在於A-Softmax的倍角計算是要通過倍角公式,反向傳播時不方便求導,而只減m反向傳播時導數不用變化
Asoftmax是用m乘以θ,而AMSoftmax是用cosθ減去m,這是兩者的最大不同之處:一個是角度距離,一個是余弦距離。
之所以選擇cosθ-m而不是cos(θ-m),這是因為我們從網絡中得到的是W和f的內積,如果要優化cos(θ-m)那么會涉及到arccos操作,計算量過大。
arcface
分類正確label的值為,cos函數在(0,1)內是單調遞減的,加上m,會使該值變得更小,從而loss會變得很大。
這樣修改的原因:角度距離比余弦距離在對角度的影響更加直接