118 votes

Quels sont les paramètres à utiliser pour un arrêt précoce ?

Je forme un réseau neuronal pour mon projet en utilisant Keras. Keras a fourni une fonction d'arrêt précoce. Puis-je savoir quels paramètres doivent être observés pour éviter que mon réseau neuronal ne s'ajuste trop en utilisant l'arrêt précoce ?

191voto

umutto Points 489

early stopping

L'arrêt précoce consiste à arrêter l'entraînement dès que les pertes commencent à augmenter (ou, en d'autres termes, que la précision de la validation commence à diminuer). Selon le documents il est utilisé comme suit ;

keras.callbacks.EarlyStopping(monitor='val_loss',
                              min_delta=0,
                              patience=0,
                              verbose=0, mode='auto')

Les valeurs dépendent de votre implémentation (problème, taille du lot etc...) mais généralement pour éviter l'overfitting j'utiliserais ;

  1. Contrôlez la perte de validation (il faut utiliser la validation ou au moins des ensembles train/test) en définissant l'option monitor argument pour 'val_loss' .
  2. min_delta est un seuil permettant de quantifier une perte à une certaine époque comme une amélioration ou non. Si la différence de perte est inférieure à min_delta il est quantifié comme une absence d'amélioration. Il est préférable de le laisser à 0 puisque nous nous intéressons à quand la perte devient pire.
  3. patience représente le nombre d'époques avant de s'arrêter lorsque la perte commence à augmenter (cesse de s'améliorer). Cela dépend de votre implémentation, si vous utilisez de très petits lots ou un un taux d'apprentissage élevé votre perte zig-zag (la précision sera plus bruyante), il est donc préférable de fixer une large patience argument. Si vous utilisez de grands lots et un petit taux d'apprentissage votre perte sera plus douce et vous pourrez utiliser un plus petit patience argument. Quoi qu'il en soit, je le laisserai à 2 pour donner plus de chance au modèle. donner plus de chance au modèle.
  4. verbose décide de ce qu'il faut imprimer, laissez-le à la valeur par défaut (0).
  5. mode L'argument dépend de la direction dans laquelle votre quantité contrôlée (est-elle censée diminuer ou augmenter), puisque nous surveillons la perte, nous pouvons utiliser la fonction min . Mais laissons keras s'en charger pour nous et définissons la valeur auto

J'utiliserais donc quelque chose comme ça et j'expérimenterais en traçant la perte d'erreur avec et sans arrêt précoce.

keras.callbacks.EarlyStopping(monitor='val_loss',
                              min_delta=0,
                              patience=2,
                              verbose=0, mode='auto')

En cas d'ambiguïté sur le fonctionnement des callbacks, je vais essayer d'expliquer davantage. Une fois que vous appelez fit(... callbacks=[es]) sur votre modèle, Keras appelle des objets de rappel donnés des fonctions prédéterminées. Ces fonctions peuvent être appelées on_train_begin , on_train_end , on_epoch_begin , on_epoch_end et on_batch_begin , on_batch_end . Le rappel d'arrêt anticipé est appelé à chaque fin d'époque, compare la meilleure valeur surveillée avec la valeur actuelle et s'arrête si les conditions sont remplies (combien d'époques se sont écoulées depuis l'observation de la meilleure valeur surveillée et est-elle supérieure à l'argument de la patience, la différence entre la dernière valeur est supérieure à min_delta, etc.)

Comme l'a souligné @BrentFaust dans les commentaires, l'entraînement du modèle se poursuivra jusqu'à ce que les conditions d'arrêt anticipé soient remplies ou que les conditions d'arrêt soient remplies. epochs (par défaut=10) dans fit() est satisfaite. L'activation d'une fonction d'appel d'arrêt anticipé n'obligera pas le modèle à s'entraîner au-delà de sa limite de temps. epochs paramètre. Ainsi, l'appel fit() avec une fonction epochs bénéficierait davantage du rappel de l'arrêt anticipé.

0 votes

Merci, je n'arrive toujours pas à comprendre la définition de Min Delta, d'après la documentation, Min Delta est défini comme le changement minimum de la valeur surveillée, puis-je savoir comment Keras définit le changement minimum de la valeur surveillée, se réfère-t-il à la différence entre la perte de valeur actuelle et la perte de valeur précédente ?

5 votes

@AizuddinAzman proche, min_delta est un seuil permettant de quantifier le changement de la valeur surveillée comme une amélioration ou non. Donc oui, si nous donnons monitor = 'val_loss' alors il s'agirait de la différence entre la perte de validation actuelle et la perte de validation précédente. En pratique, si vous donnez min_delta=0.1 une diminution de la perte de validation (actuelle - précédente) inférieure à 0,1 ne serait pas quantifiée, donc arrêterait l'entraînement (si vous avez patience = 0 ).

0 votes

Est-il judicieux de diminuer le taux d'apprentissage lorsque la perte de valeur n'est pas améliorée pour n_époques ? et comment faire ?

2voto

cannin Points 409

Voici un exemple d'EarlyStopping tiré d'un autre projet, AutoKeras ( https://autokeras.com/ ), une bibliothèque d'apprentissage automatique (AutoML). La bibliothèque définit deux paramètres EarlyStopping : patience=10 y min_delta=1e-4

https://github.com/keras-team/autokeras/blob/5e233956f32fddcf7a6f72a164048767a0021b9a/autokeras/engine/tuner.py#L170

la quantité par défaut à surveiller pour AutoKeras et Keras est le val_loss :

https://github.com/keras-team/keras/blob/cb306b4cc446675271e5b15b4a7197efd3b60c34/keras/callbacks.py#L1748 https://autokeras.com/image_classifier/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X