Bagaimana cara propagasi balik bekerja di jaringan saraf siam?

13

Saya telah mempelajari arsitektur jaringan saraf siam yang diperkenalkan oleh Yann LeCun dan rekan-rekannya pada tahun 1994 untuk pengakuan tanda tangan ( “Verifikasi tanda tangan menggunakan waktu tunda jaringan saraf siamese” .pdf , NIPS 1994)

Saya memahami ide umum arsitektur ini, tetapi saya benar-benar tidak dapat memahami cara kerja backpropagation dalam kasus ini. Saya tidak dapat memahami apa nilai target dari jaringan saraf, yang akan memungkinkan backpropagation untuk mengatur dengan benar bobot masing-masing neuron.

Gambar dari "Jaringan Siam Probabilistik untuk Representasi Pembelajaran" oleh Chen Liu (University of Toronto 2013).

Dalam arsitektur ini, algoritma menghitung kesamaan cosinus antara representasi akhir dari dua jaringan saraf. Makalah ini menyatakan: "Output yang diinginkan adalah untuk sudut kecil antara output dari dua subnetworks (f1 dan f2) ketika tanda tangan asli disajikan , dan sudut yang besar jika salah satu dari tanda tangan itu palsu ".

Saya tidak dapat benar-benar mengerti bagaimana mereka dapat menggunakan fungsi biner (cosine similarity antara dua vektor) sebagai target untuk menjalankan backpropagation.

Bagaimana backpropagation dihitung dalam jaringan saraf siam?

DavideChicco.it
sumber
saya tidak dapat mengunduh kertas .... apakah Anda memiliki sumber lain atau dropbox?
Brethlosze
1
Arsip NIPS: papers.nips.cc/paper/…
Yannis Assael

Jawaban:

11

Kedua jaringan berbagi arsitektur yang sama dan tetapi mereka dibatasi untuk memiliki bobot yang sama seperti yang dijelaskan oleh publikasi pada bagian 4 [1].

Tujuan mereka adalah untuk mempelajari fitur-fitur yang meminimalkan kesamaan cosinus antara, vektor output mereka ketika tanda tangan asli, dan memaksimalkannya ketika mereka dipalsukan (ini adalah tujuan backprop juga, tetapi fungsi kerugian sebenarnya tidak disajikan).

Kesamaan cosinus dari dua vektor , adalah ukuran kesamaan yang memberi Anda kosinus sudut di antara mereka (oleh karena itu, outputnya bukan biner). Jika kekhawatiran Anda adalah bagaimana Anda dapat mundur ke fungsi yang menghasilkan benar atau salah, pikirkan kasus klasifikasi biner.cos(A,B)=ABABA,B

Anda tidak boleh mengubah lapisan output, itu terdiri dari neuron terlatih dengan nilai linier dan abstraksi tingkat tinggi dari input Anda. Seluruh jaringan harus dilatih bersama. Baik output dan dilewatkan melalui fungsi yang menampilkan kesamaan cosinus mereka ( jika mereka mirip, dan jika tidak). Mengingat itu, dan kami memiliki dua set input tuple , contoh fungsi kerugian paling sederhana yang mungkin Anda harus latih adalah:O1O2cos(O1,O2)10XForged,XGenuine

L=(xA,xB)XForgedcos(xA,xB)(xC,xD)XGenuinecos(xC,xD)

Setelah Anda melatih jaringan Anda, Anda hanya memasukkan dua tanda tangan yang Anda dapatkan dari dua keluaran fungsi , dan periksa kesamaannya.cos(O1,O2)

Akhirnya, untuk menjaga bobot jaringan tetap identik ada beberapa cara untuk melakukan itu (dan mereka juga digunakan dalam Jaringan Syaraf Berulang juga); pendekatan umum adalah rata-rata gradien dari dua jaringan sebelum melakukan langkah pembaruan Gradient Descent.

[1] http://papers.nips.cc/paper/769-signature-verification-using-a-siamese-time-delay-neural-network.pdf

Yannis Assael
sumber
Saya tahu bahwa tujuannya adalah untuk meminimalkan kesamaan cosinus, tetapi saya tidak dapat memahami apa yang harus saya masukkan ke dalam lapisan keluaran dari jaringan saraf saya. Ketika saya membuat jaringan saraf, saya meletakkan target di lapisan keluaran terakhir. Jika itu nilai, tidak apa-apa. Tetapi jika target adalah fungsi, di mana saya menemukan nilai untuk diisi? Terima kasih
DavideChicco.it
Saya telah memperbarui jawaban saya. Lapisan keluaran Anda hanya akan menjadi lapisan normal lain yang ia output ke fungsi kesamaan cosinus. Dua jaringan yang menghubungkan fungsi kesamaan cosinus harus dilatih bersama terhadap kriteria kehilangan. Akhirnya, saya telah menyarankan Anda kerugian paling sederhana yang bisa Anda miliki dalam kasus ini.
Yannis Assael
1
Terima kasih. Saya rasa saya menyadari masalah saya: ini implementasi arsitektur jaringan saraf pada Torch7. Di sini, sebelum pelatihan dan pengujian, selama pembangunan jaringan saraf, saya harus menentukan banyak hal, termasuk nilai dataset input dan nilai -nilai layer target-output . Di masa lalu, saya berurusan dengan masalah-masalah yang diawasi yang selalu memiliki nilai-nilai lapisan target-keluaran tetap (misalnya label benar / salah, atau nilai-nilai dalam interval [0, 1]). Tapi kali ini berbeda: layer output adalah fungsi tergantung pada dua nilai yang akan dihitung selama pelatihan. Apakah ini benar?
DavideChicco.it
Tepat kali ini Anda memiliki nilai linier di lapisan output bukan biner (jadi itu hanya output dari neuron). Selain itu, Anda tidak memiliki nilai target-output langsung dalam kasus ini, tetapi Anda memiliki fungsi kerugian untuk dioptimalkan. Akhirnya, lapisan output adalah output dari (jumlah unit ditentukan oleh arsitektur model dan dirujuk dalam makalah). Neuron tergantung pada fungsi aktivasi yang dipilih (tanh, sigmoid dll) masing-masing memiliki aktivasi linear bukan biner [-1,1] atau [0,1]. noutputnoutput
Yannis Assael
Terima kasih @ iassael. Apakah Anda punya ide tentang cara mengimplementasikan ini di Torch7?
DavideChicco.it