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