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?