Dieser Beitrag zeigt, was das System kann: Prosa, Code, Mathematik und Bilder, frei gemischt. Er kann gelöscht werden, sobald etwas Echtes geschrieben ist.
Man beachte: Der Slug dieses Beitrags unterscheidet sich vom englischen. Verbunden
werden die beiden allein über translationKey im Frontmatter.
Das Problem
Betrachten wir eine Funktion , die wir minimieren möchten. Die zentrale Frage lautet: Wann konvergiert der Gradientenabstieg, und wie schnell?
Ist die Hesse-Matrix -Lipschitz-stetig und -stark konvex, so konvergiert der Gradientenabstieg mit Schrittweite linear:
Die Konditionszahl bestimmt alles. Ein gut konditioniertes Problem konvergiert schnell; ein schlecht konditioniertes kriecht.
Implementierung
import numpy as np
def gradient_descent(f, grad_f, x0, lr=0.01, tol=1e-6, max_iter=1000):
"""Minimiert f mittels Gradientenabstieg."""
x = x0.copy()
history = [x.copy()]
for _ in range(max_iter):
g = grad_f(x)
# Konvergenz prüfen
if np.linalg.norm(g) < tol:
break
# Aktualisierungsschritt
x = x - lr * g
history.append(x.copy())
return x, history
Wichtige Erkenntnisse
- Konvexität garantiert ein globales Minimum — keine Sattelpunkte.
- Die Konvergenzrate hängt vollständig von der Konditionszahl ab.
- Die Schrittweite ist entscheidend: zu groß divergiert, zu klein kriecht.
- Vorkonditionierung kann die Konvergenz drastisch verbessern.
Die Mathematik hier hängt direkt mit maschinellem Lernen zusammen: Jedes Mal, wenn ein neuronales Netz mit SGD trainiert wird, läuft eine stochastische Variante genau dieses Verfahrens. Die Verlustlandschaft ist nicht konvex, aber die lokale Geometrie entscheidet weiterhin darüber, ob man konvergiert oder oszilliert.