Validation Data
Validierungsdaten sind eine zurückgehaltene Teilmenge, die während der Entwicklung ausgewertet wird, um Hyperparameter anzupassen, Checkpoints auszuwählen und Overfitting vor dem abschließenden Test zu erkennen.
Validierungsdaten sind ein Teil der annotierten Daten, der vom Training zurückgehalten und während der Entwicklung wiederholt ausgewertet wird, um Modelle zu vergleichen, Hyperparameter abzustimmen, Checkpoints auszuwählen und Overfitting zu erkennen. Das Modell aktualisiert seine Gewichte nie anhand dieser Daten. Daher zeigt der Validierungswert, wie gut sich das Gelernte aus den Trainingsdaten auf bisher ungesehene Bilder übertragen lässt. Validierungsdatensatz und Entwicklungsdatensatz (Dev-Datensatz) sind Synonyme. Jede Entscheidung auf Grundlage von Validierungswerten passt das Modell ein wenig stärker an genau diese Aufteilung an. Deshalb wird ein separater Testdatensatz für die abschließende, unverzerrte Schätzung zurückgehalten.
Aufteilung in Trainings-, Validierungs- und Testsätze#
Ein annotierter Datensatz wird in der Regel in drei Teile aufgeteilt:
- Trainingsdatensatz: Die Beispiele, an die der Optimierer die Gewichte anpasst; typischerweise 70 bis 80 Prozent der Daten.
- Validierungsdatensatz: Wird nach Trainingsläufen oder Epochen ausgewertet, um Entscheidungen über die Lernrate, Modellgröße, Stärke der Datenaugmentation und den Zeitpunkt für den Abbruch zu treffen.
- Testdatensatz: Wird einmal ausgewertet, nachdem alle Entscheidungen feststehen, um die erwartete Leistung in der Praxis anzugeben.
Bei Datensätzen mit Tausenden von Bildern sind Aufteilungen von 70/15/15 oder 80/10/10 üblich. Sehr große Datensätze benötigen für verlässliche Schätzungen einen geringeren Anteil: ImageNet-1k hält 50.000 Validierungsbilder gegenüber 1.281.167 Trainingsbildern zurück. Da die Testbeschriftungen nicht öffentlich zugänglich sind, wird die ImageNet-Genauigkeit üblicherweise anhand dieses Validierungsdatensatzes angegeben, der damit als Testdatensatz dient.
Ein nützlicher Validierungssatz bildet die Daten nach, auf die das Modell bei der Bereitstellung trifft, und hat keine Daten mit dem Trainingssatz gemeinsam. Zufällige Aufteilungen auf Bildebene führen zu Informationslecks, wenn mehrere Bilder aus demselben Video, von derselben Patientin oder demselben Patienten oder vom selben Ort stammen, weil das Modell die Szene statt des Objekts erkennen kann. Eine Aufteilung nach Gruppen, etwa nach Patient oder Aufnahmesitzung, verhindert dieses Datenleck.
Hyperparameterabstimmung und Modellauswahl#
Die Gewichte werden per Gradientenabstieg gelernt. Hyperparameter hingegen wählt man aus, indem man mehrere Kandidaten trainiert und denjenigen mit dem besten Validierungswert beibehält. Trainingswerte eignen sich nicht für diese Entscheidung, da größere und länger trainierte Modelle ihre Trainingsdaten fast immer besser anpassen. Das folgende scikit-learn-Skript stimmt die Tiefe eines Entscheidungsbaums anhand des enthaltenen Zifferndatensatzes ab:
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
# Split 1,797 digit images 60/20/20 into training, validation, and test sets
X, y = load_digits(return_X_y=True)
X_train, X_rest, y_train, y_rest = train_test_split(X, y, test_size=0.4, random_state=0, stratify=y)
X_val, X_test, y_val, y_test = train_test_split(X_rest, y_rest, test_size=0.5, random_state=0, stratify=y_rest)
# Fit one model per candidate tree depth and score each on the validation set
val_scores = {}
for depth in (2, 4, 8, 16):
model = DecisionTreeClassifier(max_depth=depth, random_state=0).fit(X_train, y_train)
val_scores[depth] = model.score(X_val, y_val)
print(f"depth {depth}: train {model.score(X_train, y_train):.3f}, validation {val_scores[depth]:.3f}")
# Refit the winner and score the test set exactly once
best = max(val_scores, key=val_scores.get)
final = DecisionTreeClassifier(max_depth=best, random_state=0).fit(X_train, y_train)
print(f"Chosen depth {best}: test accuracy {final.score(X_test, y_test):.3f}")Die Trainingsgenauigkeit steigt mit der Tiefe weiter an und erreicht bei Tiefe 16 den Wert 1.000, während die Validierungsgenauigkeit bei Tiefe 8 mit 0.836 ihren Höchstwert erreicht und bei Tiefe 16 auf 0.825 fällt, weil der Baum beginnt, sich die Daten einzuprägen. Die Validierung wählt Tiefe 8 aus, die im unberührten Testdatensatz einen Wert von 0.853 erzielt.
Vorzeitiger Abbruch und Checkpoint-Auswahl#
Beim Training mit Deep Learning wird der Validierungsdatensatz üblicherweise nach jeder Epoche ausgewertet. Der Trainingsverlust sinkt weiter, während das Netz seine Trainingsdaten immer genauer anpasst. Der Validierungsverlust oder die Validierungsgenauigkeit erreichen jedoch irgendwann einen Wendepunkt und verschlechtern sich anschließend. Beim vorzeitigen Abbruch endet das Training, sobald sich der Validierungswert über eine festgelegte Anzahl von Epochen, die Geduld genannt wird, nicht mehr verbessert. Beibehalten werden die Gewichte der besten Epoche.
Beim Training von YOLO26 mit Ultralytics läuft dieser Prozess standardmäßig folgendermaßen ab: Nach jeder Epoche wird die val-Aufteilung aus der Dataset-YAML-Datei ausgewertet. Die Epoche mit der höchsten Validierungsbewertung (mAP50-95 bei der Objekterkennung) wird als best.pt gespeichert. Nach patience Epochen ohne Verbesserung, standardmäßig 100, wird das Training beendet.
from ultralytics import YOLO
# Einen vortrainierten YOLO26-Nano-Detektor laden
model = YOLO("yolo26n.pt")
# Nach jeder Epoche die Validierungsaufteilung auswerten und nach 10 Epochen ohne Verbesserung abbrechen
results = model.train(data="coco8.yaml", epochs=50, patience=10)Kreuzvalidierung bei kleinen Datensätzen#
Bei knappen Daten verschwendet eine einzige zurückgehaltene Aufteilung Beispiele und liefert einen unzuverlässigen Wert. Bei der K-fachen Kreuzvalidierung werden die Daten in K Teilmengen aufgeteilt. K Modelle werden trainiert, wobei jedes Modell eine andere Teilmenge zur Validierung zurückhält. Anschließend werden die K Werte gemittelt, sodass jedes Beispiel sowohl zum Training als auch zur Validierung verwendet wird. Fünf und zehn Teilmengen sind üblich. Stratifizierte und gruppierte Varianten halten die Klassenanteile gleichmäßig oder verwandte Bilder innerhalb jeder Teilmenge zusammen. Ein Testdatensatz bleibt außerhalb aller Teilmengen.
Validierungsdaten und verwandte Begriffe#
- Testdaten: Werden am Ende einmal ausgewertet. Werden sie wiederverwendet, um Entscheidungen zu treffen, werden sie zu einem zweiten Validierungsdatensatz und ihr Wert ist keine unverzerrte Schätzung mehr.
- Trainingsdaten: Die einzige Aufteilung, aus der der Optimierer Gewichte lernt.
- Kreuzvalidierung: Ein Verfahren, bei dem abwechselnd verschiedene Beispiele als Validierungsdaten dienen und ein Datensatz so K Validierungswerte liefert.
- Validierung in medizinischen und regulatorischen Dokumenten: In der Medizin und regulierten Branchen bedeutet die Validierung eines Modells oft, das fertige Modell anhand unabhängiger externer Daten zu evaluieren. In der Terminologie des maschinellen Lernens entspricht dies dem Testdatensatz.










