OpenAI dévoile des transformers ultra-sparse et leurs circuits interprétables
OpenAI publie un modèle GPT-2 à poids ultra-sparse entraîné sur du code Python, avec des circuits neuronaux interprétables et un outil open source pour explorer ces mécanismes.
En 2024, l'équipe d'OpenAI a mis à disposition sur Hugging Face et GitHub un modèle baptisé openai/circuit-sparsity, accompagné d'un toolkit dédié. Ce modèle GPT-2 de 0,4 milliard de paramètres est entraîné avec une technique innovante de sparsité des poids, imposée durant l'optimisation, et non en post-traitement. Cette avancée permet d'obtenir des circuits neuronaux compacts et interprétables, notamment pour des tâches de prédiction de tokens en Python, offrant un éclairage inédit sur le fonctionnement interne des transformers.
Transformer à poids ultra-sparse : principe et entraînement
Le modèle est un transformeur de type GPT-2, entraîné sur du code Python. La sparsité n'est pas ajoutée après coup, mais intégrée dès la phase d'optimisation. Après chaque étape AdamW, seuls les poids de plus grande magnitude sont conservés, les autres étant mis à zéro, avec une fraction constante de poids non nuls dans chaque matrice, y compris les embeddings. Les modèles les plus sparsifiés ne conservent qu'environ 1 poids sur 1000. Par ailleurs, une sparsité d'activation modérée est appliquée, avec environ 25 % des activations non nulles, couvrant les lectures et écritures résiduelles, les canaux d'attention et les neurones MLP.
La sparsité est progressivement augmentée durant l'entraînement, partant d'un modèle dense vers la cible finale. Cette méthode permet d'explorer l'équilibre entre taille du modèle, sparsité et capacité d'interprétation. Les circuits extraits des modèles sparsifiés sont environ 16 fois plus petits que ceux issus de modèles denses pour une même perte de pré-entraînement.
Circuits neuronaux interprétables : définition et exemples
Les circuits sont définis au niveau granulaire des neurones, canaux d'attention et canaux résiduels. Chaque arête correspond à un poids non nul reliant deux nœuds. La taille d'un circuit est mesurée par la moyenne géométrique du nombre d'arêtes sur plusieurs tâches.
Pour sonder ces circuits, l'équipe a conçu 20 tâches binaires simples de prédiction du token suivant en Python, telles que la fermeture correcte d'une chaîne par guillemet simple ou double, le comptage de crochets selon la profondeur de liste, ou la distinction entre un ensemble et une chaîne de caractères.
Par exemple, la tâche single_double_quote utilise un circuit de 12 nœuds et 9 arêtes. Deux neurones spécialisés détectent la présence d'un guillemet et classifient son type, puis une tête d'attention copie cette information pour fermer correctement la chaîne. Pour bracket_counting, le modèle calcule la profondeur de liste en agrégeant des détecteurs de crochets via des canaux résiduels, activant la fermeture adaptée selon la profondeur.
Un autre circuit suit le type d'une variable nommée current, permettant de choisir entre des opérations spécifiques selon que la variable est un ensemble ou une chaîne.
Bridges : relier modèles sparsifiés et denses
Une innovation majeure est l'introduction de "bridges", des paires encodeur-décodeur qui traduisent les activations entre modèles sparsifiés et denses. Ces ponts permettent d'effectuer des interventions sur les circuits interprétables dans le modèle sparse, puis de transférer ces modifications au modèle dense, facilitant l'étude des mécanismes internes des transformers à grande échelle.
Open source et perspectives
Le modèle openai/circuit-sparsity est disponible sous licence Apache 2.0 sur Hugging Face, accompagné du code complet sur GitHub, incluant les définitions des tâches, les checkpoints et une interface de visualisation des circuits. Cette publication ouvre la voie à une meilleure compréhension des réseaux de neurones profonds et à des modèles plus efficaces et transparents.