Avez-vous du mal à trouver des ressources qui vous guident tout au long du processus de réglage des hyperparamètres ?
Cet article vous présentera les meilleures pratiques de réglage des hyperparamètres, explorées à travers une tâche de vision par ordinateur typique avec TensorFlow et Keras-Tuner.
Introduction
Le réglage des hyperparamètres dans les modèles d’apprentissage profond pour les applications de vision par ordinateur peut souvent s’avérer un processus difficile. La formation et le réglage des réseaux de neurones impliquent encore une quantité étonnante de conjectures ! Malgré les performances améliorées offertes par les modèles d’apprentissage en profondeur, ils se font au prix d’une procédure approfondie de réglage par essais et erreurs. Même les experts peuvent se retrouver piégés dans un labyrinthe d’essais et d’erreurs, dans le but de faire fonctionner ces réseaux !
Les articles scientifiques présenteront 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 fournissant un plan généralisé pour le réglage des hyperparamètres (voici un cependant! [1]).
Dans cet article, nous aborderons 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 effectuer une recherche méthodique dans l’espace des hyperparamètres.
Conditions préalables
Avant de vous lancer dans le processus de mise au point, il est important de vous assurer que vous êtes bien préparé pour la tâche à accomplir. Ceci comprend
- Formuler clairement votre problématique, définir et mettre en œuvre les mesures de réussite nécessaires.
- Préparer et nettoyer votre ensemble de données au point que consacrer du temps à l’architecture des modèles a du sens.
- Mise en place d'un pipeline de formation et d'évaluation. Cela facilite une 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 coûtent cher. Chaque expérience de formation que vous exécutez doit avoir un objectif clair. Vous devez clairement poser une question à laquelle vous souhaitez répondre. Des exemples de questions que vous pouvez poser sont
- Quels paramètres semblent avoir le plus grand impact sur la perte de validation ?
- Quels paramètres sont fortement interdépendants et doivent être ajustés ensemble ?
- Quelles sont les bonnes limites pour l'hyperparamètre X ?
- Certaines complexités peuvent-elles être supprimées sans affecter les performances ?
- Le surapprentissage est-il présent ? Peut-on résoudre ce problème en augmentant la régularisation ?
- Des gradients explosifs sont-ils présents ? Sont-ils lissés par un taux d’apprentissage plus faible ou devriez-vous essayer le dégradé ?
- Quel ensemble de paramètres converge le plus rapidement ?
Une fois que vous avez une solide compréhension du problème, vous pouvez traduire ces connaissances dans un espace de recherche d'hyperparamètres plus restreint. Cela marque le début de 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 bonnes pratiques pour le réglage des hyperparamètres
- Agissez comme un scientifique ! Lors de toute expérience de formation, il existe 3 types de paramètres. Paramètres scientifiques, nuisances et fixes.
- Paramètres scientifiques : ceux que vous explorez actuellement et tentez de comprendre leurs effets.
- Paramètres de nuisance : paramètres fortement interdépendants des paramètres scientifiques. Ceux-ci doivent être adaptés les uns aux autres. Par exemple, le taux d’apprentissage est un paramètre gênant 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 nuisible, gardez-le fixe. Vous ne voulez pas qu’il interagisse avec la performance. Si vous modifiez plusieurs paramètres à la fois, vous ne pourrez pas tirer de réponses significatives de vos expériences !
- Essayez d'itérer rapidement. Sélectionnez une taille de lot qui maximise l'utilisation du GPU. Cela aidera votre formation à converger plus rapidement. Des études ont montré [2] que la taille du lot n'affecte pas de manière significative les performances finales tant qued'autres paramètres (par exemple le taux d'apprentissage, la régularisation) sont ajustés en conséquence 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 grande si cela ralentit l'entraînement et ne traitez pas la taille du lot comme un hyperparamètre. Choisissez une taille de lot et respectez-la.
- Inspectez toujours les courbes d’entraînement. Parcourir des dizaines de tracés juste pour régler un modèle peut être fastidieux. Nous sommes tous coupables de ne pas les inspecter de temps en temps. Cependant, une seule valeur métrique peut vous en dire long... L'étude des courbes d'entraînement d'au moins 2 ou 3 modèles haut de gamme dans chaque expérience vous donnera beaucoup plus d'informations. Le surajustement, l'explosion du gradient, la stagnation des performances, etc. peuvent être détectés grâce aux graphiques.
- Automatisez la génération de tracés importants (Oui, ça complote encore). Essayez de tracer autant d'informations que possible. Plus il y a de courbes d'entraînement, d'histogrammes de poids, de nuages de points ou tracés de lignes parallèles vous disposez d'autant plus d'informations que vous pouvez tirer de vos expériences.
Si vous devez déployer des efforts pour les créer, vous êtes moins susceptible de les étudier. Des outils comme Tensorboard et Suivi des expériences de Picsellia offrent une meilleure alternative au traçage manuel, alors assurez-vous d'en utiliser une.
- Exécutez plusieurs expériences identiques et calculer les valeurs moyennes et d’écart type. Il n'est pas rare d'avoir des « modèles chanceux » qui fonctionnent bien grâce à une initialisation favorable, mais réexécuter 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 effectuez de courses, plus vous pouvez être confiant dans le résultat.
Affiner les modèles de vision par ordinateur pré-entraînés
Un cas de vision par ordinateur en biologie
Présentons le scénario suivant. Vous êtes ingénieur dans une startup opérant dans le secteur de la biotechnologie. Il vous est demandé de déployer un modèle d'apprentissage en profondeur pour la tâche de vision par ordinateur suivante : détecter les cellules contaminées par le paludisme dans les images microscopiques.
Fig.1 : Exemples d'ensembles de données
Pour plusieurs raisons, le modèle doit être léger et exécuté sur un périphérique de pointe intégré aux 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 adapté. Vous rencontrez MobileNet V3 [3].
MobileNet V3 est une architecture de réseau neuronal profond conçue spécifiquement pour les applications de périphérie. Il est connu pour sa légèreté, sa haute précision et sa vitesse d'inférence rapide, ce qui en fait un choix idéal pour vision par ordinateur à la pointe. Une fois votre ensemble de données nettoyé en main, vous pouvez désormais affiner le modèle MobileNet V3 pour mieux l'adapter à votre cas d'utilisation spécifique.
Pour notre cas, j'ai empilé une couche linéaire avec 100 neurones et une couche de classification avec fonction d'activation softmax au-dessus de l'extracteur de fonctionnalités pré-entraîné. De plus, j'ai déjà mis en place un pipeline de données simple et j'ai mis en place mon code de formation.
Cela me qualifie pour le prochain tour !
Obtenir des informations
Mon système prend en charge une taille de lot allant jusqu'à 248 pour cet ensemble de données. Il est suffisamment grand pour fournir des itérations rapides, donc je m'y tiens.
Dès ma première expérience, j'essaye 2 optimiseurs différents et j'observe les effets sur la convergence. Influent-ils beaucoup sur la perte de validation ? Optimiseur est le paramètre expérimental lors de ce tour. Cependant, le taux d'apprentissage est un paramètre nuisible, je devrai donc peut-être essayer au moins deux valeurs différentes. Le nombre d'optimiseurs et de taux d'apprentissage que vous choisissez de tester dépendra de votre budget informatique et des objectifs de votre projet.
Comme nous l’avons mentionné, il est important d’observer les graphiques d’apprentissage et pas seulement les mesures de réussite.
Je commence avec l'optimiseur Adam, un lr standard = 0,003, et je m'entraîne pendant 10 époques en utilisant un arrêt anticipé et un simple planificateur 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ébut…
Cependant, les graphiques révéleront plus d’informations. Tout d'abord, nous observons comment la perte de validation commence à s'incrémenter après l'époque 5, indiquant la présence d'un surapprentissage. Cependant, étant donné que la précision de la validation fonctionne bien, je serais plutôt tenté d'augmenter le nombre d'époques et la patience pour un arrêt anticipé. Puisque l’augmentation de la précision suggère que la convergence est toujours en cours. Gardez à l’esprit qu’au cours de l’époque 8, le planificateur a réduit le taux d’apprentissage.
Fig 2 : Graphiques d'apprentissage. Surentraînement ou simplement augmenter les périodes d'entraînement et réduire la patience lors d'un 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 comment ils restent pour l’essentiel stables à travers les époques. Cela peut révéler un problème de gradient en voie de disparition. 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égers changements, tandis que le classificateur (figure 5) est celui sur lequel se concentre l’essentiel de l’apprentissage, notamment sur les biais.
Fig 3 : Les premières couches de MobileNet restent presque entièrement inchangées. On peut supposer qu’il n’est de toute façon pas nécessaire qu’ils changent trop.
Fig 4 : Les dernières couches de MobileNet sont affinées et des changements plus nets dans les valeurs de poids sont observés
Fig 5 : La couche de classificateur subit des changements plus importants. L’apprentissage est principalement concentré ici.
J'espère qu'il devient maintenant clair pourquoi l'inspection de nombreux graphiques de formation est importante pour la formation en apprentissage profond. Ils constituent une source d’informations très riche.
Je procède ensuite à tester 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 gênant pour l'optimiseur Adam, ce qui entraînait des performances sous-optimales et un comportement explosif.Il est intéressant de voir à quel point les poids des premières couches ont été gravement affectés, ce que nous n'avons généralement pas prévu lors du réglage fin des modèles pré-entraînés.
Fig 6 : poids gravement affectés d'une première couche dans l'extracteur de fonctionnalités.
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 Optimisation bayésienne.
Réglage 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`, puis j'exécute la recherche avec l'optimisation bayésienne. Dans mon cas, Keras-Tuner a été utilisé, mais de nombreux outils similaires sont disponibles.
J'ai fixé mon budget de calcul à 10 et laissé chaque modèle s'entraîner pendant 10 époques avec l'arrêt anticipé activé. Il ne vous reste plus qu'à attendre que l'algorithme termine la recherche. jeSi 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 disposez d'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é par l’essai 3 !
Enfin, j'extrais la meilleure combinaison de paramètres et entraîne le modèle optimal pour 10 époques. J’évalue d’abord sur mon ensemble de données de validation. Étant donné que je suis très satisfait des performances 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 s’attendre pendant la production.
Fig 8 : Évaluation du modèle final sur l'ensemble de données de test.
Une fois le modèle déployé, vous rencontrerez très probablement une dégradation des performances en raison de dérives de données, il est donc important d'avoir une base de référence. En utilisant 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.
Dernières pensées
Affiner les modèles d’apprentissage profond peut devenir assez fastidieux et prendre beaucoup de temps. Cependant, les résultats peuvent arriver 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 matière d'apprentissage profond et de votre domaine sous-jacent !
Dans cet article de blog, nous avons exploré un cas typique en vision par ordinateur. Le message était destiné à fournir des informations précieuses et à servir d'inspiration plutôt que de présentation détaillée du codage.
Nous avons travaillé avec un modèle d'apprentissage profond pré-entraîné et l'avons affiné sur un ensemble de données personnalisé. Nous avons exploré quelques bonnes pratiques pour affiner les modèles d'apprentissage profond et les avons appliquées pour affiner un modèle léger de vision par ordinateur MobileNet sur un ensemble de données de biologie d'images.
LES RÉFÉRENCES
- Manuel de réglage du Deep Learning par Google
- Mesurer les effets du parallélisme des données sur la formation des réseaux neuronaux. Shallue et coll. 2018
- Recherche de MobileNet V3. Howard et coll. 2019
- Explication des histogrammes de poids
- Transférer l'apprentissage avec TensorFlow Hub
- Tutoriel pratique sur Keras Tuner (article de blog de l'auteur)