近期,人臉識別研究領域的主要進展之一集中在了 Softmax Loss 的改進之上;在本文中,曠視研究院(上海)(MEGVII Research Shanghai)從兩種主要的改進方式——作歸一化以及增長類間 margin——展開梳理,介紹了近年來基於 Softmax 的 Loss 的研究進展。
參考文獻git
關於人臉識別領域 Softmax Loss 相關的科普文章其實不少。例如 [人臉識別的 LOSS(上,下)]以及 [人臉識別最前沿在研究什麼?] 等文章分別從 paper 和目前主流工做的角度作了梳理。所以,本文再也不挨個盤點時下各個 paper 所作的工做,而是從人臉識別中的 Softmax Loss 的歷史發展脈絡這個角度出發,沿着這條時間線詳細介紹 Softmax Loss 的各類改進在當時的背景下是如何提出來的。網絡
Softmax Loss 由於其易於優化,收斂快等特性被普遍應用於圖像分類領域。然而,直接使用 softmax loss 訓練獲得的 feature 拿到 retrieval,verification 等「須要設閾值」的任務時,每每並不夠好。ide
這其中的緣由還得從 Softmax 的自己的定義提及,Softmax loss 在形式上是 softmax 函數加上交叉熵損失,它的目的是讓全部的類別在機率空間具備最大的對數似然,也就是保證全部的類別都能分類正確,而 retievel 和 verification 任務所須要的是一個泛化性能更好的度量空間(metric space)。保證分類正確和保證一個泛化性優良的 metric space 這二者之間雖然相關性很強,但並不直接等價。函數
所以,近年來,face recognition 領域的主要技術進展集中在如何改進 softmax 的 loss,使得既能充分利用其易於優化,收斂快的優良性質,又使得其能優化出一個具備優良泛化性的 metric 空間。而這些技術改進主要又能被歸爲兩大類別,作歸一化以及加 margin。如下從這兩個方面進行一些梳理。性能
從一個簡單的基於 Softmax Loss 的例子出發。下圖描述了基於 softmax loss 作分類問題的流程。輸入一個訓練樣本,倒數第二層的 feature extraction layer 輸出 feature x,和最後一層的 classification layer 的類別權重矩陣 相乘,獲得各種別的分數,再通過 softmax function 獲得 normalize 後的類別機率,再獲得 cross-entropy loss。學習
類別 weight 可看做是一個類別全部樣本的表明。
是樣本 feature 和類別 weight 的點積,能夠認爲是樣本和類別的類似度或者分數。一般這個分數被稱爲 logit。測試
Softmax 可以放大微小的類別間的 logit 差別,這使得它對這些微小的變化很是敏感,這每每對優化過程很是有利。咱們用一個簡單的三分類問題以及幾個數值的小實驗來講明這個問題。假設正確的類別爲 1。以下表的狀況(d)所示,正確類別的機率才 1/2,並不高。優化
若是要進一步提升正確類別機率,須要正確類別分數遠高於其它類別分數,須要網絡對於不一樣樣本(類別)的輸出差別巨大。網絡要學習到這樣的輸出很困難。然而,加了 softmax 操做以後,正確類別機率輕鬆變爲 ,已經足夠好了。idea
可見,softmax 中的指數操做,能夠迅速放大原始的 logit 之間的差別,使得「正確類別機率接近於 1」的目標變得簡單不少。這種效應能夠稱爲「強者通吃」。spa
歸一化(normalization),是人臉識別領域中一個重要的方法。它的作法實際上很是簡單。歸一化的定義以下:
爲了搞清楚爲何須要作 weight normalization,這首先要從數據不均衡的問題提及,這一問題在常見的人臉識別數據集中很廣泛。下圖展現了在幾個經常使用的人臉識別數據集上類別與 sample 數量的統計分佈。
在 [SphereFace] 的附錄部分,給出了關於訓練數據不均衡如何影響 weight 的 norm 的一個經驗分析。左邊兩張圖是 MNIST 上的實驗結果,右邊兩張圖是 WebFace 上的實驗結果。可見,對於樣本數多的類別,它的 weight 的 norm 會更大。
再舉一個很是極端的例子。假設有一個三我的的分類問題,其中 A,B 兩我的各有 100 張照片,而另一我的 C 的照片只有 5 張,那麼訓練這個三分類問題,最終將其 weight 的每一列在二維空間上作一個可視化,就應該是下圖這個樣子。
對於數據量大的 A,B 兩我的,他們的 weight 的 norm 很大,幾乎瓜分了整個特徵空間,而 C 因爲照片數量少,他的 weight 的 norm 很小。而咱們固然知道,實際狀況下,A,B,C 三我的絕對應該是處於一個平等的地位的,換言之,在特徵空間裏面,他們也應該處於一個「三足鼎立」的模式,就像下圖所示。
如何讓 A,B,C 這三我的在訓練時受到平等對待呢?這個時候,Weight Normalization 就起做用了。Weight Normalization 的想法被 2016 年 NIPS 的 [WeightNorm] 提出。這篇paper經過大量的實驗代表了 Weight normalization 相比 batchnormalization 能減小計算量,而且能使得網絡更快的收斂。
不過這篇 paper 並無提到 weight normalization 能夠用來改善數據不均衡的問題。最先把 weight normalization 和數據不均衡問題聯繫起來的是 Guo Dongyao 等人的工做。Guo Dongyao 等人在 2017 年提出了一種作 weight normalization 的方法變種 [UPLoss],他們首先計算全部 weight 模長的均值,並幅值給 α
而後再用下面的 loss 約束每個 weight vector 靠近這個均值
做者本身創建了一我的臉數據集,包含兩部分,第一部分大概包含 20k 個 id,每一個 id 有 50-100 張圖片,第二部分包含 1k 個 id,每一個 id 僅有 20 張圖片。若是在這個數據集上使用不加 weight normalization 的 softmax,獲得的結果以下。
能夠發現,上圖最右側,從 2 到 2.1 這個區間,也就是最後的 1k 個 id 的 weight 的 norm 明顯小於前 20k 個。而且,最後 1k 個 id 在訓練集上的 recall 只有 30%。而在增長了做者提供的 weight normalization 方法後,最後 1k 個 id 的 weight norm 和前 20k 個 id 的 weight norm 之間的差距明顯變小了。做者提到在訓練集上的 recall 一會兒提高到了 70%。
做者在作了 weight normalization 後在 LFW 上 report 獲得的結果是 99.71%,已經遠遠超過了不作 weight normalizaton 的 baseline 98.88%。
因此說來講去, weight normalization 本質上就作了一件事,在網絡中引入一個先驗,即告訴網絡,不管類別自己的 sample 數量是多仍是少,全部類別的地位都應該是平等的,所以它們的 weight 的 norm 也是類似的。
爲了搞清楚爲何須要作 feature normalization,咱們首先看看 Softmax Loss 在優化的過程當中會發生什麼。
優化 softmax loss 須要增大 ,也須要增大
。
爲了變大 ,根據上面的定義,優化會傾向於:
數學上,上面的三種變化會同時發生,致使最終的 feature 分佈呈現出「扇形」形式。例如, [NormFace] 中給了這樣一個例子,MNIST 上,feature 的維度限定爲 2,10 個類別的 feature 分佈可視化以下:
儘管分類的精度能夠很高,可是這樣的 feature 分佈,對於困難樣本是敏感的,推廣性很差。上面的例子中, (困難樣本,norm 小)和
屬於同一類,但因爲 norm 相差太大,反而和 norm 差很少的
(另一類的困難樣本)距離更近,因而分錯了。這個例子也說明 feature norm 小的樣本更不穩定。
同時也說明了,使用歐氏距離做爲 feature 和 feature 之間的度量是不穩定的,由於它依賴於 feature 的 norm。而若是咱們用角度做爲 feature 和 feature 之間差別的度量,就能夠不受 norm 不穩定的影響。所以,咱們但願網絡更多的從第 3 點「縮小 feature 和 weight vector 的夾角」這個方向去學習。
爲了讓網絡從「縮小 feature 和 weight vector 的夾角」這個方向去學習,咱們天然就須要把另外兩條路給堵死。最理想的狀況也就是 weight normalization 和 feature normalization 都作。2017 年,[CrystalLoss](也就是 [L2-Softmax])提出了 feature normalization,並作了大量的分析和實驗證實這個簡單的 trick 對分類問題極其有效。
在 [CrystalLoss] 中,做者在 MNIST 上和一個簡單的 3 我的的分類問題進行了可視化實驗。在 MNIST 上,每一個類變得更「窄」,在人臉實驗上,每一個類的 feature 變得更加集中。這些實驗都證實了,使用 feature normalization 確實能讓不一樣的類學出的 embedding,在角度方向上更具備可區分性。
不過,若是隻是單純的對 feature 作 normalization,那麼極有可能陷入一個網絡難以收斂的窘境,這個現象在 [L2-Softmax] 和 [NormFace] 中都提到了,而且 [NormFace] 還從數值上給出了這個現象的解釋,這裏再也不闡述這些細節。不過解決方法也很簡單,只須要在對 feature 作歸一化後,再乘上一個大於 1 的伸縮係數,絕大多數狀況下都能得到不錯的收斂性。
在 [L2-Softmax] 中,對如何如何選取這個伸縮係數進行了分析和實驗。一個好消息是,[L2-Softmax] 的實驗結果確實代表,網絡對這個係數的選取仍是很是魯棒的。下圖展現了,伸縮係數 α 的選取,從 10 左右,到 50 左右,網絡都有不錯的表現。
不過遺憾的是 [L2-Softmax] 並無把兩種 normalization 都加上,而只是單純加了 feature normalization。
在 [L2-Softmax] 的基礎上,[NormFace] 進一步把兩種 normalization 都作了,並作了更詳盡的分析,對 normalization 中的三個問題進行了全面系統的回答:
[NormFace] 自己並無提出新的 idea,只是全面系統的總結了前人關於 normalization 的經驗和技巧,並給出了使人信服的分析。
除了這些主流的兩種作 normalization 的方法,還有一些它們的變體。在 2017 年的 [DeepVisage] 中,提出了一種對 feature 作白化,而不是單純的 normalization 的方法。在 2018 年的 [CCL] 中對這個想法進行了更加細緻的分析和實驗。對 feature 作白化的定義以下:
與單純的 feature normalization 相比,對 feature 作白化的效果是但願使得全部的 feature 儘量均勻分佈在空間中,同時每一維發揮的做用盡可能類似,不要浪費空間和維度。
做者作了一個簡單的實驗來展現這種歸一化方式的效果,左邊表示的是原始的 Softmax 訓練後所得樣本的 feature 在二維空間可視化後的分佈,右邊是使用白化後的效果。很明顯能看出白化後的 feature 能更好地利用整個 feature 空間。
不過在實驗部分,文章仍是認可了,白化這種歸一化方式,在實際使用時,因爲均值很大,而方差又極小,在數值上基本上就和 feature normalization 很接近。
2018 年 CVPR 的另外一篇討論 feature normalization 的工做是 [RingLoss]。[RingLoss] 的 Motivation 是傳統的 hard 方式的歸一化可能帶來 non-convex 的優化問題,提出的 solution 很簡單,直接加 soft normalization constraint 到優化裏面就能夠了。
不過做者並無很嚴格地給出傳統 hard 方式歸一化是屬於 non-convex 以及新的 soft 方式的 normalization 是 convex 的證實,只是從一個數值實驗上表面了 Ring Loss 具備優良的收斂性。
Ring loss 的具體形式很簡單:
其中,R 是須要學習的 feature norm 的參數(相似於 [L2-Softmax] 的 α 和 [NormFace] 中的 l,λ 是控制 Ring loss 項的權重。
到如今爲止,咱們基本上已經明白了 feature normalization 或者 weight normalization 能在必定程度上控制網絡對簡單或者難樣本的關注程度。具體一點就是,若是不加約束,網絡老是但願讓簡單的樣本的 feature 模長和 weight 模長變大,讓難的樣本的 feature 和 weight 的模長變小,這個現象在 [SphereFace]、[NormFace] 以及 [RingLoss] 中均有分析。
如今,咱們知道應該把兩種 normalization 都加上,讓網絡去學習角度方向上的差別性。不過若是兩種 normalization 都作了,而不加別的處理,網絡會很是難 train。在 [NormFace] 中,對這種現象進行了數值上的分析,指出在 weight 和 feature 都歸一化到 1 以後,在類別數較多時,即便是正確分類的 sample,都將得到與分錯的樣本在數值上差很少大小的梯度,而這天然就會影響網絡去關注那些更須要學習的樣本。
[NormFace] 的給出的解決方法和 [l2Softmax] 幾乎同樣,就是引入一個 scale 參數(對應 [L2Softmax] 中的 α )。而 scale 參數又是如何具體的影響網絡優化的過程呢?針對這個問題,[HeatedUpSoftmax] 作了很是完整的分析。並提出在兩種 normalization 都作時,在訓練的不一樣階段,經過人爲的控制這個 scale 係數 α,能達到控制網絡關注簡單樣本仍是難樣本的目的。
[HeatedUpSoftmax] 中的 Softmax 形式以下。
文章給出的結論是,α 從 0 變大的過程當中
選擇不一樣的 α 會影響這些樣本在優化過程當中的運動速度和分佈狀況。
下面是一個 MNIST 上的很好的 toy example,顯示選擇不一樣 α 時的影響。
所以,文章提出的一種稱爲「HeatedUp」的訓練策略,就是但願在開始的階段,使用大的 α 讓網絡關注簡單樣本,從而迅速收斂,在訓練的後期使用小的 α 讓網絡開始重點關注難樣本。
據此,本文提出動態調整 α 的策略:剛開始優化時使用大的 α,讓 hard 樣本迅速變成 boundary 樣本。而後逐漸變小 α,讓 boundary 樣本也能得到足夠的梯度,進一步縮小分類面。
逐漸變小 α 的過程,也就是逐漸把分類面附近的樣本往類中心擠壓的過程。對應地,temperature 逐漸增大,也就是本文的「heated up」。
最後再總結一下,不管是早期的 weight normalization,feature normalization,仍是後期這些形式的一些變體以及一些 trick,它們歸根結底,都是爲了如下三點:
在真實任務中,例如 face verification,咱們須要計算未知類別的樣本的類似度,此時僅僅保證「已知類別分類正確」是不夠的。爲了更好的泛化性能,咱們還須要諸如「類內樣本差別小」和「類間樣本差別大」這樣的良好性質,而這些並非 softmax loss 的直接優化目標。(儘管,softmax loss 優化的好能夠間接的達成這些目標。)
換而言之,除了好的 classification probability,一個好的 metric space 更加劇要。前者成立並不意味着後者成立。如上面 Figure 的例子,在該 metric space 內,Euclidean distance 的性質是不好的。
Metric learning 的方法會顯式地優化「類內樣本差別小」和「類間樣本差別大」的目標,也被普遍應用於 face recognition,例如,[DeepID2] 同時使用了 softmax loss 和 contrastive loss (pairwise loss), 著名的 [FaceNet] 僅僅使用 triplet loss 就能獲得表現良好的 feature。然而,簡單 Metric Learning 是不夠的。
給定 N 個樣本,softmax loss 遍歷全部樣本的複雜度僅爲 O(N),而 contrastive loss 和 triplet loss 的複雜度爲 和
,沒法簡單遍歷,須要有效的搜索好的訓練樣本,即「hard example mining」問題,訓練過程複雜,尤爲當類別數量很大時,如何找到好的樣本自己已經足夠困難。(固然,此時的超大 softmax loss 也是個問題)。
「增長類間 margin」是經典思想,可是用到 softmax based loss 裏面是一個頗有意義的創新。2016 年 ICML 的一篇 paper [L-Softmax] 首次在 softmax 上引入了 margin 的概念,具備很是重大的意義。對於增長 margin 的形象解釋,文章給出了一個很好的示意圖。
表示 feature x 和 class weight
的夾角。先簡化問題,假設 class weight 被 normalize 了,此時夾角就決定了樣本 x 被分到哪一類。左邊是原始的 softmax loss,分界面的 vector 處於兩類 weight 的中間,此時
。(訓練)樣本會緊貼着分界面。測試的時候,就容易混淆了。右邊是L-Softmax,爲了在兩類中間留下空白(margin),要求分界面是
。
此時爲了分類正確,樣本 feature 會被壓縮到一個更小的空間,兩個類別的分類面也會被拉開。容易看出,此時兩個 class 之間的 angular decision margin 是 ,其中
是 class weight
和
的夾角。不過惋惜的是,這篇 paper 發表的比較早,在同時期 [WeightNorm] 才被髮表出來,所以,在 [L-Softmax] 中並無引入 Weight Normalization。2017 年 CVPR 的 [SphereFace] 在 L-Softmax 的基礎上引入了 Weight Normalization。
[SphereFace] 做者經過一個很形象的特徵分佈圖,展現了引入 margin 的效果,可見,隨着 margin 的增長,類內被壓縮的更緊湊,類間的界限也變得更加清晰了。
[SphereFace] 提出的 loss 的具體形式是
,這個與 L2-Softmax 的差異僅僅就是把當前 sample 與所屬類別的夾角 變成了
。
但引入 margin 以後,有一個很大的問題,網絡的訓練變得很是很是困難。在 [SphereFace] 中提到須要組合退火策略等極其繁瑣的訓練技巧。這致使這種加 margin 的方式極其不實用。而事實上,這一切的困難,都是由於引入的 margin 是乘性 margin 形成的。咱們來分析一下,乘性 margin 到底帶來的麻煩是什麼:
爲了解決這些問題,2018 年 ICLR 的 [AM-Softmax] 首次將乘性的 margin 改爲了加性的 margin。雖然改動很小,但意義重大。換成加性 margin 以後,上述提到的兩個乘性 margin 的弊端天然就消失了。
同時期的另外一篇 paper [CosFace] 與之徹底同樣。2018 年實際上還有一個工做叫 [ArcFace](作人臉識別研究的同窗應該人盡皆知,業界良心),但遺憾的是在 18 年,[ArcFace] 並無被任何頂會收錄,不過他在 19 年仍是被 CVPR 2019 收錄了。[ArcFace] 與 [AM-Softmax] 一樣也是加性的 margin,差異只是 [ArcFace] 的 margin 加在 Cos 算子的裏面,而 [AM-Softmax] 的 margin 在加性算子的外面。這二者對網絡的優化性能幾乎一致。
在 [ArcFace] 中,做者對集中加 margin 的方式作了很形象的對比,以下圖所示。能夠看出,[ArcFace] 提出的 margin 更符合「角度」margin 的概念,而 [CosFace] 或是 [AM-Softmax] 更符合 Cosine margin 的概念。
最後,咱們總結一下加 margin 的幾種 Softmax 的幾種形式:
本文梳理了人臉識別領域近幾年 Softmax 相關的兩大關鍵主題,作歸一化以及增長 margin。經過歸一化的技巧,極大緩解了傳統 Softmax 在簡單與困難樣本間「懶惰學習」的問題以及長尾數據形成的類間不平衡問題。經過增長 margin,使得 Softmax Loss 能學習到更具備區分性的 metric 空間。但到這裏問題還遠遠沒有結束,現存的問題有:
這些問題依然尚未被很好解決。