Meilleures pratiques pour le réglage fin des modèles de vision par ordinateur

Meilleures pratiques pour le réglage fin des modèles de vision par ordinateur

Vous avez du mal à trouver des ressources qui vous guident dans le processus de réglage des hyperparamètres ?

Cet article vous présentera les meilleures pratiques pour le réglage des hyperparamètres, explorées à travers une tâche typique de vision par ordinateur avec TensorFlow et Keras-Tuner.

Intro 

Le réglage des hyperparamètres dans les modèles d'apprentissage profond pour les applications de vision par ordinateur peut souvent être un processus difficile. La formation et le réglage des réseaux neuronaux impliquent encore une quantité étonnante de conjectures ! Malgré l'amélioration des performances des modèles d'apprentissage profond, ces derniers sont soumis à une procédure d'ajustement par essais et erreurs. Même les experts peuvent se retrouver piégés dans un terrier d'essais et d'erreurs, dans le but de faire fonctionner ces réseaux !

Les articles scientifiques présentent généralement un ensemble d'hyperparamètres optimaux, mais le processus de découverte de cet ensemble est rarement élaboré. De plus, il est difficile de trouver des ressources qui fournissent un plan généralisé pour l'ajustement des hyperparamètres (en voici un cependant ! [1]).

Dans cet article, nous allons nous attaquer à un scénario typique de vision par ordinateur. Nous commencerons par un modèle pré-entraîné et explorerons comment nous pouvons effectuer efficacement le réglage des hyperparamètres. Nous suivrons certaines "meilleures pratiques" documentées et combinerons des outils logiciels et notre expertise en apprentissage profond pour rechercher l'espace des hyperparamètres de manière méthodique.

Conditions préalables

Avant de vous lancer dans le processus de mise au point, il est important de vous assurer que vous vous êtes correctement préparé à la tâche à accomplir. Cela comprend

  1. Formuler clairement votre problème, définir et mettre en œuvre les paramètres de réussite nécessaires.
  2. Préparer et nettoyer votre ensemble de données jusqu'à ce que le temps consacré à l'architecture du modèle ait un sens.
  3. Mise en place d'un pipeline de formation et d'évaluation. Cela facilite l'expérimentation rapide !

Une fois ces critères remplis, vous pouvez commencer à vous amuser !

Compromis exploration-exploitation.

Au cours des premières étapes, votre objectif est d'acquérir une intuition sur le problème. C'est la phase d'exploration où vous essayez de comprendre le comportement de la formation du modèle.

Les expériences sont coûteuses. Chaque expérience de formation que vous réalisez doit avoir un objectif clair. Vous devez poser clairement une question à laquelle vous souhaitez répondre. Voici quelques exemples de questions que vous pouvez poser 

  • Quels sont les paramètres qui semblent avoir le plus d'impact sur la perte de validation ?
  • Quels paramètres sont fortement interdépendants et doivent être réglés ensemble ?
  • Quelles sont les bonnes limites pour l'hyperparamètre X ?
  • Les complexités peuvent-elles être supprimées sans affecter les performances ?
  • L'overfitting est-il présent ? Peut-il être résolu en augmentant la régularisation ?
  • Les gradients explosifs sont-ils présents ? Sont-ils lissés par un taux d'apprentissage plus faible ou devez-vous essayer de couper le gradient ?
  • Quel jeu de paramètres converge le plus rapidement ?

Une fois que vous avez une bonne compréhension du problème, vous pouvez traduire ces connaissances en un espace de recherche hyperparamétrique plus restreint. Ceci marque le début de la phase d'exploitation

Pendant la phase d'exploitation, votre seul objectif est d'augmenter les performances de validation de votre modèle. Vous pouvez utiliser des algorithmes de recherche, tels que l'optimisation bayésienne ou l'optimisation hyperbande, pour rechercher efficacement les valeurs d'hyperparamètres les plus optimales dans l'espace de recherche défini. Ces algorithmes peuvent fournir d'excellents résultats lorsqu'un expert définit un "bon" espace de recherche.

5 meilleures pratiques pour le réglage des hyperparamètres 

  1. Agissez comme un scientifique ! Au cours de toute expérience de formation, il existe 3 types de paramètres. Les paramètres scientifiques, les paramètres de nuisance et les paramètres fixes.
  • Paramètres scientifiques : ceux que vous explorez actuellement et dont vous essayez de comprendre les effets.
  • Paramètres de nuisance : paramètres fortement interdépendants avec les paramètres scientifiques. Ils doivent être réglés les uns par rapport aux autres. Par exemple, le taux d'apprentissage est un paramètre de nuisance lorsque le paramètre scientifique est le type d'optimiseur. Vous devez d'abord trouver un taux d'apprentissage décent pour chaque optimiseur avant de les comparer.
  • Paramètres fixes : Si ce n'est pas scientifique ou gênant, gardez-le fixe. Vous ne voulez pas qu'ils interagissent avec les performances. Si vous modifiez plusieurs paramètres à la fois, vous ne pourrez pas tirer de réponses significatives de vos expériences !

  1. Essayez d'itérer rapidement. Sélectionnez une taille de lot qui maximise l'utilisation du GPU. Cela permettra à votre formation de converger plus rapidement. Des recherches ont montré [2] que la taille du lot n'affecte pas de manière significative les performances finales tant que d'autres paramètres (par exemple, le taux d'apprentissage, la régularisation) sont ajustés en fonction de la taille du lot.

En général, la plus grande taille de lot que vous pouvez utiliser sera la meilleure. N'utilisez pas une taille de lot plus importante si cela ralentit l'apprentissage et ne traitez pas la taille de lot comme un hyperparamètre. Choisissez une taille de lot et tenez-vous en à celle-ci.

  1. Inspectez toujours les courbes d'apprentissage. Il peut être fastidieux de passer en revue des dizaines de courbes pour régler un modèle. Nous sommes tous coupables de ne pas les inspecter de temps en temps. Cependant, une seule valeur métrique peut vous en dire tellement... L'étude des courbes d'apprentissage d'au moins les 2 ou 3 meilleurs modèles de chaque expérience vous donnera beaucoup plus d'informations. L'overfitting, l'explosion du gradient, la stagnation des performances et bien d'autres choses encore peuvent être détectées grâce aux graphiques.

  1. Automatisez la génération des tracés importants (oui, c'est encore du traçage). Essayez de tracer autant d'informations que possible. Plus vous aurez de courbes d'entraînement, d'histogrammes de poids, de diagrammes de dispersion ou de diagrammes à lignes parallèles, plus vous pourrez tirer d'informations de vos expériences. 

Si vous devez faire des efforts pour les créer, vous serez moins enclin à les étudier. Des outils comme Tensorboard et le suivi des expériences de Picsellia offrent une meilleure alternative au traçage manuel ; veillez donc à en utiliser un.

  1. Exécutez plusieurs expériences identiques et calculez les valeurs de moyenne et d'écart type. Il n'est pas rare d'avoir des modèles "chanceux" qui obtiennent de bonnes performances grâce à une initialisation favorable, mais la répétition de la même expérience peut révéler des performances bien inférieures.

Je sais, les budgets de calcul peuvent être un facteur limitant. Gardez simplement à l'esprit que plus vous avez d'essais, plus vous pouvez être confiant dans le résultat.

Ajustement fin des modèles de vision par ordinateur pré-entraînés

Un cas de vision par ordinateur en biologie 

Imaginons le scénario suivant. Vous êtes ingénieur dans une startup opérant dans le secteur des biotechnologies. On vous demande de déployer un modèle d'apprentissage profond pour la tâche de vision par ordinateur suivante : détecter les cellules contaminées par la malaria dans des images de microscopie. 

                                        

Fig.1 : Exemples d'ensembles de données 

                                                                            

Pour plusieurs raisons, le modèle doit être léger et fonctionner sur un périphérique embarqué dans les microscopes. Vous vous tournez vers TensorFlow Hub, un référentiel en ligne de modèles d'apprentissage profond pré-entraînés, à la recherche d'un modèle qui corresponde à vos attentes. Vous tombez sur MobileNet V3[3].

MobileNet V3 est une architecture de réseau neuronal profond conçue spécifiquement pour les applications périphériques. Elle est connue pour sa légèreté, sa grande précision et sa rapidité d'inférence, ce qui en fait un choix idéal pour la vision par ordinateur à la périphérie. Avec votre jeu de données nettoyé en main, vous pouvez maintenant affiner le modèle MobileNet V3 pour mieux répondre à votre cas d'utilisation spécifique.

Dans notre cas, j'ai empilé une couche linéaire de 100 neurones et une couche de classification avec une fonction d'activation softmax sur l'extracteur de caractéristiques pré-entraîné. De plus, j'ai déjà mis en place un pipeline de données simple et mon code d'entraînement est en place. 

Cela me qualifie pour le prochain tour !

Obtenir des informations

Mon système supporte une taille de lot allant jusqu'à 248 pour cet ensemble de données. Cette taille est suffisante pour fournir des itérations rapides et je m'y tiens.

En commençant par ma première expérience, j'essaie 2 optimiseurs différents et j'observe les effets sur la convergence. Ont-ils une grande influence sur la perte de validation ? L'optimiseur est le paramètre expérimental pendant ce tour. Cependant, le taux d'apprentissage est un paramètre de nuisance, donc je peux avoir besoin d'essayer au moins deux valeurs différentes. Le nombre d'optimiseurs et de taux d'apprentissage que vous choisirez de tester dépendra de votre budget informatique et des objectifs du projet.

Comme nous l'avons mentionné, il est important d'observer les graphiques d'apprentissage et pas seulement la mesure du succès.

Je commence avec l'optimiseur Adam, un lr standard=0.003, et je m'entraîne pendant 10 époques en utilisant un arrêt précoce et un planificateur simple de réduction du taux d'apprentissage avec un facteur de 0.3 et une patience de 2.

Évaluation sur l'ensemble de validation :

                              

Pas un mauvais départ... 

Cependant, les graphiques révèlent plus d'informations. Tout d'abord, nous observons comment la perte de validation commence à s'incrémenter après l'époque 5, ce qui indique la présence d'un surajustement. Cependant, puisque la précision de la validation est bonne, je serais tenté d'augmenter le nombre d'époques et la patience pour un arrêt précoce, à la place. Puisque l'augmentation de la précision suggère que la convergence est toujours en cours. Gardez à l'esprit que pendant l'époque 8, le planificateur a réduit le taux d'apprentissage.

Fig 2 : Graphiques d'apprentissage. Sur-apprentissage ou simplement augmenter les époques d'apprentissage et réduire la patience d'arrêt précoce ?

Un rapide coup d'œil aux histogrammes de poids révèle que les premières couches du réseau ne changent pas beaucoup (fig 3). Nous pouvons voir qu'elles restent stables d'une époque à l'autre. Cela peut révéler un problème de gradient évanescent. Cependant, dans notre cas, nous nous attendons à ce que l'apprentissage soit concentré dans les dernières couches. 

En effet, la figure 4 montre que les dernières couches de MobileNet subissent de légères modifications, tandis que le classificateur (figure 5) est celui sur lequel se concentre l'essentiel de l'apprentissage, notamment sur les biais.

Figure 3 : Les premières couches de MobileNet restent presque entièrement inchangées. Nous pouvons supposer qu'elles n'ont pas besoin de changer trop souvent de toute façon.

Fig. 4 : Les dernières couches de MobileNet sont affinées et on observe des changements plus nets dans les valeurs de poids.

       

Fig 5 : La couche du classificateur subit des changements plus importants. L'apprentissage est surtout concentré ici.

J'espère que l'on comprend maintenant pourquoi l'inspection de nombreux graphiques d'entraînement est importante pour l'apprentissage profond. Ils constituent une source d'informations très riche.

Je vérifie ensuite si un taux d'apprentissage plus élevé peut permettre une convergence plus rapide sans affecter les performances. Il s'avère que lr=0,03 n'était pas une bonne valeur de paramètre de nuisance pour l'optimiseur Adam, ce qui a entraîné des performances sous-optimales et un comportement explosif. Il est intéressant de voir comment les poids des premières couches ont été sévèrement affectés, ce que nous n'avons généralement pas l'intention de faire lors du réglage fin des modèles pré-entraînés.

             

Fig 6 : Poids sévèrement affectés d'une couche précoce dans l'extracteur de caractéristiques.

En suivant une procédure similaire pour mes autres expériences, j'ai acquis suffisamment de connaissances sur le problème pour concevoir un espace de recherche restreint pour la phase d'exploitation, où Keras-Tuner trouvera les valeurs les plus optimales en utilisant l'optimisation bayésienne.

Ajustement automatique des modèles pré-entraînés

Je vais maintenant laisser le logiciel de réglage trouver la meilleure combinaison de paramètres. Je définis le modèle et l'espace de recherche à l'intérieur de la classe `MobileNetHyperModel` et ensuite j'exécute la recherche avec l'Optimisation Bayésienne. Dans mon cas, Keras-Tuner a été utilisé, mais il existe de nombreux outils similaires disponibles.

J'ai fixé mon budget de calcul à 10 et laissé chaque modèle s'entraîner pendant 10 époques avec l'arrêt précoce activé. Il ne vous reste plus qu'à attendre que l'algorithme termine sa recherche.Si vous êtes limité par le budget de calcul, vous pouvez choisir d'exécuter la recherche sur une fraction de l'ensemble de données, disons 50%, et une fois que vous avez un modèle optimal, vous pouvez l'entraîner à nouveau sur l'ensemble de données complet.

                             

Fig 7 : Exemple de sortie de Keras Tuner pendant la recherche. Un modèle optimal a déjà été trouvé à l'essai 3 !

Enfin, j'extrais la meilleure combinaison de paramètres et entraîne le modèle optimal pendant 10 époques. J'évalue d'abord le modèle sur mon ensemble de données de validation. Puisque je suis très satisfait de la performance du modèle sur l'ensemble de données de validation, et que les graphiques d'entraînement semblent bons sans aucun problème évident, je décide d'arrêter le réglage ici et d'utiliser ce modèle pour la production. 

Avant de le déployer, je l'évalue sur l'ensemble de données de test pour obtenir une évaluation impartiale. Cette performance devrait servir d'indication de ce à quoi il faut s'attendre en production.                     

                         

 Fig 8 : Évaluation du modèle final sur le jeu de données de test.

Une fois le modèle déployé, vous constaterez très probablement une dégradation des performances due aux dérives des données, il est donc important de disposer d'une base de référence. L'utilisation de boucles de rétroaction est un moyen efficace de lutter contre la dégradation des performances des modèles d'apprentissage automatique déployés. 

Réflexions finales

Le réglage fin des modèles d'apprentissage profond peut devenir assez fastidieux et prendre beaucoup de temps. Toutefois, les résultats peuvent être obtenus plus rapidement si vous disposez d'une stratégie prédéfinie, d'un outil de visualisation, d'un outil de réglage et, bien sûr, d'une expertise en apprentissage profond et dans votre domaine sous-jacent !

Dans ce billet de blog, nous avons exploré un cas typique de vision par ordinateur. L'objectif de ce billet est de fournir des informations précieuses et de servir d'inspiration plutôt que de fournir une description détaillée du codage.

Nous avons travaillé avec un modèle d'apprentissage profond pré-entraîné et l'avons affiné sur un jeu de données personnalisé. Nous avons exploré les meilleures pratiques pour l'ajustement des modèles d'apprentissage profond et les avons appliquées pour ajuster un modèle de vision informatique MobileNet léger sur un ensemble de données de biologie de l'image. 

RÉFÉRENCES

  1. Manuel de réglage de l'apprentissage profond par Google
  2. Mesure des effets du parallélisme des données sur l'entraînement des réseaux de neurones. Shallue et al. 2018
  3. Recherche de MobileNet V3. Howard et al. 2019
  4. Explication des histogrammes de poids 
  5. Apprentissage par transfert avec TensorFlow Hub
  6. Tutoriel pratique sur Keras Tuner (Article de blog de l'auteur)

Commencez à gérer vos données d'IA de la bonne façon.

Demander un essai gratuit

Recommandé pour vous :