Haruskah Neural Networks selalu bertemu?

16

pengantar

Langkah pertama

Saya menulis jaringan saraf backpropegating standar, dan untuk mengujinya, saya memutuskan untuk memetakannya XOR.

Ini adalah jaringan 2-2-1 (dengan fungsi aktivasi tanh)

X1  M1
        O1
X2  M2

B1  B2

Untuk tujuan pengujian, saya secara manual mengatur neuron tengah atas (M1) menjadi gerbang AND dan neuron bawah (M2) menjadi gerbang OR (baik output 1 jika benar dan -1 jika salah).

Sekarang, saya juga secara manual mengatur koneksi M1-O1 menjadi -.5, M2-O1 menjadi 1, dan B2 menjadi -.75

Jadi jika M1 = 1 dan M2 = 1, jumlahnya adalah (-0,5 +1 -0,75 = -.25) tanh (0,25) = -0,24

jika M1 = -1 dan M2 = 1, jumlahnya adalah ((-0.5) * (- 1) +1 -0.75 = .75) tanh (0.75) = 0.63

jika M1 = -1 dan M2 = -1, jumlahnya adalah ((-0.5) * (- 1) -1 -0.75 = -1.25) tanh (1.25) = -0.8

Ini adalah hasil yang relatif baik untuk "iterasi pertama".

Langkah Dua

Saya kemudian melanjutkan untuk memodifikasi bobot ini sedikit, dan kemudian melatih mereka menggunakan algoritma propagasi kesalahan (berdasarkan gradient descent). Pada tahap ini, saya meninggalkan bobot antara input dan neuron tengah utuh, dan hanya memodifikasi bobot antara tengah (dan bias) dan output.

Untuk pengujian, saya mengatur bobot menjadi dan .5 .4 .3 (masing-masing untuk M1, M2 dan bias)

Di sini, bagaimanapun, saya mulai mengalami masalah.


Pertanyaan saya

Saya menetapkan tingkat belajar saya menjadi 0,2 dan membiarkan program mengulangi melalui data pelatihan (ABA ^ B) untuk 10.000 iterasi atau lebih.

Sebagian besar waktu, bobot menyatu untuk hasil yang baik. Namun, kadang-kadang, bobot tersebut konvergen ke (katakanlah) 1.5, 5.7, dan .9 yang menghasilkan output +1 (datar) ke input {1, 1} (ketika hasilnya harus -1).

Apakah mungkin untuk JST yang relatif sederhana yang memiliki solusi untuk tidak bertemu sama sekali atau ada bug dalam implementasi saya?

Xodarap
sumber

Jawaban:

13

(Saya berasumsi dengan "propagasi kesalahan" yang Anda maksud adalah apa yang saya sebut "error back -propagation.")

Pada halaman 231 dari Neural Networks (oleh Haykin), ia menyatakan bahwa propagasi balik selalu menyatu, meskipun laju dapat (dalam kata-katanya) "sangat lambat."

Saya pikir apa yang Anda tanyakan bukan apakah algoritme akan selalu menyatu, tetapi apakah itu akan selalu menyatu dengan jawaban optimal. Dan sayangnya, itu tidak akan terjadi. Bahkan dalam kasus-kasus sederhana seperti milik Anda, sangat mungkin bahwa ada minimum lokal yang bukan minimum global.

Berurusan dengan ekstrema lokal adalah topik yang sangat penting dalam pengoptimalan, dan Anda dapat menemukan sejumlah saran tentang cara menghadapinya. Salah satu yang paling umum adalah apa yang Anda lakukan: restart acak (yaitu jalankan algoritma beberapa kali, masing-masing dimulai dari tempat acak).

Untuk mengetahui apakah ada bug dalam kode Anda, saya akan mencetak istilah kesalahan dan memverifikasi bahwa itu berkurang pada setiap iterasi. Jika demikian, maka Anda mungkin hanya memukul minimal lokal.

Xodarap
sumber
Semua bobot meningkat (bobot ke OR neuron meningkat lebih cepat), yang meminimalkan kesalahan ketika inputnya adalah {1,0}, {0,1}, {0,0} tetapi memaksimalkan kesalahan ketika {1,1}. Apakah ini masalah dengan pembelajaran online daripada pembelajaran batch?
@ Shmuel: keduanya online dan batch akan menuju ke arah gradien. Jika gradien itu menunjuk ke arah yang salah, mereka berdua akan pergi ke arah yang salah. Halaman Wikipedia di Hill Climbing memiliki beberapa cara untuk mengatasi ini, jika Anda tertarik.
Xodarap
6

Jika Anda telah memperbaiki bobot antara input dan unit tersembunyi dan hanya memodifikasi bobot disembunyikan ke output selama pelatihan maka tidak akan ada minimum lokal. Dengan input tetap ke bobot tersembunyi masalah optimasi yang Anda selesaikan mirip dengan regresi logistik tetapi dengan tanh bukan fungsi sigmoid. Apapun masalahnya adalah cembung dan seharusnya hanya ada satu, minimum global.

Karena minimum lokal tidak menyebabkan masalah Anda, saya akan merekomendasikan secara numerik perkiraan derivatif Anda dan kemudian membandingkannya dengan nilai yang Anda hitung. Jika Anda tidak yakin bagaimana melakukan ini, tutorial ULFDL Standford memiliki tinjauan yang bagus.

alto
sumber