Wie kann die Lernrate mit Gradient Descent als Optimierer (systematisch) eingestellt werden?

12

Ein Außenseiter des ML / DL-Bereichs; hat den Udacity Deep Learning Kurs begonnen, der auf Tensorflow basiert; Aufgabe 3 erledigen Aufgabe 4; versuchen, die Lernrate mit der folgenden Konfiguration zu optimieren:

  • Losgröße 128
  • Anzahl der Schritte: genug, um 2 Epochen zu füllen
  • Größen der versteckten Schichten: 1024, 305, 75
  • Gewichtsinitialisierung: Normal mit Standard abgeschnitten. Abweichung von sqrt (2 / n) wobei n die Größe der vorherigen Ebene ist
  • Ausfallwahrscheinlichkeit: 0,75
  • Regularisierung: nicht angewendet
  • Lernratenalgorithmus: exponentieller Abfall

mit Lernratenparametern herumgespielt; In den meisten Fällen scheinen sie keine Wirkung zu haben. Code hier ; Ergebnisse:

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
  • Wie soll ich die Lernrate systematisch einstellen?
  • Wie hängt die Lernrate mit der Anzahl der Schritte zusammen?
Thoran
quelle
1
tpot bietet automatische ML-Tuning-Pipelines
denfromufa

Antworten:

4

Verwenden Sie einen Optimierer für den Gefälleverlauf. Dies ist eine sehr gute Übersicht.

Schauen Sie sich dieses Tutorial zum Code an . Dies und das sind einige Beispiele.

Persönlich empfehle ich entweder ADAM oder RMSprop. Es sind noch einige Hyperparameter zu setzen, aber es gibt einige "Standard" -Parameter, die 99% der Zeit funktionieren. Für ADAM können Sie sich das Papier und für RMSprop die Folien ansehen .

BEARBEITEN

Ok, Sie verwenden bereits einen Gradientenoptimierer. Anschließend können Sie einige Hyperparameter optimieren, um die beste Lernrate auszuwählen. Kürzlich wurde ein automatisierter Ansatz vorgeschlagen . Außerdem gibt es viele vielversprechende Arbeit von Frank Hutter in Bezug auf automatisierten Hyper Tuning.

Im Allgemeinen werfen Sie einen Blick auf die AutoML Challenge , wo Sie auch den Quellcode der Teams finden. Bei dieser Herausforderung besteht das Ziel darin, das maschinelle Lernen einschließlich der Optimierung von Hyperparametern zu automatisieren.

Schließlich geben dieses Papier von LeCun und dieses sehr aktuelle Tutorial von DeepMin ( siehe Kapitel 8) einige Erkenntnisse, die für Ihre Frage nützlich sein könnten.

Denken Sie jedoch daran, dass (insbesondere bei leichten Problemen) die Lernrate das Lernen bei Verwendung eines Optimierers für die Neigung nicht wesentlich beeinflusst. Normalerweise sind diese Optimierer sehr zuverlässig und arbeiten mit verschiedenen Parametern.

Simon
quelle
Ich verwende bereits Gradient Descent Optimizer im Code. Danke für die Links!
Thoran
@Thoran Ok, habe den Code nicht gelesen: D (und die Frage erwähnt keinen Optimierer). Ich habe meine Antwort bearbeitet, um Ihnen etwas mehr Hilfe zu geben :)
Simon
Schöne Entwicklungen, erleichtert die Arbeit für Außenstehende wie <. Wissen Sie, wie viele Schritte und die Lernrate zusammenhängen? Mein Bauch sagt mir, dass der Lernprozess langsamer sein sollte, wenn es mehr Schritte gibt.
Thoran
@Thoran Normalerweise ist der Prozess umso langsamer (aber auch stabiler), je höher die Anzahl der Schritte ist. Ich habe meine Antwort weiter bearbeitet, indem ich einige Verweise für einige "Tricks" hinzugefügt habe, die zum manuellen Einstellen der Hyperparameter nützlich sein können.
Simon
Sehr cooles Zeug, es wird einige Zeit dauern, bis ich es
verdaue
1

Sie können die Optimierung von Hyperparametern in vielen Algorithmen für maschinelles Lernen selbst automatisieren oder nur die Hyperparameter für Gradient Descent Optimizer, dh die Lernrate.

Eine dafür beliebte Bibliothek ist die grüne Minze.

https://github.com/JasperSnoek/spearmint

iratzhash
quelle
1

In Online Learning Rate Adaption mit Hypergradient Descent ist ein kürzlich veröffentlichter automatischer Lernratentuner enthalten

Diese Methode ist sehr einfach zu implementieren. Das Kernergebnis für SGD lautet:

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

βe.g.f(θt2)α

βα0

eqzx
quelle
0

Zum Einstellen von Hyperparametern (Lernrate, Abklingrate, Regularisierung usw.) müssen Sie einen gehaltenen Datensatz erstellen. Dieser Datensatz ist nicht mit Ihrem Trainingsdatensatz verknüpft. Nachdem Sie mehrere Modelle mit unterschiedlichen Konfigurationen optimiert haben (wobei eine Konfiguration eine bestimmte Auswahl jedes Hyperparameters ist), wählen Sie die Konfiguration aus, indem Sie diejenige auswählen, die die Genauigkeit der Messwerte maximiert.

Alireza
quelle
Inwiefern unterscheidet sich der gehaltene Datensatz vom Test- oder Validierungsdatensatz?
Thoran
heldout ist ein anderer Name für die Validierung. Grundsätzlich haben Sie drei nicht zusammenhängende Datensätze: trainieren, durchhalten und testen. Train wird nur zum Erlernen von Modellgewichten verwendet (z. B. durch Steigungsabstieg). Heldout wird zum Optimieren von Modellparametern verwendet. Der Test wird nur zur Messung der Generalisierungsleistung verwendet (dh wie kann ich erwarten, dass mein Modell mit unsichtbaren Daten arbeitet)
Alireza,
Vielen Dank an @Alireza, dass Sie sich die Zeit genommen haben, es zu erklären. Ich verwende bereits einen Validierungsdatensatz. Und ohne Test ist es nicht möglich, die Genauigkeit zu messen!
Thoran
Nun, Ihre ursprüngliche Frage betraf die Bestimmung der Lernrate: Wenn die erste Spalte in Ihrem ursprünglichen Beitrag nicht die Genauigkeit des Trainings aufwies, können Sie sagen, dass 0,5 besser ist als 0,1 (obwohl Sie weiterhin Werte> 0,5 versuchen sollten). [Anmerkung: Wenn Sie Ihre Experimente wiederholen, teilen Sie einfach einige Daten auf, um sie als Test zu verwenden]
Alireza,