Recherche de site Web

Comment améliorer les performances du Deep Learning


20 trucs, astuces et techniques que vous pouvez utiliser pour
Lutter contre le surapprentissage et obtenir une meilleure généralisation

Comment pouvez-vous obtenir de meilleures performances de votre modèle d’apprentissage profond ?

C’est l’une des questions les plus fréquemment posées.

On pourrait demander comme suit :

Comment puis-je améliorer la précision ?

…ou cela peut être inversé comme suit :

Que puis-je faire si mon réseau neuronal fonctionne mal ?

Je réponds souvent par « Je ne sais pas exactement, mais j'ai beaucoup d'idées. »

Ensuite, je passe à la liste de toutes les idées auxquelles je peux penser et qui pourraient améliorer les performances.

Plutôt que de réécrire cette liste, j’ai décidé de mettre toutes mes idées dans cet article.

Les idées ne vous aideront pas seulement avec l’apprentissage en profondeur, mais aussi avec n’importe quel algorithme d’apprentissage automatique.

Démarrez votre projet avec mon nouveau livre Better Deep Learning, comprenant des tutoriels étape par étape et les fichiers code source Python pour tous les exemples .

C’est un gros article, vous voudrez peut-être le mettre dans vos favoris.

Idées pour améliorer les performances des algorithmes

Cette liste d’idées n’est pas complète mais c’est un bon début.

Mon objectif est de vous donner plein d'idées de choses à essayer, j'espère, une ou deux idées auxquelles vous n'avez pas pensé.

Il suffit souvent d’une seule bonne idée pour se faire transporter.

Si vous obtenez des résultats avec l'une des idées, faites-le-moi savoir dans les commentaires.
J'aimerais en entendre parler !

Si vous avez une idée supplémentaire ou une extension de l’une des idées répertoriées, faites-le-moi savoir, moi et tous les lecteurs en bénéficierions ! C’est peut-être la seule idée qui aide quelqu’un d’autre à faire sa percée.

J'ai divisé la liste en 4 sous-thèmes :

  1. Améliorez les performances grâce aux données.
  2. Améliorez les performances grâce aux algorithmes.
  3. Améliorez les performances grâce au réglage des algorithmes.
  4. Améliorez les performances avec les ensembles.

Les gains diminuent souvent à mesure que l’on descend dans la liste. Par exemple, une nouvelle formulation de votre problème ou davantage de données vous rapportera souvent plus que le réglage des paramètres de votre algorithme le plus performant. Pas toujours, mais en général.

J'ai inclus de nombreux liens vers des didacticiels du blog, des questions de sites connexes ainsi que des questions sur la FAQ classique de Neural Net.

Certaines idées sont spécifiques aux réseaux de neurones artificiels, mais beaucoup sont assez générales. Assez général pour que vous puissiez les utiliser pour susciter des idées sur l'amélioration de vos performances avec d'autres techniques.

Allons-y.

1. Améliorez les performances avec les données

Vous pouvez obtenir de gros gains en modifiant vos données d’entraînement et la définition des problèmes. Peut-être même les plus grosses victoires.

Voici une courte liste de ce que nous aborderons :

  1. Obtenez plus de données.
  2. Inventez plus de données.
  3. Redimensionnez vos données.
  4. Transformez vos données.
  5. Sélection des fonctionnalités.

1) Obtenez plus de données

Pouvez-vous obtenir plus de données d’entraînement ?

La qualité de vos modèles est généralement limitée par la qualité de vos données d'entraînement. Vous voulez les meilleures données possibles pour votre problème.

Vous en voulez aussi beaucoup.

L’apprentissage profond et d’autres techniques modernes d’apprentissage automatique non linéaire s’améliorent avec davantage de données. L’apprentissage profond en particulier. C’est l’un des principaux points qui rendent l’apprentissage profond si passionnant.

Jetez un œil au dessin animé suivant :

Plus de données n’aident pas toujours, mais c’est possible. Si j'ai le choix, j'obtiendrai plus de données pour l'optionnalité qu'elle offre.

En rapport :

  • Ensembles de données sur algorithmes

2) Inventez plus de données

Les algorithmes d’apprentissage profond fonctionnent souvent mieux avec plus de données.

Nous l'avons mentionné dans la dernière section.

Si vous ne pouvez raisonnablement pas obtenir plus de données, vous pouvez en inventer davantage.

  • Si vos données sont des vecteurs de nombres, créez des versions modifiées aléatoirement de vecteurs existants.
  • Si vos données sont des images, créez des versions modifiées de manière aléatoire d'images existantes.
  • Si vos données sont du texte, vous voyez l’idée…

C'est ce qu'on appelle souvent l'augmentation des données ou la génération de données.

Vous pouvez utiliser un modèle génératif. Vous pouvez également utiliser des astuces simples.

Par exemple, avec les données d’images photographiques, vous pouvez obtenir d’importants gains en déplaçant et en faisant pivoter les images existantes de manière aléatoire. Cela améliore la généralisation du modèle à de telles transformations dans les données si elles sont attendues dans de nouvelles données.

Ceci est également lié à l’ajout de bruit, ce que nous appelions l’ajout de gigue. Cela peut agir comme une méthode de régularisation pour limiter le surapprentissage de l'ensemble de données d'entraînement.

En rapport :

  • Augmentation d'image pour l'apprentissage profond avec Keras
  • Qu’est-ce que la gigue ? (Entraînement avec bruit)

3) Redimensionnez vos données

C'est une victoire rapide.

Une règle générale traditionnelle lorsque l’on travaille avec des réseaux de neurones est la suivante :

Redimensionnez vos données aux limites de vos fonctions d'activation.

Si vous utilisez des fonctions d'activation sigmoïde, redimensionnez vos données à des valeurs comprises entre 0 et 1. Si vous utilisez la tangente hyperbolique (tanh), redimensionnez-la à des valeurs comprises entre -1 et 1.

Cela s'applique aux entrées (x) et aux sorties (y). Par exemple, si vous avez un sigmoïde sur la couche de sortie pour prédire les valeurs binaires, normalisez vos valeurs y pour qu'elles soient binaires. Si vous utilisez softmax, vous pouvez toujours bénéficier de la normalisation de vos valeurs y.

Cela reste une bonne règle de base, mais j'irais plus loin.

Je vous suggère de créer plusieurs versions différentes de votre ensemble de données d'entraînement comme suit :

  • Normalisé à 0 à 1.
  • Remis à l'échelle de -1 à 1.
  • Standardisé.

Évaluez ensuite les performances de votre modèle sur chacun. Choisissez-en un, puis doublez la mise.

Si vous modifiez vos fonctions d'activation, répétez cette petite expérience.

Les grosses valeurs accumulées dans votre réseau ne sont pas bonnes. De plus, il existe d'autres méthodes pour maintenir de petits nombres dans votre réseau, comme la normalisation de l'activation et des pondérations, mais nous examinerons ces techniques plus tard.

En rapport :

  • Dois-je normaliser les variables d'entrée (vecteurs de colonnes) ?
  • Comment préparer vos données pour l'apprentissage automatique en Python avec Scikit-Learn

4) Transformez vos données

Lié au redimensionnement suggéré ci-dessus, mais plus de travail.

Vous devez vraiment apprendre à connaître vos données. Visualisez-le. Recherchez les valeurs aberrantes.

Devinez la distribution univariée de chaque colonne.

  • Une colonne ressemble-t-elle à une gaussienne asymétrique, pensez à ajuster l'inclinaison avec une transformation Box-Cox.
  • Une colonne ressemble-t-elle à une distribution exponentielle, considérez une transformation logarithmique.
  • Une colonne semble-t-elle avoir certaines fonctionnalités, mais elles sont encombrées par quelque chose d'évident, essayez la mise au carré ou la racine carrée.
  • Pouvez-vous rendre une fonctionnalité discrète ou regroupée d'une manière ou d'une autre pour mieux mettre en valeur certaines fonctionnalités.

Appuyez-vous sur votre intuition. Essayez des choses.

  • Pouvez-vous prétraiter les données avec une méthode de projection comme la PCA ?
  • Pouvez-vous regrouper plusieurs attributs en une seule valeur ?
  • Pouvez-vous exposer un aspect intéressant du problème avec un nouveau drapeau booléen ?
  • Pouvez-vous explorer la structure temporelle ou autre d’une autre manière ?

Les réseaux neuronaux effectuent l'apprentissage des fonctionnalités. Ils peuvent faire ce genre de choses.

Mais ils apprendront également un problème beaucoup plus rapidement si vous pouvez mieux exposer la structure du problème au réseau pour l'apprentissage.

Vérifiez ponctuellement de nombreuses transformations différentes de vos données ou d'attributs spécifiques et voyez ce qui fonctionne et ce qui ne fonctionne pas.

En rapport :

  • Comment définir votre problème d'apprentissage automatique
  • Découvrez l'ingénierie des fonctionnalités, comment concevoir des fonctionnalités et comment y parvenir
  • Comment préparer vos données pour l'apprentissage automatique en Python avec Scikit-Learn

5) Sélection des fonctionnalités

Les réseaux neuronaux sont généralement robustes aux données non liées.

Ils utiliseront un poids proche de zéro et mettront de côté la contribution des attributs non prédictifs.

Pourtant, il s’agit de données, de poids et de cycles d’entraînement utilisés sur des données qui ne sont pas nécessaires pour faire de bonnes prédictions.

Pouvez-vous supprimer certains attributs de vos données ?

Il existe de nombreuses méthodes de sélection de fonctionnalités et de méthodes d'importance des fonctionnalités qui peuvent vous donner des idées sur les fonctionnalités à conserver et les fonctionnalités à démarrer.

Essayez-en. Essayez-les tous. L’idée est d’avoir des idées.

Encore une fois, si vous avez le temps, je vous suggère d’évaluer quelques « vues » différentes de votre problème avec le même réseau et de voir comment elles fonctionnent.

  • Peut-être que vous pouvez faire aussi bien, voire mieux, avec moins de fonctionnalités. Ouais, plus vite !
  • Peut-être que toutes les méthodes de sélection de fonctionnalités démarrent le même sous-ensemble spécifique de fonctionnalités. Ouais, consensus sur les fonctionnalités inutiles.
  • Peut-être qu'un sous-ensemble sélectionné vous donne quelques idées sur l'ingénierie supplémentaire des fonctionnalités que vous pouvez effectuer. Ouais, plus d'idées.

En rapport :

  • Une introduction à la sélection des fonctionnalités
  • Sélection de fonctionnalités pour l'apprentissage automatique en Python

6) Recadrez votre problème

Éloignez-vous de votre problème.

Les observations que vous avez recueillies sont-elles la seule façon de formuler votre problème ?

Il existe peut-être d'autres moyens. Peut-être que d'autres formulations du problème seront capables de mieux exposer la structure de votre problème à l'apprentissage.

J’aime beaucoup cet exercice car il oblige à ouvrir l’esprit. C'est dur. Surtout si vous êtes investi (ego !!!, temps, argent) dans l’approche actuelle.

Même si vous énumérez simplement 3 à 5 cadrages alternatifs et que vous les écartez, au moins vous renforcez votre confiance dans l'approche choisie.

  • Vous pouvez peut-être incorporer des éléments temporels dans une fenêtre ou dans une méthode autorisant les pas de temps.
  • Peut-être que votre problème de classification peut devenir un problème de régression, ou l'inverse.
  • Peut-être que votre sortie binaire peut devenir une sortie softmax ?
  • Peut-être que vous pouvez plutôt modéliser un sous-problème.

C'est une bonne idée de réfléchir au problème et aux cadrages possibles avant de choisir l'outil, car vous êtes moins investi dans les solutions.

Néanmoins, si vous êtes bloqué, cet exercice simple peut vous apporter une source d’idées.

De plus, vous n’êtes pas obligé de jeter aucun de vos travaux antérieurs. Voir la section ensembles plus tard.

En rapport :

  • Comment définir votre problème d'apprentissage automatique

2. Améliorez les performances avec des algorithmes

L’apprentissage automatique concerne les algorithmes.

Toute la théorie et les mathématiques décrivent différentes approches pour apprendre un processus de décision à partir de données (si l'on se limite à la modélisation prédictive).

Vous avez choisi l’apprentissage profond pour votre problème. Est-ce vraiment la meilleure technique que vous auriez pu choisir ?

Dans cette section, nous aborderons quelques idées autour de la sélection d'algorithmes avant de plonger ensuite dans les détails pour tirer le meilleur parti de la méthode d'apprentissage en profondeur que vous avez choisie.

Voici la courte liste

  1. Algorithmes de vérification ponctuelle.
  2. Voler de la littérature.
  3. Méthodes de rééchantillonnage.

Allons-y.

1) Algorithmes de vérification ponctuelle

Préparez-vous.

Vous ne pouvez pas savoir à l’avance quel algorithme fonctionnera le mieux pour votre problème.

Si vous le saviez, vous n’auriez probablement pas besoin d’apprentissage automatique.

Quelles preuves avez-vous recueillies démontrant que la méthode que vous avez choisie était un bon choix ?

Renversons cette énigme.

Aucun algorithme ne peut fonctionner mieux qu’un autre, lorsque les performances sont moyennées pour tous les problèmes possibles. Tous les algorithmes sont égaux. Ceci est un résumé des résultats du théorème du repas gratuit.

Peut-être que les algorithmes que vous avez choisis ne conviennent pas à votre problème.

Nous n’essayons pas de résoudre tous les problèmes possibles, mais la nouvelle popularité des algorithmes n’est peut-être pas le meilleur choix pour votre ensemble de données spécifique.

Mon conseil est de rassembler des preuves. Ayez l’idée qu’il existe d’autres bons algorithmes et donnez-leur une bonne chance de résoudre votre problème.

Vérifiez ponctuellement une suite de méthodes de pointe et voyez lesquelles fonctionnent bien et lesquelles ne fonctionnent pas.

  • Évaluez certaines méthodes linéaires telles que la régression logistique et l'analyse discriminante linéaire.
  • Évaluez certaines méthodes d'arborescence telles que CART, Random Forest et Gradient Boosting.
  • Évaluez certaines méthodes d'instance telles que SVM et kNN.
  • Évaluez d'autres méthodes de réseaux neuronaux telles que LVQ, MLP, CNN, LSTM, hybrides, etc.

Doublez la mise sur les plus performants et améliorez leurs chances grâce à des réglages supplémentaires ou à la préparation des données.

Classez les résultats par rapport à la méthode d'apprentissage en profondeur que vous avez choisie, comment se comparent-ils ?

Peut-être pouvez-vous abandonner le modèle d'apprentissage en profondeur et utiliser quelque chose de beaucoup plus simple, de beaucoup plus rapide à former, voire quelque chose de facile à comprendre.

En rapport :

  • Une approche de l'apprentissage automatique basée sur les données
  • Pourquoi devriez-vous vérifier ponctuellement les algorithmes sur vos problèmes d'apprentissage automatique
  • Algorithmes d'apprentissage automatique de classification de vérification ponctuelle en Python avec scikit-learn

2) Voler de la littérature

Un excellent raccourci pour choisir une bonne méthode consiste à voler des idées dans la littérature.

Qui d'autre a travaillé sur un problème comme le vôtre et quelles méthodes ont-ils utilisés.

Consultez des articles, des livres, des articles de blog, des sites de questions-réponses, des didacticiels, tout ce que Google vous propose.

Notez toutes les idées et parcourez-les.

Il ne s’agit pas de reproduire la recherche, mais de nouvelles idées auxquelles vous n’avez pas pensé et qui peuvent vous donner un coup de pouce en termes de performances.

Les recherches publiées sont hautement optimisées.

Il y a beaucoup de gens intelligents qui écrivent beaucoup de choses intéressantes. Exploitez cette superbe bibliothèque pour les pépites dont vous avez besoin.

En rapport :

  • Comment rechercher un algorithme d'apprentissage automatique
  • Google Scholar

3) Méthodes de rééchantillonnage

Vous devez savoir à quel point vos modèles sont bons.

Votre estimation des performances de vos modèles est-elle fiable ?

Les méthodes d’apprentissage profond sont lentes à s’entraîner.

Cela signifie souvent que nous ne pouvons pas utiliser les méthodes de référence pour estimer les performances du modèle, telles que la validation croisée k fois.

  • Peut-être que vous utilisez une simple répartition train/test, c'est très courant. Si tel est le cas, vous devez vous assurer que la répartition est représentative du problème. Les statistiques et la visualisation univariées sont un bon début.
  • Peut-être pouvez-vous exploiter le matériel pour améliorer les estimations. Par exemple, si vous disposez d'un cluster ou d'un compte Amazon Web Services, nous pouvons entraîner des n modèles en parallèle, puis prendre la moyenne et l'écart type des résultats pour obtenir une estimation plus robuste.
  • Vous pouvez peut-être utiliser un ensemble de validation pour avoir une idée des performances du modèle pendant son entraînement (utile pour un arrêt anticipé, voir plus tard).
  • Peut-être pouvez-vous conserver un ensemble de validation complètement aveugle que vous utilisez uniquement après avoir effectué la sélection du modèle.

Dans l'autre sens, vous pouvez peut-être réduire la taille de l'ensemble de données et utiliser des méthodes de rééchantillonnage plus puissantes.

  • Peut-être constatez-vous une forte corrélation entre les performances du modèle formé sur un échantillon de l'ensemble de données d'entraînement et celles d'un modèle formé sur l'ensemble de données. Vous pouvez peut-être effectuer la sélection et le réglage du modèle en utilisant le plus petit ensemble de données, puis mettre à l'échelle la technique finale jusqu'à l'ensemble de données complet à la fin.
  • Vous pouvez peut-être quand même contraindre l'ensemble de données, prendre un échantillon et l'utiliser pour tout le développement de modèles.

Vous devez avoir une confiance totale dans les estimations de performances de vos modèles.

En rapport :

  • Évaluer les performances des modèles d'apprentissage profond dans Keras
  • Évaluer les performances des algorithmes d'apprentissage automatique en Python à l'aide du rééchantillonnage

3. Améliorez les performances grâce au réglage des algorithmes

C'est là que se trouve la viande.

Vous pouvez souvent découvrir rapidement un ou deux algorithmes performants grâce à une vérification ponctuelle. Tirer le meilleur parti de ces algorithmes peut prendre des jours, des semaines ou des mois.

Voici quelques idées pour régler les algorithmes de votre réseau neuronal afin d’en tirer le meilleur parti.

  1. Diagnostic.
  2. Initialisation du poids.
  3. Taux d'apprentissage.
  4. Fonctions d'activation.
  5. Topologie du réseau.
  6. Lots et époques.
  7. Régularisation.
  8. Optimisation et perte.
  9. Arrêt anticipé.

Vous devrez peut-être entraîner une « configuration » donnée de votre réseau plusieurs fois (3 à 10 ou plus) pour obtenir une bonne estimation des performances de la configuration. Cela s'applique probablement à tous les aspects que vous pouvez régler dans cette section.

Pour un bon article sur l'optimisation des hyperparamètres, voir :

  • Comment griller les hyperparamètres de recherche pour les modèles d'apprentissage profond en Python avec Keras

1) Diagnostic

Vous obtiendrez de meilleures performances si vous savez pourquoi les performances ne s’améliorent plus.

Votre modèle est-il surajusté ou sous-ajusté ?

Gardez toujours cette question à l’esprit. Toujours.

Il fera l’un ou l’autre, à des degrés divers.

Un moyen rapide d'avoir un aperçu du comportement d'apprentissage de votre modèle consiste à l'évaluer sur l'entraînement et un ensemble de données de validation à chaque époque, et à tracer les résultats.

  • Si la formation est bien meilleure que l'ensemble de validation, vous faites probablement un surajustement et vous pouvez utiliser des techniques telles que la régularisation.
  • Si la formation et la validation sont toutes deux faibles, vous êtes probablement sous-équipé et vous pouvez probablement augmenter la capacité de votre réseau et vous former plus ou plus longtemps.
  • S'il y a un point d'inflexion lorsque la formation dépasse la validation, vous pourrez peut-être utiliser un arrêt anticipé.

Créez souvent ces tracés et étudiez-les pour avoir un aperçu des différentes techniques que vous pouvez utiliser pour améliorer les performances.

Ces tracés pourraient constituer les diagnostics les plus précieux que vous puissiez créer.

Un autre diagnostic utile consiste à étudier les observations selon lesquelles le réseau a raison ou tort.

Sur certains problèmes, cela peut vous donner des idées de choses à essayer.

  • Peut-être avez-vous besoin d'exemples plus nombreux ou augmentés pour les exemples difficiles à former.
  • Vous pouvez peut-être supprimer de grands échantillons de l'ensemble de données d'entraînement qui sont faciles à modéliser.
  • Vous pouvez peut-être utiliser des modèles spécialisés qui se concentrent sur différentes régions claires de l'espace d'entrée.

En rapport

  • Afficher l'historique de formation du modèle d'apprentissage profond dans Keras
  • Surajustement et sous-ajustement avec les algorithmes d'apprentissage automatique

2) Initialisation du poids

La règle générale était la suivante :

Initialisez en utilisant de petits nombres aléatoires.

En pratique, cela reste probablement suffisant. Mais est-ce le meilleur pour votre réseau ?

Il existe également des heuristiques pour différentes fonctions d’activation, mais je ne me souviens pas avoir vu beaucoup de différence dans la pratique.

Gardez votre réseau fixe et essayez chaque schéma d'initialisation.

N'oubliez pas que les poids sont les paramètres réels de votre modèle que vous essayez de trouver. Il existe de nombreux jeux de poids qui donnent de bonnes performances, mais vous voulez de meilleures performances.

  • Essayez toutes les différentes méthodes d'initialisation proposées et voyez si l'une d'entre elles est meilleure, tout le reste restant constant.
  • Essayez le pré-apprentissage avec une méthode non supervisée comme un encodeur automatique.
  • Essayez de prendre un modèle existant et de recycler une nouvelle couche d'entrée et de sortie pour votre problème (apprentissage par transfert).

N'oubliez pas que la modification de la méthode d'initialisation du poids est étroitement liée à la fonction d'activation et même à la fonction d'optimisation.

En rapport

  • Initialisation des réseaux profonds

3) Taux d'apprentissage

Il est souvent rentable d’ajuster le taux d’apprentissage.

Voici quelques idées de choses à explorer :

  • Expérimentez avec des taux d’apprentissage très élevés et très faibles.
  • Recherchez sur la grille les valeurs de taux d'apprentissage courantes dans la littérature et voyez jusqu'où vous pouvez pousser le réseau.
  • Essayez un taux d'apprentissage qui diminue au fil des époques.
  • Essayez un taux d'apprentissage qui réduit chaque nombre fixe d'époques d'un pourcentage.
  • Essayez d'ajouter un terme d'élan, puis de griller le taux d'apprentissage et l'élan de la recherche ensemble.

Les réseaux plus grands ont besoin de plus de formation, et inversement. Si vous ajoutez plus de neurones ou plus de couches, augmentez votre taux d'apprentissage.

Le taux d'apprentissage est couplé au nombre d'époques de formation, à la taille du lot et à la méthode d'optimisation.

En rapport :

  • Utilisation des planifications de taux d'apprentissage pour les modèles d'apprentissage profond en Python avec Keras
  • Quel taux d'apprentissage doit être utilisé pour le backprop ?

4) Fonctions d'activation

Vous devriez probablement utiliser les fonctions d'activation du redresseur.

Ils fonctionnent simplement mieux.

Avant cela, c'était sigmoïde et tanh, puis un softmax, linéaire ou sigmoïde sur la couche de sortie. Je ne recommande pas d’en essayer plus à moins que vous sachiez ce que vous faites.

Essayez les trois et redimensionnez vos données pour respecter les limites des fonctions.

Évidemment, vous souhaitez choisir la fonction de transfert adaptée à la forme de votre sortie, mais envisagez d'explorer différentes représentations.

Par exemple, changez votre sigmoïde pour la classification binaire en linéaire pour un problème de régression, puis post-traitez vos sorties. Cela peut également nécessiter de modifier la fonction de perte en quelque chose de plus approprié. Consultez la section sur les transformations de données pour plus d'idées dans ce sens.
Connexe :

  • Pourquoi utiliser les fonctions d'activation ?

5) Topologie du réseau

Les modifications apportées à la structure de votre réseau seront payantes.

De combien de couches et de combien de neurones avez-vous besoin ?

Personne ne le sait. Personne. Ne demandez pas.

Vous devez découvrir une bonne configuration pour votre problème. Expérience.

  • Essayez une couche cachée avec beaucoup de neurones (large).
  • Essayez un réseau profond avec quelques neurones par couche (profond).
  • Essayez des combinaisons de ce qui précède.
  • Essayez les architectures d'articles récents sur des problèmes similaires aux vôtres.
  • Essayez les modèles de topologie (en éventail puis en entrée) et les règles empiriques tirées de livres et d'articles (voir les liens ci-dessous).

C'est dur. Les réseaux plus grands disposent d'une plus grande capacité de représentation, et peut-être en avez-vous besoin.

Un plus grand nombre de couches offre plus de possibilités de recomposition hiérarchique des caractéristiques abstraites tirées des données. Peut-être que tu en as besoin.

Les réseaux ultérieurs ont besoin de plus de formation, tant en termes d’époques que de rythme d’apprentissage. Ajustez en conséquence.
Connexe :

Ces liens vous donneront plein d’idées de choses à essayer, et bien c’est le cas pour moi.

  • Combien de calques cachés dois-je utiliser ?
  • Combien d’unités cachées dois-je utiliser ?

6) Lots et époques

La taille du lot définit le dégradé et la fréquence de mise à jour des poids. Une époque correspond à l’ensemble des données de formation exposées au réseau, lot par lot.

Avez-vous expérimenté différentes tailles de lots et nombres d'époques ?

Ci-dessus, nous avons commenté la relation entre le taux d'apprentissage, la taille du réseau et les époques.

Les petites tailles de lots avec une grande taille d'époque et un grand nombre d'époques de formation sont courantes dans les implémentations modernes d'apprentissage profond.

Cela peut ou non correspondre à votre problème. Rassemblez des preuves et voyez.

  • Essayez une taille de lot égale à la taille des données d'entraînement, en fonction de la mémoire (apprentissage par lots).
  • Essayez une taille de lot d'un seul (apprentissage en ligne).
  • Essayez une recherche par grille de différentes tailles de mini-lots (8, 16, 32,…).
  • Essayez de vous entraîner pendant quelques époques et pendant un très grand nombre d'époques.

Considérez un nombre presque infini d'époques et configurez les points de contrôle pour capturer le modèle le plus performant vu jusqu'à présent, pour en savoir plus à ce sujet plus bas.

Certaines architectures réseau sont plus sensibles que d’autres à la taille des lots. Je considère les perceptrons multicouches comme souvent robustes à la taille des lots, alors que les LSTM et les CNN sont assez sensibles, mais ce n'est qu'anecdotique.

En rapport

  • Qu’est-ce que l’apprentissage par lots, incrémentiel, en ligne… ?
  • Intuitivement, comment la taille des mini-lots affecte-t-elle les performances de la descente de gradient (stochastique) ?

7) Régularisation

La régularisation est une excellente approche pour réduire le surajustement des données d'entraînement.

La nouvelle technique de régularisation à la mode est le dropout, l'avez-vous essayé ?

L'abandon saute des neurones au hasard pendant l'entraînement, obligeant les autres membres de la couche à prendre le relais. Simple et efficace. Commencez par l’abandon.

  • Grille de recherche pour différents pourcentages d'abandon.
  • Expérimentez avec la suppression dans les couches d'entrée, cachées et de sortie.

Il existe des extensions sur l'idée de décrochage avec lesquelles vous pouvez également jouer, comme drop connect.

Considérez également d'autres techniques de régularisation de réseaux neuronaux plus traditionnelles, telles que :

  • Dégradation du poids pour pénaliser les gros poids.
  • Contrainte d'activation, pour pénaliser les grosses activations.

Expérimentez avec les différents aspects qui peuvent être pénalisés et avec les différents types de pénalités qui peuvent être appliquées (L1, L2, les deux).

En rapport :

  • Régularisation des abandons dans les modèles d'apprentissage profond avec Keras
  • Qu’est-ce que la perte de poids ?

8) Optimisation et perte

Auparavant, il s'agissait d'une descente de gradient stochastique, mais il existe désormais une tonne d'optimiseurs.

Avez-vous expérimenté différentes procédures d'optimisation ?

La descente de gradient stochastique est la valeur par défaut. Tirez-en le meilleur parti en premier, avec différents taux d'apprentissage, dynamiques et calendriers de taux d'apprentissage.

La plupart des méthodes d'optimisation les plus avancées offrent davantage de paramètres, plus de complexité et une convergence plus rapide. C'est bon et mauvais, selon votre problème.

Pour tirer le meilleur parti d'une méthode donnée, vous devez vraiment vous plonger dans la signification de chaque paramètre, puis rechercher sur une grille différentes valeurs pour votre problème. Dur. Prend du temps. Cela pourrait être payant.

J'ai découvert que les méthodes les plus récentes/populaires peuvent converger beaucoup plus rapidement et donner une idée rapide de la capacité d'une topologie de réseau donnée, par exemple :

  • ADAM
  • RMSprop

Vous pouvez également explorer d’autres algorithmes d’optimisation comme les plus traditionnels (Levenberg-Marquardt) et les moins (algorithmes génétiques). D'autres méthodes peuvent offrir de bons points de départ à SGD et à ses amis pour affiner.

La fonction de perte à optimiser peut être étroitement liée au problème que vous essayez de résoudre.

Néanmoins, vous disposez souvent d'une certaine marge de manœuvre (MSE et MAE pour la régression, etc.) et vous pourriez obtenir une petite bosse en échangeant la fonction de perte sur votre problème. Cela peut également être lié à l'ampleur de vos données d'entrée et aux fonctions d'activation utilisées.

En rapport :

  • Un aperçu des algorithmes d'optimisation de descente de gradient
  • Que sont les gradients conjugués, Levenberg-Marquardt, etc. ?
  • Sur les méthodes d'optimisation pour le Deep Learning, 2011 [PDF]

9) Arrêt anticipé

Vous pouvez arrêter d’apprendre une fois que les performances commencent à se dégrader.

Cela peut vous faire gagner beaucoup de temps et peut même vous permettre d'utiliser des méthodes de rééchantillonnage plus élaborées pour évaluer les performances de votre modèle.

L'arrêt anticipé est un type de régularisation visant à limiter le surajustement des données d'entraînement et nécessite que vous surveilliez les performances du modèle lors de l'entraînement et des ensembles de données de validation conservés, à chaque époque.

Une fois que les performances sur l’ensemble de données de validation commencent à se dégrader, la formation peut s’arrêter.

Vous pouvez également configurer des points de contrôle pour enregistrer le modèle si cette condition est remplie (mesure de la perte de précision) et permettre au modèle de continuer à apprendre.

Les points de contrôle vous permettent d'effectuer un arrêt anticipé sans arrêt, vous offrant ainsi le choix entre quelques modèles à la fin d'une course.

En rapport :

  • Comment vérifier les modèles d'apprentissage profond dans Keras
  • Qu’est-ce qu’un arrêt précoce ?

4. Améliorer les performances avec les ensembles

Vous pouvez combiner les prédictions de plusieurs modèles.

Après le réglage de l’algorithme, c’est le prochain grand domaine d’amélioration.

En fait, vous pouvez souvent obtenir de bonnes performances en combinant les prédictions de plusieurs modèles « assez bons » plutôt que de plusieurs modèles hautement optimisés (et fragiles).

Nous examinerons trois domaines généraux d’ensembles que vous voudrez peut-être considérer :

  1. Combinez des modèles.
  2. Combinez les vues.
  3. Empilage.

1) Combiner des modèles

Ne sélectionnez pas un modèle, combinez-les.

Si vous disposez de plusieurs modèles d'apprentissage profond différents, chacun fonctionnant bien sur le problème, combinez leurs prédictions en prenant la moyenne.

Plus les modèles sont différents, mieux c'est. Par exemple, vous pouvez utiliser des topologies de réseau très différentes ou des techniques différentes.

La prédiction d'ensemble sera plus robuste si chaque modèle est compétent mais de différentes manières.

Alternativement, vous pouvez expérimenter la position inverse.

Chaque fois que vous entraînez le réseau, vous l'initialisez avec des poids différents et il converge vers un ensemble différent de poids finaux. Répétez ce processus plusieurs fois pour créer de nombreux réseaux, puis combinez les prédictions de ces réseaux.

Leurs prédictions seront fortement corrélées, mais cela pourrait vous donner une légère amélioration sur les modèles plus difficiles à prédire.

En rapport :

  • Ensemble d'algorithmes d'apprentissage automatique en Python avec scikit-learn
  • Comment améliorer les résultats de l'apprentissage automatique

2) Combiner les vues

Comme ci-dessus, mais formez chaque réseau sur une vision ou un cadrage différent de votre problème.

Là encore, l’objectif est de disposer de modèles performants, mais de différentes manières (par exemple, prédictions non corrélées).

Vous pouvez vous appuyer sur les techniques de mise à l'échelle et de transformation très différentes répertoriées ci-dessus dans la section Données pour trouver des idées.

Plus les transformations et le cadrage du problème utilisé pour entraîner les différents modèles sont différents, plus vos résultats sont susceptibles de s'améliorer.

Utiliser une simple moyenne de prédictions serait un bon début.

3) Empilage

Vous pouvez également apprendre à combiner au mieux les prédictions de plusieurs modèles.

C'est ce qu'on appelle la généralisation empilée ou empilement en abrégé.

Souvent, vous pouvez obtenir de meilleurs résultats par rapport à la moyenne des prédictions en utilisant des méthodes linéaires simples comme la régression régularisée qui apprend à pondérer les prédictions de différents modèles.

Les résultats de référence utilisent la moyenne des prédictions des sous-modèles, mais améliorent les performances grâce aux pondérations apprises des modèles.

  • Généralisation empilée (empilage)

Conclusions

Vous avez réussi.

Ressources supplémentaires

Il existe de nombreuses bonnes ressources, mais rares sont celles qui relient toutes les idées.

Je vais énumérer quelques ressources et articles connexes qui pourraient vous intéresser si vous souhaitez approfondir.

  • FAQ sur les réseaux neuronaux
  • Comment griller les hyperparamètres de recherche pour les modèles d'apprentissage profond en Python avec Keras
  • Trucs/astuces indispensables dans les réseaux de neurones profonds
  • Comment augmenter la précision de la validation avec un réseau neuronal profond ?

Connaissez-vous une bonne ressource ? Faites-le-moi savoir, laissez un commentaire.

Gérer le dépassement

Il s’agit d’un article volumineux et nous avons parcouru beaucoup de terrain.

Vous n'êtes pas obligé de tout faire. Vous avez juste besoin d’une bonne idée pour améliorer vos performances.

Voici comment gérer le débordement :

  1. Choisissez un groupe

    1. Données.
    2. Algorithmes.
    3. Réglage.
    4. Ensembles.
  2. Choisissez une méthode dans le groupe.
  3. Choisissez une chose à essayer parmi la méthode choisie.
  4. Comparez les résultats, conservez s'il y a eu une amélioration.
  5. Répéter.

Partagez vos résultats

Avez-vous trouvé cet article utile ?

Avez-vous eu cette idée ou cette méthode qui a fait la différence ?

Faites-le moi savoir, laissez un commentaire !
J'aimerais en entendre parler.

Articles connexes