Le reti neurali di solito impiegano un po 'di tempo a "calciare" durante l'allenamento?


10

Sto cercando di formare una rete neurale profonda per la classificazione, usando la propagazione posteriore. In particolare, sto usando una rete neurale convoluzionale per la classificazione delle immagini, usando la libreria Tensor Flow. Durante l'allenamento, sto sperimentando uno strano comportamento e mi chiedo solo se questo è tipico o se potrei fare qualcosa di sbagliato.

Quindi, la mia rete neurale convoluzionale ha 8 strati (5 convoluzionali, 3 completamente connessi). Tutti i pesi e le inclinazioni vengono inizializzati con piccoli numeri casuali. Ho quindi impostato una dimensione del passo e procedo all'allenamento con mini-batch, usando Adam Optimizer di Tensor Flow.

Lo strano comportamento di cui sto parlando è che per circa i primi 10 cicli attraverso i miei dati di allenamento, la perdita di allenamento non diminuisce, in generale. I pesi vengono aggiornati, ma la perdita di allenamento rimane all'incirca allo stesso valore, a volte salendo e talvolta scendendo tra i mini-lotti. Rimane così per un po 'e ho sempre l'impressione che la perdita non diminuirà mai.

Quindi, all'improvviso, la perdita di allenamento diminuisce drasticamente. Ad esempio, entro circa 10 cicli attraverso i dati di allenamento, la precisione dell'allenamento va da circa il 20% a circa l'80%. Da allora in poi, tutto finisce per convergere piacevolmente. La stessa cosa accade ogni volta che eseguo la pipeline di allenamento da zero e di seguito è riportato un grafico che illustra una corsa di esempio.

inserisci qui la descrizione dell'immagine

Quindi, quello che mi chiedo, è se si tratta di un comportamento normale con l'allenamento di reti neurali profonde, per cui ci vuole un po 'di tempo per "dare il calcio". O è probabile che ci sia qualcosa che sto facendo di sbagliato che sta causando questo ritardo?

Grazie mille!


Immagino di essere un po 'in ritardo alla festa. Ma forse posso ancora aggiungere un po 'di valore alla conversazione. Quindi ... per me suona come una funzione di attivazione sigmoidea. Poiché la derivata del sigmoide è piccola per valori molto piccoli o molto grandi, l'allenamento potrebbe essere lento per i "neuroni saturi". Sfortunatamente, non posso dire esattamente com'è la tua CNN dalla descrizione che hai dato.
Nima Mousavi,

Risposte:


7

Il fatto che l'algoritmo abbia impiegato un po 'di tempo per "dare il via" non è particolarmente sorprendente.

In generale, le funzioni target da ottimizzare dietro le reti neurali sono altamente multimodali. Pertanto, a meno che tu non abbia una sorta di insieme intelligente di valori iniziali per il tuo problema, non c'è motivo di credere che inizierai in una ripida discesa. Pertanto, il tuo algoritmo di ottimizzazione vagherà in modo quasi casuale fino a quando non troverà una valle abbastanza ripida su cui iniziare a scendere. Una volta trovato questo, dovresti aspettarti che la maggior parte degli algoritmi basati sul gradiente inizi immediatamente a restringersi nella modalità particolare a cui è più vicina.

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.