Come ottimizzare (in modo sistematico) il tasso di apprendimento con la Discesa del gradiente come ottimizzatore?


12

Un estraneo al campo ML / DL; ha iniziato il corso Udacity Deep Learning basato su Tensorflow; fare l'incarico 3 problema 4; cercando di ottimizzare la frequenza di apprendimento con la seguente configurazione:

  • Dimensione del lotto 128
  • Numero di passaggi: sufficiente per riempire 2 epoche
  • Dimensioni degli strati nascosti: 1024, 305, 75
  • Inizializzazione del peso: troncata normale con std. deviazione di sqrt (2 / n) dove n è la dimensione del livello precedente
  • Probabilità di abbandono: 0,75
  • Regolarizzazione: non applicata
  • Algoritmo del tasso di apprendimento: decadimento esponenziale

giocato con i parametri del tasso di apprendimento; non sembrano avere effetti nella maggior parte dei casi; codice qui ; i risultati:

Accuracy    learning_rate   decay_steps     decay_rate      staircase
93.7        .1              3000            .96             True
94.0        .3              3000            .86             False
94.0        .3              3000            .96             False
94.0        .3              3000            .96             True
94.0        .5              3000            .96             True
  • Come devo regolare sistematicamente il tasso di apprendimento?
  • In che modo il tasso di apprendimento è correlato al numero di passaggi?

1
tpot fornisce condutture automatiche di sintonizzazione ML
denfromufa,

Risposte:


4

Utilizzare un ottimizzatore di discesa gradiente. Questa è un'ottima panoramica.

Per quanto riguarda il codice, dai un'occhiata a questo tutorial . Questo e questo sono alcuni esempi.

Personalmente, suggerisco di utilizzare ADAM o RMSprop. Ci sono ancora alcuni iperparametri da impostare, ma ce ne sono alcuni "standard" che funzionano il 99% delle volte. Per ADAM puoi guardare il suo documento e per RMSprop in queste diapositive .

MODIFICARE

Ok, usi già un ottimizzatore gradiente. Quindi è possibile eseguire l'ottimizzazione di alcuni iperparametri per selezionare la migliore velocità di apprendimento. Di recente è stato proposto un approccio automatizzato . Inoltre, c'è molto lavoro promettente di Frank Hutter per quanto riguarda la messa a punto automatizzata degli iperparametri.

Più in generale, dai un'occhiata alla sfida AutoML , dove puoi anche trovare il codice sorgente da parte dei team. In questa sfida, l'obiettivo è quello di automatizzare l'apprendimento automatico, inclusa la messa a punto degli iperparametri.

Infine, questo articolo di LeCun e questo tutorial molto recente di DeepMin (controlla il capitolo 8) forniscono alcuni spunti che potrebbero essere utili per la tua domanda.

Ad ogni modo, tieni presente che (soprattutto per problemi facili), è normale che il tasso di apprendimento non influisca molto sull'apprendimento quando si utilizza un ottimizzatore di discesa gradiente. Di solito, questi ottimizzatori sono molto affidabili e funzionano con parametri diversi.


Sto già usando l'ottimizzatore di discesa gradiente nel codice. Grazie per i collegamenti!
Thoran,

@Thoran Ok, non ho letto il codice: D (e la domanda non menziona un ottimizzatore). Ho modificato la mia risposta per darti un ulteriore aiuto :)
Simon,

Ottimi sviluppi, rendono il lavoro più facile per gli estranei come <. Conoscete qual è il numero di passaggi e il tasso di apprendimento correlati? Il mio istinto mi dice che se ci sono più passaggi, il processo di apprendimento dovrebbe essere più lento.
Thoran,

@Thoran In genere sì, maggiore è il numero di passaggi, più lento è il processo (ma anche più stabile). Ho ulteriormente modificato la mia risposta aggiungendo alcuni riferimenti per alcuni "trucchi" che possono essere utili per la regolazione manuale degli iperparametri.
Simon,

roba molto bella, ci vorrà del tempo per digerirla: D
Thoran,

1

È possibile automatizzare la messa a punto degli iperparametri in molti algoritmi di machine learning stessi o solo gli iperparametri per l'ottimizzatore della discesa del gradiente, ovvero la velocità di apprendimento.

Una libreria che è stata popolare per fare questo è la menta verde.

https://github.com/JasperSnoek/spearmint


1

Un sintonizzatore automatico della frequenza di apprendimento molto recente viene fornito in Adattamento della velocità di apprendimento online con discesa ipertestuale

Questo metodo è molto semplice da implementare, il risultato principale per SGD è dato come:

αt=αt1+βf(θt1)Tf(θt2)

βe.g.f(θt2)α

βα0


0

Per ottimizzare gli iperparametri (che si tratti di velocità di apprendimento, percentuale di decadimento, regolarizzazione o altro), è necessario stabilire un set di dati di tenuta; questo set di dati è disgiunto dal set di dati di allenamento. Dopo aver messo a punto diversi modelli con diverse configurazioni (dove una configurazione = una scelta particolare di ciascun iperparametro), si sceglie la configurazione selezionando quella che massimizza l'accuratezza di tenuta.


In che modo il set di dati di Holdout è diverso dal set di dati di test o di validazione?
Thoran,

holdout è un altro nome per la convalida. Fondamentalmente hai tre set di dati disgiunti: train, holdout e test. Il treno viene utilizzato solo per apprendere i pesi del modello (ad es. Utilizzando la discesa gradiente). Heldout viene utilizzato per l'ottimizzazione dei parametri del modello. Il test viene utilizzato solo per misurare le prestazioni di generalizzazione (ovvero come posso aspettarmi che il mio modello funzioni su dati invisibili)
Alireza

Grazie @Alireza per aver dedicato del tempo a spiegare. Sto già utilizzando il set di dati di convalida. E senza test, non è possibile misurare la precisione!
Thoran,

Bene, la tua domanda originale riguardava la determinazione del tasso di apprendimento: se la prima colonna del tuo post originale era di precisione (non di formazione), allora puoi dire che 0,5 è meglio di 0,1 (anche se dovresti continuare a provare valori> 0,5). [nota: se riesegui i tuoi esperimenti, devi semplicemente dividere alcuni dati per fare da test]
Alireza,
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.