Siamese Network 孪生网络基础学习笔记
Siamese Network 孿生網絡基礎學習筆記
本筆記主要是對相關文章的摘錄梳理,作為小白學習目標跟蹤的學習筆記。
孿生網絡在目標跟蹤中有很重要的應用,故特作此整理,希望為后續的學習打好基礎。
整理的比較倉促,后續會修改完善。
參考文章鏈接:
一. Siamese Network 名字的由來
Siamese在英語中是“孿生”、“連體”的意思。具體由來參見Siamese network 孿生神經網絡:一個簡單神奇的結構
二. 孿生網絡的主要特點
Siamese 網絡采用兩個不同的輸入,通過兩個具有相同架構、參數和權重的相似子網絡。
這兩個子網互為鏡像,就像連體雙胞胎一樣。 因此,對任何子網架構、參數或權重的任何更改也適用于其他子網。
兩個子網絡輸出一個編碼來計算兩個輸入之間的差異。
Siamese 網絡的目標是使用相似度分數對兩個輸入是相同還是不同進行分類。可以使用二元交叉熵、對比函數或三元組損失來計算相似度分數,這些都是用于一般距離度量學習方法的技術。
Siamese 網絡是一種one-shot分類器,它使用判別特征從未知分布中概括不熟悉的類別。
三. Siamese Network的模型架構
將輸入pair送入編碼器,映射到新的空間,得到編碼后的向量化表示。需要注意的是,在Siamese Network中,輸入pair是共用編碼器參數的,不論在訓練還是在測試過程中,編碼器只有一套,所有輸入共用。
向量特征組合和交叉。這一步的目的是為了讓模型能夠學習輸入pair的“匹配”特征,得到交叉后的特征向量;
將上一步特征向量送入特征映射層,并設計損失函數來評價兩個輸入的相似度,使得模型能夠完成指定任務。
孿生網絡的核心特征是兩個子網絡的權重是共享的。因為這種共享,兩個輸入相當于采用了相同的編碼機制映射到相同的向量空間。進而我們就能通過對embedding后得到的的向量進行處理,計算兩者的相似度。
四. 孿生神經網絡的用途是什么?
孿生網絡主要用來衡量兩個輸入的相似程度。該模型能夠處理但不局限于“匹配”問題。
五. 孿生神經網絡和偽孿生神經網絡
Pseudo Siamese Network 偽孿生網絡
如果兩個子體網絡不共享權重,即兩個子體是不同的神經網絡,則稱為Pseudo Siamese Network,偽孿生神經網絡。偽連體孿生經網絡的兩個子體,可以是結構相同但權重不同,也可以是完全不同的結構,如一個是CNN,另一個是RNN。CNN和RNN的這種連體網絡,可以用來比對不同數據類型的信息所表達的內容的相似性,如一個圖片和一段文字。
孿生神經網絡和偽孿生神經網絡分別適用的場景
孿生神經網絡用于處理兩個輸入"比較類似"的情況。偽孿生神經網絡適用于處理兩個輸入"有一定差別"的情況。比如,我們要計算兩個句子或者詞匯的語義相似度,使用siamese network比較適合;如果驗證標題與正文的描述是否一致(標題和正文長度差別很大),或者文字是否描述了一幅圖片(一個是圖片,一個是文字),就應該使用pseudo-siamese network。也就是說,要根據具體的應用,判斷應該使用哪一種結構,哪一種Loss。
六. Siamese network 的 loss function
Siamese 網絡使用相似度分數來預測兩個輸入是相似還是不同,使用度量學習方法,該方法找到其輸入之間的相對距離。
可以使用二元交叉熵、對比函數或三重損失計算相似度分數。
Siamese 網絡執行二元分類,將輸入分類為相似或不相似;因此,默認使用二元交叉熵損失函數。
常用損失
1. contrastive loss 對比損失函數
對比損失函數通過對比兩個輸入來區分相似和不同的圖像。當你在訓練時不了解所有類別并且訓練數據有限時,它會有所幫助。它創建了一種數據編碼,可以在將來有新類時使用。
對比損失需要一對正負訓練數據。 正對包含一個anchor樣本和一個正樣本,負對包含一個anchor樣本和一個負樣本。
對比損失函數的目標是使正對具有較小的距離,對負對具有較大的距離。
2. cosine距離與exp距離
3. Triplet loss
在 Triplet loss 中,我們使用數據的三元組而不是二元對。 三元組由anchor、正樣本和負樣本組成,主要用于面部識別。
在 Triplet loss 中,anchor和正樣本編碼之間的距離被最小化,而anchor和負樣本編碼之間的距離被最大化。
Triplet loss 將 d(a,p) 推到 0 ,并且 d(a,n) 大于 d(a,p)+margin
七. 為什么Siamese神經網絡被稱為one-shot分類?
one-shot分類模型僅使用每個新類別的單個訓練樣本即可正確進行預測。
Siamese 網絡使用有監督的訓練方法來學習通用輸入特征,然后根據訓練數據對未知的類分布進行預測。
受過訓練的 Siamese 網絡使用一次性學習來預測兩個輸入之間的相似性或不相似性,即使這些新分布中的樣本很少。
八. Siamese 網絡的優點
Siamese 網絡是一種one-shot分類模型,只需一個訓練樣本即可進行預測。
對類別不平衡更魯棒,因為它需要很少的信息。 它可以用于某些類的樣本很少的數據集。
Siamese 網絡的one-shot學習特性不依賴于特定領域的知識,而是利用了深度學習技術。
九. Siamese 網絡的缺點
僅輸出相似性分數而不輸出概率。(互斥事件的概率總和為 1。而距離不限于小于或等于 1。)
十. Siamese network是雙胞胎連體,整一個三胞胎連體行不行?
不好意思,已經有人整過了,叫Triplet network,論文是《Deep metric learning using Triplet network》,輸入是三個,一個正例+兩個負例,或者一個負例+兩個正例,訓練的目標是讓相同類別間的距離盡可能的小,讓不同類別間的距離盡可能的大。Triplet在cifar, mnist的數據集上,效果都是很不錯的,超過了siamese network。四胞胎,五胞胎會不會更屌?。。。。。目前還沒見過。。。。
十一. Siamese network的應用
簽名驗證
面部識別
比較指紋
根據臨床分級評估疾病嚴重程度
工作資料的文本相似度以恢復匹配
用于配對相似問題的文本相似度
總結
以上是生活随笔為你收集整理的Siamese Network 孪生网络基础学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PostMessage()
- 下一篇: 软件测试之编写测试用例