Siamese网络(孪生神经网络)详解
SiameseFC
- Siamese網(wǎng)絡(luò)(孿生神經(jīng)網(wǎng)絡(luò))
- 本文參考文章:
- Siamese背景
- Siamese網(wǎng)絡(luò)解決的問題
- 要解決什么問題?
- 用了什么方法解決?
- 應(yīng)用的場景:
- Siamese的創(chuàng)新
- Siamese的理論
- Siamese的損失函數(shù)——Contrastive Loss
- 損失函數(shù)的選擇
- 論文中Contrastive Loss
- 目前的Contrastive Loss:
- Siamese的思考
- Siamese的思想總結(jié)
- Siamese network是雙胞胎連體,整一個三胞胎連體行不行?
Siamese網(wǎng)絡(luò)(孿生神經(jīng)網(wǎng)絡(luò))
本文參考文章:
精讀深度學(xué)習(xí)論文(25) Siamese Network
詳解Siamese網(wǎng)絡(luò)
孿生神經(jīng)網(wǎng)絡(luò)(Siamese Network)詳解
孿生神經(jīng)網(wǎng)絡(luò)(Siamese neural network)
Siamese network 孿生神經(jīng)網(wǎng)絡(luò)–一個簡單神奇的結(jié)構(gòu)
Siamese背景
Siamese和Chinese有點像。Siam是古時候泰國的稱呼,中文譯作暹羅。Siamese也就是“暹羅”人或“泰國”人。Siamese在英語中是“孿生”、“連體”的意思,這是為什么呢?
十九世紀(jì)泰國出生了一對連體嬰兒,當(dāng)時的醫(yī)學(xué)技術(shù)無法使兩人分離出來,于是兩人頑強地生活了一生,1829年被英國商人發(fā)現(xiàn),進入馬戲團,在全世界各地表演,1839年他們訪問美國北卡羅萊那州后來成為“玲玲馬戲團” 的臺柱,最后成為美國公民。1843年4月13日跟英國一對姐妹結(jié)婚,恩生了10個小孩,昌生了12個,姐妹吵架時,兄弟就要輪流到每個老婆家住三天。1874年恩因肺病去世,另一位不久也去世,兩人均于63歲離開人間。兩人的肝至今仍保存在費城的馬特博物館內(nèi)。從此之后“暹羅雙胞胎”(Siamesetwins)就成了連體人的代名詞,也因為這對雙胞胎讓全世界都重視到這項特殊疾病。
簡單來說,Siamese network就是“連體的神經(jīng)網(wǎng)絡(luò)”
Siamese網(wǎng)絡(luò)解決的問題
要解決什么問題?
第一類,分類數(shù)量較少,每一類的數(shù)據(jù)量較多,比如ImageNet、VOC等。這種分類問題可以使用神經(jīng)網(wǎng)絡(luò)或者SVM解決,只要事先知道了所有的類。
第二類,分類數(shù)量較多(或者說無法確認(rèn)具體數(shù)量),每一類的數(shù)據(jù)量較少,比如人臉識別、人臉驗證任務(wù)。
用了什么方法解決?
解決以上兩個問題,本文提出了以下解決方法:
提出了一種思路:將輸入映射為一個特征向量,使用兩個向量之間的“距離”(L1 Norm)來表示輸入之間的差異(圖像語義上的差距)。
基于上述思路設(shè)計了Siamese Network。每次需要輸入兩個樣本作為一個樣本對計算損失函數(shù)。
1)用的softmax只需要輸入一個樣本。
2)FaceNet中的Triplet Loss需要輸入三個樣本。
提出了Contrastive Loss用于訓(xùn)練。
應(yīng)用的場景:
孿生神經(jīng)網(wǎng)絡(luò)用于處理兩個輸入"比較類似"的情況。偽孿生神經(jīng)網(wǎng)絡(luò)適用于處理兩個輸入"有一定差別"的情況。比如,我們要計算兩個句子或者詞匯的語義相似度,使用siamese network比較適合;如果驗證標(biāo)題與正文的描述是否一致(標(biāo)題和正文長度差別很大),或者文字是否描述了一幅圖片(一個是圖片,一個是文字),就應(yīng)該使用pseudo-siamese network。也就是說,要根據(jù)具體的應(yīng)用,判斷應(yīng)該使用哪一種結(jié)構(gòu),哪一種Loss。
Siamese的創(chuàng)新
這個網(wǎng)絡(luò)主要的優(yōu)點是淡化了標(biāo)簽,使得網(wǎng)絡(luò)具有很好的擴展性,可以對那些沒有訓(xùn)練過的類別進行分類,這點是優(yōu)于很多算法的。而且這個算法對一些小數(shù)據(jù)量的數(shù)據(jù)集也適用,變相的增加了整個數(shù)據(jù)集的大小,使得數(shù)據(jù)量相對較小的數(shù)據(jù)集也能用深度網(wǎng)絡(luò)訓(xùn)練出不錯的效果。
Siamese的理論
不同輸入X_1, X_2通過統(tǒng)一G_W得到兩個向量G_W(X_1), G_W(X_2),計算兩個向量之間的L1距離獲得E_W。
其中,兩個network是兩個共享權(quán)值的網(wǎng)絡(luò),實際上就是兩個完全相同的網(wǎng)絡(luò)。孿生神經(jīng)網(wǎng)絡(luò)有兩個輸入(X1 and X2),將兩個輸入feed進入兩個神經(jīng)網(wǎng)絡(luò)(Network1 and Network2),這兩個神經(jīng)網(wǎng)絡(luò)分別將輸入映射到新的空間,形成輸入在新的空間中的表示。通過Loss的計算,評價兩個輸入的相似度。
如果左右兩邊不共享權(quán)值,而是兩個不同的神經(jīng)網(wǎng)絡(luò),叫做pseudo-siamese network,偽孿生神經(jīng)網(wǎng)絡(luò)。對于pseudo-siamese network,兩邊可以是不同的神經(jīng)網(wǎng)絡(luò)(如一個是lstm,一個是cnn),也可以是相同類型的神經(jīng)網(wǎng)絡(luò)。
Siamese的損失函數(shù)——Contrastive Loss
損失函數(shù)的選擇
Softmax當(dāng)然是一種好的選擇,但不一定是最優(yōu)選擇,即使是在分類問題中。傳統(tǒng)的siamese network使用Contrastive Loss。損失函數(shù)還有更多的選擇,siamese network的初衷是計算兩個輸入的相似度,。左右兩個神經(jīng)網(wǎng)絡(luò)分別將輸入轉(zhuǎn)換成一個"向量",在新的空間中,通過判斷cosine距離就能得到相似度了。Cosine是一個選擇,exp function也是一種選擇,歐式距離什么的都可以,訓(xùn)練的目標(biāo)是讓兩個相似的輸入距離盡可能的小,兩個不同類別的輸入距離盡可能的大。
論文中Contrastive Loss
論文中的損失函數(shù)定義如下:
Y代表X_1, X_2是否屬于同一類別。輸入同一類別為0,不屬于同一類別為1。
P代表輸入數(shù)據(jù)數(shù)量。
i表示當(dāng)前輸入數(shù)據(jù)下標(biāo)。
L_G代表兩個輸入數(shù)據(jù)屬于同一類別時的損失函數(shù)(G,genuine)。
L_I代表兩個輸入數(shù)據(jù)不屬于同一類別的損失函數(shù)(I,imposter)。
根據(jù)我們對兩個向量間舉例的定義,可以得到以下條件:
即不同類別向量間的距離比相同類別向量間距離大。
兩個向量之間距離越小,屬于同一類別的可能性就越大。
目前的Contrastive Loss:
其中:
代表兩個樣本特征X1和X2 的歐氏距離(二范數(shù))P 表示樣本的特征維數(shù),Y 為兩個樣本是否匹配的標(biāo)簽,Y=1 代表兩個樣本相似或者匹配,Y=0 則代表不匹配,m 為設(shè)定的閾值,N 為樣本個數(shù)。
觀察上述的contrastive loss的表達式可以發(fā)現(xiàn),這種損失函數(shù)可以很好的表達成對樣本的匹配程度,也能夠很好用于訓(xùn)練提取特征的模型。
當(dāng) Y=1(即樣本相似時),損失函數(shù)只剩下
即當(dāng)樣本不相似時,其特征空間的歐式距離反而小的話,損失值會變大,這也正好符號我們的要求。
當(dāng) Y=0 (即樣本不相似時),損失函數(shù)為
即當(dāng)樣本不相似時,其特征空間的歐式距離反而小的話,損失值會變大,這也正好符號我們的要求。
注意:
這里設(shè)置了一個閾值margin,表示我們只考慮不相似特征歐式距離在0~margin之間的,當(dāng)距離超過margin的,則把其loss看做為0(即不相似的特征離的很遠(yuǎn),其loss應(yīng)該是很低的;而對于相似的特征反而離的很遠(yuǎn),我們就需要增加其loss,從而不斷更新成對樣本的匹配程度)
Siamese的思考
Siamese的思想總結(jié)
其實講了這么多,主要思想就是三點:
最后使用獲得的損失函數(shù),使用梯度反傳去更新兩個網(wǎng)絡(luò)共享的權(quán)值W。
Siamese network是雙胞胎連體,整一個三胞胎連體行不行?
不好意思,已經(jīng)有人整過了,叫Triplet network,論文是《Deep metric learning using Triplet network》,輸入是三個,一個正例+兩個負(fù)例,或者一個負(fù)例+兩個正例,訓(xùn)練的目標(biāo)是讓相同類別間的距離盡可能的小,讓不同類別間的距離盡可能的大。Triplet在cifar, mnist的數(shù)據(jù)集上,效果都是很不錯的,超過了siamese network。四胞胎,五胞胎會不會更屌?。。。。。目前還沒見過。。。
總結(jié)
以上是生活随笔為你收集整理的Siamese网络(孪生神经网络)详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BP神经网络反向传播手动推导
- 下一篇: 梦到水牛生小牛是什么意思