Gradientenverfahren

Das Gradientenverfahren wird in der Numerik eingesetzt, um allgemeine Optimierungsprobleme zu lösen. Dabei schreitet man (am Beispiel eines Minimierungsproblems) von einem Startpunkt aus entlang einer Abstiegsrichtung, bis keine numerische Verbesserung mehr erzielt wird. Wählt man als Abstiegsrichtung den negativen Gradient, also die Richtung des lokal steilsten Abstiegs, erhält man das Verfahren des steilsten Abstiegs. Manchmal werden die Begriffe Gradientenverfahren und Verfahren des steilsten Abstiegs synonym verwendet. Im Allgemeinen bezeichnet Gradientenverfahren eine Optimierungsmethode, bei der die Abstiegsrichtung durch Gradienteninformation gewonnen wird, also nicht notwendigerweise auf den negativen Gradient beschränkt ist.

Das Verfahren des steilsten Abstiegs konvergiert oftmals sehr langsam, da es sich dem stationären Punkt mit einem starken Zickzack-Kurs nähert. Andere Verfahren für die Berechnung der Abstiegsrichtung erreichen teils deutlich bessere Konvergenzgeschwindigkeiten, so bietet sich für die Lösung von symmetrisch positiv definiten linearen Gleichungssystemen beispielsweise das Verfahren der konjugierten Gradienten an. Der Gradientenabstieg ist mit dem Bergsteigeralgorithmus (hill climbing) verwandt.

Das Optimierungsproblem

Das Gradientenverfahren ist einsetzbar, um eine reellwertige, differenzierbare Funktion {\displaystyle f\colon \mathbb {R} ^{n}\rightarrow \mathbb {R} } zu minimieren:

{\displaystyle {\underset {x\in \mathbb {R} ^{n}}{\min }}\ f(x).}

Hierbei handelt es sich um ein Problem der Optimierung ohne Nebenbedingungen, auch unrestringiertes Optimierungsproblem genannt.

Das Verfahren

Das Gradientenverfahren generiert ausgehend von einem Startpunkt {\displaystyle x^{0}\in \mathbb {R} ^{n}} eine Folge von Punkten {\displaystyle x^{k}\in \mathbb {R} ^{n}} gemäß der Iterationsvorschrift

{\displaystyle x^{k+1}=x^{k}+\alpha ^{k}d^{k},\quad k=0,1,\ldots }

wobei {\displaystyle \alpha ^{k}>0} eine positive Schrittweite ist und {\displaystyle d^{k}\in \mathbb {R} ^{n}} eine Abstiegsrichtung. Dabei werden sowohl \alpha^k als auch d^{k} in jedem Iterationsschritt so bestimmt, dass die Folge x^k zu einem stationären Punkt von f konvergiert.

Bestimmen der Abstiegsrichtung

Abstiegsrichtungen d_{i} haben einen Winkel größer als 90° mit dem Gradienten im Punkt x. Die strichlierte Gerade ist die Tangente an die Isolinie der zweidimensionalen Funktion, sie stellt den Grenzfall dar bei dem der Winkel mit dem Gradient 90° beträgt. Die Abstiegsrichtung d_{2} zeigt in Richtung des negativen Gradienten, d.h. in Richtung des steilsten Abstiegs.

Eine Abstiegsrichtung im Punkt x^k ist ein Vektor d^{k}, der

{\displaystyle \left(\nabla f(x^{k})\right)^{T}d^{k}<0}

erfüllt. Intuitiv bedeutet das, dass der Winkel zwischen {\displaystyle \nabla f(x^{k})} und d^{k} größer als 90° ist. Da der Gradient {\displaystyle \nabla f(x^{k})} in Richtung des steilsten Anstiegs zeigt, ist d^{k} eine Richtung entlang derer sich der Funktionswert verringert.

Viele Gradientenmethoden berechnen die Abstiegsrichtung anhand

{\displaystyle d^{k}=-D^{k}\nabla f(x^{k}),}

wobei {\displaystyle D^{k}} eine positiv definite Matrix ist. In diesem Fall lautet die Bedingung für die Abstiegsrichtung

{\displaystyle \left(\nabla f(x^{k})\right)^{T}\left(-D^{k}\right)\nabla f(x^{k})<0,}

und ist dank der positiven Definitheit von {\displaystyle D^{k}} immer erfüllt.

Mit der Wahl der Matrix {\displaystyle D^{k}} erhält man folgende Algorithmen:

Bestimmen der Schrittweite

Die Bestimmung der Schrittweite \alpha^k ist ein wichtiger Teil des Gradientenverfahren, der großen Einfluss auf die Konvergenz haben kann. Ausgehend vom Iterationsschritt {\displaystyle x^{k+1}=x^{k}+\alpha ^{k}d^{k}} betrachtet man den Wert von f entlang der Linie {\displaystyle x^{k}+\alpha d^{k}}, also {\displaystyle f(\alpha )=f(x^{k}+\alpha d^{k})}. Man spricht in diesem Zusammenhang oft auch von Liniensuche. Die ideale Wahl wäre es, die Schrittweite als jenen Wert zu berechnen, der die Funktion {\displaystyle f(\alpha )} minimiert, also das eindimensionale Problem

{\displaystyle \min _{\alpha >0}\left\{f(\alpha )=f(x^{k}+\alpha d^{k})\right\}}

zu lösen. Dies wird als exakte Liniensuche bezeichnet und wird in dieser Form in der Praxis selten angewandt, da selbst für einfache Optimierungsprobleme die exakte Bestimmung der Schrittweite sehr rechenaufwändig ist.

Als Alternative zur exakten Liniensuche lockert man die Erfordernisse und beschränkt sich darauf, dass der Funktionswert sich mit jedem Iterationsschritt „genügend“ verringert. Dies wird auch als inexakte Liniensuche bezeichnet. Die einfachste Möglichkeit besteht darin, die Schrittweite \alpha ausgehend von einem Startwert (z.B. \alpha =1) so lange zu verringern, bis {\displaystyle f(x^{k+1})=f(x^{k}+\alpha d^{k})<f(x^{k})} erreicht ist. Diese Methode funktioniert in der Praxis oft zufriedenstellend, man kann jedoch zeigen, dass für manche pathologischen Funktionen diese Liniensuche zwar in jedem Schritt den Funktionswert verringert, die Folge x^k jedoch nicht zu einem stationärem Punkt konvergiert.

Armijo-Bedingung

Die Armijo-Bedingung formalisiert das Konzept "genügend" in der geforderten Verringerung des Funktionswertes. Die Bedingung {\displaystyle f(x^{k}+\alpha d^{k})<f(x^{k})} wird modifiziert zu

{\displaystyle f(x^{k}+\alpha d^{k})\leq f(x^{k})+\sigma \alpha \left(\nabla f(x^{k})\right)^{T}d^{k},}

mit {\displaystyle \sigma \in (0,1)}. Die Armijo-Bedingung umgeht die Konvergenzprobleme aus der vorigen einfachen Bedingung, indem sie fordert dass die Verringerung zumindest proportional zur Schrittweite und zur Richtungsableitung {\displaystyle \left(\nabla f(x^{k})\right)^{T}d^{k}} ist, mit Proportionalitätskonstante \sigma . In der Praxis werden oft sehr kleine Werte verwendet, z.B. {\displaystyle \sigma =10^{-4}}.

Backtracking Liniensuche

Die Armijo-Bedingung gilt immer dann, wenn die Schrittweite genügend klein ist und kann damit zum Stillstand des Gradientenverfahrens führen – der Schritt ist so klein, dass kein nennenswerter Fortschritt mehr gemacht wird. Eine einfache Kombination aus wiederholter Verkleinerung der Schrittweite und der Armijo-Bedingung ist die Backtracking-Liniensuche. Sie stellt sicher, dass die Schrittweite klein genug ist, um die Armijo-Bedingung zu erfüllen, andererseits aber nicht zu klein. In Pseudocode:

Wähle Startwert für \alpha , z.B. \alpha =1, wähle Konstanten {\displaystyle \sigma \in (0,1),\ \rho \in (0,1)}
while {\displaystyle f(x^{k}+\alpha d^{k})>f(x^{k})+\sigma \alpha \left(\nabla f(x^{k})\right)^{T}d^{k}}
  {\displaystyle \alpha =\rho \alpha }
end
Setze {\displaystyle \alpha ^{k}=\alpha }

Die Backtracking-Liniensuche verringert die Schrittweite wiederholt um den Faktor \rho , bis die Armijo-Bedingung erfüllt ist. Sie terminiert garantiert nach einer endlichen Anzahl von Schritten und wird wegen ihrer Einfachheit oft in Praxis verwendet.

Konvergenz

Im Allgemeinen konvergiert das Gradientenverfahren weder zu einem globalen noch zu einem lokalen Minimum. Garantiert werden kann nur die Konvergenz zu einem stationären Punkt, also einem Punkt x^{*} mit {\displaystyle \nabla f(x^{*})=0}. Schränkt man die Klasse der Zielfunktionen auf konvexe Funktionen ein, so sind stärkere Garantien möglich, siehe konvexe Optimierung.

Konvergenzgeschwindigkeit

Für den allgemeinen Fall kann weder über die Konvergenzgeschwindigkeit der Folge {\displaystyle \{f(x^{k})\}} noch über die Konvergenzgeschwindigkeit der Folge {\displaystyle \{x^{k}\}} eine Aussage getroffen werden. Ist L eine Lipschitz-Konstante von \nabla f, so kann man zeigen, dass die Norm der Gradienten {\displaystyle g_{N}^{*}=\min _{0\leq k\leq N}\|\nabla f(x^{k})\|} mit der Rate {\displaystyle {\sqrt {\frac {L\left(f(x^{0})-f(x^{*})\right)}{\omega (N+1)}}}} gegen 0 konvergiert, wobei \omega>0 eine positive Konstante ist.

Beispiel

Die Rosenbrock Funktion mit {\displaystyle a=1,\ b=100}

Die Rosenbrock-Funktion

{\displaystyle f:\mathbb {R} ^{2}\to \mathbb {R} :x\mapsto \left(a-x_{1}\right)^{2}+b\left(x_{2}-x_{1}^{2}\right)^{2}}

wird häufig als Test für Optimierungsmethoden verwendet, da sie wegen des schmalen und flachen Tals, in welchem iterative Methoden nur kleine Schritte machen können, eine Herausforderung darstellt. Die Konstanten werden üblicherweise mit {\displaystyle a=1,\ b=100} gewählt, das globale Optimum liegt in diesem Fall bei {\displaystyle x^{*}=(1,1)} mit dem Funktionswert {\displaystyle f(x^{*})=0}.

Der Gradient sowie die Hesse-Matrix ergeben sich als

{\displaystyle \nabla f={\begin{bmatrix}4bx_{1}^{3}-4bx_{1}x_{2}+2(x_{1}-a)\\2b(-x_{1}^{2}+x_{2})\end{bmatrix}}}

sowie

{\displaystyle \nabla ^{2}f={\begin{bmatrix}12bx_{1}^{2}-4bx_{2}+2&-4bx_{1}\\-4bx_{1}&2b\end{bmatrix}}}.

Damit lassen sich die Algorithmen Verfahren des steilsten Abstiegs und Newton-Verfahren direkt implementieren. Um das Gauß-Newton-Verfahren anzuwenden, muss die Rosenbrock-Funktion zunächst in die Form „Summe von Quadraten von Funktionen“ gebracht werden. Dies ist auf der Seite zum Gauß-Newton-Verfahren im Detail erklärt.

Optimierung mit Verfahren des steilsten Abstiegs, Newton-Verfahren und Gauß-Newton Verfahren

Für die Liniensuche kommt bei allen Verfahren ein Backtracking mit folgenden Parametern zum Einsatz: Startwert \alpha =1, {\displaystyle \rho =0{,}5,\ \sigma =0{,}001}. Als Startpunkt wird {\displaystyle x^{0}=(-0{,}62,-0{,}38)} gewählt.

Das Verfahren des steilsten Abstiegs findet auch nach 1000 Iterationen nicht zum globalen Optimum und steckt in dem flachen Tal fest, wo nur sehr kleine Schritte möglich sind. Im Gegensatz dazu finden sowohl das Newton-Verfahren als auch der Gauß-Newton- Algorithmus in wenigen Iterationen zum globalen Optimum.

Siehe auch

Trenner
Basierend auf einem Artikel in: Wikipedia.de
Seitenende
Seite zurück
©  biancahoegel.de
Datum der letzten Änderung:  Jena, den: 11.02. 2023