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