News - Projects

Quand les robots construisent des robots.

13.04.2016



Aujourd’hui, des programmes s’autoconfigurent (machine learning), des algorithmes résolvent des problèmes inconnus par sélection naturelle (algorithmes génétiques), des machines s’auto-programment (self programming), des algorithmes génèrent des algorithmes (par extraction)…
Demain, les robots remplaceront les programmeurs et construiront eux-mêmes d’autres robots.

La programmation n’est pas une science exacte, c’est du jus de matière grise, une activité émanant de l’intelligence humaine, avec son lot d’aléas, d’erreurs mais aussi de créativité. Elle nécessite un esprit logique, de la rigueur, de l’expérience, une maîtrise des technologies. Mais aussi une bonne dose d’inventivité et d’intuition pour imaginer des méthodes et des outils qui vont lui faciliter la vie, pour détecter des problématiques redondantes ou récursives, pour créer des niveaux d’abstraction, pour contourner des difficultés avec ingéniosité et élégance.

Dans un monde en pleine mutation numérique, personne n’est à l’abri de voir son activité disruptée par des plateformes (ubérisation) ou remplacée par des robots (intelligence artificielle). Ceux qui créent ces plateformes ou ces algorithmes deviennent finalement les maîtres du monde. Mais pour combien de temps ? Et si l’activité de programmation était elle aussi robotisable ? C’est en tout cas le sens de l’histoire et de nombreux faisceaux convergent vers cet inéluctable point d’inflexion.

Lorsque les machines auront une pensée autonome et pourront se programmer elles-mêmes, ce sera le point d’inflexion" déclarait Steve Wozniak, co-fondateur d’Apple.

Ce point d’inflexion pourrait bien coïncider avec ce que certains appellent la singularité, ce moment où l’intelligence des machines dépassera celle des humains.

[Source : http://www.futurebuff.com/]

Le programmeur est un fainéant

L’histoire de la programmation est une succession de niveaux d’abstraction, chaque niveau cherchant à simplifier la tâche du programmeur. Les premiers programmes informatiques étaient écrits en langage machine (en binaire : 0, 1), avec des cartes perforées (trou, pas trou). Trop fastidieux à mettre en œuvre, les programmeurs ont inventé des langages de niveaux de plus en plus élevés, depuis l’assembleur (langage de seconde génération) jusqu’aux générateurs de programmes (L4G), voire jusqu’aux solveurs par contraintes (L5G).


Les langages de 4ème génération, souvent accessibles aux non-programmeurs, se focalisent sur la résolution d’un problème particulier, par exemple la génération d’une application métier autour d’une base de données et d’une interface utilisateur. Parfois assimilés à des ateliers de génie logiciel, ils utilisent une syntaxe proche du langage naturel et font appel à des générateurs de programmes de plus bas niveau.

Les langages de 5ème génération quant à eux ont pour objectif de résoudre des problèmes plus généraux sans algorithmes, par programmation logique et en utilisant des contraintes. Encore enseignés en université ou utilisés dans des projets d’intelligence artificielle modestes, ils n’ont pas rencontré le succès voulu.

Pour autant, les langages de 4ème et 5ème génération ont pour vocation de laisser la machine s’occuper d’une grande partie de la programmation finale.

Les machines qui apprennent

L’intelligence artificielle n’est pas un domaine nouveau, Mais elle a connu une accélération notable depuis quelques années. La croissance de la puissance matérielle des GPU (processeurs de cartes graphiques utilisés par des algorithmes d’IA) combinée à la disponibilité de grandes masses de données (Big Data) ont permis l’émergence d’algorithmes d’apprentissage automatique (machine learning) et plus particulièrement d’apprentissage profond (deep learning).

Les algorithmes de machine learning sont programmés pour modifier leur comportement en fonction des données qu’on lui fournit en entrée. Ils apprennent par l’exemple. On fait par exemple ingurgiter à un algorithme une grosse quantité de photos de chat en lui indiquant « ceci est un chat ». L’algorithme va modéliser les caractéristiques d’un chat. Lorsqu’on lui présentera une photo qu’il n’a jamais vue, il sera capable de prédire si c’est un chat ou non.

Le deep learning est une évolution du learning machine qui utilise plusieurs couches de modélisation hiérarchisées pour analyser des données de plus en plus complexes. Il est utilisé par exemple dans la reconnaissance de langage, dans la détection d’obstacle pour les voitures autonomes, dans la reconnaissance de visage et de scène, etc.


Légendes automatiques : la reconnaissance de scène est capable de décrire le contexte, les personnages et les actions contenus dans une photo. Ce projet R&D de Facebook, permettrait aux non-voyants d’avoir une idée de ce qui se passe sur leur flux. [Source : Un escargot à Manhattan]

Outre l’apprentissage par l’exemple précédemment décrit, appelé apprentissage supervisé, il existe également des systèmes d’apprentissage par renforcement (on pénalise l’algorithme s’il aboutit à une mauvaise solution, on le récompense s’il fait les bons choix), utilisé dans certains jeux vidéo. Le challenge aujourd’hui est réussir l’apprentissage non supervisé dans lequel on ne lui spécifie pas la sortie (« ceci est un chat »), l’algorithme se débrouille pour le déduire.

Reproduire le fonctionnement du cerveau humain est sans doute le grand fantasme de l’intelligence artificielle. On en est encore très loin. Mais s’inspirer de son fonctionnement en apprentissage, c’est ce qu’essaie de faire DeepMind, récemment acquis par Google. Le système DeepRL combine des réseaux neuronaux profonds et de l’apprentissage renforcé pour apprendre, par exemple, à devenir tout seul un champion en jeu vidéo Atari 2600 rien qu’en observant et en essayant. De son côté, l’algorithme AlphaGo réussissait l’exploit de battre un humain au jeu de Go, une performance inimaginable il y a quelques années, tant le jeu de Go nécessite intuition et inventivité.

Dans tous les cas, on voit que les algorithmes de deep learning modifient leur comportement de manière autonome, sans intervention du programmeur.

Les algorithmes évolutionnaires

Les algorithmes évolutionnaires s’inspirent de la théorie de l’évolution des espèces. Ils optimisent leur fonctionnement par itérations de processus aléatoires en éliminant les résultats qui ne marchent pas afin de trouver la solution à un problème. C’est en quelque sorte de l’apprentissage par l’erreur. Dans la famille des algorithmes évolutionnaires, les algorithmes génétiques se focalisent sur la génération de programme.

Par exemple, ce robot à six pattes est capable de réapprendre à marcher en cas de dommage. Lorsqu’il perd l’usage d’une de ses pattes, il peut en moins d’une minute se reprogrammer pour se déplacer de nouveau comme avant, mais avec une patte en moins. Pour cela il effectue une série d’essais pour déterminer celui qui correspond le mieux à son fonctionnement normal.

 

Le programme qui écrit son propre code

Combiner l’intelligence artificielle et les algorithmes génétiques pour produire un programme capable de produire son propre code source et de s’auto-améliorer, il n’y a qu’un pas.

C’est ce que proposent les différents projets référencés sur ce site : Machines qui s’auto-programment. C’est également ce que propose cette expérimentation : Using Artificial Intelligence to Write Self-Modifying/Improving Programs.

L’auto-programmation a fait l’objet d’un certain nombre de travaux académiques. Par exemple dans le projet IDeal (Implementation of DEvelopmentAI Learning) du CNRS, l’agent auto-programmant utilise un algorithme de machine learning. D’une manière générale, un programme de machine learning acquiert des données et les utilise comme paramètres d’exécution d’un algorithme prédéfini. Ici, l’agent auto-programmant acquiert des données qui sont des séquences d’instructions et contrôle l’exécution de son propre algorithme avec ces instructions. Le programme apprend ainsi à se programmer et à s’améliorer tout seul.

Le robot qui assemble des algorithmes

Le problème avec les algorithmes auto-apprenants, c’est qu’ils sont devenus tellement complexes que personne n’est capable de comprendre comment ils fonctionnent. Ce sont des boîtes noires, « De manière générale, on ne sait pas ce que font les programmes » avouait Stéphane Grumbach, directeur de recherche à l’Inria.

Dans tous ces systèmes, il faut toujours un humain pour écrire l’algorithme initial qui va apprendre et ensuite se modifier. Nous sommes encore loin d’un robot capable de créer ex-nihilo un programme en fonction d’une problématique donnée. Finalement, on en revient toujours à l’élément de base, l’algorithme qui est un pur produit de l’intelligence humaine.

Aujourd’hui, grâce à des technologies comme CodeCase, il est possible d’extraire les algorithmes d’une application sous forme d’un méta-langage universel et de régénérer un nouveau code source. On peut imaginer par exemple qu’un robot utilisant cette technologie puisse extraire l’algorithme d’un programme existant, le sien ou celui d’un autre, puis améliorer cet algorithme en le simplifiant ou l’enrichir en intégrant d’autres algorithmes, et régénérer au final un nouveau programme plus performant. Le métier de programmeur va grandement se simplifier… ou se faire disrupter…  

L’algorithme, et plus précisément l’économie des algorithmes, est le nouveau crédo du Gartner. Dans ses prévisions, le cabinet d’analystes voit un futur post-application où des agents intelligents assembleront des algorithmes spécialisés, disponibles dans des marketplaces. En 2020, les agents intelligents faciliteront 40 % des interactions. et Microsoft centrera sa stratégie autour de Cortana plutôt que de Windows, selon Gartner.

Le robot qui construit des robots

Un futur tout à fait probable si l’on considère que les agents, avec les progrès de l’intelligence artificielle, seront sans doute capables de comprendre l’expression des besoins exprimés en langage naturel par les humains, de modéliser la résolution du problème et d’assembler les algorithmes adéquats.

D’ici à ce que ces agents identifient eux-mêmes les problèmes à résoudre et décident de générer le programme adéquat, qui sera un nouvel agent doté lui aussi d’autonomie et d’intelligence, nous ne  sommes plus loin du scénario dans lequel les robots construisent des robots.

Pour l’heure, les marketplaces d’algorithmes existantes ne fournissent que des API, c’est-à-dire des boites noires avec des points d’entrée/sortie, ou des codes sources dans des langages spécifiques, donc difficilement exploitables de manière automatique.

Et il reste encore aux humains le privilège de créer et d’inventer de nouveaux algorithmes. Mais pour combien de temps ? Lorsque l’intelligence artificielle sera en mesure de comprendre la logique et la finalité des algorithmes, par apprentissage ou par sélection naturelle, elle pourra créer ses propres algorithmes. Nous aurons alors atteint le fameux point d’inflexion.

Article rédigé par Pierre Tran.

© 2014 Codecase, all right reserved
Credits - Legal notices

X

Let's meet !