So wählen Sie die beste Lernrate für Ihr maschinelles Lernprojekt aus

Ein häufiges Problem, mit dem wir alle bei der Arbeit an Deep-Learning-Projekten konfrontiert sind, ist die Auswahl einer Lernrate und eines Optimierers (der Hyperparameter). Wenn Sie wie ich sind, erraten Sie einen Optimierer und eine Lernrate und prüfen dann, ob sie funktionieren (und wir sind nicht allein).

Um die Auswirkungen der Wahl des Optimierers und der Lernrate besser zu verstehen, habe ich das gleiche Modell 500 Mal trainiert. Die Ergebnisse zeigen, dass die richtigen Hyperparameter für den Trainingserfolg entscheidend sind, jedoch schwer zu finden sein können.

In diesem Artikel werde ich Lösungen für dieses Problem mithilfe automatisierter Methoden zur Auswahl optimaler Hyperparameter diskutieren.

Versuchsaufbau

Ich habe das grundlegende neuronale Faltungsnetzwerk aus der TensorFlow-Lernserie trainiert, in der das Erkennen von MNIST-Ziffern gelernt wird. Dies ist ein relativ kleines Netzwerk mit zwei Faltungsschichten und zwei dichten Schichten, von denen insgesamt ungefähr 3.400 Gewichte trainiert werden müssen.Für jedes Training wird der gleiche zufällige Startwert verwendet.

Es ist zu beachten, dass die folgenden Ergebnisse für ein bestimmtes Modell und einen bestimmten Datensatz gelten. Die idealen Hyperparameter für andere Modelle und Datensätze unterscheiden sich.

(Wenn Sie etwas GPU-Zeit spenden möchten, um eine größere Version dieses Experiments auf CIFAR-10 auszuführen, setzen Sie sich bitte mit uns in Verbindung.)

Welche Lernrate funktioniert am besten?

Das erste, was wir untersuchen werden, ist, wie sich die Lernrate auf das Modelltraining auswirkt. In jedem Lauf wird dasselbe Modell von Grund auf trainiert, wobei nur der Optimierer und die Lernrate variiert werden.

Das Modell wurde mit 6 verschiedenen Optimierern trainiert: Gradient Descent, Adam, Adagrad, Adadelta, RMS Prop und Momentum. Für jeden Optimierer wurde es mit 48 verschiedenen Lernraten von 0,000001 bis 100 in logarithmischen Intervallen trainiert.

In jedem Lauf wird das Netzwerk trainiert, bis eine Zuggenauigkeit von mindestens 97% erreicht ist. Die maximal zulässige Zeit betrug 120 Sekunden. Die Experimente wurden auf einem Nvidia Tesla K80 durchgeführt, der von FloydHub gehostet wurde. Der Quellcode steht zum Download zur Verfügung.

Hier ist die Trainingszeit für jede Wahl der Lernrate und des Optimierers:

Die obige Grafik ist interessant. Wir können das sehen:

  • Für jeden Optimierer kann die Mehrheit der Lernraten das Modell nicht trainieren.
  • Für jeden Optimierer gibt es eine Talform: Eine zu niedrige Lernrate schreitet nie voran, und eine zu hohe Lernrate verursacht Instabilität und konvergiert nie. Dazwischen gibt es eine Reihe von „genau richtigen“ Lernraten, die erfolgreich trainieren.
  • Es gibt keine Lernrate, die für alle Optimierer funktioniert.
  • Die Lernrate kann die Trainingszeit um eine Größenordnung beeinflussen.

Um das oben Gesagte zusammenzufassen, ist es wichtig, dass Sie die richtige Lernrate wählen. Andernfalls kann Ihr Netzwerk entweder nicht trainieren oder die Konvergenz dauert viel länger.

Um zu veranschaulichen, wie sich jeder Optimierer in seiner optimalen Lernrate unterscheidet, ist hier das schnellste und langsamste Modell, das für jede Lernrate über alle Optimierer hinweg trainiert werden kann. Beachten Sie, dass die maximale Zeit im gesamten Diagramm 120 Sekunden beträgt (z. B. Netzwerk konnte nicht trainiert werden). Es gibt keine einzelne Lernrate, die für jeden Optimierer funktioniert:

Schauen Sie sich das breite Spektrum an Lernraten (von 0,001 bis 30) an, die mit mindestens einem Optimierer aus der obigen Grafik erfolgreich sind.

Welcher Optimierer bietet die beste Leistung?

Nachdem wir die besten Lernraten für jeden Optimierer ermittelt haben, vergleichen wir die Leistung jedes Optimierertrainings mit der besten Lernrate, die im vorherigen Abschnitt dafür gefunden wurde.

Hier ist die Validierungsgenauigkeit jedes Optimierers über die Zeit. Auf diese Weise können wir beobachten, wie schnell, genau und stabil die einzelnen Funktionen ausgeführt werden:

Einige Beobachtungen:

  • Mit Ausnahme von RMSProp (siehe letzter Punkt) können alle Optimierer in angemessener Zeit konvergieren.
  • Adam lernt am schnellsten.
  • Adam ist stabiler als die anderen Optimierer und weist keine wesentlichen Genauigkeitsverluste auf.
  • RMSProp wurde mit den Standardargumenten von TensorFlow ausgeführt (Abklingrate 0,9, Epsilon 1e-10, Impuls 0,0), und es kann vorkommen, dass diese für diese Aufgabe nicht gut funktionieren. Dies ist ein guter Anwendungsfall für die automatisierte Suche nach Hyperparametern (mehr dazu im letzten Abschnitt).

Adam hatte im vorherigen Experiment auch ein relativ breites Spektrum erfolgreicher Lernraten. Insgesamt ist Adam die beste Wahl unserer sechs Optimierer für dieses Modell und diesen Datensatz.

Wie wirkt sich die Modellgröße auf die Trainingszeit aus?

Schauen wir uns nun an, wie sich die Größe des Modells auf das Trainieren auswirkt.

Wir werden die Modellgröße um einen linearen Faktor variieren. Dieser Faktor skaliert die Anzahl der Faltungsfilter und die Breite der ersten dichten Schicht linear und skaliert so die Gesamtzahl der Gewichte im Modell ungefähr linear.

Wir werden zwei Aspekte untersuchen:

  1. Wie ändert sich die Trainingszeit mit dem Wachstum des Modells für einen festen Optimierer und eine feste Trainingsrate?
  2. Welche Lernrate trainiert bei jeder Modellgröße für einen festen Optimierer am schnellsten?

Wie ändert sich die Trainingszeit, wenn das Modell wächst?

Unten sehen Sie die Zeit, die benötigt wird, um eine Trainingsgenauigkeit von 96% für das Modell zu erreichen und seine Größe von 1x auf 10x zu erhöhen. Wir haben einen unserer erfolgreichsten Hyperparameter von früher verwendet:

  • Die Zeit zum Trainieren wächst linear mit der Modellgröße.
  • Die gleiche Lernrate trainiert das Netzwerk erfolgreich über alle Modellgrößen hinweg.

(Hinweis: Die folgenden Ergebnisse können nur für den hier getesteten Datensatz und die hier getesteten Modelle verwendet werden, können jedoch für Ihre Experimente einen Test wert sein.)

Das ist ein schönes Ergebnis. Unsere Wahl der Hyperparameter wurde durch die lineare Skalierung des Modells nicht ungültig. Dies kann darauf hindeuten, dass die Suche nach Hyperparametern in einer verkleinerten Version eines Netzwerks durchgeführt werden kann, um Rechenzeit zu sparen.

Dies zeigt auch, dass mit zunehmender Größe des Netzwerks keine O (n²) -Arbeit bei der Konvergenz des Modells anfällt (das lineare Zeitwachstum kann durch die zusätzlichen Operationen erklärt werden, die für das Training jedes Gewichts anfallen).

Dieses Ergebnis ist weiter beruhigend, da es zeigt, dass unser Deep-Learning-Framework (hier TensorFlow) effizient skaliert.

Welche Lernrate ist für verschiedene Modellgrößen am besten geeignet?

Lassen Sie uns dasselbe Experiment für mehrere Lernraten durchführen und sehen, wie die Trainingszeit auf die Modellgröße reagiert:

  • Die Lernraten 0,0005, 0,001, 0,00146 schnitten am besten ab - diese schnitten auch im ersten Experiment am besten ab. Wir sehen hier die gleiche "Sweet Spot" -Band wie im ersten Experiment.
  • Die Trainingszeit jeder Lernrate wächst linear mit der Modellgröße.
  • Die Leistung der Lernrate hing nicht von der Modellgröße ab. Die gleichen Raten, die bei 1x Größe am besten abschnitten, zeigten bei 10x Größe die beste Leistung.
  • Über 0,001 erhöhte eine Erhöhung der Lernrate die Trainingszeit und auch die Varianz der Trainingszeit (im Vergleich zu einer linearen Funktion der Modellgröße).
  • Die Zeit zum Trainieren kann grob als c + kn für ein Modell mit n Gewichten, Fixkosten c und Lernkonstante k = f (Lernrate) modelliert werden .

Zusammenfassend war die Lernrate mit der besten Leistung für Größe 1x auch die beste Lernrate für Größe 10x.

Automatisierung der Wahl der Lernrate

Wie die früheren Ergebnisse zeigen, ist es für das Modelltraining entscheidend, eine gute Auswahl an Optimierer und Lernrate zu haben.

Die manuelle Auswahl dieser Hyperparameter ist zeitaufwändig und fehleranfällig. Wenn sich Ihr Modell ändert, ist die vorherige Auswahl der Hyperparameter möglicherweise nicht mehr ideal. Es ist unpraktisch, ständig neue Suchvorgänge von Hand durchzuführen.

Es gibt verschiedene Möglichkeiten, Hyperparameter automatisch auszuwählen. Ich werde hier einige verschiedene Ansätze skizzieren.

Rastersuche

Die Rastersuche haben wir im ersten Experiment durchgeführt. Erstellen Sie für jeden Hyperparameter eine Liste möglicher Werte. Trainieren Sie dann für jede Kombination möglicher Hyperparameterwerte das Netzwerk und messen Sie dessen Leistung. Die besten Hyperparameter sind diejenigen, die die beste beobachtete Leistung liefern.

Die Rastersuche ist sehr einfach zu implementieren und zu verstehen. Es ist auch einfach zu überprüfen, ob Sie einen ausreichend breiten Abschnitt der Parametersuche durchsucht haben. Aus diesen Gründen ist es in der Forschung sehr beliebt.

Bevölkerungsbezogene Ausbildung

Populationsbasiertes Training (DeepMind) ist eine elegante Implementierung der Verwendung eines genetischen Algorithmus für die Auswahl von Hyperparametern.

In PBT wird eine Population von Modellen erstellt. Sie werden alle kontinuierlich parallel geschult. Wenn ein Mitglied der Bevölkerung ausreichend lange trainiert hat, um eine Verbesserung zu zeigen, wird seine Validierungsgenauigkeit mit dem Rest der Bevölkerung verglichen. Wenn seine Leistung bei den niedrigsten 20% liegt, kopiert und mutiert er die Hyperparameter und Variablen eines der Top-20% -Darsteller.

Auf diese Weise erzeugen die erfolgreichsten Hyperparameter viele leicht mutierte Varianten von sich selbst, und die besten Hyperparameter werden wahrscheinlich entdeckt.

Nächste Schritte

Vielen Dank, dass Sie diese Untersuchung zu Lernraten gelesen haben. Ich habe diese Experimente aus eigener Neugier und Frustration über das Drehen von Hyperparametern begonnen, und ich hoffe, Sie genießen die Ergebnisse und Schlussfolgerungen genauso wie ich.

Wenn es ein bestimmtes Thema oder eine bestimmte Erweiterung gibt, die Sie sehen möchten, lassen Sie es mich wissen. Wenn Sie daran interessiert sind, etwas GPU-Zeit für eine viel größere Version dieses Experiments zu spenden, würde ich gerne darüber sprechen.

Diese Schriften sind Teil einer einjährigen Untersuchung von KI-Architekturthemen. Folgen Sie dieser Veröffentlichung (und applaudieren Sie diesem Artikel!), Um Updates zu erhalten, wenn die nächsten Stücke herauskommen.