吳恩達深度學習筆記(103)-人臉識別之Siamese網絡

Siamese 網絡(Siamese network)

上個筆記中你學到的函數d的作用就是輸入兩張人臉,然後告訴你它們的相似度。實現這個功能的一個方式就是用Siamese網絡,我們看一下。

吳恩達深度學習筆記(103)-人臉識別之Siamese網絡

你經常看到這樣的卷積網絡,輸入圖片x^(1),然後通過一些列卷積,池化和全連接層(還記得都有什麼特點麼?),最終得到這樣的特徵向量(編號1)。

有時這個會被送進softmax單元來做分類,但在這筆記裡我們不會這麼做。

我們關注的重點是這個向量(編號1),加如它有128個數,它是由網絡深層的全連接層計算出來的,我要給這128個數命個名字,把它叫做f(x^(1))。你可以把f(x^((1)))看作是輸入圖像x^(1)的編碼,取這個輸入圖像(編號2),在這裡是Kian的圖片,然後表示成128維的向量。

吳恩達深度學習筆記(103)-人臉識別之Siamese網絡

建立一個人臉識別系統的方法就是,如果你要比較兩個圖片的話,例如這裡的第一張(編號1)和第二張圖片(編號2),你要做的就是把第二張圖片餵給有同樣參數的同樣的神經網絡,然後得到一個不同的128維的向量(編號3),這個向量代表或者編碼第二個圖片,我要把第二張圖片的編碼叫做f(x^(2))。這裡我用x^(1)和x^(2)僅僅代表兩個輸入圖片,他們沒必要非是第一個和第二個訓練樣本,可以是任意兩個圖片。

最後如果你相信這些編碼很好地代表了這兩個圖片,你要做的就是定義d,將x^(1)和x^(2)的距離定義為這兩幅圖片的編碼之差的範數,d(x^(1),x^(2))=||f(x^(1))-f(x^(2))||_2^2。

吳恩達深度學習筆記(103)-人臉識別之Siamese網絡

對於兩個不同的輸入,運行相同的卷積神經網絡,然後比較它們,這一般叫做Siamese網絡架構。這裡提到的很多觀點,都來自於Yaniv Taigman,Ming Yang,Marc’ Aurelio Ranzato,Lior Wolf的這篇論文,他們開發的系統叫做DeepFace。

吳恩達深度學習筆記(103)-人臉識別之Siamese網絡

怎麼訓練這個Siamese神經網絡呢?

不要忘了這兩個網絡有相同的參數

,所以你實際要做的就是訓練一個網絡,它計算得到的編碼可以用於函數d,它可以告訴你兩張圖片是否是同一個人。更準確地說,神經網絡的參數定義了一個編碼函數f(x^(i)),如果給定輸入圖像x^(i),這個網絡會輸出x^(i)的128維的編碼。

你要做的就是學習參數,使得如果兩個圖片x^(i)和x^(j)是同一個人,那麼你得到的兩個編碼的距離就小。前面幾個幻燈片我都用的是x^(1)和x^(2),其實訓練集裡任意一對x^(i)和x^(j)都可以。相反,如果x^(i)和x^(j)是不同的人,那麼你會想讓它們之間的編碼距離大一點

如果你改變這個網絡所有層的參數,你會得到不同的編碼結果,你要做的就是用反向傳播來改變這些所有的參數,以確保滿足這些條件。

你已經瞭解了Siamese網絡架構,並且知道你想要網絡輸出什麼,即什麼是好的編碼。

但是如何定義實際的目標函數,能夠讓你的神經網絡學習並做到我們剛才討論的內容呢?

在下一個筆記裡,我們會看到如何用三元組損失函數達到這個目的。


分享到:


相關文章: