Ich beginne mit einer allgemeinen Bemerkung: Informationen erster Ordnung (dh die Verwendung von nur Verläufen, die die Steigung codieren) können nur Richtungsinformationen liefern: Sie können Ihnen sagen, dass der Funktionswert in Suchrichtung abnimmt, jedoch nicht für wie lange . Um zu entscheiden, wie weit die Suchrichtung gehen soll, benötigen Sie zusätzliche Informationen (Gradientenabstieg mit konstanten Schrittlängen kann selbst bei konvexen quadratischen Problemen fehlschlagen). Dafür haben Sie grundsätzlich zwei Möglichkeiten:
- Verwenden Sie Informationen zweiter Ordnung (die die Krümmung codieren), z. B. mithilfe der Newton-Methode anstelle des Gradientenabfalls (für den Sie immer die Schrittlänge ausreichend nahe am Minimierer liegt).1
- Versuch und Irrtum (womit ich natürlich die Verwendung einer richtigen Zeilensuche wie Armijo meine ).
Wenn Sie beim Schreiben keinen Zugriff auf zweite Ableitungen haben und die Bewertung der Zielfunktion sehr teuer ist, besteht Ihre einzige Hoffnung darin, Kompromisse einzugehen: Verwenden Sie genügend ungefähre Informationen zweiter Ordnung, um eine gute Kandidatenschrittlänge zu erhalten, sodass eine Linie entsteht Die Suche erfordert nur Auswertungen (dh höchstens ein (kleines) konstantes Vielfaches des Aufwands, den Sie zur Bewertung Ihres Gradienten benötigen).O(1)
Eine Möglichkeit ist die Verwendung von Barzilai-Borwein-Schrittlängen (siehe z. B. Fletcher: Zur Barzilai-Borwein-Methode . Optimierung und Steuerung mit Anwendungen, 235–256, Appl. Optim., 96, Springer, New York, 2005 ). Die Idee ist, eine endliche Differenznäherung der Krümmung entlang der Suchrichtung zu verwenden, um eine Schätzung der Schrittgröße zu erhalten. Wählen Sie insbesondere beliebig, setzen Sie g 0 : = ∇ f ( x 0 ) und dann für k = 0 , . . . ::α0>0g0:=∇f(x0)k=0,...
- Setze und x k + 1 = x k + s ksk=−α−1kgkxk+1=xk+sk
- Bewerten Sie und setzen Sie y k = g k + 1 - g kgk+1=∇f(xk+1)yk=gk+1−gk
- Setze αk+1=(yk)Tyk(yk)Tsk
f(xk+1)f(xk)σk∈(0,α−1k)γ ∈ ( 0 , 1 ) M M. = 10
f(xk−σkgk)≤maxmax(k−M,1)≤j≤kf(xj)−γσk(gk)Tgk,
γ∈(0,1)MM=10
Ein alternativer (und meiner Meinung nach viel besserer) Ansatz wäre die Verwendung dieser Finite-Differenzen-Näherung bereits bei der Berechnung der Suchrichtung. Dies wird als Quasi-Newton-Methode bezeichnet . Die Idee ist, schrittweise eine Approximation des Hessischen unter Verwendung von Gradientendifferenzen zu erstellen . Zum Beispiel könnten Sie (die Identitätsmatrix) nehmen und für lösen
und setze
mit wie oben und . (Dies wird als Broyden-Update bezeichnetH 0 = I d k = 0 , … H k s k = - g k , H k + 1 = H k + ( y k - H k s k ) T ( s k ) T.∇2f(xk)H0=Idk=0,…
Hksk=−gk,(1)
Hk+1=Hk+(yk−Hksk)T(sk)T(sk)Tsk
ykxk+1=xk+skund wird in der Praxis selten verwendet; Ein besseres, aber etwas komplizierteres Update ist das
BFGS-Update , für das ich - und weitere Informationen - auf Nocedal und Wrights Buch
Numerical Optimization verweise .) Der Nachteil ist, dass a) dies die Lösung eines linearen Systems in jedem Schritt erfordern würde (aber Nur von der Größe des Unbekannten, was in Ihrem Fall eine Anfangsbedingung ist, sollte der Aufwand durch das Lösen von PDEs dominiert werden, um den Gradienten zu erhalten. Außerdem gibt es Aktualisierungsregeln für Approximationen des
inversen Hessischen, für die nur eine einzige Matrix berechnet werden muss -vector product) und b) Sie benötigen noch eine Zeilensuche, um Konvergenz zu gewährleisten ...
Glücklicherweise gibt es in diesem Zusammenhang einen alternativen Ansatz, der jede Funktionsbewertung nutzt. Die Idee ist, dass für symmetrisch und positiv definit (was für das BFGS-Update garantiert ist) das Lösen von der Minimierung des quadratischen Modells
In einer Vertrauensbereichsmethode würden Sie dies mit der zusätzlichen Einschränkung tun , wobei ein entsprechend gewählter Vertrauensbereichsradius ist (der die Rolle der Schrittlänge ). Die Schlüsselidee besteht nun darin, diesen Radius basierend auf dem berechneten Schritt adaptiv auszuwählen. Insbesondere betrachten Sie das Verhältnis
Hk(1)
qk(s)=12sTHks+sTgk.
∥s∥≤ΔkΔkσkρk:=f(xk)−f(xk+sk)f(xk)−qk(sk)
der tatsächlichen und vorhergesagten Verringerung des Funktionswerts. Wenn sehr klein ist, war Ihr Modell schlecht, und Sie verwerfen und versuchen es erneut mit . Wenn nahe bei , ist Ihr Modell gut und Sie setzen und erhöhen . Andernfalls setzen Sie einfach und lassen Ruhe. Um den tatsächlichen Minimierer von zu berechnen
ρkskΔk+1<Δkρk1xk+1=xk+skΔk+1>Δkxk+1=xk+skΔkskmin∥s∥≤Δkqk(s)Es gibt verschiedene Strategien, um zu vermeiden, dass das vollständig eingeschränkte Optimierungsproblem gelöst werden muss. Mein Favorit ist
Steihaugs abgeschnittene CG-Methode . Für weitere Einzelheiten verweise ich erneut auf Nocedal und Wright.