4.3 Siamese 网络-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
| 4.2 One-Shot 學習 | 回到目錄 | 4.4 Triplet 損失 |
Siamese 網絡 (Siamese Network)
上個視頻中你學到的函數 ddd 的作用就是輸入兩張人臉,然后告訴你它們的相似度。實現這個功能的一個方式就是用Siamese網絡,我們看一下。
你經常看到這樣的卷積網絡,輸入圖片 x(1)x^{(1)}x(1) ,然后通過一些列卷積,池化和全連接層,最終得到這樣的特征向量(編號1)。有時這個會被送進softmax單元來做分類,但在這個視頻里我們不會這么做。我們關注的重點是這個向量(編號1),假如它有128個數,它是由網絡深層的全連接層計算出來的,我要給這128個數命個名字,把它叫做 f(x(1))f(x^{(1)})f(x(1)) 。你可以把 f(x(1))f(x^{(1)})f(x(1)) 看作是輸入圖像 x(1)x^{(1)}x(1) 的編碼,取這個輸入圖像(編號2),在這里是Kian的圖片,然后表示成128維的向量。
建立一個人臉識別系統的方法就是,如果你要比較兩個圖片的話,例如這里的第一張(編號1)和第二張圖片(編號2),你要做的就是把第二張圖片喂給有同樣參數的同樣的神經網絡,然后得到一個不同的128維的向量(編號3),這個向量代表或者編碼第二個圖片,我要把第二張圖片的編碼叫做 f(x(2))f(x^{(2)})f(x(2)) 。這里我用 x(1)x^{(1)}x(1) 和 x(2)x^{(2)}x(2) 僅僅代表兩個輸入圖片,他們沒必要非是第一個和第二個訓練樣本,可以是任意兩個圖片。
最后如果你相信這些編碼很好地代表了這兩個圖片,你要做的就是定義 ddd ,將 x(1)x^{(1)}x(1) 和 x(2)x^{(2)}x(2) 的距離定義為這兩幅圖片的編碼之差的范數, d(x(1),x(2))=∣∣f(x(1))?f(x(2))∣∣22d(x^{(1)},x^{(2)})=||f(x^{(1)})-f(x^{(2)})||^2_2d(x(1),x(2))=∣∣f(x(1))?f(x(2))∣∣22? 。
對于兩個不同的輸入,運行相同的卷積神經網絡,然后比較它們,這一般叫做Siamese網絡架構。這里提到的很多觀點,都來自于Yaniv Taigman,Ming Yang,Marc’ Aurelio Ranzato,Lior Wolf的這篇論文,他們開發的系統叫做DeepFace。
怎么訓練這個Siamese神經網絡呢?不要忘了這兩個網絡有相同的參數,所以你實際要做的就是訓練一個網絡,它計算得到的編碼可以用于函數 ddd ,它可以告訴你兩張圖片是否是同一個人。更準確地說,神經網絡的參數定義了一個編碼函數 f(x(i))f(x^{(i)})f(x(i)) ,如果給定輸入圖像 x(i)x^{(i)}x(i) ,這個網絡會輸出 x(i)x^{(i)}x(i) 的128維的編碼。你要做的就是學習參數,使得如果兩個圖片 x(i)x^{(i)}x(i) 和 x(j)x^{(j)}x(j) 是同一個人,那么你得到的兩個編碼的距離就小。前面幾個幻燈片我都用的是 x(1)x^{(1)}x(1) 和 x(2)x^{(2)}x(2) ,其實訓練集里任意一對 x(i)x^{(i)}x(i) 和 x(j)x^{(j)}x(j) 都可以。相反,如果 x(i)x^{(i)}x(i) 和 x(j)x^{(j)}x(j) 是不同的人,那么你會想讓它們之間的編碼距離大一點。
如果你改變這個網絡所有層的參數,你會得到不同的編碼結果,你要做的就是用反向傳播來改變這些所有的參數,以確保滿足這些條件。
你已經了解了Siamese網絡架構,并且知道你想要網絡輸出什么,即什么是好的編碼。但是如何定義實際的目標函數,能夠讓你的神經網絡學習并做到我們剛才討論的內容呢?在下一個視頻里,我們會看到如何用三元組損失函數達到這個目的。
課程板書
| 4.2 One-Shot 學習 | 回到目錄 | 4.4 Triplet 損失 |
總結
以上是生活随笔為你收集整理的4.3 Siamese 网络-深度学习第四课《卷积神经网络》-Stanford吴恩达教授的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 4.2 One-Shot 学习-深度学习
- 下一篇: 4.4 Triplet 损失-深度学习第