Gradient Descent
Der fundamentale Optimierungsalgorithmus im Machine Learning, der die Parameter eines Modells schrittweise anpasst, um den Fehler zu minimieren.
Die drei Zeiteinheiten des Machine-Learning-Trainings: Eine Epoch ist ein kompletter Durchlauf aller Daten, ein Batch ist eine Teilmenge, und eine Iteration ist ein Trainingsschritt.
Epoche, Batch und Iteration sind die drei Zeiteinheiten des Modell-Trainings. Eine Epoche bedeutet, dass das Modell den gesamten Trainingsdatensatz einmal gesehen hat. Da Datensätze oft zu groß sind, um sie auf einmal zu verarbeiten, werden sie in Batches aufgeteilt. Eine Iteration ist ein einzelner Trainingsschritt mit einem Batch. Das Verständnis dieser Begriffe ist entscheidend, um Trainings-Hyperparameter richtig einzustellen und Trainingsverläufe zu interpretieren.
Diese drei Begriffe beschreiben, wie das Training eines KI-Modells zeitlich strukturiert ist.
Rechenbeispiel:
Datensatz: 10.000 Beispiele
Batch Size: 100
Epochs: 5
-> 100 Iterationen pro Epoch (10.000 / 100)
-> 500 Iterationen insgesamt (100 × 5)
-> Jedes Beispiel wird 5 Mal gesehen
Visualisierung:
Epoch 1: [Batch 1][Batch 2][Batch 3]...[Batch 100] → Loss: 2.5
Epoch 2: [Batch 1][Batch 2][Batch 3]...[Batch 100] → Loss: 1.8
Epoch 3: [Batch 1][Batch 2][Batch 3]...[Batch 100] → Loss: 1.2
...
| Batch Size | Vorteile | Nachteile |
|---|---|---|
| Klein (8-32) | Wenig GPU-Speicher, Regularisierungseffekt | Instabile Gradienten, langsam |
| Mittel (64-256) | Guter Kompromiss | - |
| Groß (512+) | Stabile Gradienten, schnell auf GPUs | Viel Speicher, kann Generalisierung verschlechtern |
Wenn die gewünschte Batch Size nicht in den GPU-Speicher passt:
Daten werden vor jeder Epoch zufällig gemischt, damit das Modell nicht die Reihenfolge lernt. Besonders wichtig bei sortierten oder gruppierten Datensätzen.
Die Learning Rate wird oft über Epochs hinweg angepasst:
from torch.utils.data import DataLoader
# Datensatz mit 10.000 Beispielen
dataset = MyDataset() # len(dataset) = 10000
# Batch Size 32 → 313 Iterationen pro Epoch (10000/32 = 312.5, aufgerundet)
loader = DataLoader(dataset, batch_size=32, shuffle=True)
num_epochs = 10
for epoch in range(num_epochs):
for iteration, (inputs, labels) in enumerate(loader):
# Forward + Backward + Update
outputs = model(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
optimizer.zero_grad()
if iteration % 100 == 0:
print(f"Epoch {epoch+1}/{num_epochs}, Iter {iteration}, Loss: {loss.item():.4f}")
| Modelltyp | Epochs | Batch Size | Begründung |
|---|---|---|---|
| CNN (ImageNet) | 90-300 | 256-4096 | Viele Epochs, große Batches |
| BERT Fine-Tuning | 2-4 | 16-32 | Wenige Epochs reichen |
| LLM Pre-Training | 1-2 | 1M+ Tokens | Riesige Datenmenge, wenige Durchläufe |
| Stable Diffusion | 1 | 2048 | Einmal durch die Daten |
Stell dir vor, du lernst mit einem Stapel Karteikarten: Eine Epoch ist einmal den ganzen Stapel durchgehen. Ein Batch ist eine Handvoll Karten, die du gleichzeitig anschaust. Eine Iteration ist das Lernen aus einer Handvoll.
Epoch: Ein kompletter Durchlauf durch den gesamten Trainingsdatensatz
Batch: Eine Teilmenge der Daten, die in einem Schritt verarbeitet wird
Iteration: Ein einzelner Trainingsschritt (Forward + Backward Pass für einen Batch)
Training konfigurieren
Festlegen, wie lange und in welchen Portionen ein Modell trainiert wird
GPU-Speicher managen
Batch Size bestimmt, wie viel GPU-Speicher pro Schritt benötigt wird
Training überwachen
Loss pro Epoch oder Iteration tracken, um Fortschritt zu bewerten
Das variiert stark. Klassisches ML: 10-100 Epochs. Deep Learning: 1-50 Epochs. LLM Pre-Training: oft nur 1-2 Epochs über den gesamten Datensatz. Zu viele Epochs → Overfitting.
Typisch 16-512. Größere Batches: stabilere Gradienten, schnelleres Training, aber mehr GPU-Speicher. Kleinere Batches: mehr Rauschen (kann als Regularisierung wirken), weniger Speicher.
Iterationen pro Epoch = Datensatzgröße / Batch Size. Bei 10.000 Beispielen und Batch Size 100 gibt es 100 Iterationen pro Epoch.