webentwicklung-frage-antwort-db.com.de

In welcher Reihenfolge sollten wir Hyperparameter in neuronalen Netzwerken einstellen?

Ich habe ein recht einfaches ANN, das Tensorflow und AdamOptimizer für ein Regressionsproblem verwendet, und ich bin jetzt an dem Punkt, um alle Hyperparameter anzupassen. 

Im Moment sah ich viele verschiedene Hyperparameter, die ich einstellen muss: 

  • Lernrate: anfängliche Lernrate, Abnahme der Lernrate
  • Der AdamOptimizer benötigt 4 Argumente (Lernrate, Beta1, Beta2, Epsilon), also müssen wir sie anpassen - zumindest Epsilon
  • losgröße 
  • anzahl von Iterationen
  • Lambda L2-Regularisierungsparameter
  • Anzahl der Neuronen, Anzahl der Schichten 
  • welche Art von Aktivierungsfunktion für die verborgenen Ebenen für die Ausgabeebene 
  • dropout-Parameter

Ich habe 2 Fragen:

1) Sehen Sie andere Hyperparameter, die ich vielleicht vergessen hätte? 

2) Im Moment ist meine Stimmung ziemlich "manuell" und ich bin nicht sicher, ob ich nicht alles richtig mache. Gibt es eine spezielle Reihenfolge zur Einstellung der Parameter? Zum Beispiel zuerst die Lernrate, dann die Batchgröße, dann ... ... Ich bin nicht sicher, dass alle diese Parameter unabhängig sind - ich bin mir ziemlich sicher, dass einige davon nicht sind. Welche sind eindeutig unabhängig und welche eindeutig nicht unabhängig? Sollten wir sie dann zusammen abstimmen? Gibt es ein Papier oder einen Artikel, in dem es darum geht, alle Parameter in einer bestimmten Reihenfolge richtig einzustellen? 

BEARBEITEN: Hier sind die Grafiken, die ich für verschiedene Anfangslernraten, Stapelgrößen und Regularisierungsparameter erhalten habe. Die violette Kurve ist für mich völlig seltsam ... Weil die Kosten wie die anderen langsam sinken, aber bei einer niedrigeren Genauigkeitsrate steckengeblieben sind. Ist es möglich, dass das Modell in einem lokalen Minimum steckt? 

Richtigkeit

Kosten

Für die Lernrate habe ich den Zerfall verwendet: LR (t) = LRI/sqrt (Epoche) 

Vielen Dank für Ihre Hilfe! Paul 

17
Paul Rolin

Meine allgemeine Bestellung lautet:

  1. Chargengröße, da dies die Trainingszeit zukünftiger Experimente stark beeinflussen wird.
  2. Architektur des Netzwerks:
    • Anzahl der Neuronen im Netzwerk
    • Anzahl der Schichten
  3. Rest (Aussetzer, L2 Reg usw.)

Abhängigkeiten:

Ich würde davon ausgehen, dass die optimalen Werte von 

  • lernrate und Losgröße 
  • lernrate und Anzahl der Neuronen 
  • anzahl der Neuronen und Anzahl der Schichten

stark voneinander abhängen. Ich bin jedoch kein Experte auf diesem Gebiet.

Wie für Ihre Hyperparameter:

  • Für den Adam-Optimierer: "Empfohlene Werte in der Arbeit sind eps = 1e-8, beta1 = 0,9, beta2 = 0,999." ( Quelle )
  • Für die Lernrate mit Adam und RMSProp habe ich festgestellt, dass Werte um 0,001 für die meisten Probleme optimal sind. 
  • Als Alternative zu Adam können Sie auch RMSProp verwenden, wodurch der Speicherbedarf um bis zu 33% reduziert wird. Siehe diese Antwort für weitere Details.
  • Sie können auch die anfänglichen Gewichtswerte anpassen (siehe Alles was Sie brauchen, ist ein guter Init ). Der Xavier-Initialisierer scheint jedoch ein guter Weg zu sein, um zu verhindern, dass das Gewicht inits angepasst werden muss.
  • Ich stelle die Anzahl der Iterationen/Epochen nicht als Hyperparameter ein. Ich trainiere das Netz, bis der Validierungsfehler konvergiert. Ich gebe jedoch jedem Lauf ein Zeitbudget.
6
Kilian Batzner

Holen Sie sich Tensorboard zum Laufen. Schreiben Sie den Fehler dort auf. Sie müssen Unterverzeichnisse in dem Pfad erstellen, in dem TB nach den zu zeichnenden Daten sucht. Ich mache diese Unterverzeichnis-Erstellung im Skript. Also ändere ich einen Parameter im Skript, gebe der Testversion dort einen Namen, führe sie aus und zeichne alle Tests in derselben Grafik. Sie werden sehr bald ein Gefühl für die effektivsten Einstellungen für Ihre Grafik und Ihre Daten bekommen.

3
Phillip Bock

Bei weniger wichtigen Parametern können Sie wahrscheinlich nur einen vernünftigen Wert auswählen und dabei bleiben. 

Wie Sie sagten, hängen die optimalen Werte dieser Parameter alle voneinander ab. Am einfachsten ist es, einen sinnvollen Wertebereich für jeden Hyperparameter zu definieren. Probiere dann zufällig einen Parameter aus jedem Bereich und trainiere ein Modell mit dieser Einstellung. Wiederholen Sie dies einige Male und wählen Sie dann das beste Modell aus. Wenn Sie Glück haben, können Sie analysieren, welche Hyperparameter-Einstellungen am besten funktionieren, und daraus einige Schlussfolgerungen ziehen.

2
Aaron

Ich kenne kein Werkzeug, das für Tensorflow spezifisch ist, aber die beste Strategie besteht darin, zunächst mit den grundlegenden Hyperparametern zu beginnen, z. B. einer Lernrate von 0,01, 0,001, einem weight_decay von 0,005, 0,0005. Und stimmen Sie sie dann ab. Wenn Sie dies manuell tun, ist eine lange Zeit erforderlich. Wenn Sie caffe verwenden, ist das Folgen die beste Option, die die Hyperparameter aus einem Satz von Eingabewerten entnimmt und Ihnen den besten Satz gibt.

https://github.com/kuz/caffe-with-spearmint

für weitere Informationen können Sie auch diesem Tutorial folgen:

http://fastml.com/optimizing-hyperparams-with-hyperopt/

Was die Anzahl der Schichten angeht, schlage ich vor, zunächst ein kleineres Netzwerk zu erstellen und die Daten zu erhöhen. Wenn Sie genügend Daten haben, erhöhen Sie die Komplexität des Modells.

0
Dharma