Zum Hauptinhalt springen

4.2 Gradientenabstieg

Für die lineare Regression gibt es eine geschlossene Lösung (4.3). Trotzdem führen die Folien hier den Gradientenabstieg (gradient descent) ein, weil er ein sehr allgemeines Verfahren ist, das für viele ML- und praktisch alle DL-Algorithmen funktioniert 📄 04_linear_methods_ws26.pdf, Folie 9.

Das Bild: blind den Berg hinunter​

Stell dir vor, du stehst mit verbundenen Augen an einem Hang und willst ins Tal. Du kannst nicht sehen, wo das Tal ist, aber du spürst mit den Füßen, in welche Richtung es bergab geht und wie steil es ist. Also machst du einen Schritt in Richtung des steilsten Abstiegs, tastest erneut, machst den nächsten Schritt usw.

Übersetzt: Die Höhe ist der Verlust, die Position sind die Parameter, die gefühlte Neigung ist die Ableitung des Verlusts nach den Parametern.

Für die Abbildung auf der Folie wird bb festgehalten und nur aa variiert. Der Verlust ist dann eine Parabel in aa.

Die Update-Regel​

📄 04_linear_methods_ws26.pdf, Folie 10 at+1=at−η⋅grad⁡a(Loss),grad⁡a(Loss)=∂ Loss∂aa_{t+1} = a_t - \eta\cdot\operatorname{grad}_a(\text{Loss}), \qquad \operatorname{grad}_a(\text{Loss}) = \frac{\partial\,\text{Loss}}{\partial a}
  • tt zählt die Schritte (Iterationen).
  • η\eta ist die Lernrate (learning rate), sie bestimmt die Schrittweite.
  • Warum das Minus? Ist die Ableitung positiv, steigt der Verlust mit wachsendem aa. Man muss also aa verkleinern, um bergab zu gehen. Ist sie negativ, muss aa wachsen. Das Minuszeichen sorgt in beiden Fällen für die richtige Richtung.
  • Automatische Schrittweitenanpassung: Die Schrittlänge ist η⋅∣grad⁡∣\eta\cdot\lvert\operatorname{grad}\rvert. Weit weg vom Minimum ist der Hang steil und die Schritte sind groß, nahe am Minimum wird die Ableitung klein und die Schritte werden kürzer. Im Minimum selbst ist die Ableitung 0, das Verfahren bleibt stehen.

Die richtige Lernrate​

Die rote Frage der Folie: Wie wählt man die Schrittweite, wenn man blind ist? 📄 04_linear_methods_ws26.pdf, Folie 11 zeigt drei Lernraten auf derselben Parabel:

LernrateVerhalten
η=0,0001\eta = 0{,}0001kleine Schritte, konvergiert stetig von einer Seite, aber langsam
η=0,0003\eta = 0{,}0003springt über das Minimum, pendelt aber schnell ein
η=0,00045\eta = 0{,}00045springt jedes Mal weiter auf die andere Seite: Divergenz, der Verlust wächst

Es gibt keine universell richtige Lernrate. Sie hängt von der Krümmung der Verlustfunktion ab und damit auch von der Skalierung der Daten. In der Praxis probiert man aus (typisch in Zehnerpotenzen) und beobachtet die Verlustkurve. Zum Ausprobieren verweist die Folie auf den Google Machine Learning Crash Course.

Durchgerechnetes Beispiel​

Ergänzung, nicht auf den Folien: Die drei Punkte (1,2)(1,2), (2,3)(2,3), (3,5)(3,5) aus 4.1. Wie auf der Folie halten wir bb fest, und zwar beim optimalen Wert b=1/3b = 1/3. Dann ist

Loss(a)=13∑i=13(yi−13−axi)2,∂ Loss∂a=−23∑ixi(yi−13−axi)=−23(21−14a).\text{Loss}(a) = \frac13\sum_{i=1}^3 \big(y_i - \tfrac13 - a x_i\big)^2, \qquad \frac{\partial\,\text{Loss}}{\partial a} = -\frac23\sum_i x_i\big(y_i - \tfrac13 - a x_i\big) = -\frac23(21 - 14a).

(Mit ∑xiyi=23\sum x_iy_i = 23, ∑xi=6\sum x_i = 6, ∑xi2=14\sum x_i^2 = 14.) Das Minimum liegt bei a∗=1,5a^* = 1{,}5.

Start a0=0a_0 = 0, Lernrate η=0,05\eta = 0{,}05:

ttata_tGradientat+1=at−0,05⋅Gradienta_{t+1} = a_t - 0{,}05\cdot\text{Gradient}
00−23⋅21=−14-\frac23\cdot 21 = -140,70{,}7
10,7−23(21−9,8)=−7,47-\frac23(21-9{,}8) = -7{,}471,0731{,}073
21,073−3,98-3{,}981,2721{,}272
31,272−2,12-2{,}121,3791{,}379

Der Abstand zum Optimum schrumpft jedes Mal um den Faktor 0,5330{,}533.

Warum genau dieser Faktor? Der Gradient ist linear in aa: grad⁡(a)=283(a−a∗)\operatorname{grad}(a) = \frac{28}{3}(a - a^*), wobei 283\frac{28}{3} die zweite Ableitung (Krümmung) ist. Einsetzen in die Update-Regel:

at+1−a∗=(1−η⋅283)(at−a∗).a_{t+1} - a^* = \Big(1 - \eta\cdot\tfrac{28}{3}\Big)(a_t - a^*).
η\etaFaktor 1−η⋅28/31 - \eta\cdot 28/3Verhalten
0,010{,}010,910{,}91sehr langsam
0,050{,}050,530{,}53zügig, von einer Seite
0,1070{,}10700Minimum in einem Schritt
0,20{,}2−0,87-0{,}87pendelt über das Minimum, konvergiert langsam
0,250{,}25−1,33-1{,}33divergiert: a1=3,5a_1 = 3{,}5, a2=−1,17a_2 = -1{,}17, …

Konvergenz gibt es genau dann, wenn ∣1−η⋅Kru¨mmung∣\lvert 1 - \eta\cdot\text{Krümmung}\rvert kleiner als 1 ist, also für η\eta kleiner als 2/Kru¨mmung≈0,2142/\text{Krümmung} \approx 0{,}214. Das ist genau das Muster der drei Bilder auf Folie 11.

Gradientenabstieg in zwei (und mehr) Dimensionen​

Lässt man aa und bb gleichzeitig variieren, ist der Verlust eine Fläche über der (a,b)(a,b)-Ebene 📄 04_linear_methods_ws26.pdf, Folie 12. Zoomt man weit genug hinein, sieht sie lokal aus wie eine schiefe Ebene (rechtes Bild der Folie). Man berechnet die Ableitung in jede Richtung und geht in beide gleichzeitig:

at+1=at−η⋅grad⁡a,bt+1=bt−η⋅grad⁡ba_{t+1} = a_t - \eta\cdot\operatorname{grad}_a, \qquad b_{t+1} = b_t - \eta\cdot\operatorname{grad}_b

Die beiden „Kräfte“ −grad⁡a-\operatorname{grad}_a und −grad⁡b-\operatorname{grad}_b addieren sich vektoriell zur Richtung des steilsten Abstiegs. In Vektorschreibweise mit allen Gewichten WW:

Wt+1=Wt−η⋅∇WW^{t+1} = W^t - \eta\cdot\nabla W

Komponentenweise 📄 04_linear_methods_ws26.pdf, Folie 13:

wit+1=wit−η⋅∂ loss∂wi,∇loss=(∂ loss∂w1,∂ loss∂w2)w_i^{t+1} = w_i^t - \eta\cdot\frac{\partial\,\text{loss}}{\partial w_i}, \qquad \nabla\text{loss} = \left(\frac{\partial\,\text{loss}}{\partial w_1}, \frac{\partial\,\text{loss}}{\partial w_2}\right)

Der Gradient ∇loss\nabla\text{loss} zeigt in Richtung des steilsten Anstiegs und steht senkrecht auf den Höhenlinien. Gradientenabstieg geht in die Gegenrichtung −∇loss-\nabla\text{loss}.

Warum senkrecht? Ergänzung: Entlang einer Höhenlinie ändert sich der Verlust nicht, die Richtungsableitung in Richtung der Höhenlinie ist also 0. Die Richtungsableitung in Richtung v\boldsymbol v ist ∇loss⋅v\nabla\text{loss}\cdot\boldsymbol v. Ist sie 0, stehen ∇loss\nabla\text{loss} und v\boldsymbol v senkrecht.

Zickzack bei länglichen Tälern

Auf 📄 04_linear_methods_ws26.pdf, Folie 13 sind die Höhenlinien Ellipsen. Der Gradient zeigt senkrecht zur Höhenlinie, aber nicht direkt auf das Minimum. Deshalb läuft der Weg w0→w1→w2→…w^0 \to w^1 \to w^2 \to \dots gekrümmt. Ergänzung: Bei stark gestreckten Ellipsen (Merkmale auf sehr unterschiedlichen Skalen, z. B. Alter in Jahren und Einkommen in Euro) entsteht ein Zickzack und die Konvergenz wird langsam. Deshalb standardisiert man die Merkmale vor dem Gradientenabstieg.

Gefahren: lokale Minima​

📄 04_linear_methods_ws26.pdf, Folie 14 zeigt den blinden Wanderer in einer Berglandschaft: Gradientenabstieg findet nur ein lokales Minimum. Landet man in einer Mulde, die nicht die tiefste ist, kommt man dort nicht mehr heraus.

  • Viele Probleme im ML sind konvex (convex): Es gibt nur ein Tal, jedes lokale Minimum ist global. Das gilt für lineare Regression, Ridge-Regression und logistische Regression.
  • Im Deep Learning sind die Verlustfunktionen nicht konvex. Gradientenabstieg funktioniert dort aber trotzdem erstaunlich gut („magisch“, wie die Folie sagt).

Ergänzung, nicht auf den Folien: Eine Funktion ist konvex, wenn die Verbindungsstrecke zwischen zwei Punkten ihres Graphen nie unterhalb des Graphen liegt. Für zweimal differenzierbare Funktionen heißt das: Die zweite Ableitung (bzw. die Hesse-Matrix) ist überall nichtnegativ (positiv semidefinit). Der MSE der linearen Regression hat die Hesse-Matrix 2nXTX\frac2n X^TX, die immer positiv semidefinit ist.

Minimal-Implementierung​

Ergänzung, nicht auf den Folien: Gradientenabstieg für die 1D-Regression in NumPy. Die Gradienten folgen aus MSE=1n∑(yi−axi−b)2\text{MSE} = \frac1n\sum(y_i - a x_i - b)^2.

import numpy as np

x = np.array([1.0, 2.0, 3.0])
y = np.array([2.0, 3.0, 5.0])
a, b, eta = 0.0, 0.0, 0.05

for t in range(2000):
r = y - (a * x + b) # Residuen
grad_a = -2 * np.mean(x * r)
grad_b = -2 * np.mean(r)
a -= eta * grad_a
b -= eta * grad_b

print(a, b) # -> ca. 1.5, 0.333