『深度概念』度量學習中損失函數的學習與深刻理解

『深度概念』度量學習中損失函數的學習與深刻理解

 

0. 概念簡介

 

度量學習(Metric Learning),也稱距離度量學習(Distance Metric Learning,DML) 屬於機器學習的一種。其本質就是類似度的學習,也能夠認爲距離學習。由於在必定條件下,類似度和距離能夠相互轉換。好比在空間座標的兩條向量,既能夠用餘弦類似度的大小,也可使用歐式距離的遠近來衡量類似程度。git

通常的度量學習包含如下步驟:github

  1. Encoder編碼模型:用於把原始數據編碼爲特徵向量(重點如何訓練模型
  2. 類似度判別算法:將一對特徵向量進行類似度比對(重點如何計算類似度,閾值如何設定

è¿éåå¾çæè¿°

基於深度學習的度量學習算法中,能夠分爲兩個流派:算法

  1. 網絡設計派:表明孿生神經網絡(Siamese network)
  2. 損失改進派:表明 xx-softmax

本文介紹重點是損失改進派,是最近發展迅速,應用普遍的方法。網絡

在人臉識別與聲紋識別這種度量學習算法中,算法的提升主要體如今損失函數的設計上,損失函數會對整個網絡的優化有着導向性的做用。能夠看到許多經常使用的損失函數,從傳統的softmax loss到cosface, arcface 都有這必定的提升。app

不管是SphereFace、CosineFace仍是ArcFace的損失函數,都是基於Softmax loss來進行修改的。機器學習

 

Base line Softmax loss
各類延伸的算法 Triplet loss, center loss
最新算法 A-Softmax Loss(SphereFace),  Cosine Margin Loss, Angular Margin Loss, Arcface

1.Softmax loss

 

    \large L_1 = -\frac{1}{m}{\sum\limits_{i=1}^m}\log\left(\frac{e^{W^T_{y_i}x_i+b_{y_i}}}{ {\sum\limits_{j=1}^n}e^{W^T_jx_i+b_j} }\right)

 

這就是softmax loss函數,{W^T_{j}x_i+b_{j}}​表示全鏈接層的輸出。在計算Loss降低的過程當中,咱們讓{W^T_{j}x_i+b_{j}}​ 的比重變大,從而使得log() 括號內的數更變大來更接近1,就會 log(1) = 0,整個loss就會降低。函數

其中W和b就是分類層參數,其實就是最後學習到的分類中心,對應下圖就是每種顏色對稱軸,各類顏色點的集合就是x=encoder(row),就是分類層前面一層的輸出。學習

è¿éåå¾çæè¿°

下面圖如何理解呢?倒數第二層輸出不該該是不少維嗎?測試

形象的理解:當作是一個球體,可是爲了可視化方便,把球給壓扁了。就成爲了二維的圖像。(我的理解)優化

如何操做?應該經過降維方法。

這樣如何完成分類的?

咱們知道,softmax分類時取的是最大那類(argmax),只要目標那一類大於其餘類就能夠了。反映在圖上,每一個點與各種中心的距離(W與b決定),距離哪一個中心最近就會分紅哪一類。

 

能夠發現,Softmax loss作分類能夠很好完成任務,可是若是進行類似度比對就會有比較大的問題

(參加[深度概念]·Softmax優缺點解析

  • L2距離:L2距離越小,向量類似度越高。可能同類的特徵向量距離(黃色)比不一樣類的特徵向量距離(綠色)更大

  • cos距離:夾角越小,cos距離越大,向量類似度越高。可能同類的特徵向量夾角(黃色)比不一樣類的特徵向量夾角(綠色)更大

總結來講:

  1. Softmax訓練的深度特徵,會把整個超空間或者超球,按照分類個數進行劃分,保證類別是可分的,這一點對多分類任務如MNIST和ImageNet很是合適,由於測試類別一定在訓練類別中。
  2. 但Softmax並不要求類內緊湊和類間分離,這一點很是不適合人臉識別任務,由於訓練集的1W人數,相對測試集整個世界70億人類來講,很是微不足道,而咱們不可能拿到全部人的訓練樣本,更過度的是,通常咱們還要求訓練集和測試集不重疊。
  3. 因此須要改造Softmax,除了保證可分性外,還要作到特徵向量類內儘量緊湊,類間儘量分離。

 

這種方式只考慮了可否正確分類,卻沒有考慮類間距離。因此提出了center loss 損失函數。(paper)

 

2. Center loss

    \large L_C = -\frac{1}{2}{\sum\limits_{i=1}^m}{||x_i-c_{y_i}||}^2

    \large \Delta{c_j}=\frac{{\sum\limits_{i=1}^m}{\delta{(y_i=j)}\cdot{(c_j-x_i)}}}{1+{\sum\limits_{i=1}^m}{\delta{(y_i=j)}}}

center loss 考慮到不只僅是分類要對,並且要求類間有必定的距離。上面的公式中\large c_{y_i}​表示某一類的中心,\large x_i​表示每一個人臉的特徵值。做者在softmax loss的基礎上加入了\large L_C​,同時使用參數\large \lambda​來控制類內距離,總體的損失函數以下:

    \large L_2=L_S+L_C= -\frac{1}{m}{\sum\limits_{i=1}^m}\log\left(\frac{e^{W^T_{y_i}x_i+b_{y_i}}}{ {\sum\limits_{j=1}^n}e^{W^T_jx_i+b_j} }\right)+\frac{\lambda}{2}{\sum\limits_{i=1}^m}{||x_i-c_{y_i}||}^2

 

3. Triplet Loss

三元組損失函數,三元組由Anchor, Negative, Positive這三個組成。從上圖能夠看到,一開始Anchor離Positive比較遠,咱們想讓Anchor和Positive儘可能的靠近(同類距離),Anchor和Negative儘可能的遠離(類間距離)。

    \large L_3 = {\sum\limits_{i}^N}{\left [ ||f(x_i^a) - f(x_i^p)||^2_2 - ||f(x_i^a)-f(x_i^n)||_2^2 \right + \alpha ]}

表達式左邊爲同類距離 ,右邊爲不一樣的類之間的距離。使用梯度降低法優化的過程就是讓類內距離不斷降低,類間距離不斷提高,這樣損失函數才能不斷地縮小。

上面的幾個算法都是比較傳統老舊的,下面說一下比較新的算法。


 

4. L-softmax

前面Softmax loss函數沒有考慮類間距離,Center loss函數可使類內變得緊湊,但沒有類間可分,而Triplet loss函數比較耗時,就產生了一下新的算法。

L-softmax函數開始就作了比較精細的改動,從softmax 函數log裏面的\large e^{W^T_{y_i}x_i+b_{y_i}​轉化到\large e^{||W_{yi}|| ||x_i||\psi{(\theta_{y_i})}}​。L-softmax函數不只但願類間距離拉的更大,還可以把類內距離壓縮的更緊湊。

    \LARGE L_4 = \frac{1}{N}\sum_{i=1}^N L_i = \frac{1}{N}\sum_{i=1}^N -log(\frac{e^{f_y_i}}{\sum_{j}e^{f_i}})​ 

    \LARGE L_i = -log(\frac{e^{||W_{yi}|| ||x_i||\psi{(\theta_{y_i})}}} {e^{||W_{yi}|| ||x_i||\psi{(\theta_{y_i})}} + \sum_{ j\neq y_i}{e^{||W_j|| ||x_i||cos(\theta_j)}}})

把其中的cosθ改爲了cos(mθ),

    \large \psi(\theta) = \left\{\begin{matrix} \cos (m\theta ), 0\leqslant \theta \leqslant \frac{\pi }{m}& & \\ D(\theta), \frac{\pi}{m}\leqslant \theta \leqslant \pi & & \end{matrix}\right.

m倍θ起到了增長 margin 的效果,讓類內距離更加緊湊,同時類間距離變大。m越大類間距離就越大,由於在(0, π)區間cos函數單調遞減,m越大 cos(mθ)趨向於0。

 

5. SphereFace(A-Softmax)

A-softmax 是在 L-softmax 函數上作了一個很小的修改,A-softmax 在考慮 margin時添加兩個限制條件:將權重W歸一化 ||W|| = 1​,b = 0。這使得模型的預測僅取決於 W 和 X 之間的角度。

    \LARGE L_5 = -\frac{1}{N}\sum_{i=1}^{N}log( \frac{e^{||x_i||\cos(m\theta_{y_i})}} {e^{||x_i||\cos(m\theta_{y_i})} + \sum_{j \neq y_i}{e^{||x_i||cos(\theta_j)}}})

 

6. CosFace

cosface的loss函數以下:

    \LARGE L_6 = -\frac{1}{N} \sum_{i=1}^{N} log( \frac{e^{s(cos(\theta_{yi})-m)}}{e^{s(cos(\theta_{yi})-m)}+ \sum_{j=1, j\neq y_i}^k e^{scos \theta_j}})

上式中,s爲超球面的半徑,m爲margin。

 

7. ArcFace

對比arcface和cosface這兩個函數,發現arcface是直接在角度空間中最大化分類界限,而cosface是在餘弦空間中最大化分類界限,這樣修改是由於角度距離比餘弦距離在對角度的影響更加直接。  

\LARGE L_7= -\frac{1}{N} \sum_{i=1}^{N} log(\frac{e^{s(cos(\theta_{yi}+m))}}{e^{s(cos(\theta_{yi}+m))}+\sum_{j=1,j\neq y_i}^k e^{scos\theta_j}})

 

分類的決策邊界以下:

 arcface算法流程以下:

 


 

References:

 

[1] https://blog.csdn.net/jningwei/article/details/80641184

[2] https://blog.csdn.net/u012505617/article/details/89355690

相關文章
相關標籤/搜索