Siamese Network理解
提起siamese network一般都會(huì)引用這兩篇文章:?
《Learning a similarity metric discriminatively, with application to face verification》和《 Hamming Distance Metric Learning》。
本文主要通過論文《Learning a Similarity Metric Discriminatively, with Application to Face Verification》來理解siamese網(wǎng)絡(luò)。
介紹
Siamese網(wǎng)絡(luò)是一種相似性度量方法,當(dāng)類別數(shù)多,但每個(gè)類別的樣本數(shù)量少的情況下可用于類別的識(shí)別、分類等。傳統(tǒng)的用于區(qū)分的分類方法是需要確切的知道每個(gè)樣本屬于哪個(gè)類,需要針對(duì)每個(gè)樣本有確切的標(biāo)簽。而且相對(duì)來說標(biāo)簽的數(shù)量是不會(huì)太多的。當(dāng)類別數(shù)量過多,每個(gè)類別的樣本數(shù)量又相對(duì)較少的情況下,這些方法就不那么適用了。其實(shí)也很好理解,對(duì)于整個(gè)數(shù)據(jù)集來說,我們的數(shù)據(jù)量是有的,但是對(duì)于每個(gè)類別來說,可以只有幾個(gè)樣本,那么用分類算法去做的話,由于每個(gè)類別的樣本太少,我們根本訓(xùn)練不出什么好的結(jié)果,所以只能去找個(gè)新的方法來對(duì)這種數(shù)據(jù)集進(jìn)行訓(xùn)練,從而提出了siamese網(wǎng)絡(luò)。siamese網(wǎng)絡(luò)從數(shù)據(jù)中去學(xué)習(xí)一個(gè)相似性度量,用這個(gè)學(xué)習(xí)出來的度量去比較和匹配新的未知類別的樣本。這個(gè)方法能被應(yīng)用于那些類別數(shù)多或者整個(gè)訓(xùn)練樣本無法用于之前方法訓(xùn)練的分類問題。
主要思想
主要思想是通過一個(gè)函數(shù)將輸入映射到目標(biāo)空間,在目標(biāo)空間使用簡(jiǎn)單的距離(歐式距離等)進(jìn)行對(duì)比相似度。在訓(xùn)練階段去最小化來自相同類別的一對(duì)樣本的損失函數(shù)值,最大化來自不同類別的一堆樣本的損失函數(shù)值。給定一組映射函數(shù),其中參數(shù)為W,我們的目的就是去找一組參數(shù)W。使得當(dāng)和屬于同一個(gè)類別的時(shí)候,相似性度量是一個(gè)較小的值,當(dāng)和屬于不同的類別的時(shí)候,相似性度量較大。這個(gè)系統(tǒng)是用訓(xùn)練集中的成對(duì)樣本進(jìn)行訓(xùn)練。當(dāng)和來自相同類別的時(shí)候,最小化損失函數(shù),當(dāng)和來自不同類別的時(shí)候,最大化。這里的除了需要可微外不需要任何的前提假設(shè),因?yàn)獒槍?duì)成對(duì)樣本輸入,這里兩個(gè)相同的函數(shù)G,擁有一份相同的參數(shù)W,即這個(gè)結(jié)構(gòu)是對(duì)稱的,我們將它叫做siamese architecture。?
在這篇論文中,作者用這個(gè)網(wǎng)絡(luò)去做面部識(shí)別,比較兩幅圖片是不是同一個(gè)人,而且這個(gè)網(wǎng)絡(luò)的一個(gè)優(yōu)勢(shì)是可以去區(qū)分那些新的沒有經(jīng)過訓(xùn)練的類別的樣本。
Siamese也算是降維方法的一種。常見的降維方法有PCA、LDA、Kernel-PCA、MDS、LLE、LB、ISOmap、FA等不做具體介紹。
網(wǎng)絡(luò)結(jié)構(gòu)
?
上圖是論文中的網(wǎng)絡(luò)結(jié)構(gòu)圖,左右兩邊兩個(gè)網(wǎng)絡(luò)是完全相同的網(wǎng)絡(luò)結(jié)構(gòu),它們共享相同的權(quán)值W,輸入數(shù)據(jù)為一對(duì)圖片(X1,X2,Y),其中Y=0表示X1和X2屬于同一個(gè)人的臉,Y=1則表示不為同一個(gè)人。即相同對(duì)為(X1,X2,0),欺騙對(duì)為(X1,X2’,1)針對(duì)兩個(gè)不同的輸入X1和X2,分別輸出低維空間結(jié)果為和,它們是由和經(jīng)過網(wǎng)絡(luò)映射得到的。然后將得到的這兩個(gè)輸出結(jié)果使用能量函數(shù)進(jìn)行比較。?
損失函數(shù)定義
我們假設(shè)損失函數(shù)只和輸入和參數(shù)有關(guān),那么我們損失函數(shù)的形式為:?
?
其中是第i個(gè)樣本,是由一對(duì)圖片和一個(gè)標(biāo)簽組成的,其中LG是只計(jì)算相同類別對(duì)圖片的損失函數(shù),LI是只計(jì)算不相同類別對(duì)圖片的損失函數(shù)。P是訓(xùn)練的樣本數(shù)。通過這樣分開設(shè)計(jì),可以達(dá)到當(dāng)我們要最小化損失函數(shù)的時(shí)候,可以減少相同類別對(duì)的能量,增加不相同對(duì)的能量。很簡(jiǎn)單直觀的方法是實(shí)現(xiàn)這個(gè)的話,我們只要將LG設(shè)計(jì)成單調(diào)增加,讓LI單調(diào)遞減就可以了,但是我們要保證一個(gè)前提就是,不相同的圖片對(duì)距離肯定要比相同圖片對(duì)的距離小,那么就是要滿足:?
?
所以論文中用了一個(gè)?
?
作為總的損失函數(shù),可以滿足這個(gè)condition1。論文中進(jìn)行了各種假設(shè)的證明已經(jīng)單調(diào)性的證明,這里不再重復(fù)。?
最后給出一個(gè)精確的對(duì)單個(gè)樣本的損失函數(shù):?
?
其中?
?
,Q是一個(gè)常量。?
上圖說明了收斂性。
總結(jié)思想
其實(shí)講了這么多,主要思想就是三點(diǎn):?
1、輸入不再是單個(gè)樣本,而是一對(duì)樣本,不再給單個(gè)的樣本確切的標(biāo)簽,而且給定一對(duì)樣本是否來自同一個(gè)類的標(biāo)簽,是就是0,不是就是1?
2、設(shè)計(jì)了兩個(gè)一模一樣的網(wǎng)絡(luò),網(wǎng)絡(luò)共享權(quán)值W,對(duì)輸出進(jìn)行了距離度量,可以說l1、l2等。?
3、針對(duì)輸入的樣本對(duì)是否來自同一個(gè)類別設(shè)計(jì)了損失函數(shù),損失函數(shù)形式有點(diǎn)類似交叉熵?fù)p失:?
?
最后使用獲得的損失函數(shù),使用梯度反傳去更新兩個(gè)網(wǎng)絡(luò)共享的權(quán)值W。
優(yōu)點(diǎn)
這個(gè)網(wǎng)絡(luò)主要的優(yōu)點(diǎn)是淡化了標(biāo)簽,使得網(wǎng)絡(luò)具有很好的擴(kuò)展性,可以對(duì)那些沒有訓(xùn)練過的類別進(jìn)行分類,這點(diǎn)是優(yōu)于很多算法的。而且這個(gè)算法對(duì)一些小數(shù)據(jù)量的數(shù)據(jù)集也適用,變相的增加了整個(gè)數(shù)據(jù)集的大小,使得數(shù)據(jù)量相對(duì)較小的數(shù)據(jù)集也能用深度網(wǎng)絡(luò)訓(xùn)練出不錯(cuò)的效果。
實(shí)驗(yàn)設(shè)計(jì)
實(shí)驗(yàn)的時(shí)候要注意,輸入數(shù)據(jù)最好打亂,由于這樣去設(shè)計(jì)數(shù)據(jù)集后,相同類的樣本對(duì)肯定比不相同的樣本對(duì)數(shù)量少,在進(jìn)行訓(xùn)練的時(shí)候最后將兩者的數(shù)據(jù)量設(shè)置成相同數(shù)量。
總結(jié)
本文解釋的只是最早提出的siamese網(wǎng)絡(luò)結(jié)構(gòu),提出的是一種網(wǎng)絡(luò)結(jié)構(gòu)思想,具體的使用的網(wǎng)絡(luò)形式完全可以自己定義。包括損失函數(shù),相似度距離的定義等。比如將損失函數(shù)的用hige loss代替等。?
《Hamming Distance Metric Learning》這篇論文對(duì)siamese進(jìn)一步改進(jìn),提出了一個(gè)triple net,主要貢獻(xiàn)是將成對(duì)樣本改成了三個(gè)樣本,輸入由(X1,X2,Y)變成了(X1,X2,X1’),表示X1和X1’是相同類別的樣本,X1和x2是不同樣本的類別。?
《Learning to Compare Image Patches via Convolutional Neural Networks》這篇論文寫得也很好,將兩個(gè)網(wǎng)絡(luò)進(jìn)行合并,輸入的成對(duì)標(biāo)簽直接同時(shí)輸入同一個(gè)網(wǎng)絡(luò)。
代碼
使用tensorflow在mnist上實(shí)現(xiàn)的siamese net
參考文獻(xiàn)2的官方code
參考文獻(xiàn)
[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.
?
轉(zhuǎn)載于:https://www.cnblogs.com/bentuwuying/p/8186364.html
總結(jié)
以上是生活随笔為你收集整理的Siamese Network理解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 后台命名查询sql查某几个字段传到前台
- 下一篇: 哥德巴赫猜想—初等数论课后习题