Validation Data
Les données de validation constituent un jeu mis de côté, évalué pendant le développement pour régler les hyperparamètres, choisir les points de contrôle et repérer le surapprentissage avant le test final.
Les données de validation sont une partie des données annotées exclue de l’entraînement et évaluée à plusieurs reprises pendant le développement pour comparer les modèles, régler les hyperparamètres, choisir des points de contrôle et détecter le surapprentissage. Le modèle ne met jamais à jour ses poids à partir de ces données : son score de validation montre donc dans quelle mesure ce qu’il a appris des données d’entraînement se généralise à des images qu’il n’a pas vues. Les termes ensemble de validation et ensemble de développement (dev) sont synonymes. Chaque décision fondée sur les scores de validation ajuste un peu plus le modèle à cette partition particulière. C’est pourquoi un ensemble de test distinct est mis de côté pour obtenir une estimation finale sans biais.
Jeux d’entraînement, de validation et de test#
Un jeu de données annotées est généralement divisé en trois parties :
- Ensemble d’entraînement : Exemples utilisés par l’optimiseur pour ajuster les poids, généralement de 70 à 80 % des données.
- Ensemble de validation : Évalué après les exécutions d’entraînement ou les époques pour orienter des choix comme le taux d’apprentissage, la taille du modèle, l’intensité de l’augmentation et le moment où arrêter l’entraînement.
- Ensemble de test : Évalué une fois, une fois tous les choix arrêtés, afin de rendre compte des performances attendues en conditions réelles.
Les répartitions 70/15/15 ou 80/10/10 sont courantes pour les jeux de données contenant des milliers d’images. Les très grands jeux de données ont besoin d’une proportion plus faible pour obtenir des estimations fiables : ImageNet-1k réserve 50 000 images à la validation, contre 1 281 167 images d’entraînement. Comme les annotations de test d’ImageNet ne sont pas publiques, la précision sur ImageNet est généralement rapportée sur cet ensemble de validation, qui sert alors d’ensemble de test.
Un jeu de validation utile correspond aux données que le modèle rencontrera en déploiement et ne partage aucun élément avec le jeu d’entraînement. Les séparations aléatoires au niveau des images entraînent des fuites d’information lorsque plusieurs images proviennent de la même vidéo, du même patient ou du même lieu, car le modèle peut reconnaître la scène plutôt que l’objet. La séparation par groupe, par patient ou par session d’enregistrement par exemple, évite cette fuite de données.
Réglage des hyperparamètres et sélection du modèle#
Les poids sont appris par descente de gradient, tandis que les hyperparamètres sont choisis en entraînant plusieurs modèles candidats et en conservant celui qui obtient le meilleur score de validation. Les scores d’entraînement ne permettent pas de faire ce choix, car les modèles plus grands et entraînés plus longtemps s’ajustent presque toujours mieux aux données d’entraînement. Le script scikit-learn ci-dessous ajuste la profondeur d’un arbre de décision sur le jeu de données digits fourni :
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}")La précision d’entraînement continue d’augmenter avec la profondeur et atteint 1.000 à une profondeur de 16, tandis que la précision de validation culmine à 0.836 à une profondeur de 8, puis tombe à 0.825 à une profondeur de 16, lorsque l’arbre commence à mémoriser. La validation sélectionne une profondeur de 8, qui obtient un score de 0.853 sur l’ensemble de test intact.
Arrêt anticipé et sélection des points de contrôle#
Les boucles d’entraînement en apprentissage profond évaluent généralement l’ensemble de validation après chaque époque. La perte d’entraînement continue de diminuer à mesure que le réseau s’ajuste toujours plus étroitement aux données d’entraînement, mais la perte ou la précision de validation finit par se stabiliser, puis se dégrade. L’arrêt anticipé interrompt l’entraînement lorsque le score de validation cesse de s’améliorer pendant un nombre défini d’époques, appelé patience, et conserve les poids de la meilleure époque.
L’entraînement de YOLO26 dans Ultralytics exécute cette boucle par défaut : il évalue la partition val du fichier YAML du jeu de données après chaque époque, enregistre l’époque qui obtient la meilleure aptitude de validation (mAP50-95 pour la détection) sous le nom best.pt, puis s’arrête après patience époques sans amélioration, 100 par défaut.
from ultralytics import YOLO
# Charger un détecteur nano YOLO26 préentraîné
model = YOLO("yolo26n.pt")
# Valider sur la partition val après chaque époque et arrêter après 10 époques sans amélioration
results = model.train(data="coco8.yaml", epochs=50, patience=10)Validation croisée pour les petits jeux de données#
Lorsque les données sont rares, une seule partition mise de côté gaspille des exemples et donne un score bruité. La validation croisée à K plis divise les données en K plis et entraîne K modèles, chacun mettant de côté un pli différent pour la validation, puis calcule la moyenne des K scores. Ainsi, chaque exemple sert à la fois à l’entraînement et à la validation. Cinq et dix plis sont des valeurs courantes, et les variantes stratifiées et groupées maintiennent l’équilibre des proportions de classes ou regroupent les images liées dans chaque pli. Un ensemble de test reste en dehors de tous les plis.
Données de validation et termes connexes#
- Données de test : Évaluées une seule fois à la fin. Les réutiliser pour prendre des décisions revient à en faire un deuxième ensemble de validation, et leur score cesse alors d’être une estimation sans biais.
- Données d’entraînement : Seule partition à partir de laquelle l’optimiseur apprend les poids.
- Validation croisée : Procédure qui fait varier les exemples utilisés comme données de validation et produit K scores de validation à partir d’un seul jeu de données.
- Validation dans les écrits cliniques et réglementaires : En médecine et dans les secteurs réglementés, valider un modèle désigne souvent l’évaluation du modèle final sur des données externes indépendantes, ce qui correspond à l’ensemble de test dans la terminologie de l’apprentissage automatique.










