Article de reference

AlphaDev

AlphaDev est un système d'intelligence artificielle développé par Google DeepMind pour découvrir des algorithmes informatiques améliorés grâce à l'apprentissage par renforcement...

d'intelligence artificielle développé par Google DeepMind pour découvrir des algorithmes informatiques améliorés grâce à l'apprentissage par renforcement . AlphaDev s'appuie sur AlphaZero , un système qui a maîtrisé les jeux d' échecs , de shogi et de go par auto-apprentissage. AlphaDev applique la même approche pour trouver des algorithmes plus rapides pour des tâches fondamentales telles que le tri et le hachage .

Nature présentant AlphaDev, un projet qui a permis de découvrir de nouveaux algorithmes surpassant les méthodes de pointe pour le tri de petits éléments. Par exemple, AlphaDev a trouvé une séquence d'instructions assembleur plus rapide pour le tri de séquences de 5 éléments. En analysant les algorithmes en profondeur, AlphaDev a découvert deux séquences uniques d'instructions assembleur, appelées « AlphaDev swap » et « copy moves », qui permettent d'éviter une instruction assembleur à chaque application. Pour les algorithmes de tri variable, AlphaDev a découvert des structures d'algorithmes fondamentalement différentes. Par exemple, pour VarSort4 (tri de 4 éléments maximum), AlphaDev a découvert un algorithme plus court de 29 instructions assembleur que la méthode de référence humaine. AlphaDev a également amélioré la vitesse des algorithmes de hachage jusqu'à 30 % dans certains cas.

En janvier 2022, Google DeepMind a soumis ses nouveaux algorithmes de tri à l'organisation qui gère le C++ , l'un des langages de programmation les plus populaires au monde. Après une évaluation indépendante, les algorithmes d'AlphaDev ont été intégrés à la bibliothèque. Il s'agissait de la première modification apportée aux algorithmes de tri de la bibliothèque standard C++ depuis plus de dix ans et de la première mise à jour intégrant un algorithme découvert grâce à l'IA. En janvier 2023, DeepMind a également ajouté son algorithme de hachage pour les entrées de 9 à 16 octets à la bibliothèque open source C++ Abseil . Google estime que ces deux algorithmes sont utilisés des milliards de fois par jour.

Conception

AlphaDev repose sur AlphaZero, le modèle d'apprentissage par renforcement que DeepMind a entraîné à maîtriser des jeux comme le go et les échecs. L'innovation majeure de l'entreprise a consisté à aborder le problème de la recherche d'un algorithme plus rapide comme un jeu, puis à entraîner son IA à le gagner. AlphaDev propose un jeu solo dont l'objectif est de construire itérativement, en langage assembleur, un algorithme à la fois rapide et correct. AlphaDev utilise un réseau neuronal pour guider sa recherche de coups optimaux et apprend de sa propre expérience et de démonstrations synthétiques.

AlphaDev illustre le potentiel de l'IA pour faire progresser les fondements de l'informatique et optimiser le code selon différents critères. Google DeepMind espère qu'AlphaDev inspirera de nouvelles recherches sur l'utilisation de l'IA pour découvrir de nouveaux algorithmes et améliorer ceux existants.

Algorithme

L'algorithme d'apprentissage principal d'AlphaDev est une extension d' AlphaZero .

Intégrer du programme assembleur dans un jeu

Afin d'utiliser AlphaZero sur la programmation en assembleur, les auteurs ont créé une représentation vectorielle des programmes en assembleur basée sur Transformer , conçue pour capturer leur structure sous-jacente. Cette représentation finie permet à un réseau neuronal de jouer à la programmation en assembleur comme à un jeu avec un nombre fini de coups possibles (comme le Go).

La représentation utilise les composants suivants :

  • Un réseau Transformer, pour encoder les codes d'opération d'assemblage , est converti en codages one-hot et concaténé pour former la séquence d'entrée brute.
  • Un réseau perceptron multicouche , qui encode l'« état du processeur », c'est-à-dire les états de chaque registre et emplacement mémoire pour un ensemble d'entrées donné,

Jouer au jeu

L' état du jeu correspond au programme assembleur généré jusqu'à un point donné.

Le coup de jeu est une instruction supplémentaire ajoutée au programme assembleur actuel.

La récompense du jeu dépend de la justesse et de la latence du programme assembleur. Afin de réduire les coûts, AlphaDev ne calcule la latence mesurée que sur moins de 0,002 % des programmes générés, car elle n'est pas évaluée lors de la recherche. À la place, il utilise deux fonctions qui estiment la justesse et la latence grâce à un apprentissage supervisé basé sur les valeurs réelles mesurées.

Résultat

Hachage

AlphaDev a développé des algorithmes de hachage pour des entrées de 9 à 16 octets pour Abseil, une collection open-source d'algorithmes C++ préécrits.

Bibliothèque de tri standard LLVM

AlphaDev a découvert de nouveaux algorithmes de tri, ce qui a permis d'améliorer les performances de la bibliothèque de tri LLVM libc++ jusqu'à 70 % pour les séquences courtes et d'environ 1,7 % pour les séquences de plus de 250 000 éléments. Ces améliorations concernent les types de données uint32, uint64 et float pour les architectures de processeurs ARMv8, Intel Skylake et AMD Zen 2. L'assemblage conditionnel sans branchement et le nouveau mécanisme d'échange développés par AlphaDev ont contribué à ces gains de performance. Les algorithmes découverts ont été rétro-conçus à partir du code assembleur bas niveau vers le C++ et ont été officiellement intégrés à la bibliothèque de tri standard libc++.

Désérialisation améliorée dans protobuf

AlphaDev a appris une fonction de désérialisation VarInt optimisée dans protobuf , surpassant de près de trois fois la vitesse de référence humaine pour les entrées à valeur unique. AlphaDev a également découvert une nouvelle méthode d'affectation VarInt, combinant deux opérations en une seule instruction pour réduire la latence.

Comparaison avec l'approche logique de l'IA

Les performances d'AlphaDev ont été comparées à la superoptimisation stochastique , une approche d'IA logique. Cette dernière a été exécutée avec au moins autant de ressources et de temps d'exécution qu'AlphaDev. Les résultats ont montré qu'AlphaDev-S nécessite un temps prohibitif pour optimiser directement la latence, celle-ci devant être calculée après chaque mutation. Par conséquent, AlphaDev-S optimise un indicateur de latence, à savoir la longueur de l'algorithme, puis, à la fin de l'entraînement, tous les programmes corrects générés par AlphaDev-S sont analysés.