Domanda

Al momento sto lavorando per l'attuazione stocastico Gradient Descent, SGD, per le reti neurali che utilizzano back-propagazione, e pur comprendendo il suo scopo ho alcune domande su come scegliere i valori per il tasso di apprendimento.

  • è il tasso di apprendimento legate alla forma del gradiente dell'errore, in quanto determina la velocità di discesa?
  • Se sì, come si usa queste informazioni per informare il vostro decisione su un valore?
  • Se non è che tipo di valori devo scegliere, e come non li ho scegliere?
  • Sembra che si vorrebbe valori piccoli per evitare il superamento, ma come si fa a scegliere una di queste che non si rimane bloccati in minimi locali o prendere a lungo per scendere?
  • Ha senso avere un tasso di apprendimento costante, o dovrei usare qualche metrica per alterare il suo valore come ottengo più vicino un minimo del gradiente?

In breve:? Come faccio a scegliere il tasso di apprendimento per SGD

È stato utile?

Soluzione

  • è il tasso di apprendimento legato alla forma del gradiente errore, come Detta la velocità di discesa?

    • In SGD pianura, la risposta è no. Un tasso di apprendimento globale viene utilizzato, che è indifferente al gradiente di errore. Tuttavia, l'intuizione si stanno ottenendo a ha ispirato diverse varianti della regola di aggiornamento SGD.
  • Se sì, come si usa queste informazioni per informare il vostro decisione su un valore?

    • Adagrad è il più noto di questi e scale di un tasso di apprendimento globale ? su ogni dimensione in base a norma l2 della storia del gradiente dell'errore gt su ogni dimensione:

      entrare descrizione dell'immagine qui

    • Adadelta è un altro algoritmo di formazione, quali che utilizza sia la cronologia degli errori del gradiente come adagrad e l'aggiornamento di peso storia e ha il vantaggio di non dover impostare un tasso di apprendimento a tutti .

  • Se non è che tipo di valori dovrei scegliere, e come non li ho scegliere?

    • Impostazione tassi di apprendimento per SGD pianura nelle reti neurali è di solito un processo di avviamento con un valore sano come 0.01 e poi facendo convalida incrociata per trovare un valore ottimale. Valori tipici variano nell'arco di alcuni ordini di grandezza da 0,0001 fino a 1.
  • Sembra che si vorrebbe valori piccoli per evitare il superamento, ma Come si sceglie uno di questi che non si rimane bloccati in minimi locali o prendere troppo tempo a scendere? Ha senso avere un tasso di apprendimento costante, o dovrei usare qualche metrica per alterare il suo valore come ottengo più vicino un minimo del gradiente?

    • In genere, il valore che meglio si trova vicino al più alto apprendimento stabile tasso e apprendimento decadimento tasso / ricottura (lineari o in modo esponenziale) viene utilizzato nel corso della formazione. La ragione di questo è che presto ci sia un segnale di apprendimento in modo chiaro gli aggiornamenti aggressivi incoraggiano l'esplorazione, mentre in seguito le tariffe di apprendimento più piccoli permettono di sfruttamento più delicato della superficie errore locale.

Altri suggerimenti

Di seguito è riportato un ottimo nota (pagina 12) sul tasso di apprendimento in reti neurali (Back Propagation) di Andrew Ng. Troverete i dettagli relativi al tasso di apprendimento.

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

Per la vostra quarto punto, hai ragione che normalmente si deve scegliere un "equilibrato" tasso di apprendimento, che dovrebbe né overshoot né convergere troppo lentamente. Si può tracciare la w.r.t. tasso di apprendimento la discesa della funzione di costo per la diagnosi / regolazione fine. In pratica, Andrew normalmente utilizza l'algoritmo di L-BFGS (menzionato nella pagina 12) per ottenere un tasso di apprendimento "abbastanza buono".

La selezione di un tasso di apprendimento è un esempio di un "meta-problema" conosciuto come iperparametro ottimizzazione . Il miglior tasso di apprendimento dipende dal problema in esame, nonché sull'architettura del modello ottimizzata, e anche dallo stato del modello nel processo di ottimizzazione corrente! Ci sono anche pacchetti software dedicati alla Griglia di ricerca come ad esempio menta e hyperopt (solo un paio di esempi, ci sono molti altri!).

Oltre a Griglia di ricerca su larga scala, ho voluto parlare di una tecnica che è abbastanza comune per la selezione di tassi di apprendimento che non è stato menzionato finora. simulato ricottura è una tecnica per ottimizzare un modello in cui si parte da un grande tasso di apprendimento e gradualmente riduce il tasso di apprendimento come progredisce ottimizzazione . Generalmente si ottimizzare il vostro modello con un grande tasso di apprendimento (0,1 o giù di lì), e poi ridurre progressivamente tale tasso, spesso da un ordine di grandezza (si fa per 0,01, poi 0.001, 0.0001, ecc.).

Questo può essere combinato con presto fermarsi per ottimizzare il modello con un tasso di apprendimento il più a lungo si stanno facendo progressi, poi passare ad un tasso di apprendimento più piccolo una volta il progresso sembra rallentare. I tassi di apprendimento più grandi sembrano aiutare il modello di individuare le regioni del generale, optima su larga scala, mentre i tassi più piccole aiutano l'attenzione su un particolare modello di ottimo locale.

Copy-incollato da mia maestri tesi :

  • Se la perdita non diminuisce per diverse epoche, il tasso di apprendimento potrebbe essere troppo bassa. Il processo di ottimizzazione potrebbe anche essere bloccato in un minimo locale.
  • Perdita essendo NAN potrebbe essere dovuto al troppo alti tassi di apprendimento. Un'altra ragione è divisione per zero o prendendo il logaritmo di zero.
  • Peso aggiornamento di inseguimento: Andrej Karpathy proposto nel 5 ° conferenza del CS231n per monitorare gli aggiornamenti di peso per verificare se il tasso di apprendimento è ben scelto. Suggerisce che l'aggiornamento peso dovrebbe essere nell'ordine di 10-3. Se l'aggiornamento peso è troppo elevata, allora il tasso di apprendimento deve essere diminuito. Se la aggiornamento peso è troppo basso, allora il tasso di apprendimento deve essere aumentato.
  • Tassi di apprendimento tipici sono in [0.1, 0,00001]

tasso di apprendimento, trasformato come "ampiezza del passo" durante il nostro processo di iterazione, è stato un tema caldo per anni, e si andrà avanti.

Ci sono tre opzioni per dimensione passo nella mia concernente:

  • Una è legata alla " tempo ", e ogni dimensione deve condividere il stessa dimensione di passo. Si potrebbe avere qualcosa di notare come

$ \ it \ enorme \ bf \ frac {\ alpha} {\ sqrt {t}} $

mentre t dimostra il numero iterazione corrente, alfa è iper parametro

  • il prossimo è collegato con gradiente , e ogni dimensione hanno la loro propria dimensione di passo. Si potrebbe avere qualcosa di notare come

$ \ it \ enorme \ frac {1} {\ frac {\ alpha} {\ beta + \ sqrt {\ sum_ {s = 1} ^ {t - 1} {g_ {s} ^ 2}}} - \ Frac {\ alpha} {\ beta + \ sqrt {\ sum_ {s = 1} ^ {t} {g_ {s} ^ 2}}}} $

mentre alfa e beta sono iperparametro, g dimostra gradiente

  • l'ultimo è il combinazione di tempo e di pendenza , e dovrebbe essere come

$ \ it \ enorme \ frac {1} {\ frac {\ alpha} {\ beta + \ sqrt {\ sum_ {s = 1} ^ {t - 1} {g_ {s} ^ 2}}} - \ frac {\ alpha} {\ beta + \ sqrt {\ sum_ {s = 1} ^ {t} {g_ {s} ^ 2}}}} + \ frac {\ gamma} {\ sqrt {t}} $

o

$ \ it \ enorme \ frac {1} {\ frac {\ alpha} {\ beta + \ sqrt {\ sum_ {s = 1} ^ {t - 1} {g_ {s} ^ 2}}} - \ frac {\ alpha} {\ beta + \ sqrt {\ sum_ {s = 1} ^ {t} {g_ {s} ^ 2}}}} * \ frac {\ gamma} {\ sqrt {t}} $

auspica che questo vi aiuterà, buona fortuna -)

Le reti neurali sono spesso formati da discesa del gradiente sui pesi. Questo mezzo ad ogni iterazione usiamo backpropagation per calcolare la derivata della funzione di perdita rispetto a ciascun peso e sottrarre da quel peso. Tuttavia, se si tenta in realtà che, i pesi cambieranno troppo ogni iterazione, che li renderà “ipercorrezione” e la perdita sarà effettivamente aumentare / divergono. Quindi, in pratica, la gente di solito moltiplicare ogni derivati ??da un piccolo valore chiamato il “tasso di apprendimento”, prima di sottrarre dal suo peso corrispondente.

Si può anche pensare ad una funzione di reti neurali perdita come una superficie, in cui ogni direzione è possibile spostare nel rappresenta il valore di un peso. discesa del gradiente è come prendere salti nella direzione corrente della pendenza, e il tasso di apprendimento è come la lunghezza del salto si prende.

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

Ma che cosa esiste solo sulla fastai / pytorch. Recentemente qualcuno ha fatto un keras implementazione .

che a loro volta si basano su questi documenti:

Spero che questo aiuti.

Vi faccio una breve introduzione ad un altro approccio su come scegliere il tasso di apprendimento, sulla base di Deep Learning di Jeremy Howard corso 1. Se si vuole scavare più a fondo, vedere questo blogpost .

Il tasso di apprendimento proposto nel corso di Jeremy Howard si basa su un modo sistematico per provare diverse velocità di apprendimento e di scegliere quello che fa la funzione di perdita scendere più. Questo viene fatto alimentando molti lotti per il metodo del gradiente di discesa mini-batch, e l'aumento del tasso di apprendimento ogni nuovo lotto si alimenta al metodo. Quando il tasso di apprendimento è molto piccolo, la funzione di perdita diminuisce molto lentamente. Quando il tasso di apprendimento è molto grande, la funzione di perdita crescerà. Inbetween questi due regimi, c'è un tasso di apprendimento ottimale per il quale la funzione di perdita diminuisce il più veloce. Questo può essere visto nella figura seguente:

entrare descrizione dell'immagine qui

Si vede che la perdita si riduce molto rapidamente quando il tasso di apprendimento è di circa $ 10 ^ {- 3} $. Usando questo approccio, abbiamo un modo generale di scegliere un'approssimazione per il miglior tasso di apprendimento costante per il nostro netowork.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
scroll top