Pour bien interagir avec l’IA, il est utile de se faire une idée, même assez générale, de la manière dont elle fonctionne. Rien de mieux pour cela que de commencer par un détour par l’histoire de l’intelligence artificielle.
Un vieux rêve, une discipline récente
Le rêve d'un robot savant est très ancien. Dans son traité sur Les Politiques, Aristote imaginait déjà que les esclaves pourraient un jour être remplacés par des automates, tandis que la mythologie grecque avait assigné à un immense automate de bronze, Talos, la mission de protéger Europe de ses ennemis. Il faudra toutefois attendre les progrès de l’informatique pour faire de ce rêve un véritable programme de recherche.
On attribue généralement la paternité de l’expression « intelligence artificielle » au scientifique John McCarthy, qui invente le terme dans le cadre de la préparation de la conférence de Dartmouth (1956), moment fondateur de la discipline au cours duquel est défini un programme de recherche visant à créer des « machines intelligentes ». C’est à cette occasion que Marvin Lee Minsky propose une définition de l’IA qui continue de faire référence : « la construction de programmes informatiques qui s’adonnent à des tâches qui sont, pour l’instant, accomplies de façon plus satisfaisante par des êtres humains ».
Restait à savoir comment réaliser cette prouesse.
Deux approches concurrentes
Pour permettre à la machine de faire aussi bien que l’homme sur un nombre toujours plus grand de tâches, deux stratégies concurrentes ont émergé.
Suivre des règles…
La première voie, appelée « IA symbolique », vise à programmer explicitement la machine de façon à ce qu’elle suive des instructions précises pour réaliser une tâche spécifique. Dans cette approche, la machine se contente de faire ce qui lui a été explicitement ordonné.
Prenons un exemple très simple pour illustrer : le morpion. Dans ce jeu, deux joueurs s’efforcent d’aligner trois symboles identiques en jouant à tour de rôle.
Si l’on souhaite développer une intelligence artificielle capable de jouer correctement au morpion dans cette première approche de l’IA, il faut indiquer à la machine les règles à suivre. Pour ce jeu, une bonne stratégie consiste à respecter, dans l’ordre, les règles suivantes :
si je peux aligner trois symboles, jouer ce coup ;
à défaut, si mon adversaire peut aligner trois symboles au prochain coup, bloquer ;
à défaut, jouer au centre du plateau ;
à défaut, jouer dans un angle du plateau ;
sinon, jouer au hasard dans une case vide.
Un tel programme est très simple à rédiger, vous pouvez d’ailleurs jouer contre cette mini-IA en cliquant ici. De la même manière, on pourrait programmer une IA visant à effectuer des diagnostics médicaux, en suivant un arbre de décision de type « SI le patient présente tel symptôme MAIS pas tel autre symptôme ET que le résultat de son test est (…) ALORS le diagnostic est (…) ».
Si cette première approche de l’IA a produit des résultats spectaculaires – par exemple la victoire aux échecs contre Kasparov en 1997 –, elle est toutefois lourde et compliquée à mettre en œuvre pour des tâches plus complexes, car il faut parvenir à déterminer des règles et critères permettant d’aboutir au résultat escompté. Pour des jeux beaucoup plus complexes que les échecs ou pour des tâches ne pouvant pas facilement se réduire à des règles comme la traduction automatique d’une langue vers une autre ou la reconnaissance d’images, sa mise en œuvre n’a pas permis d’aboutir à des résultats satisfaisants.
Cette approche bute ainsi sur le célèbre paradoxe de Polanyi : “nous savons plus que nous ne pouvons dire”. Pensez à la facilité avec laquelle nous pouvons reconnaître le visage de nos proches, apprendre à faire du vélo ou anticiper le mouvement de nos adversaires sur un terrain de sport : nous accomplissons ces tâches très complexes avec aisance, sans pouvoir articuler comment nous le faisons. Beaucoup de connaissances humaines sont tacites, basées sur des expériences et des compétences non formalisées, rendant leur codification explicite difficile.
…ou apprendre tout seul
Dès l’origine, une deuxième approche du problème de l’IA, radicalement différente de la première et baptisée « apprentissage-machine », avait toutefois été imaginée par les pionniers de la discipline. Dans son célèbre article « Les ordinateurs et l’intelligence » (1950), Alan Turing en a proposé une définition imagée qui permet intuitivement d’en saisir l’essence : « au lieu de produire un programme qui simule l'esprit de l'adulte, pourquoi ne pas plutôt essayer d'en produire un qui simule celui de l'enfant ? ». S’inspirant de l’éducation d’un enfant, la stratégie consiste ainsi à programmer la machine pour qu’elle puisse apprendre à partir de son expérience, sans suivre de règles préétablies mais en tirant les leçons d’un « processus d’enseignement » associant « punitions » et « récompenses ».
Concrètement, il s’agit de programmer la machine pour qu’elle puisse apprendre à partir d’exemples au cours d’une phase dite d’« entraînement ». Au départ, l’IA adopte un comportement aléatoire et fait donc de nombreuses erreurs mais elle ajuste progressivement sa manière d’agir en tenant compte de ses réussites et de ses échecs.
Là encore, un exemple est souvent plus parlant qu’un long discours. Pour rester dans l’univers du jeu, prenons le cas d’une IA programmée par Google Deepmind pour apprendre à jouer au jeu du « casse briques » d’Atari.
Au départ, l’IA est très mauvaise puisqu’elle joue au hasard.
Mais au fur et à mesure des parties, elle s’améliore, au point de trouver une stratégie que j’aurais bien été en peine de bâtir et que je vous laisse découvrir en vidéo :
Cette deuxième approche de l’IA a débouché sur de premiers développements académiques dès les années 1950 avec Arthur Samuel (programme auto-apprenant pour jouer aux dames) et Frank Rosenblatt (reconnaissance de formes). Utilisée à grande échelle pour certaines tâches à partir des années 1990 (par exemple pour la lecture automatique du montant sur les chèques bancaires que vous déposez au distributeur), elle a longtemps buté sur des obstacles techniques.
Avec le développement de nouvelles approches, la multiplication des données et surtout l’explosion de la puissance de calcul mise à sa disposition, l’apprentissage-machine a fini par triompher dans les années 2010. Trois étapes ont particulièrement marqué les esprits :
la victoire du modèle Alexnet en 2012 lors de la compétition de reconnaissance automatique d’images ImageNet, avec un taux d’erreur très fortement réduit par rapport à ses concurrents ;
la victoire de l’IA AlphaGo en 2016 face au champion de go Lee Sedol, alors que ce jeu extrêmement complexe et subtil était jusque-là considéré comme hors de portée des machines ;
la sortie des modèles BERT (Google) et GPT (OpenAI) en 2018, qui démontre les progrès spectaculaires de l’apprentissage-machine dans le traitement et la génération de textes écrits en langage naturel.
L’intuition mathématique derrière l’apprentissage-machine
Arrivé à ce stade, certains d’entre vous seront sans doute frustrés de ne pas pouvoir se faire une idée plus précise de la manière dont fonctionne concrètement l’apprentissage-machine. Les développements suivants visent à en donner une intuition mathématique très simplifiée et accessible. Si néanmoins vous êtes réfractaires à cette discipline, vous pouvez sans difficulté passer à l’article suivant, qui décrit le fonctionnement de ChatGPT.
Fondamentalement, l’apprentissage-machine consiste à calibrer une fonction mathématique (le « modèle ») qui prend en entrée des caractéristiques (ex : un plateau de jeu, une image, un texte) et produit en sortie une prévision (ex : le meilleur coup à jouer, la nature de l’image, la traduction en langue étrangère du texte). L'apprentissage se fait en présentant au modèle un grand nombre d'exemples. A chaque fois que le modèle se trompe, les paramètres de la fonction mathématique sont ajustés légèrement pour essayer d’en améliorer la précision.
Prenons un cas très simple où l’on souhaite prédire la note obtenue à un examen (la variable de sortie) en fonction du nombre d’heures passées à étudier (la variable d’entrée) à l’aide d’un « modèle » linéaire. Le programme est codé pour optimiser une fonction linéaire prenant la forme y = ax + b où y est la note à l’examen prédite par le modèle, x le nombre d’heures passées à étudier et a et b les deux paramètres du modèle linéaire. Les « données d’entraînement » sont constituées de paires (x ; y) associant un nombre d’heures passé à étudier au résultat obtenu à l’examen. Par exemple, la paire (1 ; 8) signifie qu’un élève ayant étudié une heure a obtenu la note de 8 à l’examen. L’objectif du programme est d’ajuster progressivement les paramètres a et b de la fonction afin de parvenir à des prévisions cohérentes avec ces données d’entraînement, à l’aide d’une technique appelée « descente de gradient ». Il existe bien entendu des méthodes plus directes d’estimation pour une fonction aussi simple mais l’objectif est ici de présenter cette technique de référence pour l’apprentissage-machine.
Lorsque le programme débute la calibration du modèle (itération 0 dans le graphique ci-dessous), les paramètres a et b sont définis au hasard. L’ampleur de l’erreur est calculée à partir d’une « fonction de coût », qui permet de mesurer l’écart entre les valeurs réellement observées dans les données d’entraînement et les valeurs prédites par le modèle. Au début, le modèle est très mauvais : graphiquement, on voit bien que la fonction linéaire de l’itération 0 est très éloignée des données d’entraînement (graphique de gauche) et que l’erreur est très importante (graphique de droite).
A partir de ce point de départ peu satisfaisant, la technique consiste à calculer comment ajuster les paramètres a et b du modèle pour réduire cette erreur. Sans entrer dans le détail, cela implique pour le programme de calculer les dérivées partielles de la fonction de coût par rapport à chacun de ces paramètres. En effet, cela permet de savoir dans quelle direction ajuster le paramètre pour réduire l’erreur. Après avoir modifié légèrement les paramètres a et b de la fonction dans le sens permettant d’améliorer la prévision, on recommence alors le processus visant à mesurer l’erreur du modèle pour réajuster ses paramètres, jusqu’à ce que l’erreur calculée devienne minime. Dans notre cas, on voit graphiquement qu’après quelques itérations, l’erreur tend vers zéro et la fonction est donc correctement ajustée aux données avec les paramètres a = 3,85 et b = 3,31. Pour des cas plus complexes, on vérifie enfin que le modèle est capable de faire des prévisions fiables pour des cas inédits qui n’étaient pas dans les données d’entraînement. On dit alors qu’il est capable de « généraliser ».
Cet exemple extrêmement simplifié et caricatural permet de saisir l’intuition mathématique derrière l’apprentissage-machine. Pour l’IA, apprendre à différencier un chat d’un chien, traduire de l’anglais vers le français ou jouer à un jeu revient simplement à optimiser la capacité de prévision d’un modèle mathématique plus ou moins complexe.
Il aide aussi à mieux comprendre pourquoi l’on parle souvent de « neurones artificiels » pour décrire l’apprentissage-machine. En effet, la méthode consistant à ajuster les paramètres progressivement rappelle la façon dont notre cerveau renforce ou affaiblit les connexions neuronales en fonction de l'expérience.
Pour un modèle comme GPT-3, le nombre de paramètres s’élève non pas à deux comme dans notre modèle linéaire mais à… 175 milliards. C’est la raison pour laquelle leur processus d’apprentissage, très complexe, est qualifié de « profond » (deep learning).
Pour aller plus loin
Maintenant que vous avez compris comment l’apprentissage-machine fonctionne, je vous conseille de découvrir sans tarder ce qui se cache « sous le capot » de la plus célèbre des IA génératives, ChatGPT.
Si vous souhaitez en savoir plus sur l’histoire de la discipline et aller plus loin dans la compréhension de l’apprentissage-machine, vous pouvez consulter l’ouvrage Quand la machine apprend de Yann Le Cun.