Wprowadzenie
Krok pierwszy
Napisałem standardową sieć neuronową z propozycją wsteczną i aby ją przetestować, zdecydowałem się na mapowanie XOR.
Jest to sieć 2-2-1 (z funkcją aktywacji tanh)
X1 M1
O1
X2 M2
B1 B2
Do celów testowych ręcznie skonfigurowałem górny środkowy neuron (M1), aby był bramką AND, a dolny neuron (M2), aby był bramą OR (oba wyjścia 1, jeśli prawda, i -1, jeśli fałsz).
Teraz ręcznie skonfigurowałem również połączenie M1-O1 na -5, M2-O1 na 1, a B2 na -.75
Więc jeśli M1 = 1 i M2 = 1, suma wynosi (-0,5 +1 -0,75 = -5,25) tanh (0,25) = -0,24
jeśli M1 = -1 i M2 = 1, suma wynosi ((-0,5) * (- 1) +1 -0,75 = .75) tanh (0,75) = 0,63
jeśli M1 = -1 i M2 = -1, suma wynosi ((-0,5) * (- 1) -1 -0,75 = -1,25) tanh (1,25) = -0,8
Jest to stosunkowo dobry wynik dla „pierwszej iteracji”.
Krok drugi
Następnie przystąpiłem do modyfikacji tych wag, a następnie trenowałem je, stosując algorytm propagacji błędów (oparty na spadku gradientu). Na tym etapie pozostawiam nienaruszone wagi między neuronem wejściowym i środkowym i po prostu modyfikuję wagi między środkowym (i polaryzacją) a wyjściowym.
Do testowania ustawiam wagi na i .5 .4 .3 (odpowiednio dla M1, M2 i odchylenia)
Tutaj jednak zaczynam mieć problemy.
Moje pytanie
Ustawiam szybkość uczenia się na .2 i pozwalam programowi na iterację poprzez dane treningowe (ABA ^ B) dla 10000 iteracji lub więcej.
Przez większość czasu masy są zbieżne, co daje dobry wynik. Czasami jednak te wagi są zbieżne do (powiedzmy) 1.5, 5.7 i .9, co daje wynik +1 (parzysty) na wejściu {1, 1} (kiedy wynik powinien wynosić -1).
Czy jest możliwe względnie prosty ANN, który ma rozwiązanie, które wcale się nie zbiega, czy też jest błąd w mojej implementacji?