Le reti neurali devono sempre convergere?


16

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?

Risposte:


13

(Presumo per "propagazione degli errori" si intende quello che io chiamo "l'errore indietro -propagation.")

A pagina 231 di Neural Networks (di Haykin), afferma che la propagazione posteriore converge sempre, sebbene il tasso possa essere (nelle sue parole) "tremendamente lento".

Penso che ciò che stai chiedendo non sia se l'algoritmo converrà sempre, ma se converrà sempre nella risposta ottimale. E sfortunatamente non lo farà. Anche in casi semplici come il tuo, è del tutto possibile che vi siano minimi locali che non sono minimi globali.

Trattare con extrema locale è un argomento estremamente importante per l'ottimizzazione e puoi trovare molti consigli su come gestirlo. Uno dei più comuni è quello che sembra che tu stia facendo: riavvii casuali (ovvero esegui l'algoritmo più volte, ognuno a partire da un posto casuale).

Per capire se c'è un bug nel tuo codice, stamperei il termine di errore e verificherei che diminuisca ad ogni iterazione. Se è così, allora probabilmente stai solo colpendo un minimo locale.


Aumentano tutti i pesi (il peso sul neurone OR aumenta più rapidamente), il che riduce al minimo l'errore quando l'input è {1,0}, {0,1}, {0,0} ma massimizza l'errore quando {1,1}. È questo un problema con l'apprendimento online rispetto all'apprendimento batch?

@Shmuel: sia online che batch andranno nella direzione del gradiente. Se quel gradiente punta nella direzione sbagliata, entrambi andranno nella direzione sbagliata. La pagina di Wikipedia su Hill Climbing ha alcuni modi per aggirare questo, se sei interessato.
Xodarap,

6

Se durante l'allenamento sono stati corretti i pesi tra le unità di input e quelle nascoste e si stanno modificando solo i pesi da nascosti a output, allora non ci saranno minimi locali. Con input fissi a pesi nascosti il ​​problema di ottimizzazione che stai risolvendo è simile alla regressione logistica ma con una tanh invece della funzione sigmoid. Indipendentemente dal fatto che il problema è convesso e dovrebbe esserci solo un minimo globale.

Poiché i minimi locali non stanno causando il tuo problema, consiglierei di approssimare numericamente i tuoi derivati ​​e di confrontarli con i valori che stai calcolando. Se non sei sicuro di come eseguire questa operazione, il tutorial ULFDL di Standford offre una buona panoramica.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.