簡介: git
Siamese網絡是一種類似性度量方法,當類別數多,但每一個類別的樣本數量少的狀況下可用於類別的識別、分類等。傳統的用於區分的分類方法是須要確切的知道每一個樣本屬於哪一個類,須要針對每一個樣本有確切的標籤。並且相對來講標籤的數量是不會太多的。當類別數量過多,每一個類別的樣本數量又相對較少的狀況下,這些方法就不那麼適用了。其實也很好理解,對於整個數據集來講,咱們的數據量是有的,可是對於每一個類別來講,能夠只有幾個樣本,那麼用分類算法去作的話,因爲每一個類別的樣本太少,咱們根本訓練不出什麼好的結果,因此只能去找個新的方法來對這種數據集進行訓練,從而提出了siamese網絡。siamese網絡從數據中去學習一個類似性度量,用這個學習出來的度量去比較和匹配新的未知類別的樣本。這個方法能被應用於那些類別數多或者整個訓練樣本沒法用於以前方法訓練的分類問題。github
主要思想是經過一個函數將輸入映射到目標空間,在目標空間使用簡單的距離(歐式距離等)進行對比類似度。在訓練階段去最小化來自相同類別的一對樣本的損失函數值,最大化來自不一樣類別的一堆樣本的損失函數值。算法
Siamese也算是降維方法的一種。常見的降維方法還有PCA、LDA、Kernel-PCA、MDS、LLE、LB、ISOmap、FA等。網絡
總結一下:app
一、輸入再也不是單個樣本,而是一對樣本,再也不給單個的樣本確切的標籤,並且給定一對樣本是否來自同一個類的標籤,是就是0,不是就是1函數
二、設計了兩個如出一轍的網絡,網絡共享權值W,對輸出進行了距離度量,能夠說l1、l2等。學習
三、針對輸入的樣本對是否來自同一個類別設計了損失函數,損失函數形式有點相似交叉熵損失。最後使用得到的損失函數,使用梯度反傳去更新兩個網絡共享的權值W。spa
優勢:設計
是淡化了標籤,使得網絡具備很好的擴展性,能夠對那些沒有訓練過的類別進行分類,這點是優於不少算法的。並且這個算法對一些小數據量的數據集也適用,變相的增長了整個數據集的大小,使得數據量相對較小的數據集也能用深度網絡訓練出不錯的效果。code
實驗設計:
實驗的時候要注意,輸入數據最好打亂,因爲這樣去設計數據集後,相同類的樣本對確定比不相同的樣本對數量少,在進行訓練的時候最後將二者的數據量設置成相同數量。
上述的簡介是最先提出的siamese網絡結構,提出的是一種網絡結構思想,具體的使用的網絡形式徹底能夠本身定義。包括損失函數,類似度距離的定義等。
《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》這篇論文寫得也很好,將兩個網絡進行合併,輸入的成對標籤直接同時輸入同一個網絡。
Code:
《Learning a similarity metric discriminatively, with application to face verification》和《 Hamming Distance Metric Learning》。