banner
Centre d'Information
À mesure que l'industrie évolue, nous nous engageons à garder une longueur d'avance grâce à nos techniques de qualité.

L'IA de Deepmind apprend l'art du codage

Oct 05, 2023

Grégory Barbier

Dans le domaine de l'informatique, il n'y a peut-être pas de tâche plus fondamentale que de trier. Bulle, tas, fusionner—faites votre choix. Les méthodes de réorganisation des données à l'intérieur d'un ordinateur ont été théorisées à mort, ont servi d'exercices pratiques à des millions de novices et ont été optimisées pendant des décennies par des développeurs experts. Tapez une fonction sort() dans n'importe quel langage de programmation, et c'est un code sur lequel vous pouvez compter. Ne le touchez pas. Cela fonctionne déjà très bien.

Mais l'année dernière, un système d'intelligence artificielle développé par les ingénieurs de Deepmind de Google s'est amélioré juste assez pour avoir de l'importance. Le système, que Deepmind appelle AlphaDev, a été chargé de proposer une nouvelle façon de trier les séquences courtes en nombres en C++, le langage de codage populaire. Cela signifiait passer sous le capot et demander à l'IA de créer de nouveaux algorithmes dans le code d'assemblage, les instructions qui comblent le fossé entre les langages de programmation comme C++ et le matériel informatique. Lorsqu'un développeur C++ demande à l'ordinateur de "trier", ces commandes sont converties en code lisible par machine qui indique exactement à la mémoire et au processeur de l'ordinateur ce qu'il faut faire : où déplacer les données et comment les modifier. C'est là que les morceaux rencontrent le métal.

L'expérience a fonctionné. Depuis avril de l'année dernière, C++ fonctionne légèrement plus rapidement, grâce à un nouvel ensemble d'algorithmes de tri concoctés par l'IA. Mais selon les ingénieurs d'AlphaDev, qui ont décrit le travail aujourd'hui dans Nature, ce n'est qu'une première étape. "Nous voulons optimiser l'ensemble de la pile informatique", explique Daniel Mankowitz, chercheur à Deepmind qui a dirigé le projet de tri. Mankowitz dit qu'AlphaDev a déjà amélioré les algorithmes non seulement pour le tri, mais aussi pour d'autres tâches de base comme le hachage.

"Je pense que ce travail est incroyablement excitant", déclare Armando Solar-Lezama, expert en synthèse de programmes au MIT, qui n'a pas participé à la recherche. Il est utile que l'IA propose un nouvel algorithme de tri ; c'est beaucoup plus important de construire une IA capable d'apprendre à écrire du code de pointe pour une variété de tâches, dit-il. Cela signifie qu'AlphaDev a commencé à apprendre quelque chose de plus fondamental sur l'art du codage lui-même.

Cela vient avec des contraintes importantes, bien sûr. "Ce sont de tout petits programmes", ajoute-t-il, ne totalisant pas plus de quelques dizaines d'instructions en code assembleur. Mais ces petits programmes représentent souvent de gros goulots d'étranglement pour les performances de l'ordinateur, ayant été optimisés autant que les gens peuvent les pousser. Dans l'ensemble, les nouveaux algorithmes de tri C++ d'AlphaDev sont 1,7 % plus efficaces que les méthodes précédentes lors du tri de longues séquences de nombres, et jusqu'à 70 % plus rapides pour les séquences de cinq éléments. À grande échelle, ces améliorations s'additionnent, dit Mankowitz. Depuis que le code écrit par l'IA a été soumis à Libc++, une importante bibliothèque open source pour C++, il estime que les algorithmes ont été utilisés des milliards de fois par jour.

Ces améliorations sont dues à une technique appelée apprentissage par renforcement, qui est la même approche que celle utilisée pour aider l'IA de Deepmind à maîtriser des jeux comme les échecs et le go. Ce type d'IA apprend en faisant. Cela fonctionne en traitant une tâche donnée - comme écrire un programme d'assemblage - comme un jeu, dans lequel l'IA reçoit des récompenses pour avoir fait des mouvements intelligents qui augmentent l'efficacité du programme. Au fil du temps, le système fonctionne pour maximiser cette récompense, ce qui se traduit par une stratégie Go gagnante ou un programme d'assemblage plus rapide. Cela diffère du type d'IA que l'on trouve dans les grands modèles de langage comme GPT-4, qui s'appuient sur d'énormes quantités de données pour apprendre à écrire des mots ou à coder. C'est idéal pour produire une écriture qui reflète le ton d'Internet ou produire des segments de code communs. Mais ce n'est pas si bon pour produire de nouvelles solutions de pointe aux défis de codage que l'IA n'a jamais vus auparavant.

Jérémy Blanc

Kate Knibbs

Jérémy Blanc

Gédéon Lichfield

Comme jouer aux échecs ou au go, écrire du code d'assemblage est une tâche délicate et ouverte, avec de nombreux mouvements potentiels et de nombreuses façons de se tromper. Les langages de programmation modernes comme C++ ou Python masquent le détail du déplacement des données avec de courtes commandes qui reflètent le langage humain. Dans les années 1950, lorsque ces langages "de haut niveau" ont fait leurs débuts, certains pensaient que le problème de la programmation avait été fondamentalement résolu. Jusque-là, la programmation consistait essentiellement à bricoler dans l'assemblage, à tel point que Fortran, l'un des premiers langages de haut niveau, a été initialement commercialisé sous le nom de "système de codage automatique Fortran", car ses commandes étaient toujours traduites en code assembleur fonctionnel. "Fortran allait écrire du code mieux que les humains ne le pouvaient et sans bugs", explique Solar-Lezama. "Aujourd'hui, cela semble risible. Mais c'était vrai."

L'amélioration d'un langage comme C++ ou Fortran nécessite encore souvent de bricoler l'assembly sous-jacent, en trouvant des moyens de le faire fonctionner plus rapidement, généralement en supprimant des étapes superflues. Parce que l'assemblage n'a pas les structures formelles et les abstractions de la programmation de niveau supérieur, et parce qu'une seule erreur peut entraîner la rupture de l'algorithme, le jeu auquel l'IA doit jouer n'est pas amusant. "Il échouera encore et encore et encore", explique Solar-Lezama.

L'innovation d'AlphaDev est qu'il améliore la façon dont la structure d'un programme d'assemblage de travail est représentée dans le code AI. Cela permet à son système de récompense de mieux réduire les possibilités. L'IA s'améliore, plus vite.

À un niveau élevé, la solution de tri de l'IA semble familière. Il n'y a qu'un nombre limité de façons de mettre une poignée de nombres dans l'ordre croissant. Il parvient à éliminer quelques instructions de la séquence d'assemblage en utilisant des instructions non conventionnelles, celles qu'un codeur humain ne penserait probablement pas à essayer. Mankowitz compare ces actions au coup 37, la tristement célèbre main jouée par AlphaGo lors de son match d'exhibition de 2016 contre le grand maître Lee Sedol. Le mouvement était si étrange que les observateurs ont d'abord pensé que l'ordinateur avait bâclé le match. Mais cela a fini par être essentiel à la victoire de l'ordinateur, et cela a depuis modifié la façon dont le jeu est joué.

Le code résultant semble donc un peu étrange, en partie parce qu'il doit forcer l'ordinateur à déplacer les données de manière très spécifique. "Ce n'est certainement pas une manière économique d'écrire le code", déclare Nikolas Klauser, un contributeur de Libc++ qui a examiné la proposition de Deepmind au printemps dernier. Cela a augmenté les enjeux pour mettre le code en production, dit-il. Il est risqué de mettre à jour des algorithmes fondamentaux comme le tri qui ont très bien fonctionné pendant des années pour ce qui pourrait n'être qu'une petite amélioration de l'efficacité. Mais au final, tout s'est vérifié. La mise à jour du code a été effectuée.

Mankowitz reconnaît que les programmes actuels qu'AlphaDev peut produire sont petits et qu'il faudra probablement de nouvelles percées dans le développement de l'IA pour générer des algorithmes plus grands et plus complexes qui battent les meilleures tentatives humaines. Mais pour des experts en génération de code comme Solar-Lezama, la recherche est une étape importante vers un codage plus généralisé de l'IA, qui le fait réfléchir sur Fortran et son système de "programmation automatisée". Cela a-t-il mis les programmeurs en faillite ? Pas du tout. Cela a-t-il changé ce que signifiait être un codeur ? Complètement.