多種類型的神經網絡(孿生網絡)


目錄:

一、CPPN

二、孿生網絡Siamese

三、改進的孿生網絡

四、Triplet Network

一、CPPN(Compositional Pattern Producing Network)復合模式生成網絡

CPPN是一種基於遺傳算法演化神經網絡結構的生成式模型。

1、前言:

一個圓的圖像可以用函數表示:(x-x0)2+(y-y0)2 = 1

故圖像可以表示為函數。而另一方面,神經網絡可以逼近任何函數。因此,圖像可以表示為神經網絡。

2、CPPN結構

以上圖中,網絡輸入是像素的坐標值(x,y),r為(x,y)到原點的距離,即根號(x2+y2)。z是一個隨機的向量。輸入為是三個標量和一個向量。

網絡中的參數隨機取值。

網絡輸出是一個像素的RGB值

把【0,0】-【100,100】坐標逐個輸入,將輸出的RGB值組成完整圖像,將會是什么樣子?

 

二、孿生網絡(Siamese)【2-branches networks】

孿生網絡(Siamese network)是一種網絡結構,通過一個NN將樣本的維度降低到某個較低的維度。

在低維空間,任意兩個樣本:

  • 如果它們是相同類別,空間距離盡量接近0
  • 如果它們是不同類別,空間距離大於某個間隔

1、孿生網絡結構:

Siamese network就是“連體的神經網絡”,神經網絡的“連體”是通過共享權值來實現的,如下圖所示。

目的:比較兩幅圖片是否相似,或者說相似度是多少【匹配度】

輸入:兩幅圖片

輸出:一個相似度數值

Network1和Network2兩個神經網絡的權重一樣,甚至可以兩者是同一個網絡,不用實現另外一個,因為權值都一樣。對於siamese network,兩邊可以是lstm或者cnn,都可以。

2、偽孿生神經網絡:

如果左右兩邊不共享權值,而是兩個不同的神經網絡,則模型叫pseudo-siamese network,偽孿生神經網絡,如下圖所示。對於pseudo-siamese network,兩邊可以是不同的神經網絡(如一個是lstm,一個是cnn),也可以是相同類型的神經網絡。

 

3、孿生神經網絡的用途:衡量兩個輸入的相似程度。

孿生神經網絡有兩個輸入(Input1 and Input2),將兩個輸入feed進入兩個神經網絡(Network1 and Network2),這兩個神經網絡分別將輸入映射到新的空間,形成輸入在新的空間中的表示。通過Loss的計算,評價兩個輸入的相似度。

用途:

  • 詞匯的語義相似度分析,QA中question和answer的匹配,簽名/人臉驗證。

  • 手寫體識別也可以用siamese network,網上已有github代碼。

  • 還有kaggle上Quora的question pair的比賽,即判斷兩個提問是不是同一問題,冠軍隊伍用的就是n多特征+Siamese network,知乎團隊也可以拿這個模型去把玩一下。

  • 在圖像上,基於Siamese網絡的視覺跟蹤算法也已經成為熱點《Fully-convolutional siamese networks for object tracking》。

4、孿生神經網絡和偽孿生神經網絡分別適用於什么場景呢?

先上結論:孿生神經網絡用於處理兩個輸入"比較類似"的情況。偽孿生神經網絡適用於處理兩個輸入"有一定差別"的情況。比如,我們要計算兩個句子或者詞匯的語義相似度,使用siamese network比較適合;如果驗證標題與正文的描述是否一致(標題和正文長度差別很大),或者文字是否描述了一幅圖片(一個是圖片,一個是文字),就應該使用pseudo-siamese network。也就是說,要根據具體的應用,判斷應該使用哪一種結構,哪一種Loss。

5、Siamese network 的損失函數:

Softmax當然是一種好的選擇,但不一定是最優選擇,即使是在分類問題中。【分類問題用交叉熵】

傳統的siamese network使用Contrastive Loss【對比損失函數】

對比損失函數如下:


  • 其中Dw被定義為姐妹孿生網絡的輸出之間的歐氏距離。Dw歐式距離公式如下:

  • 其中Gw是其中一個姐妹網絡的輸出。X1和X2是輸入數據對。
  • Y值為1或0。如果模型預測輸入是相似的,那么Y的值為0,否則Y為1。
  • max()是表示0和m-Dw之間較大值的函數。
  • m是大於0的邊際價值(margin value)。有一個邊際價值表示超出該邊際價值的不同對不會造成損失。這是有道理的,因為你只希望基於實際不相似對來優化網絡,但網絡認為是相當相似的。

 

【損失函數還有更多的選擇,siamese network的初衷是計算兩個輸入的相似度,。左右兩個神經網絡分別將輸入轉換成一個"向量",在新的空間中,通過判斷cosine距離就能得到相似度了。Cosine是一個選擇,exp function也是一種選擇,歐式距離什么的都可以,訓練的目標是讓兩個相似的輸入距離盡可能的小,兩個不同類別的輸入距離盡可能的大。其他的距離度量沒有太多經驗,這里簡單說一下cosine和exp在NLP中的區別。

根據實驗分析,cosine更適用於詞匯級別的語義相似度度量,而exp更適用於句子級別、段落級別的文本相似性度量。其中的原因可能是cosine僅僅計算兩個向量的夾角,exp還能夠保存兩個向量的長度信息,而句子蘊含更多的信息(當然,沒有做實驗驗證這個事情)。】

 

三、改進的Siamese網絡(2-channel networks):

 

Siamese 網絡(2-branches networks)的大體思路:
1. 讓patch1、patch2分別經過網絡,進行提取特征向量(Siamese 對於兩張圖片patch1、patch2的特征提取過程是相互獨立的)
2. 然后在最后一層對兩個兩個特征向量做一個相似度損失函數,進行網絡訓練。
paper所提出的算法(2-channel networks) 的大體思路:
1. 把patch1、patch2合在一起,把這兩張圖片,看成是一張雙通道的圖像。也就是把兩個(1,64,64)單通道的數據,放在一起,成為了(2,64,64)的雙通道矩陣,
2. 然后把這個矩陣數據作為網絡的輸入,這就是所謂的:2-channel。
 
這樣,跳過了分支的顯式的特征提取過程,而是直接學習相似度評價函數。最后一層直接是全連接層,輸出神經元個數直接為1,直接表示兩張圖片的相似度。當然CNN,如果輸入的是雙通道圖片,也就是相當於網絡的輸入的是2個feature map,經過第一層的卷積后網,兩張圖片的像素就進行了相關的加權組合並映射,這也就是說,用2-channel的方法,經過了第一次的卷積后,兩張輸入圖片就不分你我了。而Siamese網絡是到了最后全連接的時候,兩張圖片的相關神經元才聯系在一起。
 

四、Triplet Network

Siamese network是雙胞胎連體,Triplet network是三胞胎連體

 論文是《Deep metric learning using Triplet network》,輸入是三個,一個正例+兩個負例,或者一個負例+兩個正例,訓練的目標是讓相同類別間的距離盡可能的小,讓不同類別間的距離盡可能的大。Triplet在cifar, mnist的數據集上,效果都是很不錯的,超過了siamese network。

輸入:x-與x是負樣本,x+與x是相似正樣本。

 

 

吳恩達老師視頻中的三重損失函數:

代價函數是訓練集的所有個體的三重損失的和:

三重損失函數:

解釋:

這里的最大化處理意味着只要 d(A, P)—d(A, N)+ α小於等於 0,那么 loss L(A, P, N) 就會是 0,但是一旦它大於 0,那么損失值就是正的,這個函數就會將它最小化成 0 或者小於 0。

這里的問題是,模型可能學習給不同的圖片做出相同的編碼,這意味着距離會成為 0,不幸的是,這仍然滿足三重損失函數。因為這個原因,我們加入了邊際α(一個超參數)來避免這種情況的發生。讓 d(A,P) 與 d(N,P) 之間總存在一個差距。

 

為了比較圖片 x(1) 和 x(2),我們計算了編碼結果 f(x1) 和 f(x2) 之間的距離。如果它比某個閾值(一個超參數)小,則意味着兩張圖片是同一個人,否則,兩張圖片中不是同一個人。
上式是 x1 和 x2 的編碼之間的距離。

這適用於任何兩張圖片。【存在正負樣本】
     

      那么,為了得到對輸入圖片的良好編碼,我們如何學習相應的參數呢?梯度下降

應用:

  • Image ranking
  • face verification
  • metric learning

 

 

參考:

https://blog.csdn.net/qq_15192373/article/details/78404761

https://blog.csdn.net/Suan2014/article/details/80599595

pytorch人臉識別:http://www.techweb.com.cn/news/2017-07-21/2561327.shtml


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM