Arrêt précoce vs validation croisée


8

J'utilise actuellement l'arrêt précoce de mon travail pour éviter un ajustement excessif. Plus précisément, ceux pris sous forme d' arrêt anticipé, mais quand? .

Je veux maintenant comparer avec d'autres algorithmes de classification où il semble que la validation croisée 10 fois soit largement utilisée.

Cependant, je ne sais pas si la validation croisée est une méthode pour empêcher le sur-ajustement ou sélectionner de bons paramètres. (ou peut-être que c'est la même chose?). Je ne sais pas non plus si les méthodes d'arrêt précoce et la validation croisée peuvent être utilisées à la place l'une de l'autre ou en combinaison.

La question est donc: quelle est la relation entre l'arrêt précoce et la validation croisée?

Réponses:


4

La validation croisée est une méthode d'estimation de la précision de généralisation d'un algorithme d'apprentissage supervisé.

L'arrêt précoce est une méthode pour éviter le surapprentissage et nécessite une méthode pour évaluer la relation entre la précision de généralisation du modèle appris et la précision de la formation.

Vous pouvez donc utiliser la validation croisée pour remplacer l'ensemble de validation, mentionné dans l'article que vous citez, dans un cadre d'arrêt précoce. Une validation croisée décuplée, par exemple, serait plus précise que l'utilisation d'un seul ensemble de validation et constituerait normalement une meilleure estimation de l'erreur de généralisation.

Donc, pour résumer, la validation croisée est une mesure de précision de généralisation qui pourrait être utilisée dans le cadre d'un cadre d'arrêt précoce.


1
Tout cela a du sens, applaudissements. Mais d'après ce que je peux dire, 10 la validation croisée trouvée semble être utilisée pour choisir les paramètres d'une méthode donnée, et non pour s'arrêter tôt lors de l'utilisation de cette méthode. Je pense donc que je dois encore manquer quelque chose.
Andy T

@AndyT Peut-être que la chose sur laquelle se concentrer ici est l'estimation de la généralisation. La sélection des paramètres et l'arrêt précoce nécessitent un bon estimateur de l'erreur de généralisation. La validation croisée N fois est un de ces estimateurs. Il y en a d'autres, comme le maintien répété et l'amorçage, ou un simple ensemble de validation. Ce que vous essayez de faire dans les deux cas, la sélection des paramètres et l'arrêt anticipé, consiste à évaluer les performances du modèle sur les données invisibles afin que vous puissiez choisir un bon modèle. Pour ce faire, dans les deux cas, vous utilisez un estimateur de généralisation. Est ce que ça aide ?
image_doctor

Oui c'est clair. Merci beaucoup pour votre temps! C'est très apprécié.
Andy T

@AndyT Pas de problème, j'espère que votre projet va bien!
image_doctor

1

En plus des deux approches de généralisation que vous mentionnez, il y en a beaucoup d'autres.

  • ajouter des termes de régularisation dans votre fonction de perte (coût) qui minimisent le nombre et l'ampleur de vos paramètres de modèle différents de zéro
  • supprimer (mettre à zéro) au hasard une partie des poids / paramètres de votre modèle à chaque époque de formation
  • ajouter une couche de nœuds stochastiques dans votre modèle (par exemple, échantillonnage à partir des "probabilités" fournies par les sorties des fonctions logistiques)

Bon nombre de ces approches (y compris vos approches de validation croisée et d'arrêt précoce) peuvent être combinées ensemble pour maximiser les performances du modèle sur les données invisibles (performances de généralisation).

Une note sur l'approche d'arrêt rapide. Pour les réseaux neuronaux, Geoffrey Hinton recommande d' arrêter l'entraînement lorsque la précision de l'ensemble de tests atteint son maximum (la perte de l'ensemble de tests, à l'exclusion des termes de régularisation, est au minimum). Un "ajustement" supplémentaire à l'approche de Hinton est de ne pas s'arrêter si la précision de l'ensemble de tests est meilleure (la perte est plus petite) que pour votre ensemble d'entraînement, même si la précision de l'ensemble de tests a cessé de s'améliorer (la perte de l'ensemble de tests a cessé de diminuer). Il est peu probable que vous gagniez plus d'une époque de formation, mais cela peut parfois aider un peu, en particulier pour les petits test_sets. Ne faites pas cela pour des ensembles de tests extrêmement petits (plus petits qu'un ensemble d'échantillons représentatif, comme c'est parfois utilisé dans la formation et la validation croisée des plis en K).


0

vous ne pouvez pas utiliser l'arrêt précoce et la validation croisée K-fold en combinaison. parce que l'arrêt précoce sélectionne le meilleur modèle de l'ensemble de validation, les performances doivent être vérifiées par l'ensemble de tests. mais dans la validation croisée en K, il n'y a pas de jeu de test, si vous utilisez un arrêt précoce pour sélectionner le meilleur modèle dans le jeu de validation, et il sera vérifié à nouveau dans le jeu de validation. la validation croisée K-fold obtient les performances moyennes (mesurées par la précision) du meilleur modèle, et cela n'a aucun sens.


Le nombre d'itérations d'entraînement peut être traité comme un hyperparamètre et sélectionné en utilisant la validation croisée, comme tout autre hyperparamètre. On pourrait raisonnablement appeler cela un "arrêt anticipé".
user20160

lors de l'utilisation d'un arrêt précoce dans la validation croisée K, le nombre d'époques est fixé par un ensemble de validation et différent pour chaque division. Cela fera que le réseau choisira le meilleur modèle dans chaque division, ce qui n'est pas synonyme de performances moyennes.
tianyu zhou

2
La façon de le faire serait 1) S'entraîner pour un certain nombre d'itérations à chaque fois (par exemple jusqu'à un maximum donné). 2) Calculez l'erreur moyenne de l'ensemble de validation (entre les plis) en fonction du nombre d'itérations. 3) Sélectionnez le nombre d'itérations qui minimise l'erreur moyenne de l'ensemble de validation.
user20160

1
Voici ma solution: 1. mélanger toutes les données, 2. faire 10 fois par sklearn, kfold = StratifiedKFold (n_splits = 10, shuffle = False) 3, définir le rappel: callbacks_list = [EarlyStopping (monitor = 'val_loss', patience = 50, verbose = 0, mode = 'min')] 4. choisissez le meilleur modèle en vous arrêtant tôt. history = model.fit (X [train], Y [train], epochs = 250, batch_size = 512, verbose = 1, callbacks = callbacks_list, validation_split = 0.1, shuffle = False) définissez un autre ensemble de validation de fractionnement automatique à partir de X [train ], Y [train]. 5. tester les performances par X [test] et Y [test]: scores = model.evaluate (X [test], Y [test], verbeux = 0)
tianyu zhou
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.