Travailler avec des réseaux de neurones : liste de contrôle pour le débogage

Travailler avec des réseaux de neurones : liste de contrôle pour le débogage

Le code des produits logiciels d’apprentissage automatique est souvent complexe et assez déroutant. Détecter et éliminer les bogues est une tâche gourmande en ressources. Même le plus simple réseaux de neurones à action directe nécessitent une approche sérieuse de l’architecture du réseau, de l’initialisation des poids et de l’optimisation du réseau. Une petite erreur peut entraîner des problèmes désagréables.

Cet article concerne un algorithme de débogage de vos réseaux de neurones.

Skillbox vous recommande : Cours pratique Développeur Python à partir de zéro.

Nous rappelons: pour tous les lecteurs de "Habr" - une remise de 10 000 roubles lors de l'inscription à n'importe quel cours Skillbox en utilisant le code promotionnel "Habr".

L'algorithme se compose de cinq étapes :

  • démarrage facile;
  • confirmation des pertes;
  • vérifier les résultats intermédiaires et les connexions ;
  • diagnostic des paramètres ;
  • contrôle du travail.

Si quelque chose vous semble plus intéressant que le reste, vous pouvez immédiatement passer à ces sections.

Démarrage facile

Un réseau neuronal avec une architecture complexe, une régularisation et un planificateur de taux d'apprentissage est plus difficile à déboguer qu'un réseau classique. Nous sommes un peu délicats ici, puisque le point lui-même est indirectement lié au débogage, mais cela reste une recommandation importante.

Un début simple consiste à créer un modèle simplifié et à l’entraîner sur un ensemble (point) de données.

Nous créons d’abord un modèle simplifié

Pour démarrer rapidement, nous créons un petit réseau avec une seule couche cachée et vérifions que tout fonctionne correctement. Ensuite, nous compliquons progressivement le modèle, en vérifiant chaque nouvel aspect de sa structure (couche supplémentaire, paramètre, etc.), et passons à autre chose.

Nous entraînons le modèle sur un seul ensemble (point) de données

Pour vérifier rapidement l'intégrité de votre projet, vous pouvez utiliser un ou deux points de données pour la formation afin de confirmer si le système fonctionne correctement. Le réseau neuronal doit montrer une précision de 100 % lors de la formation et des tests. Si ce n’est pas le cas, soit le modèle est trop petit, soit vous avez déjà un bug.

Même si tout va bien, préparez le modèle pour une ou plusieurs époques avant de passer à autre chose.

Évaluation des pertes

L'estimation des pertes est le principal moyen d'affiner les performances du modèle. Vous devez vous assurer que la perte est adaptée au problème et que les fonctions de perte sont évaluées sur la bonne échelle. Si vous utilisez plusieurs types de perte, assurez-vous qu’ils sont tous du même ordre et correctement mis à l’échelle.

Il est important d’être attentif aux pertes initiales. Vérifiez à quel point le résultat réel est proche du résultat attendu si le modèle a démarré avec une supposition aléatoire. DANS Le travail d'Andrey Karpathy suggère ce qui suit :: « Assurez-vous d'obtenir le résultat que vous attendez lorsque vous démarrez avec un petit nombre de paramètres. Il est préférable de vérifier immédiatement la perte de données (avec le degré de régularisation fixé à zéro). Par exemple, pour CIFAR-10 avec un classificateur Softmax, nous nous attendons à ce que la perte initiale soit de 2.302 car la probabilité diffuse attendue est de 0,1 pour chaque classe (puisqu'il y a 10 classes) et la perte Softmax est la probabilité logarithmique négative de la classe correcte. comme − ln (0.1) = 2.302.

Pour l’exemple binaire, un calcul similaire est simplement effectué pour chacune des classes. Voici, par exemple, les données : 20 % de 0 et 80 % de 1. La perte initiale attendue s'élèvera à –0,2ln (0,5) –0,8ln (0,5) = 0,693147. Si le résultat est supérieur à 1, cela peut indiquer que les poids du réseau neuronal ne sont pas correctement équilibrés ou que les données ne sont pas normalisées.

Vérification des résultats intermédiaires et des connexions

Pour déboguer un réseau neuronal, il est nécessaire de comprendre la dynamique des processus au sein du réseau et le rôle des différentes couches intermédiaires lorsqu'elles sont connectées. Voici les erreurs courantes que vous pouvez rencontrer :

  • expressions incorrectes pour les mises à jour progressives ;
  • les mises à jour de poids ne sont pas appliquées ;
  • des dégradés explosifs.

Si les valeurs du dégradé sont nulles, cela signifie que le taux d'apprentissage dans l'optimiseur est trop lent ou que vous rencontrez une expression incorrecte pour mettre à jour le dégradé.

De plus, il est nécessaire de surveiller les valeurs des fonctions d'activation, les poids et les mises à jour de chacune des couches. Par exemple, l'ampleur des mises à jour des paramètres (pondérations et biais) devrait être 1-e3.

Il existe un phénomène appelé « Dying ReLU » ou "problème de gradient de disparition", lorsque les neurones ReLU produiront zéro après avoir appris une grande valeur de biais négatif pour leurs poids. Ces neurones ne sont plus jamais activés à aucun moment des données.

Vous pouvez utiliser la vérification du gradient pour identifier ces erreurs en approximant le gradient à l'aide d'une approche numérique. S'il est proche des gradients calculés, alors la rétropropagation a été correctement mise en œuvre. Pour créer une vérification de dégradé, consultez ces excellentes ressources de CS231 ici и iciAussi bien que leçon Andrew Nga sur ce sujet.

Faizan Cheikh indique trois méthodes principales pour visualiser un réseau de neurones :

  • Les préliminaires sont des méthodes simples qui nous montrent la structure générale du modèle entraîné. Ceux-ci incluent la sortie de formes ou de filtres des couches individuelles du réseau neuronal et les paramètres au sein de chaque couche.
  • Basé sur l'activation. On y décrypte les activations de neurones individuels ou de groupes de neurones pour comprendre leurs fonctions.
  • Basé sur des dégradés. Ces méthodes ont tendance à manipuler les gradients formés à partir des passes avant et arrière de la formation du modèle (y compris les cartes de saillance et les cartes d'activation de classe).

Il existe plusieurs outils utiles pour visualiser les activations et les connexions de couches individuelles, par ex. ConX и Tableau tenseur.

Travailler avec des réseaux de neurones : liste de contrôle pour le débogage

Diagnostic des paramètres

Les réseaux de neurones comportent de nombreux paramètres qui interagissent les uns avec les autres, ce qui complique l'optimisation. En fait, cette section fait l'objet de recherches actives de la part de spécialistes, les suggestions ci-dessous doivent donc être considérées uniquement comme des conseils, des points de départ sur lesquels s'appuyer.

Taille du paquet (taille du lot) - Si vous souhaitez que la taille du lot soit suffisamment grande pour obtenir des estimations précises du gradient d'erreur, mais suffisamment petite pour que la descente de gradient stochastique (SGD) régularise votre réseau. Les petites tailles de lots conduiront à une convergence rapide en raison du bruit pendant le processus de formation et par la suite à des difficultés d'optimisation. Ceci est décrit plus en détail ici.

Taux d'apprentissage - trop faible entraînera une convergence lente ou risquera de rester coincé dans des minima locaux. Dans le même temps, un taux d'apprentissage élevé entraînera une divergence d'optimisation car vous risquez de passer par la partie profonde mais étroite de la fonction de perte. Essayez d'utiliser la planification de la vitesse pour la réduire tout en entraînant le réseau neuronal. A jour avec CS231n il y a une grande section dédiée à ce problème.

Détourage dégradé  — réduction des gradients des paramètres pendant la rétropropagation à la valeur maximale ou à la norme marginale. Utile pour dépanner les dégradés explosifs que vous pourriez rencontrer au point trois.

Normalisation par lots - utilisé pour normaliser les données d'entrée de chaque couche, ce qui permet de résoudre le problème du décalage de covariable interne. Si vous utilisez Dropout et Batch Norma ensemble, consultez cet article.

Descente de gradient stochastique (SGD) — il existe plusieurs variétés de SGD qui utilisent l'élan, les taux d'apprentissage adaptatifs et la méthode Nesterov. Cependant, aucun d’entre eux ne présente un net avantage en termes d’efficacité d’apprentissage et de généralisation (détails ici).

Régularisation - est crucial pour construire un modèle généralisable, car il ajoute une pénalité pour la complexité du modèle ou les valeurs extrêmes des paramètres. Il s’agit d’un moyen de réduire la variance du modèle sans augmenter significativement son biais. Plus informations détaillées - ici.

Pour tout évaluer vous-même, vous devez désactiver la régularisation et vérifier vous-même le gradient de perte de données.

Décrochage est une autre méthode de rationalisation de votre réseau pour éviter la congestion. Lors de l'entraînement, l'abandon s'effectue uniquement en maintenant l'activité du neurone avec une certaine probabilité p (hyperparamètre) ou en la mettant à zéro dans le cas contraire. En conséquence, le réseau doit utiliser un sous-ensemble de paramètres différent pour chaque lot de formation, ce qui réduit les modifications de certains paramètres qui deviennent dominants.

Important : Si vous utilisez à la fois l'abandon et la normalisation par lots, faites attention à l'ordre de ces opérations ou même à leur utilisation ensemble. Tout cela est encore activement discuté et complété. Voici deux discussions importantes sur ce sujet sur Stackoverflow и Arxiv.

Contrôle du travail

Il s'agit de documenter les flux de travail et les expériences. Si vous ne documentez rien, vous risquez d'oublier, par exemple, quel taux d'apprentissage ou quelle pondération de classe sont utilisés. Grâce au contrôle, vous pouvez facilement visualiser et reproduire les expériences précédentes. Cela vous permet de réduire le nombre d'expériences en double.

Cependant, la documentation manuelle peut devenir une tâche difficile dans le cas d'un volume de travail important. C'est là que des outils tels que Comet.ml entrent en jeu pour vous aider à enregistrer automatiquement les ensembles de données, les modifications de code, l'historique expérimental et les modèles de production, y compris les informations clés sur votre modèle (hyperparamètres, mesures de performances du modèle et informations environnementales).

Un réseau de neurones peut être très sensible à de petits changements, ce qui entraînera une baisse des performances du modèle. Suivre et documenter votre travail est la première étape que vous pouvez franchir pour standardiser votre environnement et votre modélisation.

Travailler avec des réseaux de neurones : liste de contrôle pour le débogage

J'espère que cet article pourra être un point de départ pour commencer à déboguer votre réseau neuronal.

Skillbox vous recommande :

Source: habr.com

Ajouter un commentaire