La division DeepMind AI de Google a tout abordé, de StarCraft au repliement des protéines. Il n’est donc sans doute pas surprenant que ses créateurs se soient finalement tournés vers ce qui est sans aucun doute un intérêt personnel : la programmation informatique. Dans l’édition de jeudi de Science, la société décrit un système qu’elle a développé et qui produit du code en réponse à une programmation typique de celles utilisées dans les concours de programmation humaine.
Sur un défi moyen, le système d’IA pourrait marquer près de la moitié supérieure des participants. Mais il a eu un peu de mal à évoluer, étant moins susceptible de produire un programme réussi sur des problèmes où plus de code est généralement requis. Pourtant, le fait qu’il fonctionne sans avoir reçu aucune information structurelle sur les algorithmes ou les langages de programmation est un peu surprenant.
Relever le défi
Les défis de la programmation informatique sont assez simples : les gens se voient confier une tâche à compléter et à produire un code qui devrait exécuter la tâche demandée. Dans un exemple donné dans le nouvel article, les programmeurs reçoivent deux chaînes et sont invités à déterminer si la plus courte des deux pourrait être produite en substituant des retours arrière à certaines des touches nécessaires pour taper la plus grande. Les programmes soumis sont ensuite vérifiés pour voir s’ils fournissent une solution générale au problème ou s’ils échouent lorsque des exemples supplémentaires sont testés.
Étant donné suffisamment d’exemples de programmes capables de résoudre un seul problème, il serait probablement possible pour un système d’IA de déduire la structure algorithmique nécessaire pour réussir. Mais ce ne serait pas une solution générale pour résoudre tous les problèmes; une IA formée sur une classe de défi échouerait lorsqu’on lui demanderait de relever un défi sans rapport.
Pour rendre quelque chose plus généralisable, l’équipe de DeepMind l’a traité un peu comme un problème de langage. Dans une certaine mesure, la description du défi est une expression de ce que l’algorithme doit faire, tandis que le code est une expression de la même chose, juste dans un langage différent. Ainsi, l’IA en question a été conçue pour avoir deux parties : une qui a ingéré la description et l’a convertie en une représentation interne, et une seconde qui a utilisé la représentation interne pour générer du code fonctionnel.
La formation du système était également un processus en deux étapes. Dans la première étape, il a simplement été demandé au système de traiter un instantané de matériel sur GitHub, un total de plus de 700 Go de code. (De nos jours où vous pouvez mettre cela sur une clé USB, cela peut ne pas sembler beaucoup, mais rappelez-vous que le code n’est que du texte brut, vous obtenez donc beaucoup de lignes par gigaoctet.) Notez que ces données incluront également le commentaires, qui doivent utiliser un langage naturel pour expliquer ce que fait le code à proximité et doivent donc aider à la fois pour les tâches d’entrée et de sortie.
Une fois le système formé, il est passé par une période de réglage. DeepMind a mis en place ses propres concours de programmation, puis a introduit les résultats dans le système : description du problème, code de travail, code défaillant et cas de test utilisés pour le vérifier.
Des approches similaires avaient été essayées auparavant, mais DeepMind indique qu’il a simplement pu consacrer plus de ressources à la formation. « Un facteur clé de la performance d’AlphaCode », indique le document, « est venu de la mise à l’échelle du nombre d’échantillons de modèles à des ordres de grandeur supérieurs aux travaux précédents ».