Que dois-je faire lorsque mon réseau de neurones ne se généralise pas bien?

37

J'entraîne un réseau de neurones et la perte d'apprentissage diminue, mais la perte de validation ne diminue pas, ou elle diminue beaucoup moins que ce à quoi je m'attendais, selon des références ou des expériences avec des architectures et des données très similaires. Comment puis-je réparer cela?


Comme question

Que dois-je faire lorsque mon réseau de neurones n'apprend pas?

à laquelle cette question est inspirée, la question est intentionnellement laissée générale, de sorte que d'autres questions sur la manière de réduire l'erreur de généralisation d'un réseau de neurones à un niveau qui s'est avéré réalisable puissent être fermées comme des doublons de celui-ci.

Voir aussi le fil dédié sur Meta:

Existe-t-il une question générique vers laquelle on puisse rediriger des questions du type "pourquoi mon réseau de neurones ne se généralise-t-il pas bien?"

DeltaIV
la source
4
Si vous envisagez de publier votre propre réponse complète, il aurait peut-être été judicieux de publier simultanément le Q et le A (l'interface utilisateur le permet). Sinon, vous encouragez d'autres personnes à rédiger leurs réponses et nous risquons de nous retrouver avec plusieurs réponses qui se dupliquent partiellement… Quoi qu'il en soit, attendez votre réponse avec impatience.
Amibe dit de réintégrer Monica le
@ amoeba ah, je ne le savais pas: l'interface utilisateur ouvrait une fenêtre contextuelle lorsque j'essayais de répondre à la question. Je pensais donc que les questions et réponses ne pourraient pas être affichées ensemble…... réponse complète que ce que j'allais écrire, je vais juste éviter d'ajouter un duplicata.
DeltaIV

Réponses:

37

Tout d’abord, mentionnons ce que signifie "mon réseau de neurones ne se généralise pas bien" et quelle est la différence avec le fait de dire "mon réseau de neurones ne fonctionne pas bien" .

Lors de la formation d’un réseau de neurones, vous l’évaluez constamment sur un ensemble de données étiquetées appelé ensemble de formation . Si votre modèle ne fonctionne pas correctement et ne semble pas tirer profit de l'ensemble de formation, vous ne rencontrez pas encore de problème de généralisation. Veuillez plutôt vous reporter à cet article . Toutefois, si votre modèle réalise une performance satisfaisante sur l'ensemble de la formation, mais ne peut pas fonctionner correctement sur les données précédemment invisibles (par exemple , validation / jeux de tests), alors vous faire un problème de généralisation.

Pourquoi votre modèle ne se généralise-t-il pas correctement?

La partie la plus importante consiste à comprendre pourquoi votre réseau ne se généralise pas bien. Les modèles d'apprentissage automatique à haute capacité ont la capacité de mémoriser l'ensemble d'apprentissage, ce qui peut entraîner un surajustement .

Le surapprentissage est l’état où un estimateur a commencé à apprendre le jeu d’entraînement si bien qu'il a commencé à modéliser le bruit dans les échantillons d’apprentissage (en plus de toutes les relations utiles).

Par exemple, dans l'image ci-dessous, nous pouvons voir comment la ligne bleue a clairement surajusté.

Mais pourquoi est-ce mauvais?

Lorsque nous essayons d'évaluer notre modèle sur de nouvelles données inédites (c.-à-d. Un ensemble de validation / test), les performances du modèle seront bien inférieures à nos attentes.

Comment prévenir l'overfitting?

Au début de l'article, j'ai laissé entendre que c'est la complexité de votre modèle qui est à l'origine du surajustement, car elle permet au modèle d'extraire des relations inutiles de l'ensemble de formation, ce qui permet de cartographier son bruit inhérent. Le moyen le plus simple de réduire les surajustements consiste essentiellement à limiter la capacité de votre modèle. Ces techniques sont appelées techniques de régularisation .

  • Paramètre norme pénalités . Ceux-ci ajoutent un terme supplémentaire à la fonction de mise à jour du poids de chaque modèle, qui dépend de la norme des paramètres. Le but de ce terme est de contrer la mise à jour réelle (c.-à-d. Limiter combien de poids chaque poids peut être mis à jour). Cela rend les modèles plus robustes aux aberrations et au bruit. Des exemples de telles régularisations sont les régularisations L1 et L2 , que l’on trouve sur les régresseurs Lasso , Ridge et Elastic Net .
    Étant donné que chaque couche (entièrement connectée) d’un réseau neuronal fonctionne d’une manière très similaire à une simple régression linéaire, elle est utilisée dans les réseaux neuronaux. L'utilisation la plus courante consiste à régulariser chaque couche individuellement.
    mise en œuvre des keras .

  • Arrêter tôt . Cette technique tente d’arrêter prématurément la phase de formation d’un estimateur, au moment où il a appris à extraire toutes les relations significatives des données, avant de commencer à modéliser son bruit. Pour ce faire, surveillez la perte de validation (ou une métrique de validation de votre choix) et terminez la phase d'apprentissage lorsque cette métrique cesse de s'améliorer . De cette façon, nous donnons à l'estimateur suffisamment de temps pour apprendre les informations utiles mais pas assez pour tirer des leçons du bruit.
    mise en œuvre des keras .

  • Régularisations spécifiques au réseau de neurones . Certains exemples sont:
    • Abandon scolaire . Le décrochage est une technique intéressante qui fonctionne étonnamment bien. L'abandon est appliqué entre deux couches successives d'un réseau. À chaque itération, un pourcentage spécifié des connexions (sélectionnées de manière aléatoire), reliant les deux couches, est supprimé . Cela provoque la couche suivante s'appuyer sur toutes ses connexions à la couche précédente.
      mise en œuvre des keras
    • Transfert d'apprentissage . Ceci est particulièrement utilisé dans Deep Learning. Ceci est fait en initialisant les poids de votre réseau à ceux d'un autre réseau avec la même architecture pré-formée sur un jeu de données générique volumineux.
    • Parmi les autres facteurs susceptibles de limiter la suralimentation dans les réseaux de neurones profonds, citons: la normalisation par lots , qui peut agir en tant que régulateur et, dans certains cas, (par exemple, les modules de démarrage) fonctionne aussi bien que la déconnexion; des lots de taille relativement petite dans SGD, ce qui peut également éviter un surajustement; ajout de petit bruit aléatoire aux poids dans les couches cachées.

En plus de limiter la capacité du modèle, un autre moyen de prévenir les surajustements consiste à améliorer la qualité de vos données. Le choix le plus évident serait l’ élimination des aberrations / du bruit , mais dans la pratique, leur utilité est limitée. L' augmentation des données est un moyen plus courant (en particulier dans les tâches liées aux images) . Ici, nous essayons de transformer les exemples d’apprentissage de manière aléatoire de telle sorte que, s’ils semblent différents pour le modèle, ils transmettent les mêmes informations sémantiques (par exemple, le retournement d’images de gauche à droite).
Vue d'ensemble de l'augmentation des données

Suggestions pratiques:

  • La technique de régularisation de loin la plus efficace est le décrochage scolaire , c’est-à-dire que ce devrait être la première que vous devriez utiliser. Cependant, vous n'avez pas besoin (et probablement pas) de placer le décrochage partout! Les couches les plus sujettes à l’overfitting sont les couches Fully Connected (FC), car elles contiennent le plus de paramètres. L'abandon devrait être appliqué à ces couches (impactant leurs connexions à la couche suivante).
  • Normalisation des lots , en plus d'avoir un effet de régularisation, aide votre modèle de plusieurs manières (par exemple, en accélérant la convergence, permet d'utiliser des vitesses d'apprentissage plus élevées). Cela aussi devrait être utilisé dans les couches FC.
  • Comme mentionné précédemment, il peut également être utile d'arrêter votre modèle plus tôt que prévu dans la phase de formation. Le problème des arrêts précoces est qu’il n’ya aucune garantie qu’à aucun moment, le modèle ne commence à s’améliorer. Une approche plus pratique que l'arrêt précoce consiste à stocker les poids du modèle qui offrent les meilleures performances sur l'ensemble de validation. Soyez prudent, cependant, car il ne s'agit pas d'une estimation impartiale de la performance de votre modèle (simplement meilleure que celle définie pour la formation). Vous pouvez également overfit sur le jeu de validation. Plus sur cela plus tard.
    mise en œuvre des keras
  • Dans certaines applications (par exemple, les tâches liées aux images), il est vivement recommandé de suivre une architecture déjà établie (par exemple, VGG, ResNet, Inception), pour laquelle vous pouvez rechercher des pondérations ImageNet. La nature générique de cet ensemble de données permet aux entités d'être à leur tour suffisamment génériques pour être utilisées pour toute tâche liée à l'image. En plus d'être robuste, il réduira considérablement le temps d'entraînement.
    Une autre utilisation du concept similaire est la suivante: si votre tâche ne contient pas beaucoup de données, mais que vous pouvez en trouver une autre, vous pouvez utiliser le transfert de l'apprentissage pour réduire le surajustement. Tout d’abord, entraînez votre réseau à la tâche qui contient le plus grand ensemble de données, puis essayez d’ affiner le réglage.le modèle à celui que vous vouliez initialement. La formation initiale rendra, dans la plupart des cas, votre modèle plus résistant à la suralimentation.
  • Augmentation des données . Bien qu'il soit toujours utile d'avoir un jeu de données plus volumineux, les techniques d'augmentation de données ont leurs inconvénients. Plus précisément, vous devez faire attention à ne pas augmenter trop fortement , car cela pourrait ruiner le contenu sémantique des données. Par exemple, dans l’augmentation d’image, si vous traduisez / déplacez / redimensionnez ou ajustez trop l’intensité / le contraste de l’image, vous perdrez une grande partie des informations qu’elle contient. En outre, des schémas d’augmentation doivent être mis en œuvre pour chaque tâche de manière ad hoc (par exemple, lors de la reconnaissance manuscrite de chiffres, les chiffres sont généralement alignés et ne doivent pas être trop pivotés; ne sont pas symétriques horizontalement / verticalement. Il en va de même pour les images médicales).
    En bref, veillez à ne pas produire d’ images non réalistes en augmentant les données. De plus, une taille de jeu de données accrue nécessitera un temps de formation plus long. Personnellement, je commence à envisager l’augmentation des données lorsque je vois que mon modèle atteint presque0 perte sur l'ensemble de formation.
Djib2011
la source
9

De nombreuses preuves empiriques montrent que des réseaux de neurones suffisamment profonds peuvent mémoriser des étiquettes aléatoires sur de vastes ensembles de données (Chiyuan Zhang, Samy Bengio, Moritz Hardt, Benjamin Recht, Oriol Vinyals, «Pour comprendre l'apprentissage en profondeur, il faut repenser la généralisation». Ainsi, en principe, en obtenant un NN assez grand, nous pouvons toujours réduire l’ erreur d’entraînement à des valeurs extrêmement petites, limitées en pratique par la précision numérique, même si la tâche n’a pas de sens.

Les choses sont assez différentes pour l' erreur de généralisation . Nous ne pouvons pas être sûrs que pour chaque problème d'apprentissage, il existe un modèle NN qui peut être appris et qui peut produire une erreur de généralisation aussi faible que souhaitée. Pour cette raison, la première étape consiste à

1. Définissez correctement vos attentes

Trouvez une référence fiable qui vous indique qu'il existe une architecture pouvant atteindre l'erreur de généralisation que vous recherchez, sur votre jeu de données ou sur le système le plus similaire pour lequel vous pouvez trouver des références. Par exemple, regardez ici

Quels sont les réseaux de neurones convolutifs à la pointe de la technologie?

pour trouver les performances actuelles (au moment des réponses) SOTA (Etat de la technique) des CNN sur diverses tâches. C'est une bonne idée d'essayer de reproduire ces résultats sur ces ensembles de données de référence, avant de vous entraîner sur votre propre ensemble de données, afin de vérifier que toute votre infrastructure est correctement en place.

2. Assurez-vous que votre procédure d'entraînement est sans faille

Toutes les vérifications décrites dans les réponses à la question

Que dois-je faire lorsque mon réseau de neurones n'apprend pas?

pour vous assurer que votre procédure d’entraînement est en ordre, est une condition préalable à la réduction réussie de l’erreur de généralisation (si votre NN n’apprend pas, il ne peut pas apprendre à généraliser). Ces contrôles incluent, entre autres choses:

  • tests unitaires
  • Vérification des ensembles de données (examinez quelques échantillons d'entrée / étiquettes aléatoires pour l'ensemble d'apprentissage et l'ensemble d'essai et vérifiez que les étiquettes sont correctes; vérifiez la largeur et la taille des images d'entrée; mélangez les échantillons dans l'ensemble d'apprentissage et de tests et voyez si cela a une incidence résultats, etc.)
  • tests de randomisation
  • standardisez vos versions de pré-traitement et de package
  • tenir un journal de bord des expériences numériques

3. Essayez d’obtenir la superconvergence

«Super-convergence: formation très rapide de réseaux neuronaux utilisant des vitesses d'apprentissage élevées » de Leslie N. Smith et Nicholay Topin montre que dans certains cas, la combinaison de vitesses d'apprentissage étendues et de la méthode de taux d'apprentissage cyclique de Leslie N. Smith agit comme un régularisateur. , accélérant la convergence d'un ordre de grandeur et réduisant le besoin de régularisation poussée. C’est donc une bonne chose à essayer avant

4. Régler votre régularisation sur le MAXXX

La régularisation augmente souvent le temps d’entraînement (mauvais), augmente l’erreur d’entraînement et réduit l’erreur de généralisation (bon), mais trop de régularisation peut en réalité augmenter les deux erreurs (sous-ajustement). Pour cette raison, et en raison de l’augmentation du temps d’entraînement, il est souvent préférable d’introduire les différentes techniques de régularisation une à la fois, une fois que vous avez réussi à sur-adapter l’ensemble d’entraînement. Notez que la régularisation en soi n'implique pas nécessairement que votre erreur de généralisation deviendra plus petite: le modèle doit avoir une capacité suffisamment grande pour obtenir de bonnes propriétés de généralisation. Cela signifie souvent que vous avez besoin d'un réseau suffisamment profond avant de pouvoir voir les avantages de la régularisation.

Les méthodes de régularisation les plus anciennes sont probablement l’arrêt précoce et la perte de poids. Quelques autres:

  • réduire la taille des lots: les plus petites tailles de lot sont généralement associées à une erreur de généralisation plus petite, c'est donc quelque chose à essayer. Cependant, notez que certains contestent l'utilité des minibatches: d'après mon expérience, ils aident (tant que vous n'avez pas à utiliser de petites tailles folles telles quem=16), mais Elad Hoffer, Itay Hubara, Daniel Soudry S'entraîner plus longtemps, généraliser mieux: réduire l'écart de généralisation dans la formation de grands lots de réseaux de neurones n'est pas d'accord. Notez que si vous utilisez la norme batch (voir ci-dessous), des minibatchs trop petits seront très dangereux.
  • utilisez SGD plutôt que des optimiseurs adaptatifs: ceci a déjà été couvert par @shimao, je ne le mentionne donc que par souci d'exhaustivité
  • utiliser la suppression: si vous utilisez des LSTM, utilisez la suppression standard uniquement pour les unités d'entrée et de sortie d'une couche LSTM. Pour les unités récurrentes (les portes), utilisez les décrochages récurrents, comme l’a montré pour la première fois Yarin Gal dans son doctorat. thèse . Cependant, si vous utilisez des CNN, le décrochage est utilisé moins fréquemment maintenant. Au lieu de cela, vous avez tendance à…
  • ... utilisez la normalisation par lots: les architectures CNN les plus récentes évitent les abandons au profit de la normalisation par lots. Cela pourrait être juste une lubie, ou cela pourrait être dû au fait qu'apparemment, l'abandon scolaire et la normalisation des lots ne jouent pas bien ensemble (Xiang Li, Shuo Chen, Xiaolin Hu, Jian Yang, Comprendre le déséquilibre entre abandon et normalisation par lot par variance Shift ). Étant donné que la norme batch est plus efficace que l'abandon lorsque vous avez d'énormes ensembles de données, c'est peut-être pour cette raison que l'abandon a perdu la faveur des architectures CNN. Si vous utilisez la normalisation par lots, vérifiez que la distribution des poids et des biais de chaque couche est approximativement normale. L’application de la norme de lot est compliquée pour les RNN: normalisation du poids (Tim Salimans, Diederik P. Kingma,La normalisation du poids: un reparamétrage simple pour accélérer la formation des réseaux de neurones profonds ) est une alternative viable.
  • utiliser l’augmentation des données: elle a également un effet régularisateur.

5. Recherche d'hyperparamètre / architecture

Si rien d’autre ne vous aide, vous devrez tester plusieurs paramètres d’hyperparamètre différents (l’optimisation Bayesian peut être utile ici) ou plusieurs modifications d’architecture différentes (par exemple, dans votre architecture GAN et pour l’ensemble de données sur lequel vous travaillez, la norme batch ne fonctionne que dans le cas contraire). générateur, mais quand il est ajouté au discriminateur aussi, cela aggrave les choses). Assurez-vous de garder une trace des résultats de ces expériences longues et ennuyeuses dans un journal de bord bien ordonné.

PS pour un GAN, il n’a pas de sens de parler d’une erreur de généralisation: l’exemple ci-dessus ne sert qu’à indiquer qu’il ya encore beaucoup d’alchimie dans Deep Learning et que des choses que vous vous attendez à bien travailler Pas, ou vice-versa, quelque chose qui a fonctionné plusieurs fois, puis vous avez soudainement besoin d’un nouveau jeu de données.

DeltaIV
la source
5

Voici une liste des techniques de régularisation couramment utilisées que j'ai vues dans la littérature:

  1. Utilisation de la normalisation par lots, qui est un régularisateur étonnamment efficace au point que je vois rarement les abandons utilisés, parce que ce n'est tout simplement pas nécessaire.
  2. Une petite quantité de poids en décomposition.
  3. Shake-shake ("Régularisation Shake-Shake" de Xavier Gastaldi) et Cutout ("Régularisation améliorée des réseaux de neurones convolutionnels avec découpe" de Terrance DeVries et Graham W. Taylor) figurent parmi les techniques de régularisation les plus récentes . En particulier, la facilité avec laquelle Cutout peut être implémenté le rend très attrayant. Je pense que cela fonctionne mieux que le décrochage scolaire - mais je ne suis pas sûr.
  4. Si possible, préférez les architectures entièrement convolutives aux architectures comportant des couches entièrement connectées. Comparez VGG-16, qui a 100 millions de paramètres dans une seule couche entièrement connectée, à Resnet-152, qui a 10 fois le nombre de couches et encore moins de paramètres.
  5. Préférez SGD à d'autres optimiseurs tels que Rmsprop et Adam. Il a été démontré qu'il généralisait mieux. ("Améliorer les performances de la généralisation en passant d'Adam à SGD" par Nitish Shirish Keskar et Richard Socher)
Shimao
la source
0

Je me sens comme Djib2011, je donne d’excellents arguments sur les méthodes automatisées, mais elles ne traitent pas vraiment de la question sous-jacente de savoir comment savoir si la méthode utilisée pour réduire l’overfitting a fait son travail. Donc, en tant que note de bas de page importante de la réponse DeltaIV, je souhaitais l'inclure à partir de recherches récentes menées au cours des 2 dernières années. La suralimentation des réseaux de neurones ne concerne pas seulement le modèle sur-mémorisé, elle concerne également l’incapacité des modèles à apprendre de nouvelles choses ou à faire face aux anomalies.

Détecter le sur-ajustement dans un modèle de boîte noire: L' interprétabilité d'un modèle est directement liée à la capacité de généraliser la capacité d'un modèle. Ainsi, de nombreux graphiques interprétables sont des méthodes de détection de surajustement et peuvent vous indiquer l'efficacité des méthodes suggérées ci-dessus. Les graphiques d'interprétabilité le détectent directement, en particulier si vous comparez les graphiques de validation et de résultat de test. Les chapitres 5 et 6 de ce livre non publié traitent des avancées récentes en matière de détection d’overfitting sur le terrain: la modélisation interprétable

Sur la base de ce livre, je voudrais mentionner trois autres méthodes de détection et de suppression du surajustement, qui peuvent sembler évidentes pour certains, mais je trouve personnellement que les gens les oublient trop souvent. Je voudrais donc les souligner, si ce n’est un esprit:

  1. Détection de sélection de fonctionnalités : le meilleur est le nombre de paramètres et le nombre de fonctionnalités de votre modèle. Donc, si vous n'incluez que l'important des 100 millions (peut-être 75 millions à la place), vous aurez un meilleur modèle généralisable. Le problème est que de nombreux réseaux de neurones ne sont pas parfaits dans la sélection des fonctionnalités, en particulier lorsque le n ° 2 est présent. Bootstrap ou Boosting ne peuvent fondamentalement pas résoudre les deux (seule une version appelée bootstrap sauvage peut). En termes plus simples, si vous fournissez des données indésirables sur le réseau de neurones, vous obtiendrez des malversations. (La normalisation L2 mentionnée ci-dessus est très efficace pour aider à cela)

  2. Détection et traitement des anomalies: moins il y a de «valeurs aberrantes», plus le modèle peut être généralisé. Par "valeurs aberrantes", nous ne entendons pas seulement des valeurs aberrantes dans les données. Les valeurs aberrantes dans les données (comme celles que vous voyez avec un diagramme en boîte) constituent une définition trop étroite des réseaux de neurones. Vous devez également tenir compte des valeurs aberrantes dans l'erreur d'un modèle, appelé influence, ainsi que d'autres anomalies. Il est donc important de détecter les anomalies avant de faire fonctionner votre réseau. Un réseau neuronal peut être robuste contre un type d'anomalie, mais pas contre tous les autres types. Les méthodes de type Counter Counter, de type Criticism, et de type Adversarial, ainsi que les graphiques d’influence vous aident à découvrir les valeurs éloignées, puis à comprendre comment les prendre en compte. (Par exemple, modifiez les paramètres ou supprimez certaines données)

  3. Échantillonnage stratifié, suréchantillonnage et sous-échantillonnage fondé sur des considérations statistiques ou éthiques : J'aimerais être un expert en sous-échantillonnage et en suréchantillonnage, mais je ne connais pas l'échantillonnage stratifié. Il est essentiel de regrouper des facteurs importants tels que (race, sexe, genre), puis de procéder à un échantillonnage stratifié par la grappe pour éviter une surévaluation lorsqu’on envisage le big data. Lors de la détection d'images, un échantillonnage stratifié associé à une classification est légalement obligatoire dans certains domaines pour éviter la discrimination raciale. Le livre cité ci-dessus parle brièvement des méthodes pour le faire.

PS Devrais-je inclure plus de liens?

mlane
la source