Quand la machine se met à apprendre
Introduction
Que l’on ne se méprenne pas : l’apprentissage machine est un métier, un sacerdoce mathématique et informatique, et un formidable jeu intellectuel. C’est une des facettes les plus fascinantes de l’informatique, une des plus porteuses d’espoirs, de craintes, mais surtout d’incompréhension totale.
On fait tout dire à l’IA, et indirectement à l’apprentissage machine, et on lui fait porter tous les maux futurs de l’humanité. Maintenant, vous avez vu dans les pages précédentes que les machines sont loin d’être parfaites. Les services existants s’améliorent constamment, mais on est encore loin d’une intelligence artificielle générale. Cependant, on ne peut plus ignorer les services d’IA. Nous savons qu’appeler Rekognition, Translate ou Transcribe est une affaire de quelques lignes de code. Il en est de même avec les services de SageMaker ou d’Amazon Machine Image (AMI).
Ce chapitre leur est consacré. Vous allez y apprendre, avec un peu plus de détails qu’au chapitre Mettre en œuvre des projets d’IA avec AWS qui n’était qu’une introduction, comment construire un modèle, le former et y lancer des inférences. Que vous souhaitiez faire de la détection de défectuosités sur une chaîne...
Machine et Deep Learning
Nous avons étudié au chapitre Intelligence artificielle, mythes et réalités que le machine learning (apprentissage machine) était un sous-ensemble de l’intelligence artificielle. Le deep learning (apprentissage profond) est un sous-ensemble de l’apprentissage machine comme le montre l’image ci-dessous :
![images/05EXP001.png images/05EXP001.png](https://www.eni-training.com/download/9b07eec3-3167-466a-ae2a-2f05935617ad/images/05EXP001.png?id=AAEAAAD%2f%2f%2f%2f%2fAQAAAAAAAAAMAgAAAE1FbmkuRWRpdGlvbnMuTWVkaWFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VuaS5FZGl0aW9ucy5NZWRpYXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAAAwdGVzdCB2Ml84IC0gZmZhNjQzOWQtZDZjYi00NzYxLWJhYTMtZWZkZDNiZDcwMWM25rSq0F7p2IgL)
Figure 1 - Intelligence artificielle
On peut donc travailler avec de l’intelligence artificielle sans faire de l’apprentissage machine, mais pas l’inverse, bien que tout cela soit avant tout affaire de sémantique. Cependant, tout ceci n’a que peu d’importance, l’idée étant d’obtenir un résultat à partir d’algorithmes plus ou moins sophistiqués. La discipline qui a le vent en poupe en ce moment est l’apprentissage, supervisé ou non. Elle consiste à faire en sorte que la machine apprenne soit à partir de règles prédéfinies (les heuristiques), soit à partir de jeux de données, étiquetées ou non (les jeux d’apprentissage). Le résultat est un modèle sur lequel on va pouvoir faire des inférences, c’est-à-dire tester des hypothèses et obtenir des prévisions ou de simples réponses.
L’intelligence artificielle a envahi nos vies numériques sans que l’on s’en aperçoive. Nos ordinateurs, téléphones portables et tablettes en sont remplis. Les logiciels de tout acabit s’y mettent aussi afin d’en améliorer la sécurité, la simplicité d’utilisation et la puissance. Les réseaux sociaux ne pourraient pas continuer à exister sans elle, ses prévisions, ses recommandations et ses influences pour nous rendre toujours plus captifs. Les places de marchés et magasins en ligne abreuvent leurs modèles d’IA de nos données, de nos comportements et de nos clics. En bref, l’IA est partout autour de nous sans qu’on ne la voie, la sente ou se rende compte de son omniprésence.
La question étant, et comment faire pour en tirer parti ? L’apprentissage machine n’est pas une discipline simple. Elle s’est construite à l’intersection des mathématiques et de l’informatique....
Vision par ordinateur
La vision par ordinateur est un domaine primordial dans les applications de véhicule autonome, de reconnaissance visuelle, de détection d’anomalies sur des chaînes industrielles, mais aussi de classification automatique d’images ou de vidéos, comme nous l’avons par exemple vu avec Rekognition.
L’exemple que nous allons dérouler ici est celui de la détection d’objets dans des images. Nous allons pour ce faire utiliser un jeu de données relativement récent, puisqu’il date de 2017 : COCO, l’acronyme de Common Objets in COntext, c’est-à-dire, objets communs en contexte (http://cocodataset.org). Le livre blanc fondateur de ce jeu de données se trouve ici : https://arxiv.org/abs/1405.0312. Je vous en conseille la lecture avant de vous lancer dans cet exemple. COCO contient plus de 200 000 images étiquetées en 80 catégories, chaque objet présent dans une image étant repérée par une « bounding box ». Je vous conseille de cloner le bloc-notes Jupyter fourni par le consortium COCO (https://github.com/cocodataset/cocoapi/blob/master/PythonAPI/pycocoDemo.ipynb) et de l’exécuter pour vous faire une idée du jeu de données.
Les annotations de ces images appartiennent au consortium COCO et sont sous licence Creative Commons Attribution 4.0 (https://creativecommons.org/licenses/by/4.0/). Les images proviennent du service Flickr. Leur utilisation est régie par les termes de services de la société Oath: et se limite strictement à la formation d’un modèle d’apprentissage machine.
Nous allons nous servir de l’algorithme de détection d’objets de SageMaker acceptant les RecordIO et les images. Nous avons déjà rencontré les RecordIO et leur traitement au chapitre Mettre en œuvre des projets d’IA avec AWS. Pour simplifier l’utilisation de ce jeu de données pour l’apprentissage machine, nous allons utiliser les images sous forme JPG et les annotations en JSON. Nous allons en utiliser un sous-ensemble pour limiter le temps de calcul.
Voici une image du jeu de données et son fichier JSON d’annotations au format conforme à l’algorithme :
![images/05EXP010.png images/05EXP010.png](https://www.eni-training.com/download/9b07eec3-3167-466a-ae2a-2f05935617ad/images/05EXP010.png?id=AAEAAAD%2f%2f%2f%2f%2fAQAAAAAAAAAMAgAAAE1FbmkuRWRpdGlvbnMuTWVkaWFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VuaS5FZGl0aW9ucy5NZWRpYXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAAAwdGVzdCB2Ml84IC0gZmZhNjQzOWQtZDZjYi00NzYxLWJhYTMtZWZkZDNiZDcwMWM25rSq0F7p2IgL)
Figure 10 - Image du jeu COCO
{ ...
Traitement du langage naturel
Quand on parle langage naturel, on pense tout de suite à ces robots qui écoutent et répondent, les C-3PO et autres R2-D2 de la Guerre des étoiles. Cependant, si nous avons rencontré ce genre de services avec Transcribe, Comprehend ou Polly, il s’agit aussi de pouvoir lire et interpréter des textes pour les comprendre et en faire des prévisions.
Un des exemples les plus en vogue en ce moment est l’analyse de sentiments et les recommandations suite à des choix précédemment effectués. Nous allons ici former un modèle d’analyse de sentiments qui va permettre de faire des recommandations ou faire intervenir un agent du service client en cas d’insatisfaction par exemple.
Par rapport à l’exemple précédent, nous allons introduire une petite modification : l’utilisation d’un framework qui va forcer à écrire la fonction d’estimation. Pour ce faire, nous allons utiliser les données d’analyse de sentiment de films provenant de l’université de Stanford (https://nlp.stanford.edu/sentiment/index.html). Je vous propose de lire le grand livre blanc avant de vous lancer tête baissée dans l’exemple, qui s’appuie sur un réseau de neurones récursif (https://nlp.stanford.edu/~socherr/EMNLP2013_RNTN.pdf).
L’objectif du modèle est de pouvoir indiquer si un avis de film est positif ou négatif. En combinant cette information avec le type de films et l’historique de l’utilisateur, il est alors possible de faire des recommandations. L’analyse de sentiment est donc un problème de classification de texte : soit le texte est positif, soit il est négatif. Cela peut sembler simple de prime abord, mais de nombreuses subtilités du langage peuvent tromper la machine.
L’inconvénient de ce modèle est qu’il est en anglais, mais son avantage est sa grande simplicité. Il s’agit d’une collection de plusieurs milliers de revues de films extraits du site rotten tomatoes et étiquetées avec un 1 quand la phrase (ou le mot) est positive et 0 quand...
Prévisions et prédictions numériques
Le Saint Graal des prévisionnistes, des directeurs commerciaux et des investisseurs : prévoir le futur à partir de jeux de données permettant de modeler la réalité au plus près grâce aux prévisions numériques. On retrouve ici toutes les formes de prévisions qui consistent à partir d’un modèle, à poser des heuristiques, c’est-à-dire des hypothèses, et lancer des inférences donc des prévisions.
Alors, bien évidemment, les sciences numériques, statistiques et probabilistes n’ont pas attendu l’IA pour effectuer des prévisions. Cependant, ce qui est nouveau depuis quelques années est la possibilité d’affiner les modèles en ajoutant des dimensions, en utilisant de grands volumes de données et en faisant varier les paramètres pour trouver des relations qui échappent à une analyse humaine tant les volumes de données sont importants.
Pour mieux comprendre comment fonctionnent les modèles de prévision numérique, nous allons utiliser des données historiques de consommation électrique disponibles sur Kaggle (https://www.kaggle.com/robikscube/hourly-energy-consumption#AEP_hourly.csv). Ce fichier enregistre la consommation en mégawatts heure par heure d’une grille située à l’est des États-Unis. Nous disposons de plus de 120 000 points de données entre le 1eroctobre 2004, à 1 heure du matin, et le 3 août 2018, à minuit. L’objectif est de construire un modèle qui nous permet de prédire la consommation électrique un jour et à une heure donnés. Nous allons pour ce faire utiliser l’algorithme d’apprentissage linéaire.
1. Préparer le modèle
Nous souhaitons, avec ce modèle, établir s’il est possible de prédire la demande d’électricité à partir de la consommation des heures qui précèdent. Si nous avions d’autres points de données, comme la température, la pluviométrie ou autre, nous pourrions aussi les ajouter aux colonnes de points.
Notre fichier ressemble à un simple ensemble de points comme les 11 premières...
Et si on scriptait le tout ?
Dernière étape de notre découverte de l’apprentissage profond avec SageMaker, l’automatisation de tout ou partie de ce que nous venons de voir. En effet, un modèle n’est jamais figé. Il peut, et doit, être constamment amélioré avec de nouveaux jeux de données. Il devient alors important d’automatiser la formation de modèles via des scripts pour pouvoir les programmer. Nous allons voir comment le faire simplement.
Pour commencer, nous allons créer un environnement Cloud9. Cloud9 est l’IDE (environnement de développement intégré) d’AWS qui s’exécute dans un explorateur internet. Il est conçu pour éditer, déboguer et exécuter toute forme de code, ou presque, dans de nombreux langages de programmation (C++, Python, PHP, etc.). Il est idéal pour scripter la série de commandes nécessaires à la formation d’un modèle SageMaker.
Lancer et créer un environnement Cloud9
Depuis console.aws.amazon.com, ouvrez le service Cloud9.
Si c’est la première fois que vous accédez à Cloud9, cliquez sur le bouton Create Environment. Si ce n’est pas la première fois, vous pouvez ouvrir un environnement déjà créé ou en créer un nouveau en cliquant sur le bouton Create Environment.
Donnez un nom et une description (optionnelle) à votre environnement.
Vous pouvez choisir de créer une nouvelle instance EC2 ou de vous connecter à distance en SSH. Pour le moment, nous pouvons choisir la première option.
Les machines Cloud9 ne nécessitent pas beaucoup de puissance à moins de lancer des fonctions particulières. Pour nos besoins de scripting SageMaker, nous allons choisir une « petite » machine t2.small.
Amazon Linux convient ainsi que l’arrêt automatique après 30 minutes.
Cliquez sur le bouton Next Step, puis sur Create...
Conclusion
Vous voilà arrivé à la fin de ce chapitre consacré à l’apprentissage profond et à SageMaker. Vous avez peut-être l’impression d’avoir à peine égratigné le vernis de cette discipline technique et complexe. Cependant, si je vous renvoie au chapitre Intelligence artificielle, mythes et réalités, je vous avais prévenu que l’intelligence artificielle n’était pas simple à appréhender.
Cependant, SageMaker rend la formation de modèle infiniment plus simple qu’elle ne l’était il y a encore quelques années. Chaque section précédente est organisée en trois parties : préparer le modèle, le former et lancer des inférences. La simplicité de cette organisation est possible grâce à SageMaker qui s’occupe de l’infrastructure matérielle et logicielle sous-jacente.
Quand on paramètre un estimateur, on définit la machine qui va exécuter la formation du modèle. Presque négligemment, on indique ’ml.p3.2xlarge’. Ce faisant, on a instantanément accès à un serveur architecturé autour de GPU NVIDIA Tesla v100 (https://www.nvidia.com/fr-fr/data-center/tesla-v100/) fournissant jusqu’à 125 Tflops de performance (soit cent vingt-cinq mille milliards...