Giriş
Adım bir
Standart bir backpropegating sinir ağı yazdım ve test etmek için XOR haritasını çıkarmaya karar verdim.
2-2-1 ağdır (tanh aktivasyon fonksiyonu ile)
X1 M1
O1
X2 M2
B1 B2
Test amacıyla, üst orta nöronu (M1) bir AND geçidi ve alt nöronu (M2) bir OR geçidi olarak ayarladım (her ikisi de doğruysa çıkış 1 ve yanlışsa -1).
Şimdi, M1-O1 bağlantısını manuel olarak -.5, M2-O1'i 1 ve B2'yi -.75 olarak ayarladım.
Eğer M1 = 1 ve M2 = 1 ise, toplam (-0.5 +1 -0.75 = -.25) tanh (0.25) = -0.24
M1 = -1 ve M2 = 1 ise, toplam ((-0.5) * (- 1) +1 -0.75 = .75) tanh (0.75) = 0.63
M1 = -1 ve M2 = -1 ise, toplam ((-0.5) * (- 1) -1 -0.75 = -1.25) tanh (1.25) = -0.8
Bu, "ilk yineleme" için nispeten iyi bir sonuçtur.
İkinci adım
Daha sonra bu ağırlıkları biraz değiştirmeye devam ettim ve daha sonra hata yayılım algoritmasını (gradyan inişine bağlı olarak) kullanarak eğittim. Bu aşamada, girdi ve orta nöronlar arasındaki ağırlıkları olduğu gibi bırakıyorum ve sadece orta (ve bias) ve çıktı arasındaki ağırlıkları değiştiriyorum.
Test için ağırlıkları ve .5 .4 .3 olarak ayarladım (sırasıyla M1, M2 ve önyargı için)
Ancak burada sorunları yaşamaya başladım.
Benim sorum
Öğrenme oranımı 0,2 olarak ayarladım ve programın eğitim verileri (ABA ^ B) ile 10000 yineleme veya daha fazla yinelemesine izin verdim.
Çoğu zaman, ağırlıklar iyi bir sonuç verir. Bununla birlikte, zaman zaman, bu ağırlıklar (diyelim) 1.5, 5.7 ve .9'a yakınlaşır ve bu da +1 çıktısı (çift) {1, 1} girişiyle sonuçlanır (sonuç -1 olduğunda).
Hiç çözümü olmayan bir çözümü olan nispeten basit bir YSA için veya uygulamada bir hata var mı?