Lernrate wählen

85

Ich arbeite derzeit an der Implementierung von Stochastic Gradient Descent SGDfür neuronale Netze unter Verwendung von Backpropagation, und obwohl ich den Zweck verstehe, habe ich einige Fragen zur Auswahl von Werten für die Lernrate.

  • Bezieht sich die Lernrate auf die Form des Fehlergradienten, da sie die Abstiegsrate vorgibt?
  • Wenn ja, wie verwenden Sie diese Informationen, um Ihre Entscheidung über einen Wert mitzuteilen?
  • Wenn dies nicht der Fall ist, welche Werte soll ich auswählen und wie soll ich sie auswählen?
  • Es scheint, als ob Sie kleine Werte wünschen würden, um ein Überschießen zu vermeiden, aber wie wählen Sie einen aus, bei dem Sie nicht in lokalen Minima stecken bleiben oder zu lange brauchen, um abzusteigen?
  • Ist es sinnvoll, eine konstante Lernrate zu haben, oder sollte ich eine Metrik verwenden, um den Wert zu ändern, wenn ich mich einem Minimum im Gradienten annähere?

Kurz gesagt: Wie wähle ich die Lernrate für SGD?

tobender Faultier
quelle

Antworten:

69
  • Bezieht sich die Lernrate auf die Form des Fehlergradienten, da sie die Abstiegsrate vorgibt?

    • In einfachen SGD ist die Antwort nein. Es wird eine globale Lernrate verwendet, die dem Fehlergradienten gleichgültig ist. Die Intuition, die Sie erhalten, hat jedoch verschiedene Modifikationen der SGD-Aktualisierungsregel inspiriert.
  • Wenn ja, wie verwenden Sie diese Informationen, um Ihre Entscheidung über einen Wert mitzuteilen?

    • Adagrad ist das bekannteste von diesen und skaliert eine globale Lernrate η für jede Dimension basierend auf der l2-Norm des Verlaufs des Fehlergradienten gt für jede Dimension:

      Bildbeschreibung hier eingeben

    • Adadelta ist ein weiterer solcher Trainingsalgorithmus, der sowohl die Fehlergradientenhistorie wie adagrad als auch die Gewichtsaktualisierungshistorie verwendet und den Vorteil hat, dass überhaupt keine Lernrate eingestellt werden muss .

  • Wenn dies nicht der Fall ist, welche Werte soll ich auswählen und wie soll ich sie auswählen?

    • Das Festlegen von Lernraten für reines SGD in neuronalen Netzen ist normalerweise ein Vorgang, bei dem mit einem vernünftigen Wert wie 0,01 begonnen und dann eine Kreuzvalidierung durchgeführt wird, um einen optimalen Wert zu finden. Typische Werte liegen über einige Größenordnungen von 0,0001 bis 1.
  • Es scheint, als ob Sie kleine Werte wünschen würden, um ein Überschießen zu vermeiden, aber wie wählen Sie einen aus, damit Sie nicht in lokalen Minima stecken bleiben oder zu lange brauchen, um abzusteigen? Ist es sinnvoll, eine konstante Lernrate zu haben, oder sollte ich eine Metrik verwenden, um den Wert zu ändern, wenn ich mich einem Minimum im Gradienten annähere?

    • Normalerweise liegt der beste Wert in der Nähe der höchsten stabilen Lernrate, und der Lernratenabfall / -glühen (entweder linear oder exponentiell) wird im Verlauf des Trainings verwendet. Der Grund dafür ist, dass es frühzeitig ein klares Lernsignal gibt, sodass aggressive Aktualisierungen das Erkunden fördern, während die geringeren Lernraten später eine feinere Ausnutzung der lokalen Fehleroberfläche ermöglichen.
indico
quelle
1
In der Praxis verwenden Sie eine Lernrate mit adadelta. Auf einigen Problemen geht es ohne nicht.
Bayer
Es sollte beachtet werden, dass der Adam- Optimierer heutzutage üblicher ist als Adagrad oder Adadelta.
E_net4 streikt am
22

Im Folgenden finden Sie eine sehr gute Anmerkung (Seite 12) zur Lernrate in neuronalen Netzen (Back Propagation) von Andrew Ng. Details zur Lernrate finden Sie hier.

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

Für Ihren 4. Punkt haben Sie Recht, dass man normalerweise eine "ausgewogene" Lernrate wählen muss, die weder zu langsam überschießen noch zu langsam konvergieren sollte. Man kann die Lernrate über den Abstieg der Kostenfunktion zur Diagnose / Feinabstimmung zeichnen. In der Praxis verwendet Andrew normalerweise den L-BFGS-Algorithmus (auf Seite 12 erwähnt), um eine ausreichend gute Lernrate zu erzielen.

BrNguyen
quelle
9

Die Auswahl einer Lernrate ist ein Beispiel für ein "Metaproblem", das als Hyperparameteroptimierung bezeichnet wird . Die beste Lernrate hängt vom vorliegenden Problem sowie von der Architektur des zu optimierenden Modells und sogar vom Status des Modells im aktuellen Optimierungsprozess ab! Es gibt sogar Softwarepakete für die Hyperparameteroptimierung wie Spearmint und Hyperopt (nur ein paar Beispiele, es gibt viele andere!).

Abgesehen von der Hyperparameteroptimierung in vollem Umfang wollte ich eine Technik erwähnen, die für die Auswahl von Lernraten, die bisher noch nicht erwähnt wurden, durchaus üblich ist. Das simulierte Tempern ist eine Technik zur Optimierung eines Modells, bei der mit einer großen Lernrate begonnen wird und die Lernrate mit fortschreitender Optimierung allmählich verringert wird. Im Allgemeinen optimieren Sie Ihr Modell mit einer hohen Lernrate (0,1 oder so) und verringern diese Rate schrittweise, häufig um eine Größenordnung (also auf 0,01, dann 0,001, 0,0001 usw.).

Dies kann mit einem frühen Anhalten kombiniert werden , um das Modell mit einer Lernrate zu optimieren, solange Fortschritte erzielt werden. Wechseln Sie dann zu einer geringeren Lernrate, sobald der Fortschritt langsam erscheint. Die höheren Lernraten scheinen dem Modell dabei zu helfen, Regionen mit allgemeinen, großräumigen Optima zu lokalisieren, während kleinere Raten dem Modell helfen, sich auf ein bestimmtes lokales Optimum zu konzentrieren.

lmjohns3
quelle
6

Aus meiner Masterarbeit eingefügt :

  • Wenn der Verlust für mehrere Epochen nicht abnimmt, ist die Lernrate möglicherweise zu niedrig. Der Optimierungsprozess kann sich auch auf ein lokales Minimum beschränken.
  • Ein Verlust durch NAN kann auf zu hohe Lernraten zurückzuführen sein. Ein weiterer Grund ist die Division durch Null oder der Logarithmus von Null.
  • Nachverfolgung von Gewichtsaktualisierungen: Andrej Karpathy schlug in der 5. Vorlesung von CS231n vor, Gewichtsaktualisierungen nachzuverfolgen, um zu überprüfen, ob die Lernrate richtig gewählt wurde. Er schlägt vor, dass die Gewichtsaktualisierung in der Größenordnung von 10-3 liegen sollte. Wenn die Gewichtsaktualisierung zu hoch ist, muss die Lernrate verringert werden. Ist die Gewichtsaktualisierung zu gering, muss die Lernrate erhöht werden.
  • Typische Lernraten sind in [0,1, 0,00001]
Martin Thoma
quelle
4

Die Lernrate, die während unseres Iterationsprozesses als "Schrittgröße" transformiert wurde, ist seit Jahren ein heißes Thema und wird weitergehen.

Es gibt drei Optionen für die Schrittgröße in meinem Zusammenhang:

  • Eine bezieht sich auf " Zeit ", und jede Dimension muss dieselbe Schrittgröße haben. Ihnen ist vielleicht etwas aufgefallen

αt

Während t die aktuelle Iterationsnummer anzeigt, ist Alpha der Hyperparameter

  • Die nächste ist mit dem Farbverlauf verbunden , und jede Dimension hat ihre eigene Schrittgröße. Ihnen ist vielleicht etwas aufgefallen

1αβ+s=1t1gs2αβ+s=1tgs2

Während Alpha und Beta Hyperparameter sind, zeigt g Gradienten

  • Das letzte ist die Kombination von Zeit und Gefälle , und es sollte so sein

1αβ+s=1t1gs2αβ+s=1tgs2+γt

oder

1αβ+s=1t1gs2αβ+s=1tgs2γt

Hoffe das wird dir helfen, viel Glück -)

Joe
quelle
Haben Sie eine Referenz dafür?
Jon
Sie können den Lernratenteil von FTRL referenzieren, wir können ihn mit TIME und GRADIENT formulieren.
Joe
3

Neuronale Netze werden häufig durch Gradientenabstieg auf die Gewichte trainiert. Dies bedeutet, dass wir bei jeder Iteration die Rückpropagation verwenden, um die Ableitung der Verlustfunktion in Bezug auf jedes Gewicht zu berechnen und von diesem Gewicht zu subtrahieren. Wenn Sie dies jedoch tatsächlich versuchen, ändern sich die Gewichte bei jeder Iteration viel zu stark, was zu einer „Überkorrektur“ führt und den Verlust tatsächlich erhöht / divergiert. In der Praxis multiplizieren die Leute normalerweise jedes Derivat mit einem kleinen Wert, der als "Lernrate" bezeichnet wird, bevor sie ihn von seinem entsprechenden Gewicht subtrahieren.

Sie können sich auch eine Verlustfunktion für neuronale Netze als Oberfläche vorstellen, bei der jede Richtung, in die Sie sich bewegen können, den Wert eines Gewichts darstellt. Ein Gefälle entspricht einem Sprung in die aktuelle Richtung der Steigung, und die Lernrate entspricht der Länge des Sprunges, den Sie machen.

Dileep Balineni
quelle
3

Als Ergänzung zu Davids Antwort fand ich in fastai das Konzept, die beste Lernrate für diese Daten unter Verwendung einer bestimmten Architektur zu finden.

Aber das Ding existiert nur auf Fastai / Pytorch. Kürzlich hat jemand eine Keras- Implementierung durchgeführt .

Die wiederum basieren auf diesen Papieren:

Hoffe das hilft.

Tenshi
quelle
2

Lassen Sie mich eine kurze Einführung in einen anderen Ansatz zur Auswahl der Lernrate geben, der auf Jeremy Howards Deep Learning- Kurs 1 basiert . Wenn Sie tiefer gehen möchten, lesen Sie diesen Blogpost .

Die in Jeremy Howards Kurs vorgeschlagene Lernrate basiert auf einer systematischen Methode, um verschiedene Lernraten auszuprobieren und diejenige auszuwählen, die die Verlustfunktion am stärksten beeinträchtigt. Dies wird erreicht, indem viele Chargen der Mini- Chargen-Gradientenabstiegsmethode zugeführt werden und die Lernrate bei jeder neuen Charge, die Sie der Methode zuführen, erhöht wird. Wenn die Lernrate sehr gering ist, nimmt die Verlustfunktion sehr langsam ab. Wenn die Lernrate sehr hoch ist, erhöht sich die Verlustfunktion. Zwischen diesen beiden Regimen gibt es eine optimale Lernrate, bei der die Verlustfunktion am schnellsten abnimmt. Dies ist in der folgenden Abbildung zu sehen:

Bildbeschreibung hier eingeben

Wir sehen, dass der Verlust sehr schnell abnimmt, wenn die Lernrate um . Mit diesem Ansatz können wir allgemein eine Näherung für die beste konstante Lernrate für unser Netzwerk auswählen.103

David Masip
quelle