Kosten schrittweise senken · Verständlich erklärt

Der Gradientenabstieg verständlich erklärt

Im Nebel an einem Hang geht man immer dorthin, wo der Boden am steilsten abfällt. Ob man so im Tal ankommt, entscheidet die Länge der Schritte: Zu kurze dauern unnötig lange, zu lange schaukeln sich auf. Diese Seite erklärt das zuerst ohne Formeln und dann für Fachleute mit Formeln, Messwerten und Grenzen.

Zuletzt aktualisiert:

Teil 1 · Für Einsteiger

Ein Wort unbekannt? Das Begriffsverzeichnis erklärt es in wenigen Sätzen.

Im Nebel bergab

Stellen Sie sich vor, Sie stehen im dichten Nebel an einem Berghang und wollen ins Tal. Sie sehen nur wenige Schritte weit, und eine Karte haben Sie nicht. Eine Regel bleibt Ihnen: Spüren, in welcher Richtung der Boden unter den Füßen am steilsten abfällt, und einen Schritt dorthin gehen. Dann wieder spüren und wieder gehen.

So arbeitet der Gradientenabstieg. Der Gradient zeigt an der aktuellen Stelle bergauf; das Verfahren geht entgegengesetzt, also bergab. Übertragen auf eine Rechnung: Ihre Position am Hang sind Einstellungen wie Preis, Menge oder Gewicht, die Höhe an dieser Stelle sind die dazugehörigen Kosten oder Fehler. Ein genügend kleiner Schritt bergab ändert die Einstellungen so, dass die Kosten sinken. Das klappt, solange sich die Kosten ohne plötzliche Sprünge ändern.

Die Demo, ein Programm zum Ausprobieren im Browser, zeigt diesen Weg auf einer Landschaft mit Höhenlinien.

Die Länge des Schritts entscheidet

Die Richtung kennt das Verfahren nun. Offen ist, wie weit es in diese Richtung geht. Das ist die Schrittweite.

Sind die Schritte winzig, kommen Sie sicher voran, brauchen aber viele Schritte für jeden Meter Hang. Sind sie angemessen, erreichen Sie das Tal mit weniger Schritten. Sind sie zu groß, springen Sie über die tiefste Stelle hinweg und landen auf der Gegenseite, dort womöglich höher als zuvor. Von da zeigt die steilste Richtung zurück, und Sie springen wieder zu weit. Ab einer bestimmten Länge wird das Pendeln mit jedem Schritt größer, und Sie entfernen sich vom Tal.

In der Demo liegt diese Grenze scharf: Eine feste Schrittweite etwas unterhalb der Grenze nähert sich dem Ziel, wenn auch langsam. Schon ein kleiner Schritt darüber lässt die Werte wachsen, und bei größeren Schritten laufen sie davon. Die Grenze hängt vom Gelände ab: Je steiler und enger die Wand, desto kürzer muss der Schritt sein.

Warum ein langer, schmaler Graben so mühsam ist

In einer perfekt runden Schüssel zeigt die steilste Richtung genau zum tiefsten Punkt. Ist das Tal dagegen ein langer, schmaler Graben, zeigt sie vor allem auf die nächste Grabenwand zu. Sie gehen also quer zur Sohle, kommen auf der anderen Seite an, und dort zeigt die steilste Richtung wieder zurück. Es entsteht ein Zickzack von Wand zu Wand, während das eigentliche Ziel weit entfernt entlang der flachen Sohle liegt.

Wie langgestreckt ein Graben ist, misst die Konditionszahl: Je größer sie ist, desto länger und schmaler ist der Graben. Hier steckt der Kern. Die steilen Wände verlangen kurze Schritte, sonst schaukeln Sie sich auf. Die flache Sohle verlangt lange Schritte, sonst kommen Sie kaum voran. Mit einer festen Schrittlänge geht beides nicht zugleich.

In der Demo braucht das Verfahren bei fester Schrittweite umso mehr Schritte, je länger der Graben ist. Bei den längsten Gräben der Messreihe reicht dann die erlaubte Höchstzahl an Schritten nicht mehr aus.

Was hilft?

Statt die Schrittweite vorab festzulegen, kann man sie unterwegs anpassen. Beim Backtracking, wörtlich etwa „Zurückgehen“, probiert man an jeder Stelle zuerst einen langen Schritt. Geht es damit nicht spürbar bergab, nimmt man einen kürzeren, und so weiter, bis ein Schritt sich lohnt.

In der Demo schlägt dieses Probieren eine feste, vorsichtig gewählte Schrittweite: Es braucht weniger Schritte, und bei den beiden längsten Gräben der Messreihe kommt nur das Probieren innerhalb der erlaubten Höchstzahl an. Beim allerlängsten Graben bleibt es allerdings nur knapp darunter.

Wie ernst ist das Modell zu nehmen?

Die Demo rechnet mit Testlandschaften, nicht mit Betriebsdaten: einer Mulde, deren Länge man einstellen kann, und einem gekrümmten Tal mit bekanntem tiefstem Punkt. Ihre Aussagen gelten für Landschaften, in denen sich die Kosten ohne Sprünge ändern.

Zum Mitnehmen: Setzt ein Anbieter ein solches Verfahren ein, fragen Sie ihn, wie die Schrittweite gewählt wird und wann er aufhört zu rechnen, etwa wenn die Kosten kaum noch sinken, statt nach einer festen Rundenzahl. Das gilt, solange die Kosten sich ohne Sprünge ändern. Bei Stufenpreisen oder Mengenrabatten springen sie, und die Demo trifft darüber keine Aussage.

Hinweis: Alle Demos rechnen mit synthetischen oder frei verfügbaren Beispieldaten und laufen auf einem externen Anbieter (Datenschutz). Bitte geben Sie darin keine vertraulichen oder personenbezogenen Daten ein. Die Ergebnisse gelten für die jeweilige Demo-Instanz und lassen sich nicht ungeprüft auf reale Fälle übertragen; für darauf gestützte Entscheidungen übernehme ich keine Gewähr.

Teil 2 · Für Fachleute

Modell und Annahmen

Dieser Teil ist eigenständig lesbar. Er fasst die formale Beschreibung der Demo zusammen; die vollständige Fassung steht im Expander „📐 Mathematische Formulierung“ der Demo.

  • Aufgabe: unrestringierte Minimierung einer glatten Funktion \(f\), von der nur Funktionswert und Gradient genutzt werden. Der Abstieg läuft, bis der Gradient (fast) null ist oder das Schrittbudget erreicht ist.
  • Testfunktionen: die Quadratik \(f(x)=\tfrac12 x^\top A x\) mit kontrollierter Konditionszahl \(\kappa\) (Eigenwerte log-verteilt, zufällig rotiert) und die Rosenbrock-Funktion mit Start \((-1{,}2;\ 1{,}0)\) und Optimum \((1;\,1)\). Die interaktive Quadratik hat Dimension 2, damit die Kontur sichtbar bleibt; die Messreihen laufen intern in höherer Dimension, damit der Effekt kein 2D-Artefakt ist.
  • Schrittweiten-Modi: fest (\(\eta_k=\eta\)); exakte Liniensuche (nur Quadratik, geschlossene Formel); Backtracking nach Armijo, das einen langen Versuchsschritt verkürzt, bis die Armijo-Bedingung (hinreichender Abstieg) erfüllt ist. Die Parameter des Backtracking stehen im Quelltext der Demo (gd_optimizer.py).
  • Regler: Funktion, Schrittweiten-Modus, Konditionszahl, feste Schrittweite, maximale Iterationen und Zufalls-Seed; vier Beispiele laden Einstellungen mit einem Klick.

Die Formeln

Der Abstieg geht vom aktuellen Punkt gegen den Gradienten, die Schrittweite \(\eta_k\) bestimmt, wie weit:

\[x_{k+1}=x_k-\eta_k\nabla f(x_k)\]

Auf der Quadratik hat die exakte Liniensuche eine geschlossene Formel. Sie ist die Schrittweite, die \(f\) entlang der Richtung \(-\nabla f(x_k)\) am stärksten senkt; die Demo prüft sie gegen eine Gittersuche entlang dieser Richtung:

\[\eta_k=\dfrac{\nabla f(x_k)^\top\nabla f(x_k)}{\nabla f(x_k)^\top A\,\nabla f(x_k)}\]

Bei fester Schrittweite gilt für Konvergenz die notwendige Bedingung mit dem größten Eigenwert \(\lambda_{\max}(A)\):

\[\eta<2/\lambda_{\max}(A)\]

Zur Einordnung (Standardwissen, nicht aus der README): Ein fester Schritt multipliziert die Fehlerkomponente zum Eigenwert \(\lambda\) mit \(1-\eta\lambda\), und sie schrumpft für alle Eigenwerte genau dann, wenn \(\lvert 1-\eta\lambda\rvert < 1\) gilt. Daher ist die Bedingung auf der Quadratik für Konvergenz zugleich notwendig und hinreichend; knapp darüber wächst die Komponente zum größten Eigenwert in jedem Schritt. Für die exakte Liniensuche nennt die klassische Theorie als Schranke für die Rate je Schritt \(\left(\frac{\kappa-1}{\kappa+1}\right)^2\) (Nocedal & Wright 2006).

Befunde

Alle Zahlen stammen aus den Messreihen der Demo und wurden mit deren Auswertungsfunktionen (gd_evaluation.py) nachgerechnet. Es sind Einzelläufe je Zeile, keine Mittel über viele Wiederholungen.

Gemessene Rate gegen die Schranke. Exakte Liniensuche auf einer Quadratik, \(d=10\), Budget 500 Schritte. Die gemessene Rate bleibt bei jeder geprüften Konditionszahl unter der Schranke:

Konditionszahl κGemessene Rate je SchrittSchrankeIterationen bis Konvergenz
20,08300,111120
100,57000,6694101
500,82870,9231500 (Budget erreicht)
2000,88810,9802500 (Budget erreicht)

Divergenzschwelle bei fester Schrittweite. \(d=6\), \(\kappa=20\), Schwelle \(2/\lambda_{\max}=0{,}1000\), Funktionswert nach 200 Schritten. Knapp unter der Schwelle nähert sich der Abstieg dem Optimum (langsam), knapp darüber wächst der Funktionswert, bei größerem Abstand zur Schwelle explodiert er:

Faktor × SchwelleηDivergiert?f(x) nach 200 Schritten
0,500,0500Nein\(2{,}12\cdot10^{-12}\)
0,900,0900Nein\(7{,}13\cdot10^{-20}\)
0,990,0990Nein\(2{,}56\cdot10^{-3}\)
1,010,1010Ja\(2{,}28\cdot10^{4}\)
1,100,1100Ja\(3{,}90\cdot10^{32}\)
1,500,1500Ja\(2{,}14\cdot10^{121}\)

Backtracking gegen feste Schrittweite. \(d=10\), Budget 2000 Iterationen, feste Schrittweite \(1/\lambda_{\max}\). Backtracking braucht bis \(\kappa=500\) weniger als die halbe Iterationszahl der festen Schrittweite. Bei \(\kappa=500\) und \(\kappa=2000\) ist es der einzige der beiden Modi, der innerhalb des Budgets wirklich konvergiert; bei \(\kappa=2000\) ist der Vorsprung nur noch klein:

κIterationen (fest)Iterationen (Backtracking)f am Ende (fest)f am Ende (Backtracking)
58943\(4{,}73\cdot10^{-21}\)\(1{,}87\cdot10^{-21}\)
20386131\(4{,}88\cdot10^{-21}\)\(3{,}15\cdot10^{-21}\)
1001.969887\(4{,}98\cdot10^{-21}\)\(3{,}22\cdot10^{-21}\)
5002.000 (Budget)500\(3{,}61\cdot10^{-7}\)\(3{,}89\cdot10^{-21}\)
2.0002.000 (Budget)1.896\(1{,}03\cdot10^{-2}\)\(4{,}62\cdot10^{-21}\)
FrageBefund
Rosenbrock-Funktion (Start \((-1{,}2;\ 1{,}0)\))Feste Schrittweite \(\eta=0{,}001\), Budget 5.000: 5.000 Iterationen (Budget), nicht konvergiert, \(f\) am Ende \(3{,}76\cdot10^{-3}\). Backtracking: 767 Iterationen, konvergiert, \(f\) am Ende \(1{,}19\cdot10^{-20}\).
Stimmt die Formel der exakten Liniensuche?Maximale relative Abweichung von einer Gittersuche \(1{,}27\cdot10^{-16}\). Die Zahl sagt wenig aus, denn der Mittelpunkt des Gitters ist die Formel-Schrittweite selbst (laut gd_evaluation.py); belegt ist nur die Feinheit des Gitters.
Stimmen die handgeleiteten Gradienten?Abweichung gegen finite Differenzen: Quadratik \(1{,}93\cdot10^{-10}\), Rosenbrock \(1{,}06\cdot10^{-10}\).

Grenzen

  • Ein Szenario je Zeile: Jede Tabellenzeile ist ein Lauf mit einem festen Zufalls-Seed (laut Quelltext gd_evaluation.py der Zufalls-Seed 0 für Matrix und Startpunkt). Die Zahlen zeigen die Größenordnung des Effekts, keine Mittelwerte über viele Instanzen.
  • Rate nur über einen Anfangsabschnitt: Laut Quelltext ist die gemessene Rate das geometrische Mittel der Funktionswert-Verhältnisse der ersten Schritte (höchstens die ersten 50). Bei großer Konditionszahl kann die Rate später abweichen; die Schranke ist ein Worst-Case-Versprechen, kein exakter Wert.
  • Nur glatte, unrestringierte Minimierung: Nebenbedingungen, Rauschen im Gradienten und mehrere lokale Minima kommen nicht vor; die Testfunktionen haben ein bekanntes, einziges Optimum. Dass der Gradientenabstieg bei mehreren Tälern nur ein lokales Minimum findet, ist Standardwissen, nicht Teil der Demo.
  • Kein Wettbewerb: Die Demo vergleicht den Gradientenabstieg nicht mit Newton- oder Quasi-Newton-Verfahren und nicht mit Solvern aus Bibliotheken; geprüft wird gegen das bekannte exakte Optimum.
  • Vergleichsbasis (Standardwissen, nicht aus der README): Verglichen wird nur mit der festen Schrittweite \(1/\lambda_{\max}\). Die beste feste Schrittweite \(2/(\lambda_{\min}+\lambda_{\max})\) ist bei großem \(\kappa\) etwa doppelt so schnell. Backtracking braucht je Iteration mehrere Funktionsauswertungen; die Tabellen zählen nur Iterationen, nicht den Rechenaufwand.
  • Dimension: Die interaktive Quadratik bleibt bei Dimension 2, die Messreihen laufen in höherer Dimension. Die Rosenbrock-Funktion ist immer zweidimensional.

Quellen

  • Cauchy, A.-L. (1847): Méthode générale pour la résolution des systèmes d’équations simultanées. Comptes Rendus de l’Académie des Sciences 25, 536–538.
  • Nocedal, J. & Wright, S. J. (2006): Numerical Optimization (2. Aufl.). Springer.
  • Quelltext, Messreihen und Tests der Demo: github.com/sebastian-hanisch/gradient-descent-demo.

Die genannten Arbeiten wurden für diese Seite nicht nachgeschlagen; die Literaturhinweise stammen aus der README der Demo. Die Herleitung der Schwelle über \(1-\eta\lambda\) ist Standardwissen und steht nicht in der README.