Wie definiere ich die Abbruchbedingung für den Gradientenabstieg?


24

Eigentlich wollte ich Sie fragen, wie ich die Abschlussbedingung für den Gefälleabstieg definieren kann.

Kann ich es basierend auf der Anzahl der Iterationen stoppen, dh Parameterwerte für beispielsweise 100 Iterationen berücksichtigen?

Oder sollte ich so warten, dass die unterschiedlichen Werte für die beiden Parameter 'new' und 'old' in der Größenordnung von etwa sehr klein sind ? Dies wird definitiv viel Zeit in Anspruch nehmen.10-6

Was ist der beste Weg? In meinem Fall nimmt sogar eine Iteration viel Zeit in Anspruch. In dieser Situation kann es, wenn ich auf die 2. Bedingung warte, sogar Wochen dauern, denke ich.

Welchen Ansatz soll ich wählen? Wie gehe ich dieses Szenario an?


1
Es wird nicht explizit angegeben, aber ich gehe davon aus, dass Sie versuchen, eine MLE zu finden. Ihr Ergebnis hängt wirklich vollständig von Ihrem Parameterraum, Ihrer Wahrscheinlichkeitsfunktion und Ihren Bedürfnissen ab (auch bekannt als das Beste ist nicht gut definiert). Wenn Sie nur nach theoretischen Begründungen wie asymptotischer Effizienz suchen; Unter Le'Cam-Bedingungen können Sie nur die einstufige MLE verwenden (unter der weiteren Voraussetzung, dass Sie die Newton-Methode und die Bewertungsfunktion für Ihren Gefälle-Abstieg verwenden). Dies erfordert , dass Ihr Anfangswert ist, dass in Wahrscheinlichkeit. n1/2θ^0θ
Jonathan Lisic

Warten Sie also, wenn Sie sagten, dass "neu" - "alt" ausreichend klein ist, ist dies eine falsche Abbruchbedingung für den Gradientenabstieg? (Wenn feste Punkte wie Theoreme gelten, sollte diese Bedingung in Ordnung sein?)
Charlie Parker

Man könnte anhalten, wenn sich einer der folgenden Faktoren nicht mehr bewegt : Funktionswerte oder Steigungen f i oder Parameter x i , entweder relativ oder absolut. Aber in der Praxis 3 × 2 Parameter .. ist viel zu viele so sie gefaltet, aber jedes Programm funktioniert das anders. Siehe Mathworks-Toleranzen und Stoppkriterien für ein Bild. fichfichxich3×2ftolabs ftolrelxtolabs
Denis

Antworten:


19

Gute Frage. Ich habe in der Literatur viele Stoppregeln gesehen, und je nach Kontext gibt es Vor- und Nachteile. Die optimFunktion in R hat zum Beispiel mindestens drei verschiedene Stoppregeln:

  • maxit, dh eine vorgegebene maximale Anzahl von Iterationen. Eine weitere ähnliche Alternative, die ich in der Literatur gesehen habe, ist die maximale Anzahl von Sekunden vor Ablauf des Zeitlimits. Wenn Sie nur eine ungefähre Lösung benötigen, kann dies sehr vernünftig sein. Tatsächlich gibt es Modellklassen (insbesondere lineare Modelle), bei denen ein vorzeitiges Stoppen dem Setzen eines Gaußschen Prioritätszeichens auf Ihre Parameterwerte ähnelt. Ein Frequentist würde sagen, dass Sie eine "L2-Norm" haben, anstatt eine vorherige, aber er würde es auch als vernünftige Sache ansehen. Ich habe dieses Papier nur überflogen , aber es handelt von der Beziehung zwischen frühem Anhalten und Regularisierung und kann Ihnen helfen, auf weitere Informationen hinzuweisen. Aber die kurze Version ist, ja, ein vorzeitiges Anhalten kann eine absolut seriöse Sache sein, je nachdem, was Sie tun.

  • abstoldh stoppen, wenn die Funktion "nahe genug" an Null kommt. Dies ist möglicherweise nicht relevant für Sie (es hört sich nicht so an, als würden Sie eine Null erwarten), also überspringe ich es.

  • reltolDies ist wie bei Ihrem zweiten Vorschlag - hören Sie auf, wenn die Verbesserung einen Schwellenwert unterschreitet. Ich weiß eigentlich nicht, wie viel Theorie es dazu gibt, aber Sie werden wahrscheinlich dazu neigen, auf diese Weise niedrigere Minima als mit einer kleinen maximalen Anzahl von Iterationen zu erhalten. Wenn Ihnen das wichtig ist, lohnt es sich möglicherweise, den Code für weitere Iterationen auszuführen.

Eine andere Familie von Abbruchregeln hat eher mit der Optimierung einer Kostenfunktion für einen Validierungsdatensatz (oder für eine Kreuzvalidierung) als für die Trainingsdaten zu tun. Abhängig davon, wofür Sie Ihr Modell verwenden möchten, sollten Sie möglicherweise aufhören, bevor Sie das lokale Minimum Ihrer Trainingsdaten erreicht haben, da dies zu einer Überanpassung führen kann. Ich bin mir ziemlich sicher, dass Trevor Hastie über gute Methoden dafür geschrieben hat, aber ich kann mich nicht an das Zitat erinnern.

Andere mögliche Optionen, um in angemessener Zeit niedrigere Minima zu finden, könnten sein:

  • Stochastischer Gradientenabstieg, bei dem nur die Gradienten für einen kleinen Teil Ihrer Daten gleichzeitig geschätzt werden müssen (z. B. ein Datenpunkt für "reines" SGD oder kleine Minibatches).

  • Fortgeschrittenere Optimierungsfunktionen (z. B. Newton-Methoden oder Conjugate Gradient), die Informationen über die Krümmung Ihrer Zielfunktion verwenden, um Sie beim Abwärtsfahren in bessere Richtungen zu führen und bessere Schrittgrößen zu erzielen.

  • Ein "Momentum" -Begriff in Ihrer Aktualisierungsregel, damit Ihr Optimierer besser bergab rollt, als in Ihrer Zielfunktion von Canyonwänden abzuspringen.

Diese Ansätze werden alle in den Vorlesungsunterlagen besprochen , die ich online gefunden habe.

Hoffe das hilft!

Bearbeiten Sie oh, und Sie können auch versuchen, bessere Startwerte zu erhalten (z. B. durch Lösen einer einfacheren Version des Problems), sodass weniger Iterationen erforderlich sind, um von Ihrem "Warmstart" an das Optimum heranzukommen.


Das Problem bei der Auswahl einer festen Anzahl von Iterationen ist, dass es schwierig ist zu wissen, wie viele Iterationen es gibt, insbesondere wenn die Optimierungsfunktion kompliziert ist und wer weiß Wie viele lokale Minima es gibt und ob Sie die Initialisierung nach dem Zufallsprinzip vorgenommen haben, verschlimmert das Problem weiter, da es noch schwieriger ist, eine gute "kleine" Anzahl von Iterationen zu erraten. Wie gehen Sie in der Realität mit diesen Problemen um, wenn Sie das frühe Anhalten tatsächlich nutzen möchten? Wie stellen Sie sicher, dass Sie nicht zu viel schießen oder unterschießen?
Charlie Parker

Ich möchte klarstellen, was reltol(dh wann es keine "Verbesserung" mehr gibt) bedeutet. Erste Verbesserung bedeutet, die Kostenfunktion zu verringern. Ich gehe also davon aus, dass das, was Sie damit meinen, ist, dass, wenn die Kostenfunktion aufhört, ausreichend zu sinken (oder zu steigen), eine Pause ist, oder? Man macht eigentlich nicht "| alt - neu |" Art der Update-Regel, oder?
Charlie Parker

1
Der abstolParameter ist nur sinnvoll, wenn Sie die Toleranz des Gradienten der Kostenfunktion und nicht die Kostenfunktion selbst verwenden. In einem lokalen Optimierer ist der Wert des Verlaufs Null. aber nicht der Wert der Funktion.
Mario Becerra

"Warmstart" ist ein sehr cleverer Trick! danke
Mehdi LAMRANI
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.