BFGS vs. Conjugate Gradient Method


25

Welche Überlegungen sollten bei der Auswahl zwischen BFGS und konjugiertem Gradienten zur Optimierung angestellt werden? Die Funktion, die ich mit diesen Variablen zu kombinieren versuche, sind Exponentialfunktionen. Die eigentliche Zielfunktion beinhaltet jedoch unter anderem die Integration und ist sehr kostspielig, wenn dies überhaupt hilft.


3
Nun, BFGS ist in Bezug auf die Lagerung sicherlich teurer als CG. Einer erfordert die Pflege eines ungefähren Hessischen, während der andere nur ein paar Vektoren von Ihnen benötigt. Auf der anderen Seite erfordern beide die Berechnung eines Gradienten, aber mir wurde gesagt, dass Sie mit BFGS mit der Verwendung endlicher Differenznäherungen davonkommen können, anstatt eine Routine für den Gradienten schreiben zu müssen (aber die Version mit endlichen Differenzen konvergiert ein wenig natürlich langsamer als mit tatsächlichen Steigungen). Wenn Sie über eine automatische Differenzierungsfunktion verfügen, besteht Ihre einzige Sorge in der Speicherung.
JM

Müssen nur ~ 7 (definitiv weniger als 10) Variablen passen, bedeutet das, dass die hessische Approximation nur (höchstens) eine 10x10-Matrix korrekt ist? In welchem ​​Fall ist einer schneller als der andere?
drjrm3

Ich glaube nicht, dass es einen so großen Geschwindigkeitsunterschied geben würde. Ich denke, der Teil Ihrer Berechnung, der wahrscheinlich die meiste Zeit in Anspruch nehmen würde, sind die Quadraturen, die Sie für die Funktionsbewertung ausführen müssen. Sie sollten wirklich einige Experimente selbst durchführen, wenn die Anzahl der Parameter so gering ist, wie Sie es behaupten.
JM

Antworten:


13

JM hat Recht mit der Lagerung. BFGS erfordert einen ungefähren Hessischen Wert, aber Sie können ihn mit der Identitätsmatrix initialisieren und dann einfach die Rang-2-Aktualisierungen des ungefähren Hessischen Werts berechnen, solange Gradienteninformationen verfügbar sind, vorzugsweise analytisch und nicht durch endliche Differenzen. BFGS ist eine Quasi-Newton-Methode, die in weniger Schritten konvergiert als CG und weniger dazu neigt, "hängen zu bleiben" und leichte algorithmische Optimierungen zu erfordern, um für jede Iteration einen signifikanten Abfall zu erzielen.

Im Gegensatz dazu benötigt CG Matrix-Vektor-Produkte, die für Sie nützlich sein können, wenn Sie Richtungsableitungen berechnen können (wiederum analytisch oder unter Verwendung endlicher Differenzen). Eine Berechnung endlicher Differenzen einer Richtungsableitung ist viel billiger als eine Berechnung endlicher Differenzen eines Hessischen. Wenn Sie also Ihren Algorithmus mit endlichen Differenzen konstruieren möchten, berechnen Sie die Richtungsableitung einfach direkt. Diese Beobachtung trifft jedoch nicht wirklich auf BFGS zu, das ungefähre Hessische Werte unter Verwendung innerer Produkte von Gradienteninformationen berechnet.

In Bezug auf die Konvergenzraten entspricht CG-Iterationen ungefähr einem Schritt der Newtonschen Methode , wenn die Anzahl der Entscheidungsvariablen in Ihrem Problem ist . BFGS ist eine Quasi-Newton-Methode, aber die gleiche Art von Beobachtung sollte gelten; Es ist wahrscheinlich, dass Sie mit BFGS in weniger Iterationen Konvergenz erzielen, es sei denn, es gibt ein paar CG-Richtungen, in denen viel Gefälle herrscht, und nach einigen CG-Iterationen starten Sie es neu. CG-ähnliche Methoden sind billiger, wenn Matrix-Vektor-Produkte billig sind und Ihr Problem so groß ist, dass das Speichern des Hessischen schwierig oder unmöglich ist. BFGS umfasst einige weitere Vektor-Vektor-Produkte, um das ungefähre Hessische zu aktualisieren, sodass jede BFGS-Iteration teurer ist, Sie jedoch weniger benötigen, um ein lokales Minimum zu erreichen.nnn

Ich würde die beiden Algorithmen anhand eines kleinen Testproblems für Ihre Anwendung vergleichen, wenn Sie wissen, dass die Speicherung kein Problem darstellt. Ohne die Besonderheiten Ihres Problems zu kennen, gehe ich davon aus, dass BFGS schneller sein wird, aber Sie sollten die beiden Algorithmen wirklich testen, um eine bessere Vorstellung davon zu bekommen, welche besser funktionieren wird.

Abschließend noch ein Wort zur automatischen Differenzierung: Nachdem ich einige Erfahrungen mit einer internen automatischen Differenzierungsfunktion (AD) für Fortran ( DAEPACK ) gesammelt habe , kann ich Ihnen sagen, dass AD-Tools oft schwierig sind. Sie sind möglicherweise nicht unbedingt in der Lage, den von ihnen selbst generierten Code zu unterscheiden. Es gibt zwei Arten von AD-Tools:

  • AD-Tools von Quelle zu Quelle
  • Operator, der AD-Tools überlastet

Source-to-Source-Tools sind im Wesentlichen modifizierte Compiler, die den von Ihnen geschriebenen Quellcode analysieren und automatisch neuen Quellcode generieren, der den Gradienten der Funktionen in Ihrem Quellcode berechnet. Für das Überladen von AD-Tools durch Operatoren müssen Sie die überladenen AD-Operatoren in Ihrem Quellcode verwenden, damit Ableitungen berechnet werden können. Dies würde zusätzlichen Aufwand für die Berechnung analytischer Ableitungen mit AD erfordern.


22

Die damit verbunden Kosten von BFGS können im Einklang mit CG bringt mehr werden , wenn Sie die Verwendung begrenzte Speichervarianten statt den Vollspeicher BFGS. Dadurch wird die BFGS-Aktualisierung für die letzten Aktualisierungen durch eine Reihe von Rang-1-Aktualisierungen effizient berechnet, ohne dass mehr als die letzten Lösungen und Gradienten gespeichert werden müssen .mmm

Meiner Erfahrung nach speichert BFGS mit vielen Aktualisierungen Informationen, die zu weit von der aktuellen Lösung entfernt sind, um wirklich nützlich für die Annäherung an den nicht verzögerten Jacobian zu sein, und Sie können tatsächlich die Konvergenz verlieren, wenn Sie zu viel speichern. Es gibt "memorylose" Varianten von BFGS, die aus genau diesen Gründen nichtlinearen konjugierten Verläufen sehr ähnlich sehen (siehe das letzte Update, das für einen dieser Verläufe beschrieben wurde). Wenn Sie also eher L-BFGS als BFGS ausführen möchten, verschwinden die Speicherprobleme und die Methoden sind miteinander verwandt . Anekdoten belegen, dass ein Neustart ein heikles Problem ist, da er manchmal unnötig und manchmal sehr notwendig ist.

Ihre Wahl zwischen beiden hängt auch stark von den Problemen ab, an denen Sie interessiert sind. Wenn Sie die Ressourcen haben, können Sie beide für Ihre Probleme ausprobieren und entscheiden, welche besser funktioniert. Ich persönlich optimiere zum Beispiel nicht mit diesen Algorithmen, sondern kümmere mich um die Lösung nichtlinearer Gleichungssysteme. Für diese habe ich festgestellt, dass NCG besser funktioniert und es einfacher ist, eine nichtlineare Vorkonditionierung durchzuführen. BFGS ist robuster.

Ehrlich gesagt, meine Lieblingsmethode für diese Art von Dingen ist N-GMRES . Dies gilt insbesondere dann, wenn Ihre Gradientenauswertung sehr teuer ist, da Sie meiner Erfahrung nach das Beste für Ihr Geld bekommen, indem Sie ein kleines Minimierungsproblem auf den letzten lösen , um eine neue Lösung mit geringerem Restgehalt zu konstruieren.m


Ich habe L-BFGS total vergessen. +1 dafür.
JM

15

In geringen Dimensionen ist eine gut implementierte BFGS-Methode im Allgemeinen sowohl schneller als auch robuster als CG, insbesondere wenn die Funktion nicht sehr weit von einem Quadrat entfernt ist.

Weder BFGS noch CG benötigen eine Annahme über die Konvexität. nur die anfängliche hessische Näherung (für BFGS) bzw. Der Vorkonditionierer (für CG) muss positiv bestimmt sein. Diese können jedoch immer als Identitätsmatrix in geringen Dimensionen ohne großen Schaden ausgewählt werden. Siehe auch https://scicomp.stackexchange.com/a/3213/1117

Wenn kein programmierter Gradient vorhanden ist, ist die Verwendung numerischer Gradienten eine große Verschwendung von Aufwand, insbesondere wenn Funktionswerte teuer sind. Vielmehr sollte ein ableitungsfreier Algorithmus verwendet werden. Eine aktuelle Umfrage finden Sie unter http://archimedes.cheme.cmu.edu/?q=dfocomp .


Der Link gibt mir ein "404 Not Found", können Sie es beheben?
Stiefel

@Stiefel: Ich habe es behoben. Der neue Link verweist auf eine stark verbesserte Version.
Arnold Neumaier
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.