introduzione
Primo passo
Ho scritto una rete neurale standard di backpropegating e, per testarla, ho deciso di farlo mappare XOR.
È una rete 2-2-1 (con funzione di attivazione tanh)
X1 M1
O1
X2 M2
B1 B2
A scopo di test, ho impostato manualmente il neurone medio superiore (M1) per essere un gate AND e il neurone inferiore (M2) per essere un gate OR (entrambi output 1 se vero e -1 se falso).
Ora, ho anche impostato manualmente la connessione M1-O1 su -.5, M2-O1 su 1 e B2 su -.75
Quindi se M1 = 1 e M2 = 1, la somma è (-0.5 +1 -0.75 = -.25) tanh (0.25) = -0.24
se M1 = -1 e M2 = 1, la somma è ((-0,5) * (- 1) +1 -0,75 = .75) tanh (0,75) = 0,63
se M1 = -1 e M2 = -1, la somma è ((-0,5) * (- 1) -1 -0,75 = -1,25) tanh (1,25) = -0,8
Questo è un risultato relativamente buono per una "prima iterazione".
Passo due
Ho quindi proceduto a modificare un po 'questi pesi, e poi li ho allenati usando l'algoritmo di propagazione degli errori (basato sulla discesa del gradiente). In questa fase, lascio intatti i pesi tra input e neuroni medi e modifico solo i pesi tra middle (e bias) e output.
Per i test, ho impostato i pesi su e .5 .4 .3 (rispettivamente per M1, M2 e bias)
Qui, tuttavia, inizio ad avere problemi.
La mia domanda
Ho impostato il mio tasso di apprendimento su .2 e ho lasciato iterare il programma attraverso i dati di allenamento (ABA ^ B) per 10000 iterazioni o più.
Il più delle volte, i pesi convergono in un buon risultato. Tuttavia, a volte, quei pesi convergono in (diciamo) 1.5, 5.7 e .9 che si traduce in un output +1 (pari) in un input di {1, 1} (quando il risultato dovrebbe essere un -1).
È possibile per un ANN relativamente semplice che ha una soluzione per non convergere affatto o c'è un bug nella mia implementazione?