Scelta di un tasso di apprendimento


85

Attualmente sto lavorando all'implementazione della Discesa stocastica del gradiente SGD, per le reti neurali che usano la propagazione di ritorno, e mentre capisco il suo scopo ho alcune domande su come scegliere i valori per il tasso di apprendimento.

  • Il tasso di apprendimento è correlato alla forma del gradiente di errore, in quanto determina il tasso di discesa?
  • In tal caso, come utilizzate queste informazioni per informare la vostra decisione su un valore?
  • Se non è quale tipo di valori dovrei scegliere e come dovrei sceglierli?
  • Sembra che vorresti piccoli valori per evitare il superamento, ma come sceglierne uno tale da non rimanere bloccato nei minimi locali o impiegare troppo tempo a scendere?
  • Ha senso avere un tasso di apprendimento costante o dovrei usare qualche metrica per modificarne il valore man mano che mi avvicino al minimo nel gradiente?

In breve: come posso scegliere il tasso di apprendimento per SGD?

Risposte:


69
  • Il tasso di apprendimento è correlato alla forma del gradiente di errore, in quanto determina il tasso di discesa?

    • In parole povere, la risposta è no. Viene utilizzato un tasso di apprendimento globale indifferente al gradiente di errore. Tuttavia, l'intuizione che stai ottenendo ha ispirato varie modifiche alla regola di aggiornamento SGD.
  • In tal caso, come utilizzate queste informazioni per informare la vostra decisione su un valore?

    • Adagrad è il più noto di questi e scala un tasso di apprendimento globale η su ogni dimensione in base alla norma l2 della storia del gradiente di errore gt su ogni dimensione:

      inserisci qui la descrizione dell'immagine

    • Adadelta è un altro algoritmo di allenamento che utilizza sia la cronologia del gradiente di errore come adagrad che la cronologia di aggiornamento del peso e ha il vantaggio di non dover impostare affatto una frequenza di apprendimento .

  • Se non è quale tipo di valori dovrei scegliere e come dovrei sceglierli?

    • L'impostazione dei tassi di apprendimento per la SGD normale nelle reti neurali di solito è un processo che inizia con un valore sano come 0,01 e quindi esegue la convalida incrociata per trovare un valore ottimale. I valori tipici vanno da alcuni ordini di grandezza da 0,0001 a 1.
  • Sembra che vorresti piccoli valori per evitare il superamento, ma come sceglierne uno tale da non rimanere bloccato nei minimi locali o impiegare troppo tempo a scendere? Ha senso avere un tasso di apprendimento costante o dovrei usare qualche metrica per modificarne il valore man mano che mi avvicino al minimo nel gradiente?

    • Di solito, il valore migliore è vicino al più alto tasso di apprendimento stabile e il decadimento / ricottura del tasso di apprendimento (sia lineare che esponenziale) viene utilizzato nel corso della formazione. La ragione di ciò è che all'inizio c'è un chiaro segnale di apprendimento, quindi aggiornamenti aggressivi incoraggiano l'esplorazione, mentre in seguito i tassi di apprendimento più piccoli consentono uno sfruttamento più delicato della superficie di errore locale.

1
In pratica, utilizzerai un tasso di apprendimento con adadelta. Su alcuni problemi non funziona senza.
Bayer,

Va notato che l' ottimizzatore Adam è più comune di Adagrad o Adadelta in questi giorni.
E_net4 è ancora in sciopero il

22

Di seguito è riportata un'ottima nota (pagina 12) sulla velocità di apprendimento nelle reti neurali (Back Propagation) di Andrew Ng. Troverai i dettagli relativi al tasso di apprendimento.

http://web.stanford.edu/class/cs294a/sparseAutoencoder_2011new.pdf

Per il tuo quarto punto, hai ragione che normalmente devi scegliere un tasso di apprendimento "equilibrato", che non dovrebbe né superare né convergere troppo lentamente. Si può tracciare il tasso di apprendimento prima della discesa della funzione di costo per diagnosticare / mettere a punto. In pratica, Andrew normalmente utilizza l'algoritmo L-BFGS (menzionato a pagina 12) per ottenere un tasso di apprendimento "abbastanza buono".


9

La selezione di una frequenza di apprendimento è un esempio di "meta-problema" noto come ottimizzazione dell'iperparametro . Il miglior tasso di apprendimento dipende dal problema attuale, dall'architettura del modello da ottimizzare e persino dallo stato del modello nel processo di ottimizzazione corrente! Esistono persino pacchetti software dedicati all'ottimizzazione dell'iperparametro come menta verde e hyperopt (solo un paio di esempi, ce ne sono molti altri!).

Oltre all'ottimizzazione dell'iperparametro su larga scala, volevo menzionare una tecnica abbastanza comune per selezionare i tassi di apprendimento che non è stata menzionata finora. La ricottura simulata è una tecnica per ottimizzare un modello in base al quale si inizia con un tasso di apprendimento elevato e riduce gradualmente il tasso di apprendimento man mano che l'ottimizzazione avanza. Generalmente ottimizzi il tuo modello con un grande tasso di apprendimento (0,1 o giù di lì) e quindi riduci progressivamente questo tasso, spesso di un ordine di grandezza (quindi a 0,01, quindi a 0,001, 0,0001, ecc.).

Ciò può essere combinato con l' interruzione anticipata per ottimizzare il modello con un tasso di apprendimento fintanto che si stanno compiendo progressi, quindi passare a un tasso di apprendimento più piccolo quando i progressi sembrano rallentare. I tassi di apprendimento più grandi sembrano aiutare il modello a localizzare le regioni di optima su larga scala, mentre i tassi più piccoli aiutano il modello a focalizzarsi su un particolare ottimale locale.


6

Copia-incollata dalla mia tesi di master :

  • Se la perdita non diminuisce per diverse epoche, il tasso di apprendimento potrebbe essere troppo basso. Il processo di ottimizzazione potrebbe anche essere bloccato in un minimo locale.
  • La perdita di NAN potrebbe essere dovuta a tassi di apprendimento troppo elevati. Un altro motivo è la divisione per zero o il logaritmo di zero.
  • Monitoraggio dell'aggiornamento del peso: Andrej Karpathy ha proposto nella quinta lezione di CS231n di tenere traccia degli aggiornamenti del peso per verificare se il tasso di apprendimento è stato scelto correttamente. Suggerisce che l'aggiornamento del peso dovrebbe essere nell'ordine di 10−3. Se l'aggiornamento del peso è troppo alto, è necessario ridurre il tasso di apprendimento. Se l'aggiornamento del peso è troppo basso, è necessario aumentare il tasso di apprendimento.
  • I tassi di apprendimento tipici sono in [0.1, 0.00001]

4

Il tasso di apprendimento, trasformato in "dimensioni del passo" durante il nostro processo di iterazione, è stato un problema caldo per anni e continuerà.

Ci sono tre opzioni per la dimensione del passo nel mio riguardo:

  • Uno è legato al " tempo " e ogni dimensione deve condividere la stessa dimensione del gradino. Potresti aver notato qualcosa del genere

αt

mentre t mostra il numero di iterazione corrente, alpha è un parametro ipertestuale

  • il successivo è collegato con un gradiente e ogni dimensione ha la propria dimensione del gradino. Potresti aver notato qualcosa del genere

1αβ+s=1t1gs2αβ+s=1tgs2

mentre alpha e beta sono iperparametrici, g mostra il gradiente

  • l'ultimo è la combinazione di tempo e gradiente , e dovrebbe essere come

1αβ+s=1t1gs2αβ+s=1tgs2+γt

o

1αβ+s=1t1gs2αβ+s=1tgs2γt

Spero che questo ti possa aiutare, buona fortuna -)


Hai un riferimento per questo?
Jon

Puoi fare riferimento alla parte del tasso di apprendimento di FTRL, possiamo formularla con TIME e GRADIENT.
joe

3

Le reti neurali sono spesso allenate dalla discesa gradiente sui pesi. Ciò significa che ad ogni iterazione utilizziamo la backpropagation per calcolare la derivata della funzione di perdita rispetto a ciascun peso e sottrarla da quel peso. Tuttavia, se lo provi davvero, i pesi cambieranno di molto ad ogni iterazione, il che li renderà "corretti" e la perdita aumenterà / divergerà. Quindi, in pratica, le persone di solito moltiplicano ciascun derivato per un piccolo valore chiamato "tasso di apprendimento" prima di sottrarlo dal suo peso corrispondente.

Puoi anche pensare a una funzione di perdita di reti neurali come una superficie, in cui ogni direzione in cui puoi muoverti rappresenta il valore di un peso. La discesa gradiente è come fare dei salti nella direzione attuale della pendenza e il tasso di apprendimento è come la lunghezza del salto che fai.


3

Aggiungendo alla risposta di David, in fastai è dove ho trovato il concetto di trovare il miglior tasso di apprendimento per quei dati, usando una particolare architettura.

Ma quella cosa esiste solo su fastai / pytorch. Di recente qualcuno ha realizzato un'implementazione di keras .

che a loro volta si basano su questi documenti:

Spero che sia di aiuto.


2

Vorrei fare una breve introduzione a un altro approccio sulla scelta del tasso di apprendimento, basato sul corso Deep Learning di Jeremy Howard 1. Se vuoi approfondire, consulta questo post sul blog .

Il tasso di apprendimento proposto nel corso di Jeremy Howard si basa su un modo sistematico per provare diversi tassi di apprendimento e scegliere quello che fa scendere maggiormente la funzione di perdita. Questo viene fatto alimentando molti batch con il metodo di discesa gradiente mini-batch e aumentando il tasso di apprendimento di ogni nuovo batch che si alimenta con il metodo. Quando il tasso di apprendimento è molto piccolo, la funzione di perdita diminuirà molto lentamente. Quando il tasso di apprendimento è molto elevato, la funzione di perdita aumenta. Tra questi due regimi, c'è un tasso di apprendimento ottimale per il quale la funzione di perdita diminuisce più rapidamente. Questo può essere visto nella figura seguente:

inserisci qui la descrizione dell'immagine

Vediamo che la perdita diminuisce molto rapidamente quando il tasso di apprendimento è di circa . Usando questo approccio, abbiamo un modo generale di scegliere un'approssimazione per il miglior tasso di apprendimento costante per il nostro netowork.103

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.