Gradientenabstieg -- Entlang der steilsten Richtung absteigen

Dieses Kapitel implementiert den Gradientenabstieg von Grund auf und verwendet ihn, um eine lineare Regression anzupassen.Dies ist der mathematische Prototyp der gesamten KI-Trainingsschleife.


Konzeptanalyse

Kernformel

\[ \theta_{t+1} = \theta_t - \eta \nabla J(\theta_t) \]

Die vierstufige Trainingsschleife


Vorwärtspropagation
Ausgabe vorhersagen

Verlust berechnen
Abweichung messen

Gradient berechnen
Backpropagation

Parameter aktualisieren
θ -= η·∇J

Auswirkung der Lernrate

LernrateWirkung
Zu kleinKonvergiert extrem langsam und benötigt viele Schritte
ModeratKonvergiert reibungslos und schnell
Zu großSchwingt oder divergiert sogar

Praxisbeispiel

Den Berg an einem nebligen Tag hinabsteigen

An einem nebligen Tag, an dem du deine Hand nicht vor deinem Gesicht sehen kannst, musst du den Berg hinabsteigen. Die Strategie für jeden Schritt:

Fühle die steilste Richtung unter deinen Füßen → Mache einen kleinen Schritt in die steilste Richtung bergab → Halte an → Fühle erneut → Mache einen weiteren kleinen Schritt → Wiederhole.

Das ist Gradientenabstieg: Fühlen = Berechnen des Gradienten, einen kleinen Schritt machen = Parameter aktualisieren, Anhalten = nächste Iteration.


Python-Praxisübung

Beispiel

import numpy as np

# Daten generieren y = 3x + 2 + Rauschen
np.random.seed(42)
X = np.linspace(0, 10, 100)
y = 3 * X + 2 + np.random.normal(0, 2, 100)

# Gradientenabstieg von Grund auf implementieren
w, b = 0.0, 0.0
lr, n_iter = 0.01, 200
losses = []

for i in range(n_iter):
    y_pred = w * X + b
    loss = np.mean((y_pred - y) ** 2)
    losses.append(loss)
    # Gradient
    dw = 2 * np.mean((y_pred - y) * X)
    db = 2 * np.mean(y_pred - y)
    # Aktualisieren
    w -= lr * dw
    b -= lr * db

print(f"BEISPIEL-Ergebnis des Gradientenabstiegs:")
print(f"Tatsächlich: w=3.0, b=2.0")
print(f"Angepasst: w={w:.4f}, b={b:.4f}")
print(fAnfänglicher Verlust: {losses[0]:.2f} → Endgültiger Verlust: {losses[-1]:.2f})
EXAMPLE 梯度下降结果:
真实: w=3.0, b=2.0
拟合: w=2.9874, b=2.2835
初始损失: 79.69 → 最终损失: 3.91

Verlustabstiegskurve


Anwendungsszenarien in der KI

Der mathematische Prototyp der PyTorch-Trainingsschleife

Alle Trainingsschleifen des Deep Learning folgen demselben Muster, nämlich dem Gradientenabstieg:

① optimizer.zero_grad() → den Gradienten-Cache auf null setzen; ② loss = model(x) → Vorwärtspropagation; ③ loss.backward() → Backpropagation zur Berechnung der Gradienten; ④ optimizer.step() → Parameter-Update θ -= η·∇J durchführen.

Sobald du diese vierstufige Schleife verstehst, verstehst du die zentrale Trainingslogik aller Deep-Learning-Frameworks.

Die Lernrate ist der wichtigste Hyperparameter

Lernrate zu groß → Verlust schwingt oder divergiert sogar; Lernrate zu klein → Konvergenz ist extrem langsam und kann in lokalen Optima stecken bleiben. Lernraten-Scheduling (Step, Cosine Annealing, Warmup) ist eine unverzichtbare Technik für das Training großer Modelle — das GPT-3-Training verwendete eine lineare Warmup- + Cosine-Decay-Strategie.

Abwägung der SGD-Batchgröße

Full-Batch-GD: verwendet alle Daten zur Berechnung exakter Gradienten, langsam aber stabil; SGD (batch_size=1): betrachtet jeweils nur eine Stichprobe, schnell aber die Gradientenschätzungen sind verrauscht; Mini-Batch-SGD: ein Kompromiss (batch_size=32/64/128), mit moderatem Rauschen, was tatsächlich hilft, lokale Optima zu verlassen — das ist die Standardpraxis beim Training in der Praxis.

Grenzen des Gradientenabstiegs

Gradientenabstieg findet Punkte, an denen der Gradient null ist — diese können globale Optima, lokale Optima oder Sattelpunkte sein. In hochdimensionalen Räumen sind Sattelpunkte weitaus häufiger als lokale Optima: Ein Punkt ist in manchen Richtungen ein Minimum und in anderen ein Maximum. Adaptive Optimierer wie Adam können Sattelpunkte effektiver verlassen.


Weitere Erweiterungen