Gradientenabstieg
Der Algorithmus, mit dem praktisch jedes moderne Modell trainiert wird: was ein Schritt tut, warum Batches nötig sind und woran man ein kaputtes Training erkennt.
Die Idee
Das Modell macht eine Vorhersage, vergleicht sie mit der richtigen Antwort und verschiebt seine Parameter ein kleines Stück in die Richtung, die den Fehler verringert. Das war der ganze Algorithmus. Alles Weitere sind Varianten dieser drei Schritte.
Wozu es gut ist
Er ist der Grund, warum Modelle mit Milliarden Parametern überhaupt trainierbar sind: man muss nie alle Möglichkeiten durchprobieren, sondern folgt nur der lokalen Steigung.
Die drei Varianten
| Variante | Batch-Größe | Eigenschaft |
|---|---|---|
| Voller Gradientenabstieg | alle Daten | Glatt, aber je Schritt sehr teuer |
| Stochastisch (SGD) | 1 | Sehr verrauscht, selten sinnvoll |
| Mini-Batch | 8 bis 4096 | Der Normalfall, guter Kompromiss |
Ein vollständiges Training von Hand
import numpy as np
rng = np.random.default_rng(0)
X = rng.normal(size=(500, 3))
w_wahr = np.array([2.0, -1.0, 0.5])
y = X @ w_wahr + rng.normal(0, 0.1, 500)
w, lr, batch = np.zeros(3), 0.05, 32
for epoche in range(30):
idx = rng.permutation(500) # Mischen je Epoche ist wichtig:
for start in range(0, 500, batch): # sonst lernt das Modell die
b = idx[start:start + batch] # Reihenfolge mit.
pred = X[b] @ w
grad = 2 * X[b].T @ (pred - y[b]) / len(b)
w -= lr * grad
if epoche % 10 == 0:
print(epoche, np.round(w, 3), round(float(((X @ w - y) ** 2).mean()), 5))Diagnose am Verlustverlauf
- Verlust fällt und flacht ab: alles in Ordnung.
- Verlust springt stark: Lernrate senken oder Batch vergrößern.
- Verlust fällt, Validierung steigt: Überanpassung, siehe Regularisierung.
- Verlust bleibt konstant: Lernrate zu klein, Daten falsch skaliert oder Gradient fließt nicht.
- Verlust wird NaN: Zahlformat oder fehlendes Clipping.
Die Update-Regel
Warum Rauschen hilft
Der Gradient eines Mini-Batches ist ein erwartungstreuer Schätzer des vollen
Gradienten mit einer Varianz proportional zu 1/|B|. Dieses Rauschen wirkt wie
eine Temperatur: es hält das System davon ab, in schmalen, tiefen Minima liegen
zu bleiben. Empirisch generalisieren breite Minima besser, weshalb ein zu großer
Batch ohne Anpassung der Lernrate messbar schlechtere Testwerte liefert.
Die übliche Gegenmaßnahme ist die lineare Skalierungsregel: verdoppelt man den Batch, verdoppelt man die Lernrate, mit einer Aufwärmphase über die ersten paar hundert Schritte. Jenseits von etwa 8000 Beispielen je Batch trägt diese Regel nicht mehr.
Zeitpläne
| Plan | Verlauf | Wofür |
|---|---|---|
| Konstant | unverändert | Kurze Läufe, Debugging |
| Stufenweise | alle k Epochen mal 0,1 | Bildklassifikation, klassisch |
| Kosinus | weich gegen null | Sprachmodelle, heute üblich |
| Ein-Zyklus | hoch, dann runter | Schnelles Feintuning |
Der Kosinusplan mit Warmup ist bei Transformern faktisch Standard: die ersten 2 bis 5 Prozent der Schritte steigern die Lernrate linear, danach fällt sie einem Kosinusbogen folgend auf nahezu null.
Passende Kurse und Quellen
Adam
Das Optimierungsverfahren, mit dem praktisch jedes heutige Netz trainiert wird. Kurz und gut lesbar.
Kurz und gut lesbar; das Verfahren, mit dem praktisch jedes heutige Netz trainiert wird.
Machine Learning Specialization
Der Kurs von Andrew Ng in überarbeiteter Fassung. Regression, Klassifikation, neuronale Netze und die Fehler, die in der Praxis tatsächlich passieren. Rechnen inbegriffen.
Kostenlos anzusehen, das Zertifikat kostet. Wer nur verstehen will, braucht es nicht.
Neuronale Netze, visuell erklärt
Von der einzelnen Gewichtung über Gradientenabstieg bis zum Aufmerksamkeitsmechanismus. Die beste verfügbare Anschauung für das, was die Formeln beschreiben.
Vor dem ersten Lehrbuch anzusehen, nicht danach. Spart Wochen an Verwirrung.
TensorFlow Playground
Ein neuronales Netz im Browser, mit Reglern für Schichten, Aktivierung und Lernrate. Man sieht in Sekunden, was jede Stellschraube tut.
Für alle, die sehen wollen, was Lernrate, Schichten und Aktivierung tatsächlich bewirken.