Le réglage des hyperparamètres est crucial pour l'optimisation des modèles d'apprentissage automatique, mais ce processus peut s'avérer coûteux en ressources de calcul et complexe. Les méthodes traditionnelles d'optimisation par grille, par recherche aléatoire ou même par approche bayésienne passent souvent à côté de zones critiques de l'espace des hyperparamètres, ce qui conduit à des modèles sous-optimaux.
Dans cette présentation, nous exposons un module complémentaire JMP que nous avons développé, utilisant la méthode DOE (plan d'expériences à remplissage d'espace) pour optimiser le réglage des hyperparamètres. Cette méthode garantit un échantillonnage plus homogène des combinaisons d'hyperparamètres dans l'ensemble de l'espace des paramètres, réduisant ainsi le nombre d'évaluations nécessaires et augmentant la probabilité de trouver les paramètres optimaux.
Cette présentation met également en lumière l'intégration améliorée avec Python dans JMP 18 et explique comment l'exploitation de fonctionnalités telles que la planification d'expériences (DOE) au sein de JMP peut être bénéfique aux data scientists. Elle combine des techniques statistiques avancées avec des outils pratiques et accessibles pour optimiser les performances des modèles dans diverses applications.
Bonjour. Merci d'assister à notre présentation. Nous allons parler de l'amélioration de l'apprentissage automatique grâce à l'utilisation de plans d'expériences remplissant l'espace pour optimiser les hyperparamètres. Je m'appelle Peter Hirsch et mon co-présentateur est Scott Allen. Avant d'expliquer notre approche, je voulais partager avec vous quelques résultats.
Voici deux candidats qui devaient concevoir 10 modèles prédictifs. Chaque modèle prédisait une réponse catégorielle. Si l'on compare leurs parcours, d'un côté, on trouve Russ Wolfinger, un data scientist de renommée mondiale, et de l'autre, un data scientist beaucoup moins connu. C'est un peu comme si je jouais au basket en un contre un avec Michael Jordan. On peut s'attendre à un résultat très déséquilibré.
Comme vous pouvez le constater, les résultats sont très proches, et même les data scientists moins connus obtiennent de meilleurs résultats. Comment est-ce possible ? Mon atout secret ? L’extension Torch Companion. Elle nous aide tous à améliorer nos modélisations, un peu comme avoir LeBron James dans son équipe lors d’un match de basket en un contre un.
Je vais commencer par un quiz très simple. Sur cette image, voyez-vous un chat ou un chien ? Et sur cette autre image ? Voyez-vous un chat ou un chien ? C'est assez facile : on voit bien que le chien est à gauche et le chat à droite. Mais comment savoir si cette image représente un chien ou un chat ? Quels sont les critères principaux ? Si nous devions créer un modèle, comment l'entraînerions-nous à identifier un chat ou un chien ? Voici un schéma qui illustre la construction d'un réseau de neurones. Ici, l'image représente un « 4 » manuscrit, décomposé en trois couches de quatre nœuds chacune.
Chaque nœud possède une représentation différente de l'entrée originale, et ces nœuds et couches sont combinés pour effectuer une prédiction. La complexité des données varie selon les jeux de données. Dans l'exemple du haut, identifier la couleur verte ou rouge d'un point pourrait nécessiter un modèle beaucoup plus simple que dans l'exemple du bas, où l'on examine l'image d'un chien ou d'un chat. Ce dernier nécessiterait un modèle beaucoup plus complexe. Le nombre de couches et leur taille (ou le nombre de nœuds par couche) sont appelés hyperparamètres ; ils doivent être ajustés pour optimiser chaque modèle.
Comment adapter le modèle aux différents problèmes ? Voici la fenêtre de lancement du module complémentaire Torch Tuning de JMP, qui propose de nombreuses options. On peut notamment modifier le nombre d'époques, le taux d'apprentissage, la taille des couches et la fonction d'activation. Grâce à toutes ces options, des millions de combinaisons sont possibles. Par où commencer ?
Plusieurs options s'offrent à nous pour explorer l'espace des hyperparamètres. La première est la recherche par grille, et je crois que c'est la plus courante, ou du moins celle qui se rapproche le plus d'un plan factoriel complet. Si nous optons pour cette méthode, nous examinerons toutes les combinaisons possibles de tous les facteurs, ce qui conduirait à plus de deux millions et demi de modèles différents à tester. C'est beaucoup trop dans la plupart des cas. Nous pouvons également effectuer une recherche aléatoire, en sélectionnant certaines combinaisons de facteurs au hasard.
On pourrait aussi utiliser une approche d'optimisation bayésienne, ou demander l'avis de Russ Wolfinger. Bien sûr, c'est idéal d'avoir Russ dans son répertoire, ou un autre data scientist du même profil, mais ce n'est pas toujours possible. Comment Scott, moi ou un expérimentateur lambda pourrions-nous résoudre ce problème ? Nous l'abordons comme une expérience. Dans JMP, comment mène-t-on des expériences ? Faut-il tester un facteur à la fois ? Non, Drake pense que ce n'est pas une bonne idée. Il vaudrait mieux concevoir une expérience. Nous allons aborder brièvement cette approche, puis je laisse la parole à Scott.
Merci, Peter. Nous allons passer en revue la composition de Torch Companion, montrer quelques exemples, puis explorer brièvement l'extension. Avant cela, je vais vous présenter brièvement son contenu.
Ce module complémentaire rassemble de nombreuses fonctionnalités de JMP, comme les fonctions de table, la plateforme DOE, le module d'apprentissage profond Torch développé par Russ et son équipe, ainsi que des résultats de Graph Builder. Vous pourriez probablement réaliser toutes ces actions individuellement, mais ce module complémentaire vise à créer un flux de travail fluide. L'utilisateur interagit avec le module, comme avec de nombreuses plateformes JMP, en spécifiant les colonnes qui peuvent représenter la réponse, les facteurs et la validation. Il spécifie ensuite les paramètres Torch, ou dans ce cas une plage de paramètres ou une sélection d'options, puis les transmet au module Torch. Nous allons examiner rapidement quelques-unes de ces interfaces.
La boîte de dialogue des colonnes est très similaire à celle d'une plateforme JMP standard. Vous y chargez vos colonnes de réponse, de facteurs et de validation. Les facteurs peuvent être numériques, de type caractère ou, comme ici, un modèle d'image. C'est d'ailleurs l'une des particularités de l'extension Torch pour JMP : la possibilité d'analyser des modèles d'image. Nous avons donc veillé à intégrer cette fonctionnalité dans cette extension. Cliquez sur OK pour accéder à la fenêtre de spécification. Nous avons collaboré avec Russ afin d'obtenir des conseils sur les paramètres à inclure et à filtrer pour optimiser au maximum notre modèle.
L'objectif est d'utiliser Torch Companion conjointement avec l'extension Torch Deep Learning. Nous n'avons pas inclus tous les paramètres que vous pourriez vouloir optimiser, mais l'idée est d'obtenir un modèle proche de l'optimum, et ce, plus efficacement. Vous pouvez ajuster des éléments tels que le modèle lui-même, son type (tabulaire ou image) et certains de leurs paramètres d'optimisation. Vous pouvez également explorer différentes options de structure du modèle, notamment le nombre d'essais DOE. Ainsi, au lieu d'exécuter un modèle à la fois (approche « un facteur à la fois »), vous pouvez simplement définir une plage de paramètres et examiner 200 ou 300 modèles en un seul clic.
Vous remarquerez que certaines options sont grisées. Nous souhaitions rendre ce module complémentaire accessible aux personnes qui découvrent Torch ou l'apprentissage automatique en général ; nous avons donc intégré des garde-fous, et je sais que Peter a particulièrement apprécié ces garde-fous lors de son développement.
Oui, ça m'a vraiment aidé à rester concentré. C'était utile.
Si vous n'êtes pas familier avec ces différents types de modèles, nous avons présélectionné les plus courants et quelques points de départ pertinents. Si vous souhaitez utiliser ce module complémentaire pour filtrer les paramètres, cochez la case correspondante. Vous pouvez alors explorer une gamme de paramètres. Nous allons à nouveau griser certaines options qui pourraient ne pas être optimales en fonction de votre tableau de données. Nous sélectionnons également des fonctions d'activation plus courantes et configurons certains paramètres pour qu'ils soient mis à l'échelle par un facteur de 1 ou par une puissance de 2. Cela vous permet de filtrer plus efficacement une large gamme de tailles de calques, par exemple.
Nous souhaitons également proposer des options avancées. En les sélectionnant, vous aurez accès à tous les types de modèles disponibles dans l'extension Torch, ainsi qu'aux différents types de modèles tabulaires et à toutes les fonctions d'activation. Selon votre niveau de maîtrise de Torch Deep Learning, vous pouvez opter pour une approche simple ou avancée. Prenons un exemple : j'ai préchargé différentes options, notamment une plage d'époques et de taux d'apprentissage, sélectionné des tailles de couches et fixé le nombre d'essais à 100. Ce nombre peut être aussi faible ou aussi élevé que vous le souhaitez.
Une fois tous les paramètres définis, cliquez sur « Exécuter ». Vous accédez alors au fonctionnement interne de l'extension. Après quelques manipulations de tableau, elle génère le diagramme de remplissage d'espace. Chaque ligne de ce tableau est ensuite transmise à Torch Deep Learning. Avant de commencer, j'ai lancé un modèle configuré pour exécuter 500 modèles Torch. Vous pouvez voir qu'il fonctionne correctement pendant notre discussion, parcourant chaque ligne du diagramme de remplissage d'espace. Cela nous donne une indication de l'évolution de notre fonction de perte au fil des époques et nous confirme que nous avons choisi des paramètres appropriés. Nous allons poursuivre la présentation et y revenir dans quelques minutes.
Une fois le module complémentaire d'apprentissage profond Torch lancé et après avoir calculé tous les modèles (des centaines, des dizaines, ou le nombre que vous avez spécifié), il synthétise les résultats à l'aide de fonctions de tableau et d'un générateur de graphiques, puis affiche une fenêtre de sortie ou de rapport pour les interpréter. Selon cette interprétation, deux options s'offrent à vous. Vous pouvez soit revenir à la configuration des paramètres, soit vérifier si les modèles obtenus sont satisfaisants ou s'il est possible de les améliorer.
Vous pouvez définir de nouvelles plages de paramètres, sélectionner différentes fonctions, puis recommencer le cycle. Les nouveaux résultats seront simplement ajoutés à vos résultats initiaux. Vous avez peut-être trouvé des modèles très performants, fiables et qui n'ont plus besoin d'être améliorés. Dans ce cas, vous pouvez les intégrer directement à l'extension Torch Deep Learning pour affiner les modèles, les comparer, les enregistrer et les déployer, ou encore ajuster des paramètres inaccessibles dans l'outil compagnon. C'est le flux de travail que nous avons mis en place, et c'était un plaisir de le concevoir. Peter a réalisé l'essentiel du travail de modélisation. Peter, pourriez-vous nous faire part de votre expérience ?
Je pense que s'il y a des développeurs parmi vous, considérez Scott comme le développeur de l'extension et moi comme le testeur. Plusieurs points me viennent à l'esprit. Il s'agit d'un plan d'expériences (DOE), un processus itératif où l'on réalise un premier DOE, on en tire des enseignements, puis on construit un DOE potentiellement optimal. Si l'on observe les résultats obtenus avec différents modèles, on constate que j'exécute généralement plusieurs DOE. Souvent, ces modèles s'exécutent très rapidement, en quelques secondes, ce qui permet d'en simuler un très grand nombre. Parfois, l'exécution est beaucoup plus longue et il faut alors réaliser plusieurs DOE ; il est déconseillé d'en exécuter 100 d'emblée. Prenons l'exemple du modèle du haut : il s'agissait d'un modèle d'image, et chaque modèle a nécessité environ 10 minutes d'exécution.
Si vous commenciez avec 200 modèles, vous attendriez tout un week-end pour que le processus se déroule. En revanche, si vous comparez avec d'autres méthodes, exécuter 200 modèles prenant chacun 4 secondes est peut-être plus judicieux. Voici quelques conseils : je préfère commencer par une validation croisée avec un ensemble de test, car c'est beaucoup plus rapide que la validation croisée K-fold. Si vous préférez cette dernière, vous pouvez modifier la colonne de validation à la fin, lors du lancement dans Torch. Cependant, pour l'optimisation, je recommande d'utiliser un ensemble de validation unique.
J'apprécie aussi beaucoup la fonction de vérification du temps intégrée par Scott. Si vous craignez qu'un modèle prenne beaucoup de temps, comme un modèle d'image, vous pouvez activer cette fonction de vérification automatique.
Bien. Merci, Peter. J'oserais dire que, mis à part Rust, vous avez probablement construit le plus grand nombre de modèles de torches de toute l'équipe JMP.
Ce sont assurément les moins performants.
Passons maintenant au module complémentaire pour vous montrer quelques-uns de ces rapports et comment filtrer et optimiser ces modèles. Revenons à notre modèle. Nous n'avons pas encore terminé. Nous en avons traité environ 270 sur les 500 spécifiés.
Une autre fonctionnalité intégrée est la possibilité d'annuler. Vous pouvez annuler une opération pour diverses raisons : par exemple, si elle prend plus de temps que prévu ou si vous manquez de temps. Dans tous les cas, vous pouvez annuler. Si vous acceptez l'erreur de Torch, vous aurez la possibilité de poursuivre avec l'exécution suivante. Par exemple, si vous exécutez un modèle d'image et que tous les calculs sont rapides, mais qu'un calcul prend beaucoup plus de temps, vous pouvez l'annuler.
Vous pouvez poursuivre l'exécution du plan d'expériences (DOE) et passer directement au suivant, ou bien l'interrompre complètement. C'est ce que nous allons faire. Le processus s'arrête, le rapport est généré et sa fenêtre s'affiche ci-dessous. Voici la fenêtre du rapport. Nous avions 500 expériences dans notre plan d'expériences, mais comme vous pouvez le constater, nous avons obtenu des résultats pour 270 d'entre elles.
Nous allons maintenant examiner ce tableau de résultats. Je vais vous présenter quelques éléments essentiels pour bien démarrer. Tout d'abord, les statistiques descriptives. Le tableau est organisé selon le coefficient de détermination (R²) de validation : plus le R² est élevé, plus le numéro de ligne est bas. Vous avez ensuite accès à tous les paramètres, aux différentes entrées, ainsi qu'à certaines sorties, comme le temps d'exécution des modèles et le nombre de plans d'expériences (DOE) réalisés.
Le premier outil de diagnostic à votre disposition est la carte thermique du coefficient de détermination (R²). Il s'agit simplement de représenter graphiquement le R² de validation en fonction du R² d'entraînement. Idéalement, vous privilégiez les modèles présentant des valeurs de R² élevées à la fois pour la validation et l'entraînement, mais vous pouvez constater ici une grande disparité de valeurs. C'est un point important à retenir si vous débutez avec Torch ou en apprentissage automatique : si vous ne savez pas quels paramètres choisir, vous risquez d'obtenir des modèles peu performants. Vous pourriez alors vous dire : « Je ne serai pas capable de construire un bon modèle. »
Ensuite, vous ajustez certains paramètres, et il se peut que les résultats se dégradent. L'avantage, c'est qu'en testant un grand nombre de paramètres, vous obtiendrez une meilleure vision des possibilités offertes par ce modèle. Dans ce cas précis, nous constatons que certains modèles présentés ici sont très performants, avec un coefficient de détermination (R²) élevé pour la validation et l'entraînement. Des filtres de données sont intégrés, mais ils ne sont disponibles que dans Graph Builder ; vous pouvez donc utiliser ces données et les représenter graphiquement comme vous le souhaitez. Deux onglets permettent également d'examiner les paramètres individuels : les paramètres d'optimisation du modèle, tels que le taux d'apprentissage et le nombre d'époques, et leur évolution dans le temps ou dans l'espace des modèles, ainsi que les fonctions d'activation et d'autres paramètres de structure des couches.
Une piste à explorer serait d'analyser différents types de fonctions d'activation. Je sais, Peter, que tu as obtenu des résultats intéressants en testant ces modèles.
Absolument. Lorsque nous avons commencé à développer ce module complémentaire, Russ nous a conseillé de nous concentrer sur une seule fonction d'activation et d'utiliser ReLU. ReLU est la plus courante ; tout le monde l'utilise. C'est un bon point de départ. Dans certains cas, ReLU donnait de bons résultats, mais le plus souvent, nous avons constaté qu'une autre fonction d'activation était légèrement plus performante. L'approche de Russ est pertinente, certes, mais c'était intéressant de pouvoir examiner toutes ces fonctions d'activation et de voir s'il était possible d'obtenir un résultat légèrement meilleur en les ajustant.
Non. Je pense que c'est précisément l'un des objectifs : si vous ne connaissez pas ces fonctions d'activation, ou si vous les connaissez déjà, vous savez peut-être lesquelles conviennent à un jeu de données ou à un type de modèle, ou encore grâce à votre expérience. Mais si vous ne les connaissez pas, cet outil vous permet simplement de les passer en revue. Dans ce cas précis, nous en avons examiné six, mais il en existe vingt autres que vous pouvez également consulter.
Nous disposons également d'un rapport d'importance des paramètres. Il s'agit simplement de construire rapidement un modèle de forêt bootstrap pour identifier les hyperparamètres ou paramètres d'optimisation les plus influents sur la réponse, ici, le R² de validation. Nous avons également accès aux détails de chaque modèle. Le tableau des résultats comporte une colonne indiquant l'identifiant unique de chaque modèle. Pour explorer un modèle en détail, il suffit de l'ouvrir. Ce rapport est une exportation de Torch pendant son exécution ; vous y avez donc toujours accès même si nous présentons un résumé basé sur le R² de l'ensemble de validation. Toutes les statistiques descriptives de tous les modèles sont disponibles.
Je pense que cela couvre l'essentiel de ce que je voulais montrer concernant la fenêtre de rapport. Je souhaitais simplement conclure en présentant les possibilités offertes par le module complémentaire à travers quelques options de flux de travail. La première consiste à relancer le processus. Dans ce cas, si certains modèles nous conviennent, nous pouvons examiner les fonctions d'activation utilisées et, si besoin, augmenter le nombre ou la taille des calques. Pour cela, nous pouvons revenir aux spécifications et sélectionner des fonctions spécifiques.
Peut-être souhaitons-nous nous concentrer sur ces trois éléments, mais peut-être voulons-nous examiner des couches de plus grande taille. Dans ce cas, nous pourrions spécifier, par exemple, 50 éléments, puis cliquer sur « Exécuter » pour lancer le traitement de cette série de paramètres, puis de 50 autres éléments, et ajouter ces résultats au tableau. Il s'agit d'une option de flux de travail à envisager. Une autre option est indiquée par le triangle rouge. Vous êtes peut-être satisfait de ce modèle ou de ces deux modèles, et vous souhaitez les importer dans le module complémentaire Torch pour les exécuter directement.
Vous n'avez plus besoin de jongler entre les paramètres pour les saisir dans l'extension Torch. Il vous suffit de cliquer sur le triangle rouge, puis de sélectionner « Exécuter la sélection ». En cliquant sur « Exécuter la sélection », les paramètres sont transmis à l'extension Torch, puis le calcul est exécuté. Un rapport s'affiche alors dans l'extension Torch native, permettant ainsi de comparer les modèles. Vous pouvez constater que tous les paramètres nécessaires ont été transmis ; nous pouvons désormais comparer plus directement les modèles les plus performants et obtenir une meilleure indication des statistiques descriptives.
Enfin, il se peut que certains de vos modèles soient longs à exécuter. Dans ce cas, vous ne pourrez peut-être pas effectuer tous vos réglages en une seule journée. Si vous souhaitez enregistrer ces données et y revenir plus tard, cliquez sur le triangle rouge ; nous allons simplement enregistrer le tableau de résultats. Une fois enregistré, vous pouvez l'enregistrer à l'emplacement de votre choix et le recharger ultérieurement. Nous allons vous montrer comment cela fonctionne.
Je vais fermer cette fenêtre, cliquer sur OK, et maintenant, si je voulais recharger une table de données enregistrée, je retournerais à ma table de données d'origine. C'était la table de données que j'utilisais pour la modélisation. Je vais exécuter le module complémentaire, puis cliquer sur Rappel. Il faut s'assurer d'indiquer les bonnes colonnes, celles spécifiées lors du réglage, et cliquer sur OK. Au lieu de spécifier tous les paramètres ici, nous allons simplement cliquer sur le bouton Charger (je ne l'avais pas sélectionné).
Allons-y, puis accédons à nos résultats d'optimisation et cliquons sur Ouvrir. Une fenêtre de dialogue s'affiche, confirmant la présence des mêmes variables x, y et de la même colonne de validation. Si l'une de ces variables diffère de votre configuration initiale, le fichier ne sera pas chargé. En cliquant sur OK, nous visualisons nos optimisations précédentes et régénérons tous les graphiques. Vous pouvez maintenant retourner aux spécifications et relancer les optimisations.
Je crois que c'est tout ce que je voulais montrer. L'extension Torch offre d'autres options, et je recommande vivement de l'utiliser conjointement avec l'extension Torch Deep Learning développée par Russ et son équipe. Je suis certain que vous y découvrirez d'autres fonctionnalités utiles une fois que vous aurez commencé à l'utiliser. Je vais peut-être maintenant laisser la parole à Peter pour qu'il nous parle un peu des résultats, ou des résultats finaux.
Parfait. Merci, Scott. Les résultats en rouge correspondent au coefficient de détermination (R²) de validation de mes modèles, et ceux en bleu, à ceux de Russ. Je ne critique pas Russ, c'est un excellent data scientist, mais je pense que cela met surtout en évidence la puissance de la méthode DOE par rapport à l'analyse facteur par facteur.
Cela montre que, si l'on compare un chimiste et un data scientist chargés de réaliser des modélisations à l'aide de la méthode DOE, le chimiste peut obtenir des résultats similaires, voire supérieurs, à ceux d'un data scientist très compétent. Le module complémentaire d'optimisation offre cette possibilité à tous et, comme l'a indiqué Scott, il n'est pas destiné à remplacer le module complémentaire Torch ; il est conçu en complément et sera disponible sur la plateforme. Vous pourrez ainsi obtenir les deux.
Je me suis octroyé une médaille olympique pour avoir battu Russ, car je trouve que c'est un excellent résultat, surtout pour quelqu'un qui n'a aucune formation en science des données. On a commencé à parler d'identification de chats et de chiens, mais si on l'applique à ton domaine, tu peux imaginer qu'il existe différents types de modèles d'images, voire de modèles tabulaires, utilisant une approche de type réseau de neurones profonds. L'optimisation de ces hyperparamètres permet d'obtenir de meilleurs résultats.
Ces images proviennent de différents exemples tirés du manuel d'utilisation du module complémentaire Torch. Je pense que chacun dispose de données similaires auxquelles cette approche peut être appliquée. Nous tenions à remercier Russ. Je sais que nous l'avons un peu taquiné, mais il nous a aussi énormément aidés au développement de ce module, en nous aidant à le structurer et à éviter les écueils. Nous remercions également le comité de pilotage de JMP pour avoir sélectionné cette présentation. Comme indiqué, les modules complémentaires Torch et Tuning sont disponibles sur la marketplace. Vous trouverez un code QR ici si vous souhaitez les télécharger, ou vous pouvez simplement vous rendre sur marketplace.jmp.com. Merci.
Merci.