Ich arbeite derzeit an der Implementierung von Stochastic Gradient Descent SGD
fü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?
quelle
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.
quelle
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.
quelle
Aus meiner Masterarbeit eingefügt :
quelle
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:
Während t die aktuelle Iterationsnummer anzeigt, ist Alpha der Hyperparameter
Während Alpha und Beta Hyperparameter sind, zeigt g Gradienten
oder
Hoffe das wird dir helfen, viel Glück -)
quelle
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.
quelle
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.
quelle
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:
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.10−3
quelle