Pourquoi utiliser à la fois l'ensemble de validation et l'ensemble de test?

17

Considérons un réseau de neurones:

Pour un ensemble de données donné, nous le divisons en ensemble de formation, de validation et de test. Supposons que nous le fassions dans le rapport classique 60:20:20, puis nous empêchons le surapprentissage en validant le réseau en le vérifiant sur l'ensemble de validation. Alors, quelle est la nécessité de le tester sur l'ensemble de test pour vérifier ses performances?

L'erreur sur l'ensemble de test ne sera-t-elle pas quelque peu identique à l'ensemble de validation, car pour le réseau, il s'agit de données invisibles tout comme l'ensemble de validation et les deux sont également identiques en nombre?

Au lieu de cela, ne pouvons-nous pas augmenter l'ensemble de formation en fusionnant l'ensemble de test pour que nous ayons plus de données de formation et que le réseau s'entraîne mieux, puis utiliser l'ensemble de validation pour éviter le surapprentissage? Pourquoi on ne fait pas ça?

user1825567
la source
4
Vous aimeriez qu'il en soit de même, mais vous ne pouvez pas en être sûr car vous l'avez touché pour une optimisation hyperparamétrique et un arrêt précoce, vous avez donc besoin d'un jeu de tests vierge.
Emre
@Emre Mais les poids seront ajustés en fonction de l'ensemble d'apprentissage et non de l'ensemble de validation, donc le résultat sur l'ensemble de test et de validation ne devrait pas être très différent.
user1825567
Non, ils ne le font pas (ajustez-vous en fonction de l'ensemble d'entraînement). C'est pour les paramètres réguliers.
Emre

Réponses:

23

Supposons que vous entraînez un modèle dont les performances dépendent d'un ensemble d'hyperparamètres. Dans le cas d'un réseau neuronal, ces paramètres peuvent être par exemple le taux d'apprentissage ou le nombre d'itérations d'entraînement.

Étant donné un choix de valeurs d'hyperparamètre, vous utilisez l' ensemble d' apprentissage pour entraîner le modèle. Mais, comment définissez-vous les valeurs des hyperparamètres? C'est à cela que sert l'ensemble de validation . Vous pouvez l'utiliser pour évaluer les performances de votre modèle pour différentes combinaisons de valeurs hyperparamétriques (par exemple au moyen d'un processus de recherche de grille) et conserver le modèle le mieux formé.

Mais, comment votre modèle sélectionné se compare-t-il à d'autres modèles différents? Votre réseau de neurones fonctionne-t-il mieux que, disons, une forêt aléatoire formée avec la même combinaison de données d'entraînement / de test? Vous ne pouvez pas comparer en fonction de l'ensemble de validation, car cet ensemble de validation faisait partie de l'ajustement de votre modèle. Vous l'avez utilisé pour sélectionner les valeurs hyperparamétriques!

L' ensemble de tests vous permet de comparer différents modèles de manière impartiale, en basant vos comparaisons sur des données qui n'ont été utilisées dans aucune partie de votre processus de sélection de formation / hyperparamètre.

Pablo Suau
la source
11

L'ensemble de test et l'ensemble de validation croisée ont des objectifs différents. Si vous supprimez l'un ou l'autre, vous perdez ses avantages:

  • L'ensemble de validation croisée est utilisé pour aider à détecter le sur-ajustement et pour aider à la recherche d'hyper-paramètre.

  • L'ensemble de test est utilisé pour mesurer les performances du modèle.

Vous ne pouvez pas utiliser l'ensemble de validation croisée pour mesurer les performances de votre modèle avec précision, parce que vous délibérément affiner vos résultats pour obtenir la meilleure possible métrique, plus peut - être des centaines de variations de vos paramètres. Le résultat de la validation croisée est donc probablement trop optimiste.

Pour la même raison, vous ne pouvez pas supprimer l'ensemble de validation croisée et utiliser l'ensemble de test pour sélectionner des paramètres hyper, car vous êtes à peu près assuré de surestimer la qualité de votre modèle. Dans le monde idéal, vous utilisez l'ensemble de test une seule fois, ou vous l'utilisez de manière "neutre" pour comparer différentes expériences.

Si vous effectuez une validation croisée, trouvez le meilleur modèle, puis ajoutez les données de test pour vous entraîner, il est possible (et dans certaines situations peut-être très probable) que votre modèle sera amélioré. Cependant, vous n'avez aucun moyen de vous assurer que cela s'est réellement produit, et même si c'est le cas, vous ne disposez d'aucune estimation impartiale de la nouvelle performance.

Après avoir assisté à de nombreuses compétitions Kaggle, mon expérience est que le réglage de l'ensemble de tests en le surutilisant est une chose réelle, et cela a un impact important sur ces compétitions. Il y a souvent un groupe de concurrents qui ont grimpé le classement public et sélectionné leur meilleur modèle en test (le classement public est en fait un ensemble de tests), tout en n'étant pas aussi complet sur leur validation croisée. . . ces concurrents s'affichent dans le classement lorsqu'un nouvel ensemble de test est introduit à la fin.

Une approche raisonnable consiste à réutiliser (train + cv) les données pour réentraîner en utilisant les hyper-paramètres que vous avez trouvés, avant de tester. De cette façon, vous vous entraînez sur plus de données et vous obtenez toujours une mesure indépendante des performances à la fin.

Si vous souhaitez tirer le meilleur parti de la validation croisée, l'approche habituelle est la validation croisée k-fold . Une astuce courante dans les compétitions Kaggle consiste à utiliser la validation croisée k-fold et au lieu de ré-combiner les données dans un ensemble d'entraînement plus grand (train + cv), pour regrouper ou empiler les résultats du cv dans un méta-modèle.

Enfin, vérifiez toujours que vos divisions pour la validation et le test sont robustes contre une éventuelle corrélation au sein de votre ensemble de données.

Neil Slater
la source
1
que voulez-vous dire par «robuste contre une éventuelle corrélation au sein de votre ensemble de données»?
user6903745