Optimiser les hyperparamètres d’un modèle de Deep learning

Yannick Serge Obam
6 min readFeb 28, 2021

--

Durant la construction d’un modèle de Deep Learning, l’on fait face aux choix des hyperparamètres. Notons tout de meme qu’un hyperparamètre est un paramètre dont la valeur est définie avant le début du processus d’apprentissage. Par ricorchet, il est evident que les valeurs des autres paramètres sont obtenus pendant l’entrainement.

Pour être plus précis, Pour les réseaux de neurones profonds, l’on peut distinguer 03 types d’hyperparamètres :

Les hyperparamètres des layers : kernel size, dropout, méthode d’activation des layers cachés, méthode d’activation du layer final, …

Les hyperparamètres de compilation du modèle: optimizer, loss, learning rate …

Les hyperparamètres d’exécution du modèle : batch size, nombre d’epochs, …

Lors des choix de ces hyperparamètres, l’implementation d’un modèle semble être un casse tête chinois pour les datascientistes. Plusieurs entre eux passent des heures à les régler manuellement afin d’obtenir les meilleurs performances.

Il est donc claire que les hyperparamètres sont cruciaux pour les performances, la vitesse et la qualité des modèles d’apprentissage profond. Il faut trouver un moyen de les adjuster automatiquement, dans le jargon datascientiste, il s’agit de les optimiser .

Pour le faire, nous avons besoin d’une méthode systématique. C’est ainsi qu’il existe des techniques de base telles que Grid Search (la recherche en grille) , Random Search (la recherche aleatoire). Egalement des techniques plus sophistiquées telles que l’optimisation bayésienne, Hyperbande.

Dans ce tutoriel, nous essayons de trouver le meilleur modèle de classification d’images sur le jeu de donnée Pierre, papier cisceaux en utilisant l’hyperbande et l’optimisation baésienne à travers le framework Keras Tuner et le tableau de bord HParams dans TensorBoad.

Alors, dans un premier temps, nous créeons un modèle de bout en bout ensuite nous implémentons un autre modèle via l’ apprentissage par transfert.

Optimisation des hyperparametres avec Keras Tuner

Keras Tuner est une librairie d’optimisation d’hyperparamètres facile à utiliser et distribuable qui résout les problèmes liés à l’exécution d’une recherche d’hyperparamètres. Keras Tuner est livré avec des algorithmes d’optimisation bayésienne, d’hyperbande et de recherche aléatoire intégrée, et est également conçu pour être facile à étendre pour les chercheurs afin d’expérimenter de nouveaux algorithmes de recherche.

Installer Keras Tuner

Télecharger et prétraiter les images avec ImageDataGenerator

1- L’hypermodèle

Nous créons un hypermodèle dans lequel nous definissons les différents hyperparamètres pour le réglage automatique. Voici la fonction utilisée pour construire l’hypermodèle:

Dans cet hypermodèle, nous utilisons la méthode de choix des hyperparamètres. Nous donnons à chacun un nom et une liste de valeurs parmi lesquelles choisir. Les valeurs doivent être du même type. Dans Keras Tuner, les hyperparamètres ont un type (les possibilités sont Float, Int, Boolean et Choice) et un nom unique.

Ensuite, un ensemble d’options pour guider la recherche doit être défini: une valeur minimale, maximale et par défaut pour les types Float et Int, un ensemble de valeurs possibles pour le type Choice,éventuellement, une valeur de pas, c’est-à-dire le pas minimal entre deux valeurs d’hyperparamètres

Dans ce cas nous avons :

❒ Le nombre de filtres pour les couches convolutives : entre 64 et 128

❒ Le taux d’abandon (dropout): Entre 0.1 et 0.5

❒ Le nombre d’unités pour la couche dense : de 32 à 512 avec un pas à 32

❒ Les fonctions d’activation : choix entre Relu, Sigmoid , Tanh

❒ le taux d’apprentissage pour l’optimizer Adam : compris entre 0.01 , 0.001 , 0.0001

Instancier le réglage et effectuer l’hypertuning

Pour instancier le tuner Hyperband, nous devons spécifier l’hypermodèle, l’objectif à optimiser et le nombre maximum d’époques à entraîner (max_epochs)

Exécutons la recherche par hyperparamètres. Les arguments de la méthode de recherche sont les mêmes que ceux utilisés pourtf.keras.model.fit . Cela prends parfois assez de temps

Obtenir le meilleur resultat

Après 50 minutes 36 secondes sur Google Colab, le meilleur modèle obtenu avec un précision de 95.9% a les caractéristiques ci-après:

Nombre de filtres 64, nombre de neurones pour la couche dense 512, taux d’abandon optimal 0.4, taux d’apprentissage 0.001.

2- Hypermodèle avec l’apprentissage de transfert

Telecharger l’architecture Inception

Définir l’hypermodèle

le code d’intanciation de tuner est similaire à celui que nous avons ecrit plus haut.

Le meilleur modèle a des caratéristiques suivantes:

le nombre de neurones pour la couche dense est égale à 352, le dropout à 0.40, le taux d’apprentissage de l’optimizer à 0.001.

Le résultat semble être très interressant avec une precision à 99.19% et il a fallu 51 minutes 27 secondes pour finaliser l’optimisation.

Optimisation des hyperparametres avec le tableau de bord HParans dans TensorBoard

TensorBoard est la boîte à outils de visualisation de TensorFlow, qui vous permet de suivre des métriques telles que la perte et la précision, de visualiser le graphique du modèle, d’afficher des histogrammes de poids, de biais ou d’autres tenseurs à mesure qu’ils changent au fil du temps, et bien plus encore. C’est un outil open source qui fait partie de l’écosystème TensorFlow

Le tableau de bord HParams de TensorBoard fournit plusieurs outils qui nous aident dans le processus d’identification du meilleur modèle ou de l’ensemble d’hyperparamètres les plus interessants.

Commencons par charger l’extension de TensorBoard

Configuration des HParams

L’experimentation se fait avec 05 hyperparametes : Nombre de filtres pour la couche convolution, le taux d’abandon, les fonctions d’activation (relu, tanh, sigmoid, le nombres de neurones pour la couche dense, l’optimizer (Adam, SGD, RMSProp)

Definir le modèle

Exécuter et enregistrer Hparams

Pour chaque analyse, nous enregistrons un résumé hparams avec les hyperparamètres et la précision finale.

Ensuite nous exécutons quelques expériences, cela prend quelques minutes voir des heures

Visualiser les résultats dans le plugin HParams de TensorBoard

Cela nécessite beaucoup de temps dans une machine à 1 seul GPU, mais si nous avons certaines ressources Cloud, nous pouvons l’exécuter dans un environnement distribué.

Il était question pour nous de vous montrer de bout en bout comment vous pouvez régler/optimiser les hyperparamètres d’un modèle de classification d’images avec les réseaux de neurones profonds, pour cela nous sommes revenu sur la définition et les differents types d’hyperamètres. En utilisant l’ensemble de données Pierre, papier cisceaux, nous avons implementer le réglage automatique avec la librairies Keras tuner sur un modele from scratch et sur un autre par apprentissage de transfert (Archiecture InceptionV3), mais aussi avec le tableau de bord HParans de TensorBoard sur un modèle from scratch. L’idée pour nous était de vous permettre d’appréhender les étapes d’une telle tâche. Pour plus de code, visiter le notebook

Voilà, c’est ainsi que s’achève notre article. Nous esperons que cela vous aidera dans différents travaux d’optimisation d’hyperparamètres. Bonne apprentissage!

Credits

OpenClassrooms

The search space may contain conditional hyperparameters

Hyperparameter Optimization with the Keras Tuner, Part 1 | by David Patton, PhD | Medium

Neural Networks Hyperparameter tuning in tensorflow 2.0 | by SiDdhartha | ML Book | Medium

--

--

Yannick Serge Obam

AI/ML Engineer | Google Developer Expert in Machine Learning | AI Evangelist | Teacher