Intelligence Artificielle / Machine Learning : de la perception à l’action (1/5)

Ce premier article sur l’IA a pour objectif d’introduire les concepts clés du Machine Learning. Le but n’est pas de nous attaquer à un sous-domaine de l’IA (telle que la théorie des jeux), mais d’avoir un point de vue ensembliste sur les possibilités que nous offre le Machine Learning (ML). Par la suite, notamment dans les deux prochains articles, nous développerons nos propres agents capables de faire des prédictions sur des données contextuelles. Enfin, nous appellerons “agent” tout programme informatique doté de capacités d’apprentissage et d’une certaine autonomie.
Voici le plan des articles à venir :
- Introduction : de la perception à l’action
- Créer un agent intelligent (1/2)
- Créer un agent intelligent (2/2)
- Les réseaux neuronaux : Skynet is back
- Comment évaluer et déployer son modèle dans Azure.
Contexte
Nous sommes en 2025, nous décidons de nous lancer dans la commercialisation d’un nouveau type de boisson appelé mémoria capable d’augmenter notre capacité de rétention (mémoire) de 75% pendant 1 heure. Le démarrage en termes de ventes n’est pas à la mesure de nos attentes malgré le caractère innovant de notre produit. Le CEO de l’entreprise, John Doe, décide d’engager Cellenza pour déterminer les changements à apporter pour optimiser ses ventes.
Pour ce faire, il fournit l’historique de toutes les ventes ainsi que les conditions dans lesquelles elles ont été faites. Cellenza lui propose d’auditer son activité grâce au Machine Learning. Avant de signer, il nous demande de lui présenter les fondements de l’IA notamment du ML et en quoi cela pourrait changer sa vie.
Un peu d’histoire – d’où vient le concept intelligence artificielle ?
Aux alentours des années 1945, juste après la Seconde Guerre mondiale, sont apparues les premières réflexions autour de l’IA, grâce à des études du cerveau et plus précisément des neurones. Le terme IA fut formalisé autour des années 1950. Suite à cela, plusieurs définitions de l’IA ont vu le jour dont une que je trouve assez complète :
« Penser comme des humains, agir comme des humains ».
Cette définition a été revisitée par certains (peut-être à cause de son caractère étroitement philosophique lié à la pensée) qui eux se rapportent plutôt à l’aspect rationnel de l’homme en essayant de répondre à la question :
« Comment réagir de façon appropriée en fonction de ce que l’on sait ?» ou inversement « comment quantifier l’incertitude ? »
Pour faire simple, le concept même d’intelligence artificielle consiste à substituer l’homme par des agents informatiques assez intelligents pour être autonomes dans l’exécution de différentes tâches.
La complexité est d’autant plus grande que notre approche algorithmique classique ne permet pas de concevoir des agents aussi performants et dotés de personnalité face à l’incertitude ou à l’inconnu.
Tu veux dire qu’on va coder un humain ?
Rassurez-vous, le but n’est pas de reproduire à l’identique le comportement d’un humain, mais de s’en inspirer pour atteindre (et même dépasser) son niveau de performance. Si on prend l’exemple préféré des chercheurs, l’avion n’est pas une copie conforme d’un oiseau (heureusement) mais s’en approche fortement de par sa conception.
Pourquoi l’IA fait autant le Buzz alors ?
La plupart des algorithmes actuels d’IA sur le marché datent des années 1950. Certains d’entre eux ont bien fonctionné dans des contextes définis notamment dans la théorie des jeux (notion d’adversité dans les jeux de plateau par exemple). Ce qui a freiné les choses à l’époque, c’est le manque de puissance de calcul et l’incapacité de stocker une quantité de données importante indispensable au développement des fonctions cognitives de nos agents. On a assisté alors à la création des solutions « localement » optimales, mais globalement faibles.
Les arbres de décision en sont un bon exemple, nous étions limités par la mémoire et donc limités dans la profondeur des arbres. On les a alors optimisés pour arriver à stocker le maximum de cas dits « statistiquement performants » pour que cela puisse tenir en mémoire. Bref, tout ceci pour dire qu’il fallait faire preuve de beaucoup d’ingéniosité pour faire fonctionner son agent avec les CPU/GPU de matériel informatique de l’époque.
Depuis quelque temps et grâce au Big Data, on se rend compte que la donnée de qualité devient accessible par tous et que notre puissance de calcul nous permet de traiter ce volume de données de manière efficace. L’heure de la revanche a sonné, attaquons-nous aux données et non plus aux traitements.
Et l’homme dans tout ça ?
En fait, de façon intuitive, l’humain ingère de la donnée à chaque fois qu’il interagit avec son environnement. C’est ce qu’on appelle la perception. Nos différents sens nous servent de passerelle pour le recueil d’informations. Le cerveau quant à lui se charge du traitement grâce au reste de ses fonctions cognitives. Pour faire le parallèle avec les agents informatiques, ils doivent s’en inspirer par conception.
(De la perception à l’action)
Des lors, les pères fondateurs de l’IA se sont questionnés sur la manière dont notre futur agent dit « intelligent » devrait raisonner pour prendre la décision la plus appropriée, et ce, en fonction de ce qu’il sait (ou ne sait pas d’ailleurs). Et comment peut-on s’assurer que la décision prise par l’agent est la meilleure possible ? Car n’oublions pas que, dans le cadre d’une entreprise, cette décision a des enjeux financiers considérables. Si elle n’est pas appropriée cela peut alors causer des pertes financières importantes.
Concrètement, que veut-on faire avec cette IA ?
On s’intéresse aux relations que présentent nos données d’entrées et les valeurs de sortie et non plus à la data en elle-même. Par exemple, pas besoin de stocker toute la suite de Fibonacci si l’on sait comment la calculer en analysant les données. On garde la fonction représentant la suite en mémoire et le tour est joué. La difficulté réside donc dans le fait de trouver cette fonction f dans l’ensemble F de toutes les fonctions possibles de sorte qu’elle représente au mieux nos données.
Pour trouver cette fonction hypothétique f, on utilise les mathématiques (oui je sais, on n’en finit jamais) pour la partie analyse numérique, optimisation, etc. Et l’informatique pour le stockage et traitement de la donnée.
Débuter avec le Machine Learning
Le Machine Learning est un sous-domaine de l’IA qui adresse les difficultés présentées précédemment, à savoir pouvoir transmettre cette capacité d’apprentissage par l’expérience à un programme informatique. Nous voulons que notre futur agent puisse trouver les règles associées à son existence par lui-même, que ce soit par généralisation, association ou inférence. Voici un exemple simple de généralisation :
“Tous les Brésiliens que j’ai rencontrés jusqu’à présent parlent portugais, donc je suis sûr à K % qu’au brésil on parle portugais.”
Concrètement, le Machine Learning est une boîte à outils contenant différents algorithmes capables de prédire de la donnée dans différents contextes. Le terme prédiction n’a rien de spatio-temporel mais est lié au fait que notre modèle répondra toujours, même lorsqu’il doit faire face à un cas inconnu. Ceci est possible parce qu’il a pu trouver une représentation « logique » des différentes relations qui existent entre chacune des données en sa possession.
Ces relations sont représentées par un ensemble d’opérations très simples à appliquer aux données d’entrées pour obtenir notre sortie. Il faut donc un jeu de données assez représentatif du contexte d’étude (finance, banque, ventes, etc.) pour identifier les relations pertinentes (ou coefficients) à appliquer.
Machine Learning, l’apprentissage par l’erreur
C’est une notion indispensable dans le processus d’apprentissage du Machine Learning. On part du principe que « plus on se trompe, mieux on apprend », et cela est mathématiquement démontrable. Se tromper au début permet donc d’apprendre rapidement. A chaque fois que l’on se trompe, on choisit une nouvelle direction parmi celles possibles en vue de réduire l’erreur.
Il nous faut donc être en mesure de quantifier cette erreur afin de pouvoir réellement « apprendre de nos échecs ». Gardez juste à l’esprit que ce procédé utilise une fonction mathématique appelée « fonction de perte » ou « loss function» pour calculer cette mesure et utilise le gradient descendant pour déterminer la nouvelle direction à prendre. Dans les faits, on utilise une version légèrement modifiée du gradient pour réduire le coût de calcul. Pour résumer, il s’agit de trouver une fonction f telle que la « fonction perte » soit minimale. C’est donc un problème classique d’optimisation communément appelé minimisation de fonction.
Cette boîte à outils, dont je vous parlais, propose plusieurs algorithmes répartis principalement en 4 familles selon le type d’apprentissage souhaité :
(Différents types de Machine Learning)
Pour des raisons de simplicité, j’aborderai uniquement l’apprentissage supervisé, étant le plus utilisé sur le marché. D’ailleurs il s’agit de l’outil que nous voulons proposer à John Doe. Mais si vous êtes curieux à propos des autres types, voici de la bonne lecture.
L’apprentissage supervisé
Tout comme vous sur les bancs de l’école où vous appreniez par l’exemple et alliez « au coin » lorsque vous ne faisiez pas vos devoirs, nous allons donner à notre agent des exemples à apprendre et l’orienter afin qu’il puisse voler de ses propres ailes. A savoir, apprendre et raisonner pour déduire le résultat de ce qu’il sait déjà, d’où le terme « supervisé ».
Par exemple, on lui montrera plusieurs images d’animaux et on lui dira que ce sont tous des chiens. Puis la prochaine fois qu’on lui montrera un caniche (qu’il n’aura pas vu dans le jeu d’apprentissage), il saura dire que c’est un chien.
Quelle approche et quel algorithme appliquer ?
Tout dépend de votre variable d’intérêt. Si vous souhaitez prédire vos ventes à un instant T en fonction de la météo et des flyers distribués dans les rues, votre variable d’intérêt Y est le montant total des ventes et les variables explicatives, en général notées xi, sont la météo et le nombre de flyers distribués. Voici un exemple de jeu de données qui pourrait servir à entraîner le modèle ML :
|
Variable d’intérêt | Variables explicatives | ||
Mes Ventes en € | Météo | Flyers | …. | |
10/01/2025 | 1250 | 10° | 55 | …. |
11/01/2025 | 1100 | 12° | 42 | …. |
12/01/2025 | 1700 | 21° | 45 | …. |
13/01/2025 | 1450 | 16° | 60 | …. |
14/01/2025 | 1600 | 18° | 50 | …. |
… | … | … | … | …. |
31/01/2026 | 1300 | 19° | 62 |
…. |
(Exemple de jeu de données)
Avec ce jeu de données et grâce aux algorithmes ML, nous pourrions très rapidement répondre aux questions suivantes : quelles seraient mes ventes si la température est de 27° et que je distribue 35 flyers ? Si la température baisse radicalement, est-ce que mes ventes resteraient stables ?
Imaginez un tel jeu de données avec plusieurs centaines (voir milliers) de variables explicatives, chacune de ces variables étant un axe ou une dimension différente dans votre fonction. Je pourrais aller sur Mars en Tesla et revenir le temps que vous résolviez cette équation à la main.
Pour revenir à notre choix d’algorithme, on distingue deux types de variables quantitatives (enfin 3 avec les variables de type catégorie mais en pratique on ne s’en sert pas tel quel) :
- Des variables dites continues : elles prennent des valeurs numériques (ou horaires) potentiellement infinies. Dans l’exemple précédent, le montant total des ventes est une variable continue qui a potentiellement une infinité de valeurs. Pour ce type de problème, on applique en général de la régression linéaire (ou polynomiale).
(Exemple de Régression Linéaire)
Les points bleus représentent vos données (ventes par rapport à la météo par exemple), on peut constater que les données sur l’image ont une relation linéaire. Le but de la régression est de trouver cette fonction (la ligne droite en rouge). Elle se présente sous la forme Y = aX + b telle que :
X : une matrice représentant vos variables explicatives (météo, flyers distribués, etc.)
Y : un vecteur représentant votre variable d’intérêt (le montant des ventes par exemple)
Le but est donc de trouver les 2 coefficients a (la pente) et b (le biais) sur l’ensemble du jeu de données.
- Des variables dites discrètes : elles sont numériques et dénombrables. En général, on s’en sert également pour catégoriser des données. Dans le cas d’un agent de classification, on peut choisir d’appliquer le Knn (les k plus proches voisins) ou encore une régression logistique pour estimer la classe d’appartenance.
Exemple de Knn en python
Il existe de nombreux algorithmes de ML tels que le K-means, Db-Scan, les arbres de décision, etc. Je vous invite à lire cet article qui présente la quasi-totalité des algorithmes actuellement disponibles.
Comment sélectionner mes variables explicatives (Xi) ?
Lorsque vous construisez votre dataset final, vous n’êtes pas obligé de sélectionner toutes les variables explicatives de votre domaine d’étude. Certaines variables sont plus importantes que d’autres et agissent donc plus fortement sur votre variable d’intérêt (Y).
En général, après avoir nettoyé vos données, pour sélectionner les Xi les plus pertinents, vous pouvez calculer la matrice de corrélation pour déterminer toutes les variables qui varient ensemble (peu importe la direction), celles qui sont muettes par rapport à d’autres, etc. En pratique, vous utiliserez des fonctions « prêtes à l’emploi » pour vous aider à sélectionner les bonnes variables de votre dataset. Gardez juste à l’esprit que cela peut améliorer grandement la précision de votre modèle.
Comment évaluer son modèle Machine Learning ?
La façon la plus simple est de diviser votre jeu de données en deux sous-ensembles appelés jeu d’apprentissage (70 à 80%) et jeu de test (20 à 30%). Il s’agit là de faire de la validation croisée ou cross validation en anglais. L’idée est d’entraîner votre modèle avec la plus grande partie des données et de le challenger avec des données qu’il n’a pas “vu” lors du training et pour lesquelles vous avez des réponses. Ensuite, on calcule l’erreur quadratique moyenne (mean squared error en anglais) que l’on compare à tous les autres modèles obtenus (coefficients a et b dans le cas d’une régression). Ainsi, celui qui a le taux d’erreur le plus bas sur le jeu de test a gagné.
Il existe une technique de validation croisée, appelée k-folds cross validation, qui donne des résultats plus précis. Elle consiste à diviser votre jeu de données initial en K groupes et effectue une rotation entre jeu d’apprentissage et jeu de test afin que chaque groupe soit testé au moins une fois. Elle renvoie l’erreur moyenne sur l’ensemble des K groupes.
Pour des agents de classification binaire (masculin ou féminin par exemple), on peut utiliser une matrice de confusion pour déterminer la précision du modèle. Cette matrice nous donne les métriques suivantes :
- True Positive (TP) : le nombre de fois que l’agent a répondu “oui” et que la réponse était “oui”
- False Positive (FP) : le nombre de fois que l’agent a répondu “oui” alors que la réponse était “non”
- True Negative (TN) : le nombre de fois que l’agent a répondu “non” et que la réponse était “non”
- False Negative (FN) : le nombre de fois que l’agent a répondu “non” alors que la réponse était “oui”
La précision du modèle peut être calculée en appliquant simplement : (TP + TN) / (TP+TN+FP+FN)
Quels sont les outils à ma disposition pour faire du Machine Learning ?
Il existe actuellement plusieurs technologies sur le marché permettant de développer tout ou partie d’une solution de Machine Learning. La différence fondamentale se situe, d’une part dans la simplicité d’utilisation et d’autre part sur la performance. Par exemple, si seules les fonctionnalités fournies vous importent et que vous ne souhaitez pas construire votre propre service, vous pouvez utiliser des solutions cloud notamment les cognitives services de Microsoft. Ces dernières proposent une large gamme d’outils permettant d’entraîner un agent en quelques minutes.
Si cela ne répond pas à votre besoin soit parce que vous voulez coder vous-même ou savoir comment cela fonctionne, voici une liste non exhaustive d’outils qui ont mon intérêt :
Conclusion
Nous sommes arrivés au terme de cet article dont l’objectif était de présenter les contours du Machine Learning. Le meilleur reste à venir avec le Deep Learning que nous verrons au chapitre 4. Dans le prochain article, nous allons commencer le développement de l’agent qui répondra au besoin de John Doe. Nous utiliserons deux approches complètement différentes : l’une se basant sur des services cloud notamment Azure ML et l’autre, sur scikits learn un package python très populaire pour faire du Machine Learning.