1. Introduction
Nous vivons dans un monde où l’intelligence artificielle est de plus en plus intégrée dans nos vies, devenant ainsi un enjeu majeur de notre époque. Il existe une intelligence artificielle pratiquement pour chaque tâche : générer des images, résumer, générer, interagir avec du texte ou encore aider lors du développement.
Se posent alors les questions suivantes : sous quelles formes se présentent ces intelligences artificielles ? Comment les construire et comment les déployer ?
Nous allons donc voir dans cet article les différents concepts et workflows pour produire et déployer des intelligences artificielles à l’aide du machine learning.
2. Workflow ML
Notre objectif lorsque nous faisons du machine learning est de produire et déployer des modèles. Pour cela, un des workflows qu’il est possible de suivre est le suivant :
- Collecte de données
- Preprocessing
- Développement du modèle
- Entraînement
- Évaluation
- Déploiement
- Monitoring
Regardons chaque étape de plus près.
2.1 Collecte de données
La première étape de notre workflow est la collecte des données pour entraîner notre modèle. Plus les données sont riches et pertinentes, plus le résultat final aura de chances d’être bon. Il faudra garder en tête que la qualité des données est souvent beaucoup plus importante que la quantité. Des données bruyantes ou déséquilibrées peuvent affecter négativement les performances du modèle.
Par exemple, si nous souhaitons produire un modèle permettant de reconnaître si une photo est celle d’un chat ou d’un chien, il faudra collecter un maximum de photos de chats et de chiens, sous différents angles, couleurs etc. Pour certains types de modèles, les images en couleurs peuvent mieux fonctionner, surtout si la couleur est une information clé.
2.2 Preprocessing
Les données récoltées sont souvent brutes, et donc dans des formes différentes d’une donnée à une autre. Pour pouvoir être interprétées correctement par les modèles de machine learning, il faut qu’elles soient uniformisées, normalisées et adaptées à l’entraînement. Si nous reprenons notre exemple ci-dessus, après la collecte des photos de chats et de chiens, nous pouvons les normaliser en les mettant à la même taille, en les mettant en noir et blanc, écrire chaque pixel sous forme de vecteur etc.
Enfin il est très important de diviser le jeu de données en 2 parties : Une pour l’entraînement, et une pour l’évaluation.
2.3 Développement du modèle
Une fois notre jeu de données prêt, nous devons développer le modèle. Celui-ci se caractérise par : la définition du modèle, une fonction train (qui sera exécutée lors de la phase d’entraînement) et une fonction test (qui permettra d’évaluer le modèle). Plusieurs librairies existent pour effectuer cette partie-là : nous pouvons citer Scikit-Learn, Tensorflow ou encore PyTorch.
Il est important que cette partie soit paramétrable. En effet, plusieurs paramètres peuvent influer sur l’entraînement d’un modèle, et nous ne connaissons pas les valeurs optimales à l’avance. Nous devons donc faire plusieurs essais. Nous appelons ces paramètres les hyperparamètres. Nous avons par exemple les hyperparamètres suivants :
-
Epochs : Ce paramètre est simplement le nombre d’itérations sur le jeu de données. En effet, l’apprentissage peut boucler plusieurs fois sur le même jeu de données. C’est ce que nous appelons les epochs. Un nombre faible d’epochs peut engendrer des performances faibles dues à un apprentissage insuffisant. Un nombre élevé quant à lui peut engendrer de l’overfitting, qui est pour faire très simple, un phénomène dans lequel le modèle mémorise les données plutôt que d’apprendre à résoudre le problème, ce qui le rend complètement inefficace sur des données autres que celle d’entraînement.
-
Nombre de nœuds et/ou de hidden layers : Dans le cas du deep learning, il est difficile de connaître à l’avance la structure optimale des hidden layers. Nous pouvons donc la rendre paramétrable et observer l’influence des paramètres sur la performance du modèle.
-
Taux de séparation du jeu de données : Nous avons vu qu’il est nécessaire de diviser le jeu de données en deux. Nous pouvons mettre en paramètre le pourcentage de séparation du jeu de données vers celles d’entraînement et celles d’évaluation.
Il existe d’autres hyperparamètres, qu’il conviendra d’étudier selon le contexte.
2.4 Entraînement et évaluation d’un modèle
Après avoir préparé les données et le code, nous pouvons procéder à l’entraînement du modèle. Celui-ci utilisera les données pour apprendre à résoudre un problème donné et améliorer ses performances au fil du temps. Il est possible d’évaluer le modèle pendant et après l’entraînement, afin de suivre l’évolution de son apprentissage. Une fois l’entraînement terminé, le modèle peut être sauvegardé sous forme de fichier.
L’entraînement de modèles, en particulier dans le cas du deep learning, nécessite des ressources de calcul importantes, souvent en utilisant des GPU. Cette étape peut être réalisée localement, à condition de disposer des ressources nécessaires, ou sur des plateformes de machine learning. Parmi ces plateformes, on peut citer Databricks, Vertex AI (Google Cloud Platform), ou encore AWS SageMaker.
Il existe plusieurs métriques pour évaluer un modèle. Nous pouvons citer l’accuracy qui est le taux de réussite sur les données de test. Il est important de ne pas se limiter à celle-ci pour évaluer les performances du modèle. D’autres métriques, telles que la précision (precision), le rappel (recall), le F1-score, et bien d’autres encore peuvent offrir une évaluation plus complète. Il s’agit de prendre les métriques les plus adaptées pour un problème donné.
Généralement, un seul entraînement n’est pas suffisant pour obtenir un modèle performant. Il est souvent nécessaire d’effectuer plusieurs sessions d’entraînement en variant les hyperparamètres. De plus, il est essentiel de documenter chaque session d’entraînement, ses paramètres ainsi que les métriques obtenues pour évaluer les performances du modèle. Ce processus est appelé suivi des expériences (experiment tracking). Plusieurs outils sont disponibles pour gérer ces expériences et modèles, comme MLFlow, Neptune.ai ou encore SageMaker Studio d’AWS.
Nous avons vu qu’il est nécessaire de diviser le jeu de données en deux. Supposons que nous souhaitons, par exemple, utiliser un taux de séparation de 80% pour l’entraînement et 20% pour l’evaluation. Nous pouvons arbitrairement décider que les données d’évaluation sont les 20% en partant du début, ou alors les 20% à la fin, ou encore 20% au milieu etc. Plusieurs possibilités s’offrent donc à nous. L’idéal serait d’effectuer plusieurs expériences avec les différentes combinaisons afin d’avoir une évaluation précise. Cette technique s’appelle la cross-validation (validation croisée).
2.5 Déploiement
L’étape finale après avoir produit le meilleur modèle possible est de le déployer ! L’idée est de le mettre à disposition afin qu’il puisse être interrogé. Nous parlons d’inférence de modèle. Il existe plusieurs manières de déployer un modèle. Nous pouvons citer les modes suivants :
- Batch deployment : Ce mode permet de traiter occasionnellement un volume de données sans forcément obtenir une réponse immédiate. L’avantage est d’exécuter le modèle uniquement lors du traitement des données.
- Real-Time deployment : Ceci permet de servir le modèle à travers une URL HTTP. Cela permet donc à des clients d’obtenir des prédictions immédiates sur leurs requêtes.
- Streaming deployment : Lorsque nous avons un flux de données que nous souhaitons traiter en temps réel, nous pouvons mettre le modèle en écoute sur ces données pour pouvoir les traiter immédiatement.
De même que pour la phase d’entraînement, nous avons besoin de ressources de compute, ainsi que d’une infrastructure pour servir le modèle. Nous retrouvons, comme pour la partie entraînement, les plateformes Databricks, Vertex AI, AWS SageMaker et bien d’autres encore. Rien ne nous impose de choisir la même plateforme que pour la partie entraînement. Tout dépend des organisations et du besoin des équipes.
2.6 Monitoring
D’un point de vue opérationnel, le déploiement d’un modèle doit être accompagné d’un monitoring rigoureux. En plus de surveiller la santé du système, il est essentiel de suivre la qualité des réponses du modèle sur des données réelles. En effet, au fil du temps, les données peuvent changer, ce qui peut entraîner une dégradation des performances du modèle, un phénomène connu sous le nom de “drift” des données. C’est pourquoi le monitoring des modèles est crucial pour détecter ces changements et intervenir avant que le modèle ne devienne obsolète.
Avant de déployer un modèle à grande échelle, il est également judicieux d’effectuer des tests comme le A/B testing ou des canary releases. Ces méthodes permettent de tester de nouvelles versions de modèles sur une petite fraction des utilisateurs ou des requêtes, afin d’évaluer leurs performances sans perturber l’ensemble des utilisateurs. Cela permet de limiter les risques en cas de problème avec le nouveau modèle.
3. Conclusion
Dans cet article, nous avons vu ensemble un exemple de workflow de machine learning ainsi que les concepts afférents. De la collecte des données à la gestion des expériences, en passant par l’optimisation des hyperparamètres et l’évaluation via des méthodes telles que la cross-validation, chaque étape est essentielle pour produire un modèle performant. De plus, nous avons vu l’importance d’un monitoring constant après le déploiement, notamment pour prévenir le drift des données, qui peut altérer la précision des prédictions dans le temps.
Le déploiement d’un modèle en production, accompagné d’un suivi rigoureux, assure que ce dernier continue de répondre efficacement aux besoins des utilisateurs. Des techniques comme le A/B testing ou les canary releases permettent d’introduire des améliorations de manière progressive et contrôlée. Ce processus itératif, combiné à l’évolution constante des données et des modèles, montre bien que le machine learning est un domaine dynamique, où la maintenance et l’adaptation continue sont aussi cruciales que la phase initiale de développement.
Dans un prochain article, je vous proposerai de voir ensemble la mise en pratique de ces concepts et de ce workflow dans le cadre du cloud. Cela vous permettra d’acquérir une vision plus opérationnelle de ces workflows, et d’adapter les approches en fonction des évolutions de vos besoins.
Stay tuned pour la suite !