Overfitting
Overfitting tritt auf, wenn ein Modell seine Trainingsdaten einschließlich des Rauschens auswendig lernt und bei neuen Daten versagt. Erfahre, wie du es erkennst und welche Methoden es verhindern.
Überanpassung tritt auf, wenn ein Modell des maschinellen Lernens so genau auf seine Trainingsdaten abgestimmt wird, dass es neben den tatsächlichen Mustern auch das Rauschen und die Eigenheiten dieser konkreten Beispiele lernt. Ein überangepasstes Modell erzielt auf den Daten, mit denen es trainiert wurde, gute Ergebnisse, schneidet bei neuen Daten aber deutlich schlechter ab. Wie groß dieser Unterschied ist, zeigt, wie stark es überangepasst ist. Im Sinne des Bias-Varianz-Dilemmas bedeutet Überanpassung eine hohe Varianz: Die Vorhersagen des Modells hängen zu stark von den konkreten Stichproben ab, die es zufällig gesehen hat.
Überanpassung erkennen#
Ein deutliches Anzeichen ist eine wachsende Lücke zwischen der Leistung auf den Trainings- und Validierungsdaten. In Lernkurven, die für jede Epoche aufgezeichnet werden, sinkt der Trainingsverlust weiter, während sich der Validierungsverlust abflacht und anschließend steigt. Validierungsmetriken wie die mittlere durchschnittliche Genauigkeit (mAP) stagnieren oder gehen zurück. Bei der klassischen Demonstration im kleinen Maßstab werden Polynome zweier verschiedener Grade an 12 verrauschte Punkte angepasst, die einer Sinuskurve entnommen wurden:
import numpy as np
from numpy.polynomial import Polynomial
rng = np.random.default_rng(0)
# 12 noisy training points from a sine wave, plus clean test points
x_train = rng.uniform(0, 1, 12)
y_train = np.sin(2 * np.pi * x_train) + rng.normal(0, 0.2, 12)
x_test = np.linspace(0, 1, 200)
y_test = np.sin(2 * np.pi * x_test)
for degree in (3, 9):
fit = Polynomial.fit(x_train, y_train, degree)
train_mse = np.mean((fit(x_train) - y_train) ** 2)
test_mse = np.mean((fit(x_test) - y_test) ** 2)
print(f"Degree {degree:2d}: train MSE {train_mse:.4f}, test MSE {test_mse:.4f}")Das Polynom 9. Grades ist flexibel genug, um sich dem Rauschen anzupassen. Dadurch sinkt sein Trainingsfehler von 0.0356 auf 0.0148, während sich sein Testfehler verzehnfacht und von 0.0182 auf 0.1859 steigt.
Überanpassung und Unteranpassung#
Unteranpassung ist das gegenteilige Problem: Das Modell ist zu einfach oder wurde zu kurz trainiert, um die Muster in den Daten zu erfassen. Deshalb schneidet es sowohl bei den Trainings- als auch bei den Validierungsdaten schlecht ab. Ein Vergleich der beiden Fehler zeigt den Unterschied und weist auf verschiedene Abhilfen hin.
Häufige Ursachen#
- Zu hohe Modellkapazität für die Datenmenge: Ein neuronales Netz mit Millionen von Parametern kann einige Hundert Bilder einfach auswendig lernen.
- Verrauschte oder falsch beschriftete Daten: Fehlende Boxen, falsche Klassen und Ausreißer liefern dem Modell Fehler, an die es sich anpassen kann, die es in der realen Welt aber nicht gibt.
- Zu langes Training: Sobald das Modell die nützlichen Muster gelernt hat, werden in zusätzlichen Epochen hauptsächlich die verbleibenden Rauschanteile erfasst.
- Zu einseitige Trainingsdaten: Ein Detektor, der nur mit tagsüber aufgenommenen Bildern einer einzigen Kamera trainiert wurde, kann sich auf den Hintergrund und die Beleuchtung dieser Kamera verlassen und Objekte an einem neuen Standort übersehen.
Überanpassung verhindern#
- Mehr und vielfältigere Daten: Weitere echte Beispiele sind die direkteste Lösung. Durch Datenerweiterung lässt sich die Vielfalt vergrößern, indem vorhandene Bilder gespiegelt, skaliert, umgefärbt und gemischt werden.
- Regularisierung: Gewichtsabnahme bestraft große Gewichte. Dropout deaktiviert während des Trainings zufällig Einheiten, damit kein einzelnes Merkmal unentbehrlich wird.
- Kleinere oder vortrainierte Modelle: Ein kleineres Modell bietet weniger Spielraum zum Auswendiglernen. Transferlernen mit eingefrorenen frühen Schichten verringert die Anzahl der Gewichte, die anhand eines kleinen Datensatzes erlernt werden müssen.
- Vorzeitiger Abbruch: Wenn du nach jeder Epoche die Validierungsdaten auswertest und das Training beendest, sobald sich der Wert nicht mehr verbessert, verhinderst du, dass sich das Modell an das Rauschen anpasst.
- Verlässliche Bewertung: Kreuzvalidierung liefert bei kleinen Datensätzen eine verlässlichere Schätzung des Generalisierungsfehlers. Ein separater Testsatz deckt eine Überanpassung an die Validierungsdaten während der Hyperparameteroptimierung auf.
Beim Training mit Ultralytics YOLO wird der vorzeitige Abbruch über das Argument patience gesteuert. Nach der angegebenen Anzahl von Epochen ohne Verbesserung der Validierungsleistung (mAP50-95 bei der Objekterkennung) wird der Trainingslauf beendet. Die Gewichte aus der besten Epoche werden als best.pt gespeichert, auch wenn das Training bis zum Ende läuft.
from ultralytics import YOLO
# Lade ein vortrainiertes YOLO26n-Modell
model = YOLO("yolo26n.pt")
# Bis zu 100 Epochen zulassen, aber nach 20 Epochen ohne Verbesserung bei der Validierung abbrechen
results = model.train(data="coco8.yaml", epochs=100, patience=20)Der Standardwert ist patience=100. Für Datensätze mit weniger als 1.000 Bildern empfiehlt die YOLO26-Anleitung zur Feinabstimmung epochs=50 mit patience=20.
Überanpassung und verwandte Begriffe#
- Datenleck: Überschneidungen zwischen Trainings- und Evaluierungsdaten verschleiern Overfitting. Wenn nahezu identische Einzelbilder aus demselben Video sowohl im Trainings- als auch im Validierungssplit landen, erzielt ein Modell, das den Trainingsdatensatz auswendig gelernt hat, bei der Validierung weiterhin gute Werte. Das Problem zeigt sich erst nach der Bereitstellung. Eine Aufteilung nach Video oder Szene verhindert das.
- Abkürzungslernen: Das Modell stützt sich auf ein irreführendes Merkmal wie ein Wasserzeichen oder einen Hintergrund, das sowohl in den Trainings- als auch in den Validierungsdaten vorkommt. Die Validierungswerte sehen gut aus, aber bei neuen Daten, bei denen das Merkmal fehlt, versagt das Modell.










