introduction
La première étape
J'ai écrit un réseau neuronal à rétropropagation standard, et pour le tester, j'ai décidé de le faire mapper XOR.
C'est un réseau 2-2-1 (avec fonction d'activation tanh)
X1 M1
O1
X2 M2
B1 B2
À des fins de test, j'ai configuré manuellement le neurone moyen supérieur (M1) pour être une porte ET et le neurone inférieur (M2) pour être une porte OU (les deux produisent 1 si vrai et -1 si faux).
Maintenant, j'ai également configuré manuellement la connexion M1-O1 à -.5, M2-O1 à 1 et B2 à -.75
Donc, si M1 = 1 et M2 = 1, la somme est (-0,5 +1 -0,75 = -,25) tanh (0,25) = -0,24
si M1 = -1 et M2 = 1, la somme est ((-0,5) * (- 1) +1 -0,75 = 0,75) tanh (0,75) = 0,63
si M1 = -1 et M2 = -1, la somme est ((-0,5) * (- 1) -1 -0,75 = -1,25) tanh (1,25) = -0,8
C'est un résultat relativement bon pour une "première itération".
Deuxième étape
J'ai ensuite procédé à un peu de modification de ces poids, puis je les ai entraînés à l'aide d'un algorithme de propagation d'erreur (basé sur la descente de gradient). À ce stade, je laisse les poids entre les neurones d'entrée et du milieu intacts, et je modifie simplement les poids entre le milieu (et le biais) et la sortie.
Pour les tests, j'ai défini les poids à et .5 .4 .3 (respectivement pour M1, M2 et biais)
Ici, cependant, je commence à avoir des problèmes.
Ma question
J'ai défini mon taux d'apprentissage sur .2 et j'ai laissé le programme parcourir les données d'entraînement (ABA ^ B) pour 10000 itérations ou plus.
La plupart du temps, les poids convergent vers un bon résultat. Cependant, à certains moments, ces poids convergent vers (disons) 1,5, 5,7 et 0,9, ce qui se traduit par une sortie +1 (paire) vers une entrée de {1, 1} (lorsque le résultat doit être un -1).
Est-il possible pour un ANN relativement simple qui a une solution de ne pas converger du tout ou y a-t-il un bug dans mon implémentation?