參考
Raúl Gómez
,本系列將所有以距離度量作為學習目標的損失函式歸為Ranking loss
孿生神經網路(Siamese Network)與Contrastive Loss
Siamese Network,簡單來說就是將兩個相同或相似的子網路結合在一起,每個子網路接收一個輸入,輸出相應的特徵向量。子網路完全相同時,可以只用一個網路來實現,輸入一個batch然後手動構造pair,稱之為Siamese Network;子網路不同的話,就要單獨實現每一個網路,稱之為pseudo-Siamese Network。
Siamese的作用是比較輸入的相似性。例如,在LeCun的論文
Signature Verification using a ‘Siamese’ Time Delay Neural Network
中,將兩個簽名分別輸入網路,得到兩個特徵向量,然後計算特徵向量間的餘弦距離,從而衡量簽名間的相似程度。
那麼如何訓練網路,使得同類樣本的特徵向量距離小,異類樣本的特徵向量距離大呢?
答案是構造genuine pair和forgery pair。對於同類樣本組成的genuine pair,特徵向量的距離target是cosine=1。0;對於異類樣本組成的forgery pair,距離target是cosine=-1。0。以上都是Signature Verification論文中的做法,實際上,距離度量也可以使用歐式距離等方式。
Contrastive Loss
除了對target進行擬合,孿生網路更一般地是採用Contrastive Loss處理成對的資料。
比較經典的Contrastive Loss形式來自於LeCun的文章:
Dimensionality Reduction by Learning an Invariant Mapping
式中,
表示輸入pair得到的特徵向量間歐式距離;輸入pair屬於同一類時
,不同類時
。
公式的意義就是:
對於positive pair,輸出特徵向量間距離要儘量小;對於negative pair,輸出特徵向量間距離要儘量大,但若
,則不處理這種easy negative pair。
損失函式影象如下:
在論文中,給瞭如下形象化的彈簧理解:
圖中,相對於中心藍點,實心點代表同類點,空心點代表異類點。對於實心點,彈簧想要收縮,從而將同類點距離拉近;對於空心點,margin之外的不受影響,margin之內的,彈簧想要伸長,從而將圈內的點排斥到邊界上去。
參考
【損失函式合集】Contrastive Loss 和 Triplet Loss - BBuf的文章
Siamese network 孿生神經網路——一個簡單神奇的結構 - mountain blue的文章