web-dev-qa-db-fra.com

Comment utiliser la validation croisée k-fold dans un réseau de neurones

Nous écrivons un petit ANN qui est censé classer 7000 produits en 7 classes sur la base de 10 variables d'entrée.

Pour ce faire, nous devons utiliser la validation croisée k-fold, mais nous sommes un peu confus.

Nous avons cet extrait de la diapositive de présentation:

k-fold cross validation diagram

Quels sont exactement les ensembles de validation et de test?

D'après ce que nous comprenons, nous parcourons les 3 ensembles d'entraînement et ajustons les poids (Epoque unique). Alors que faisons-nous de la validation? Parce que d'après ce que je comprends, c'est que l'ensemble de test est utilisé pour obtenir l'erreur du réseau.

Ce qui se passe ensuite est aussi déroutant pour moi. Quand le crossover a-t-il lieu?

Si ce n'est pas trop demander, une liste d'étapes serait appréciée

29
Ortixx

Vous semblez un peu confus (je me souviens que je l'étais aussi) alors je vais vous simplifier les choses. ;)

Exemple de scénario de réseau neuronal

Chaque fois que l'on vous confie une tâche telle que la conception d'un réseau de neurones, vous recevez souvent également un exemple de jeu de données à utiliser à des fins de formation. Supposons que vous entraînez un système de réseau neuronal simple Y = W · XY est la sortie calculée à partir du calcul du produit scalaire (·) du vecteur de poids W avec un vecteur échantillon donné X. Maintenant, la façon naïve de procéder serait d'utiliser l'ensemble des données de, disons, 1000 échantillons pour former le réseau neuronal. En supposant que l'entraînement converge et que vos poids se stabilisent, vous pouvez alors dire en toute sécurité que votre réseau classera correctement les données d'entraînement. Mais qu'advient-il du réseau s'il est présenté avec des données inédites? De toute évidence, le but de ces systèmes est de pouvoir généraliser et classer correctement les données autres que celles utilisées pour la formation.

Sur-ajustement expliqué

Dans toute situation réelle, cependant, les données inédites/nouvelles ne sont disponibles qu'une fois que votre réseau de neurones est déployé dans un environnement de production, appelons-le. Mais comme vous ne l'avez pas testé correctement, vous allez probablement passer un mauvais moment. :) Le phénomène par lequel tout système d'apprentissage correspond à son ensemble de formation presque parfaitement mais échoue constamment avec des données invisibles est appelé surapprentissage .

Les trois ensembles

Voici venir les parties de validation et de test de l'algorithme. Revenons à l'ensemble de données d'origine de 1000 échantillons. Ce que vous faites, vous le divisez en trois ensembles - formation , validation et test (Tr, Va et Te) - en utilisant des proportions soigneusement sélectionnées. (80-10-10)% est généralement une bonne proportion, où:

  • Tr = 80%
  • Va = 10%
  • Te = 10%

Formation et validation

Maintenant, ce qui se passe, c'est que le réseau neuronal est formé sur l'ensemble Tr et ses poids sont correctement mis à jour. L'ensemble de validation Va est ensuite utilisé pour calculer l'erreur de classification E = M - Y en utilisant les poids résultant de la formation, où M est le vecteur de sortie attendu tiré de l'ensemble de validation et Y est la sortie calculée résultant de la classification (Y = W * X). Si l'erreur est supérieure à un seuil défini par l'utilisateur, l'ensemble formation-validation Epoch est répété. Cette phase d'apprentissage se termine lorsque l'erreur calculée à l'aide de l'ensemble de validation est jugée suffisamment faible.

Formation intelligente

Maintenant, une astuce intelligente consiste à sélectionner au hasard les échantillons à utiliser pour la formation et la validation dans l'ensemble total Tr + Va à chaque itération Epoch. Cela garantit que le réseau ne sur-adaptera pas l'ensemble de formation.

Essai

L'ensemble de tests Te est ensuite utilisé pour mesurer les performances du réseau. Ces données sont parfaites à cet effet car elles n'ont jamais été utilisées pendant la phase de formation et de validation. Il s'agit en fait d'un petit ensemble de données inédites, censées imiter ce qui se passerait une fois le réseau déployé dans l'environnement de production.

La performance est à nouveau mesurée en terme d'erreur de classification comme expliqué ci-dessus. La performance peut également (ou peut-être même devrait) être mesurée en termes de précision et rappel afin de savoir où et comment l'erreur se produit, mais c'est le sujet d'une autre Q&R.

Validation croisée

Ayant compris ce mécanisme de formation-validation-test, on peut encore renforcer le réseau contre le sur-ajustement en effectuant validation croisée K . Il s'agit en quelque sorte d'une évolution de la ruse intelligente que j'ai expliquée ci-dessus. Cette technique implique d'effectuer K cycles de formation-validation-test sur différents, non chevauchants et à proportions égales Tr, Va et Te définit .

Donné k = 10, pour chaque valeur de K, vous diviserez votre ensemble de données en Tr+Va = 90% et Te = 10% et vous exécuterez l'algorithme, enregistrant les performances du test.

k = 10
for i in 1:k
     # Select unique training and testing datasets
     KFoldTraining <-- subset(Data)
     KFoldTesting <-- subset(Data)

     # Train and record performance
     KFoldPerformance[i] <-- SmartTrain(KFoldTraining, KFoldTesting)

# Compute overall performance
TotalPerformance <-- ComputePerformance(KFoldPerformance)

Sur-ajustement illustré

Je prends l'intrigue de renommée mondiale ci-dessous de wikipedia pour montrer comment l'ensemble de validation aide à empêcher le sur-ajustement. L'erreur d'apprentissage, en bleu, tend à diminuer au fur et à mesure que le nombre d'époques augmente: le réseau tente donc de faire correspondre exactement l'ensemble d'apprentissage. L'erreur de validation, en rouge, par contre suit un profil différent en forme de U. Le minimum de la courbe est quand idéalement la formation doit être arrêtée car c'est le point où l'erreur de formation et de validation est la plus faible.

Overfitting reduced by validating neural network

Les références

Pour plus de références cet excellent livre vous donnera à la fois une bonne connaissance de l'apprentissage automatique ainsi que plusieurs migraines. A vous de décider si cela en vaut la peine. :)

81
JoErNanO
  1. Divisez vos données en K plis qui ne se chevauchent pas. Faire en sorte que chaque pli K contienne un nombre égal d'éléments de chacune des m classes (validation croisée stratifiée; si vous avez 100 éléments de la classe A et 50 de la classe B et que vous effectuez une validation 2 plis, chaque pli doit contenir un aléatoire 50 éléments de A et 25 de B).

    1. Pour i in 1..k:

      • Désigner le pli i le pli test
      • Désigner l'un des plis k-1 restants le pli de validation (cela peut être aléatoire ou fonction de i, peu importe)
      • Désigner tous les plis restants le pli de formation
      • Effectuez une recherche dans la grille pour tous les paramètres gratuits (par exemple, taux d'apprentissage, nombre de neurones dans la couche cachée) en vous entraînant sur vos données d'entraînement et en calculant la perte sur vos données de validation. Choisissez des paramètres minimisant la perte
      • Utilisez le classificateur avec les paramètres gagnants pour évaluer la perte de test. Accumulez les résultats

Vous avez maintenant collecté des résultats agrégés dans tous les plis. Ceci est votre performance finale. Si vous allez appliquer cela pour de vrai, dans la nature, utilisez les meilleurs paramètres de la recherche de grille pour vous entraîner sur toutes les données.

5
Ben Allison