Siamese Network理解

提起siamese network通常都會引用這兩篇文章: git

《Learning a similarity metric discriminatively, with application to face verification》和《 Hamming Distance Metric Learning》。github

本文主要經過論文《Learning a Similarity Metric Discriminatively, with Application to Face Verification》來理解siamese網絡。算法

介紹

Siamese網絡是一種類似性度量方法,當類別數多,但每一個類別的樣本數量少的狀況下可用於類別的識別、分類等。傳統的用於區分的分類方法是須要確切的知道每一個樣本屬於哪一個類,須要針對每一個樣本有確切的標籤。並且相對來講標籤的數量是不會太多的。當類別數量過多,每一個類別的樣本數量又相對較少的狀況下,這些方法就不那麼適用了。其實也很好理解,對於整個數據集來講,咱們的數據量是有的,可是對於每一個類別來講,能夠只有幾個樣本,那麼用分類算法去作的話,因爲每一個類別的樣本太少,咱們根本訓練不出什麼好的結果,因此只能去找個新的方法來對這種數據集進行訓練,從而提出了siamese網絡。siamese網絡從數據中去學習一個類似性度量,用這個學習出來的度量去比較和匹配新的未知類別的樣本。這個方法能被應用於那些類別數多或者整個訓練樣本沒法用於以前方法訓練的分類問題。網絡

主要思想

主要思想是經過一個函數將輸入映射到目標空間,在目標空間使用簡單的距離(歐式距離等)進行對比類似度。在訓練階段去最小化來自相同類別的一對樣本的損失函數值,最大化來自不一樣類別的一堆樣本的損失函數值。給定一組映射函數這裏寫圖片描述,其中參數爲W,咱們的目的就是去找一組參數W。使得當這裏寫圖片描述這裏寫圖片描述屬於同一個類別的時候,類似性度量這裏寫圖片描述是一個較小的值,當這裏寫圖片描述這裏寫圖片描述屬於不一樣的類別的時候,類似性度量這裏寫圖片描述較大。這個系統是用訓練集中的成對樣本進行訓練。當這裏寫圖片描述這裏寫圖片描述來自相同類別的時候,最小化損失函數這裏寫圖片描述,當這裏寫圖片描述這裏寫圖片描述來自不一樣類別的時候,最大化這裏寫圖片描述。這裏的這裏寫圖片描述除了須要可微外不須要任何的前提假設,由於針對成對樣本輸入,這裏兩個相同的函數G,擁有一份相同的參數W,即這個結構是對稱的,咱們將它叫作siamese architecture。 
在這篇論文中,做者用這個網絡去作面部識別,比較兩幅圖片是否是同一我的,並且這個網絡的一個優點是能夠去區分那些新的沒有通過訓練的類別的樣本。app

Siamese也算是降維方法的一種。常見的降維方法有PCA、LDA、Kernel-PCA、MDS、LLE、LB、ISOmap、FA等不作具體介紹。函數

網絡結構

這裏寫圖片描述 
上圖是論文中的網絡結構圖,左右兩邊兩個網絡是徹底相同的網絡結構,它們共享相同的權值W,輸入數據爲一對圖片(X1,X2,Y),其中Y=0表示X1和X2屬於同一我的的臉,Y=1則表示不爲同一我的。即相同對爲(X1,X2,0),欺騙對爲(X1,X2’,1)針對兩個不一樣的輸入X1和X2,分別輸出低維空間結果爲這裏寫圖片描述這裏寫圖片描述,它們是由這裏寫圖片描述這裏寫圖片描述通過網絡映射獲得的。而後將獲得的這兩個輸出結果使用能量函數這裏寫圖片描述進行比較。 
這裏寫圖片描述學習

損失函數定義

咱們假設損失函數只和輸入和參數有關,那麼咱們損失函數的形式爲: 
這裏寫圖片描述 
其中這裏寫圖片描述是第i個樣本,是由一對圖片和一個標籤組成的,其中LG是隻計算相同類別對圖片的損失函數,LI是隻計算不相同類別對圖片的損失函數。P是訓練的樣本數。經過這樣分開設計,能夠達到當咱們要最小化損失函數的時候,能夠減小相同類別對的能量,增長不相同對的能量。很簡單直觀的方法是實現這個的話,咱們只要將LG設計成單調增長,讓LI單調遞減就能夠了,可是咱們要保證一個前提就是,不相同的圖片對距離確定要比相同圖片對的距離小,那麼就是要知足: 
這裏寫圖片描述 
因此論文中用了一個 
這裏寫圖片描述 
做爲總的損失函數,能夠知足這個condition1。論文中進行了各類假設的證實已經單調性的證實,這裏再也不重複。 
最後給出一個精確的對單個樣本的損失函數: 
這裏寫圖片描述 
其中 
這裏寫圖片描述 
,Q是一個常量。 
這裏寫圖片描述
上圖說明了收斂性。設計

總結思想

其實講了這麼多,主要思想就是三點: 
一、輸入再也不是單個樣本,而是一對樣本,再也不給單個的樣本確切的標籤,並且給定一對樣本是否來自同一個類的標籤,是就是0,不是就是1 
二、設計了兩個如出一轍的網絡,網絡共享權值W,對輸出進行了距離度量,能夠說l一、l2等。 
三、針對輸入的樣本對是否來自同一個類別設計了損失函數,損失函數形式有點相似交叉熵損失: 
這裏寫圖片描述 
最後使用得到的損失函數,使用梯度反傳去更新兩個網絡共享的權值W。code

優勢

這個網絡主要的優勢是淡化了標籤,使得網絡具備很好的擴展性,能夠對那些沒有訓練過的類別進行分類,這點是優於不少算法的。並且這個算法對一些小數據量的數據集也適用,變相的增長了整個數據集的大小,使得數據量相對較小的數據集也能用深度網絡訓練出不錯的效果。orm

實驗設計

實驗的時候要注意,輸入數據最好打亂,因爲這樣去設計數據集後,相同類的樣本對確定比不相同的樣本對數量少,在進行訓練的時候最後將二者的數據量設置成相同數量。

總結

本文解釋的只是最先提出的siamese網絡結構,提出的是一種網絡結構思想,具體的使用的網絡形式徹底能夠本身定義。包括損失函數,類似度距離的定義等。好比將損失函數的這裏寫圖片描述用hige loss代替等。 
《Hamming Distance Metric Learning》這篇論文對siamese進一步改進,提出了一個triple net,主要貢獻是將成對樣本改爲了三個樣本,輸入由(X1,X2,Y)變成了(X1,X2,X1’),表示X1和X1’是相同類別的樣本,X1和x2是不一樣樣本的類別。 
《Learning to Compare Image Patches via Convolutional Neural Networks》這篇論文寫得也很好,將兩個網絡進行合併,輸入的成對標籤直接同時輸入同一個網絡。

代碼

使用tensorflow在mnist上實現的siamese net

參考文獻2的官方code

參考文獻

[1] S. Chopra, R. Hadsell, and Y. LeCun. Learning a similarity metric discriminatively, with application to face verification. In Computer Vision and Pattern Recognition, 2005. CVPR 2005. IEEE Computer Society Conference on, volume 1, pages 539–546. IEEE, 2005. 
[2] Mohammad Norouzi, David J. Fleet, Ruslan Salakhutdinov, Hamming Distance Metric Learning, Neural Information Processing Systems (NIPS), 2012.

相關文章
相關標籤/搜索