Warum führt die Lernrate dazu, dass die Gewichte meines neuronalen Netzwerks in die Höhe schnellen?


9

Ich benutze Tensorflow, um einfache neuronale Netze für ein bisschen Forschung zu schreiben, und ich hatte während des Trainings viele Probleme mit 'Nan'-Gewichten. Ich habe viele verschiedene Lösungen ausprobiert, wie das Ändern des Optimierers, das Ändern des Verlusts, der Datengröße usw., aber ohne Erfolg. Schließlich bemerkte ich, dass eine Änderung der Lernrate einen unglaublichen Unterschied in meinen Gewichten machte.

Bei einer Lernrate von 0,001 (was ich für ziemlich konservativ hielt) würde die Minimierungsfunktion den Verlust tatsächlich exponentiell erhöhen. Nach einer Epoche könnte der Verlust von einer Zahl von Tausenden auf eine Billion und dann auf unendlich ('nan') springen. Als ich die Lernrate auf 0,0001 senkte, funktionierte alles einwandfrei.

1) Warum hat eine einzelne Größenordnung einen solchen Effekt?

2) Warum führt die Minimierungsfunktion buchstäblich das Gegenteil ihrer Funktion aus und maximiert den Verlust? Es scheint mir, dass dies nicht passieren sollte, unabhängig von der Lernrate.


Können Sie bitte sagen, wie Sie Ihre Gewichte initialisiert haben?
Himanshu Rai

Ich schlage vor, den Adam-Löser auszuprobieren. Es scheint sich besser zu benehmen und ein besserer Standard zu sein, und Sie können möglicherweise die Standard-Lernraten dafür verwenden.
DW

Antworten:


9

Kapitel 8 von Deep Learning ist möglicherweise hilfreich. Darin diskutieren die Autoren das Training neuronaler Netzwerkmodelle. Es ist sehr kompliziert, daher wundert es mich nicht, dass Sie Schwierigkeiten haben.

Eine Möglichkeit (neben Benutzerfehlern) besteht darin, dass Ihr Problem sehr schlecht konditioniert ist. Gradientenabstiegsmethoden verwenden bei der Berechnung einer Aktualisierung nur die Informationen der ersten Ableitung (Gradienten). Dies kann zu Problemen führen, wenn die zweite Ableitung (die hessische) schlecht konditioniert ist.

Zitat der Autoren:

H.

Es wird allgemein angenommen, dass das Problem der schlechten Konditionierung bei Trainingsproblemen mit neuronalen Netzen vorliegt. Eine schlechte Konditionierung kann sich dadurch manifestieren, dass SGD in dem Sinne „stecken bleibt“, dass bereits sehr kleine Schritte die Kostenfunktion erhöhen. [meine Betonung hinzugefügt]

Die Autoren liefern eine einfache Ableitung, um zu zeigen, dass dies der Fall sein kann. Bei Verwendung des Gradientenabfalls sollte sich die Kostenfunktion (in zweiter Ordnung) um ändern

ε22GT.H.G- -εGT.G

GH.εεε


2
Es scheint mir, dass diese Quora-Antwort eine recht intuitive Erklärung für die schlechte Konditionierung des Hessischen bietet.
Oren Milman

3

1) Warum hat eine einzelne Größenordnung einen solchen Effekt?

2) Warum führt die Minimierungsfunktion buchstäblich das Gegenteil ihrer Funktion aus und maximiert den Verlust? Es scheint mir, dass dies nicht passieren sollte, unabhängig von der Lernrate.

Es gibt zwei Hauptgründe. Erstens verwenden Sie im ersten Schritt nicht dieselben Daten wie im zweiten. Wenn das Modell im ersten Schritt diese Werte lernt und in ein lokales Minimum fällt, ist es sehr wahrscheinlich, dass neue Werte einen größeren Verlust erleiden.

Der zweite Grund ist die Form der Kostenfunktion. Sie versuchen, den Wert durch kleine Schritte zu minimieren. Die Länge dieser Schritte wird durch zwei Faktoren angegeben: den Gradienten und die Lernrate. Stellen Sie sich vor, Ihre Funktion ist wie x ^ 2. Wenn Ihre Werte nahe bei 0 liegen, ist der Gradient kleiner als weiter, aber wenn Ihre Lernrate groß ist, erhöhen Sie den Fehler tatsächlich, anstatt sich 0 zu nähern, da Ihr neuer Punkt auf der Bewertung und dem basiert Die Lernrate liegt weiter bei 0 als bei Ihrem vorherigen Schritt. Und das kann mehrmals passieren.

Schauen Sie sich diesen Link an: http://www.statisticsviews.com/details/feature/5722691/Getting-to-the-Bottom-of-Regression-with-Gradient-Descent.html

Wenn Sie die Zahlen mit Alpha 0,01 und Alpha 0,12 sehen, werden Sie sehen, wie in der ersten Abbildung die Lernrate klein ist und sich der Gradient dem Minimum nähert, im zweiten Fall ist die Lernrate so groß, dass sich der Gradient bewegt weiter in jedem Schritt.


1
In Bezug auf den zweiten Grund zeigt diese Antwort (unter Verwendung einfacher Funktionen), wann der Gradientenabstieg abweichen kann. Diese Antwort enthält auch Python-Code, sodass Sie experimentieren und sehen können, wie sich der Gradientenabstieg in verschiedenen Szenarien verhält.
Oren Milman
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.