Si vous suivez régulièrement les nouvelles dans le domaine de l'informatique, vous êtes sans doute déjà tombé sur un article parlant d'un programme utilisant le principe d'apprentissage artificiel (ou machine learning en anglais) afin de résoudre efficacement une tâche qui parait compliquée voire impossible pour un ordinateur. Si ce n'est pas le cas, il suffit de taper "machine learning" dans un moteur de recherche et regarder les résultats dans la section "actualités" pour apercevoir un nombre impressionnant d'articles récents à ce propos et sur des thèmes très variés. Mais qu'est-ce que l'apprentissage artificiel ? Dans quel domaine peut-on l'appliquer ? Et surtout quels sont concrètement les algorithmes mis en place par ce type d'apprentissage ?
Principe
En général, lorsqu'on cherche à résoudre un problème avec un ordinateur, on lui demande de réaliser une suite d'opérations bien précise pour avoir une sortie voulue. Cependant, dans certains cas il est très compliqué de définir cette suite d'opérations pour un problème donné, même si nous sommes capables en tant qu'humain de le résoudre sans difficulté. Par exemple, essayez de décrire à votre machine comment reconnaître un visage sur une photo, pour l'ordinateur l'image n'est qu'un amas de pixels, et la notion de visage ne lui évoque rien du tout, cependant vous êtes capable instantanément de le faire et cela depuis tout petit. Le but de l'apprentissage artificiel n'est pas de décrire directement des opérations afin de résoudre un problème, mais plutôt de donner la capacité à l'ordinateur d'apprendre à résoudre ce problème par lui-même. Pour apprendre, il va procéder comme vous et moi lorsqu'on essaie de s'améliorer dans une discipline, c'est-à-dire en essayant, en échouant, et en adaptant sa stratégie dans le but d'être meilleur la prochaine fois.
L'apprentissage artificiel (ou parfois appelé apprentissage automatique) désigne un domaine de l'intelligence artificielle visant à reproduire un comportement spécifique à partir de données. Ce comportement est en général créé de toute pièce, et sera ensuite amélioré automatiquement lors du processus d'apprentissage.
On peut alors comprendre à quel point ce domaine est intéressant vu la complexité aujourd'hui d'automatiser certaines tâches (d'autant plus qu'on a accès rapidement à énormément de données grâce à Internet, rendant l'apprentissage toujours plus efficace). Cependant, l'apprentissage artificiel n'est pas uniquement utilisé pour automatiser une tâche complexe qu'un humain peut faire, mais il est aussi capable d'atteindre des niveaux d'efficacité bien supérieurs à ceux d'un humain (et c'est là tout l'intérêt de la discipline).
Type d'apprentissage
Il existe de nombreuses manières de faire apprendre quelque chose à votre ordinateur, et il faudra choisir la plus adaptée en fonction du but de votre intelligence artificielle. Voici quelques exemples de différentes méthodes :
Apprentissage supervisé : pour reprendre le problème de détection de visage, on pourrait fournir à notre ordinateur des centaines (ou milliers) de photos en précisant nous même où se trouve le visage. L'ordinateur va ensuite essayer de généraliser et créer un modèle à partir de l'entrée fournit afin de pouvoir deviner par la suite où se situe un visage sur une nouvelle photo. Cet apprentissage est dit supervisé car on fournit à l'ordinateur des exemples de problèmes qu'il doit résoudre, mais aussi leurs solutions correspondantes afin qu'il établisse des liens entre ces derniers.
Apprentissage non supervisé : on donne cette fois ci à l'ordinateur uniquement les entrées, et on aimerait qu'il génère et regroupe automatiquement les données dans différentes classes (qu'on appelle aussi étiquette). Par exemple, vous avez une liste d'articles de journaux que vous aimeriez trier en fonction du sujet abordé dedans, l'idée serait que votre algorithme regroupe les articles discutant d'un sujet commun ensemble. L'entrée serait alors les articles, tandis que les sorties seraient les catégories auxquelles appartiennent les différents articles. Ici, notre algorithme ne reçoit pas les solutions des problèmes qu'on lui pose, mais seulement l'énoncé, et c'est à lui d'essayer de trouver une solution. Ceci peut être très utile quand nous même nous ne connaissons pas la solution, ou bien qu'on tente de trouver une nouvelle approche intéressante à laquelle on n'a pas pensé avant.
Apprentissage semi-supervisé : l'entrée contient un mélange des deux dernières méthodes, c'est-à-dire des entrées avec des sorties correspondantes et d'autres sans. L'intérêt est dans un premier temps de réduire la charge de travail sur le traitement des données lorsqu'on a des entrées colossales (attribuer une sortie à chaque entrée peut être long et fastidieux, voire nécessiter des moyens importants pour décider de la sortie). De plus, cela peut améliorer radicalement l'efficacité de l'apprentissage (grâce à un entraînement plus diversifié comprenant en général peu de sorties attribuées pour beaucoup d'entrées sans sorties correspondantes). Imaginez que vous êtes un médecin cherchant à détecter des tumeurs, il peut être très couteux de faire des analyses sur des milliers voir millions de patients pour entraîner une intelligence artificielle (sans même prendre en compte le temps nécessaire à l'opération), et donc il serait plus pratique de fournir à votre algorithme quelques études très détaillées ainsi que des analyses sans réponses afin qu'il construise un modèle de prédiction.
Apprentissage par renforcement : ce dernier diffère des autres dans le sens où il ne reçoit pas d'entrées (au sens d'exemples d'un problème), ni de sorties, mais plutôt la description d'un environnement dans lequel il peut évoluer grâce à différentes actions ayant un certain impact sur ses futures décisions. Un exemple d'apprentissage par renforcement serait un algorithme génétique, qui consiste à reproduire le comportement de la nature à travers une sélection naturelle afin de faire évoluer des agents chargés de fonctionner dans l'environnement choisi. Un exemple concret serait un jeu vidéo, ce dernier contient un environnement défini ainsi que plusieurs actions qui ont des répercussions sur notre agent. Il y a beaucoup d'exemples d'intelligence artificielle qui apprenne à jouer à un jeu vidéo, comme : Super Mario World, Flappy Bird, Pong/Tetris, 2048, ou même le jeu caché intégré dans Chrome, etc.
Problèmes à résoudre
Avec ces différents types d'apprentissages apparait plusieurs algorithmes, mais avant de comprendre comment fonctionnent ces algorithmes, cherchons à savoir ce qu'ils essaient de résoudre. Il y a plusieurs problèmes importants dans le domaine de l'apprentissage artificiel, en voici une liste non exhaustive :
Classification : on cherche à attribuer plusieurs entrées une classe bien précise (dans un apprentissage supervisé donc, car notre algorithme aura reçu un entraînement composé d'entrées et de leurs classes correspondantes), ces classes peuvent être par exemple dans le cadre d'une description d'une image : "animal", "paysage", "montagne", "forêt", etc.
Régression : les valeurs obtenues dans un problème de régression sont des valeurs numériques, par exemple l'estimation du prix d'un appartement en fonction de différents critères comme sa taille, son emplacement géographique, le nombre de pièces, son ancienneté, etc. Là aussi, ce problème se pose dans un apprentissage supervisé.
Partitionnement (ou clustering en anglais) : on veut que l'algorithme sépare les entrées en différents groupes distincts (appelés cluster en anglais), mais c'est à l'algorithme de décider des groupes à attribuer aux entrées. Ceci est donc un problème dans le domaine de l'apprentissage non supervisé.
L'apprentissage artificiel utilise les mathématiques afin de résoudre ces problèmes, par exemple un exercice de classification pourrait être représenté graphiquement par la séparation efficace (grâce à une ligne, courbe, etc.) de deux ensembles distincts :
Les deux paramètres de l'entrée sont l'axe x et l'axe y, et les sorties sont les classes correspondantes (rond ou croix).
Dans un problème de régression, on cherchera par exemple à généraliser l'entrée (l'axe x dans notre cas) à l'aide d'une fonction, ici elle est linéaire, mais on peut trouver des fonctions polynomiales complexes pour créer des modèles plus sophistiqués :
Ce modèle nous permettra de générer une sortie (l'axe y) sur de nouveaux paramètres, en utilisant la fonction calculée (ici elle sera donc de la forme \(y = ax + b\)).
Enfin, un exemple de partitionnement serait de regrouper des points entre eux, et de les différencier en groupe, comme ici avec trois différents clusters (rouge, bleu, et vert) :
Domaine d'application
L'apprentissage artificiel est présent partout :
Médecine : afin de faire des diagnostics, un ordinateur peut être un atout majeur car il a accès à des milliers d'exemples de patients et peut ainsi effectuer un diagnostic automatiquement et relativement précis sur le type de maladie, son avancement, etc. (ex : Watson une intelligence artificielle développée par IBM qui a des utilisations multiples, et notamment dans la médecine).
Moteur de recherche : la plupart des moteurs de recherches modernes utilisent des algorithmes de machine learning autant pour comprendre la requête de l'utilisateur, que pour la chercher ou encore trier les résultats en fonction de la pertinence.
Communication : la reconnaissance vocale, ou la compréhension d'un message écrit sont des problèmes extrêmement complexes à résoudre, et pourtant grâce à l'apprentissage artificiel, on arrive parfois à des résultats assez impressionnant de précision hors normes. Hound avait fait beaucoup de bruit en 2015 grâce à une vidéo qui démontrait une efficacité incroyable comparée à ses autres concurrents (Siri, Google Now, Cortana, etc.).
Traitement d'images : que ce soit pour reconnaître un visage, ou décrire une image, l'apprentissage artificiel est souvent indispensable vu la complexité de la tâche. Facebook a par exemple un algorithme terriblement efficace de reconnaissance de visage (DeepFace), grâce au nombre colossal de photos envoyées sur la plateforme en ligne (servant alors d'exemple et d'entraînement à l'algorithme). Ce dernier est tellement puissant qu'il est même capable de vous reconnaître lorsque vous ne regardez pas la caméra, quand vous avez le visage partiellement couvert, ou bien encore quand vous êtes de dos. Google a aussi développé un programme capable de faire une description très précise d'une image ce qui est assez bluffant pour un ordinateur vu la complexité de certaines images.
Internet : la plupart des réseaux sociaux (Facebook, Twitter, ...), des sites de ventes (Amazon, Ebay, ...), de divertissement (Netflix, Deezer, Spotify, ...) utilisent des algorithmes d'apprentissage artificiel pour vous faire des recommandations, des suggestions, afin de mieux comprendre vos goûts (qui est une notion trop abstraite pour être entièrement décrite et précisée à un ordinateur, d'où l'utilisation d'une intelligence artificielle).
Transport : la fameuse Google Car est une voiture totalement autonome et sans conducteur développée par Google, qui a dépassé le stade de test et roule aujourd'hui sur les routes de Californie. C'est impressionnant de voir à quel point on peut aller loin avec la technologie de l'apprentissage artificiel.
Sécurité : pour vérifier l'identité de quelqu'un, d'une transaction bancaire ou de l'authenticité d'un mail, les algorithmes de machine learning sont très utiles dans la sécurité et permettent d'identifier rapidement les fraudes éventuelles. Tous les bons clients mails sont capables de filtrer automatiquement les "spams" et tous les systèmes bancaires sont aussi équipés de ce genre de protection afin d'éviter des échanges douteux voire illicites.
La liste des exemples de tous les jours pourrait continuer longtemps, mais on retrouve aussi cette forme d'intelligence artificielle dans des applications plus surprenantes et très intéressantes :
Art : est-ce que vous pensez savoir différencier une peinture faite par un homme de celle réalisée par un ordinateur ? Faites-le test, vous pourriez être surpris de voir à quel point c'est difficile. Les ordinateurs savent assez bien imiter des artistes, que ce soit dans la peinture (avec l'exemple précèdent, ou encore DeepArt un outil permettant de copier le style d'un peintre), dans la musique (EMI), dans la littérature (écriture de livres automatique), etc. Un ordinateur peut donc imiter avec une précision incroyable un phénomène s'il est fourni assez de données.
Jeu : depuis qu'un ordinateur a battu le champion du monde d'échec en 1997, la compétition entre humain et ordinateur est rude. Le jeu de Go était l'un des derniers jeux classiques à résister à cause de son nombre quasi infini de possibilité (contrairement au jeu d'échec, où Deep Blue explorait la plupart des possibilités et choisissait simplement la "meilleure"), cependant en mars 2016, AlphaGo une intelligence artificielle développée par Google a vaincu le champion du monde grâce à plusieurs algorithmes d'apprentissage artificielle ainsi qu'un entraînement intensif de plusieurs années de recherche. Cette prouesse technique a surpris bon nombre de spécialistes dans le domaine, qui ne pensaient tout simplement pas atteindre un tel niveau d'intelligence en 2016, et espéraient que le jeu de Go résisterait plus longtemps à la machine.
Prédiction : connaître le passé est un moyen intéressant de prévoir le futur, et le super-ordinateur Nautilus a amassé des centaines de millions de différents articles datant des 30 dernières années ce qui lui a permis en 2011 de prévoir avec une précision incroyable l'arrivée du printemps Arabe, ainsi que l'endroit où se cachait Osama bin Laden.
Encore une fois, la liste peut continuer car les exemples ne manquent pas.
Conclusion
L'apprentissage artificiel est donc un domaine extrêmement vaste de l'intelligence artificielle, et qui est encore en plein développement aujourd'hui. Ce dernier est particulièrement efficace lorsqu'on cherche à résoudre un problème difficile à exprimer concrètement, et qu'on est capable de regrouper des données assez importantes dessus, afin qu'un ordinateur puisse apprendre par lui-même comment résoudre ce problème (et parfois même bien plus efficacement qu'un humain). Avec des données de plus en plus importantes et riches en informations, cette discipline ne fait que s'améliorer d'années en années, et son utilisation ne fait que s'élargir et se diversifier.
Cependant, cette forme d'intelligence ne sait pas tout faire et nécessite toujours l'aide d'un humain afin de l'améliorer, de lui fournir des données pertinentes, et l'idée d'une intelligence artificielle autonome capable d'apprendre, communiquer et prendre des décisions importantes en effraie plus d'un. Ceci a poussé à la création d'une organisation très particulière dans le but d'éviter des risques majeurs dûs à des intelligences artificielles, et cette dernière est supportée par plusieurs personnalités importantes comme Stephen Hawking, ou encore Elon Musk. Même si l'apprentissage artificiel, voire l'intelligence artificielle de manière générale, peut nous apporter énormément d'améliorations et d'innovations impensables dans la vie de tous les jours, ceci peut tout à fait apporter de grands risques et une lettre ouverte de la fondation Futur of Life dénonce l'automatisation d'armes de guerre qui marquent selon eux "une troisième révolution dans l'armement après la poudre à canon et le nucléaire". Les États-Unis notamment utilisent déjà des intelligences artificielles afin de remplacer les humains dans des programmes de drones, car les pilotes étaient souvent affectés mentalement et développaient des traumatismes les forçant à arrêter.
L'avenir de cette discipline est cependant loin d'être sombre, et beaucoup de projets ambitieux sont lancés avec des objectifs tous plus fous les uns que les autres (imitation artificielle du cerveau humain, le transhumanisme, transfert de conscience humaine dans des ordinateurs, etc.).
Vu l'omniprésence de ce domaine aujourd'hui, et dans le futur, il est important pour un programmeur d'en comprendre la base ainsi que les principaux algorithmes afin de résoudre des problèmes d'apprentissage artificiel.