Einführung
Schritt eins
Ich habe ein standardmäßiges neuronales Backpropegating-Netzwerk geschrieben und mich zum Testen für eine XOR-Zuordnung entschieden.
Es ist ein 2-2-1-Netzwerk (mit Tanh-Aktivierungsfunktion)
X1 M1
O1
X2 M2
B1 B2
Zu Testzwecken habe ich das obere mittlere Neuron (M1) manuell als UND-Gatter und das untere Neuron (M2) als ODER-Gatter eingerichtet (beide geben 1 aus, wenn wahr, und -1, wenn falsch).
Jetzt habe ich auch manuell die Verbindung M1-O1 auf -.5, M2-O1 auf 1 und B2 auf -.75 eingestellt
Wenn also M1 = 1 und M2 = 1 ist, ist die Summe (-0,5 +1 -0,75 = -.25) tanh (0,25) = -0,24
wenn M1 = -1 und M2 = 1 ist, ist die Summe ((-0,5) * (-1) +1 -0,75 = 0,75) tanh (0,75) = 0,63
wenn M1 = -1 und M2 = -1 ist, ist die Summe ((-0,5) * (-1) -1 -0,75 = -1,25) tanh (1,25) = -0,8
Dies ist ein relativ gutes Ergebnis für eine "erste Iteration".
Schritt zwei
Ich habe diese Gewichte dann ein wenig modifiziert und sie dann mit dem Fehlerausbreitungsalgorithmus (basierend auf dem Gradientenabstieg) trainiert. In diesem Stadium lasse ich die Gewichte zwischen dem Eingangs- und dem mittleren Neuron intakt und ändere nur die Gewichte zwischen dem mittleren (und dem Bias) und dem Ausgang.
Zum Testen setze ich die Gewichte auf und .5 .4 .3 (jeweils für M1, M2 und Bias)
Hier bekomme ich jedoch Probleme.
Meine Frage
Ich stelle meine Lernrate auf 0,2 ein und lasse das Programm 10000 Iterationen oder mehr durch Trainingsdaten (ABA ^ B) iterieren.
Meistens laufen die Gewichte zu einem guten Ergebnis zusammen. Manchmal konvergieren diese Gewichte jedoch zu (etwa) 1,5, 5,7 und 0,9, was zu einer +1 Ausgabe (gerade) zu einer Eingabe von {1, 1} führt (wenn das Ergebnis ein -1 sein sollte).
Ist es möglich, dass eine relativ einfache ANN, die eine Lösung hat, überhaupt nicht konvergiert, oder gibt es einen Fehler in meiner Implementierung?