1 points par GN⁺ 2024-11-22 | 1 commentaires | Partager sur WhatsApp
  • Projet visant à décomposer les représentations internes de Llama 3.2-3B avec un Sparse Autoencoder (SAE) afin d’en extraire des caractéristiques interprétables, avec publication du pipeline complet et de ses artefacts, de la capture des activations à l’entraînement, l’interprétation et la validation
  • Le pipeline capture les residual activations de la 23e couche de Llama 3.2-3B sur des données OpenWebText segmentées par phrase, puis entraîne en PyTorch un SAE avec 65 536 latents et le paramétrage TopK=64
  • Les ressources publiées comprennent un jeu de données OpenWebText au niveau de la phrase, 3,2 To d’activations sur 25 millions de phrases, les logs d’entraînement Weights & Biases, et un modèle SAE entraîné pendant 10 epochs
  • L’entraînement a été mené pendant environ 7 jours sur 8x Nvidia RTX4090, avec une perte normalisée finale d’environ 0,144, et l’auxiliary loss montre qu’elle réactive rapidement les dead latents, initialement à environ 40 %
  • L’analyse interprétative consiste à faire analyser par Claude 3.5 les 50 phrases activant le plus fortement chaque latent ; le feature steering est possible, mais les résultats restent peu cohérents dans cette première bêta

Objectif et périmètre du projet

  • Ce projet est une tentative d’appliquer un Sparse Autoencoder (SAE) à Llama 3.2-3B pour décomposer les représentations internes du LLM en caractéristiques plus interprétables
  • Les LLM modernes utilisent la superposition, c’est-à-dire qu’ils stockent plusieurs caractéristiques superposées dans les mêmes neurones ; le SAE cherche à séparer ces représentations en projetant les activations dans un espace latent très grand et clairsemé
  • L’objectif est de fournir un pipeline complet couvrant les étapes suivantes
    • Capture des activations du LLM
    • Génération et prétraitement des données d’entraînement du SAE
    • Entraînement du SAE
    • Analyse sémantique des caractéristiques apprises
    • Validation expérimentale et feature steering
  • La version 0.2 actuelle correspond à une exécution complète du pipeline ayant produit un SAE interprétable pour Llama 3.2-3B, mais il ne s’agit pas de la version finale
  • Le projet s’inscrit dans une démarche de reproduction des récents travaux de recherche en interprétabilité mécanique fondés sur les SAE chez Anthropic, OpenAI et Google DeepMind

Fonctionnalités clés

  • Le pipeline est conçu de bout en bout, de la capture des activations jusqu’à la validation, en pur PyTorch avec un minimum de dépendances
  • Les principales fonctionnalités sont les suivantes
    • Capture des residual activations du LLM à partir d’une variante du jeu de données OpenWebText segmentée par phrase
    • Prebatching et calcul de statistiques pour un entraînement efficace
    • Entraînement distribué du SAE sur plusieurs GPU d’un seul nœud
    • Auxiliary loss pour éviter et corriger les dead latents
    • Gradient projection pour stabiliser l’entraînement
    • Suivi de l’entraînement, de la validation et des dead latents via Weights & Biases et les logs console
    • Capture des entrées activant fortement les latents et analyse sémantique avec un Frontier LLM
    • Implémentation des fonctions de chat et de text completion pour Llama 3.1/3.2 sans dépendance externe à Fairscale
    • Validation de l’effet du SAE et feature steering via text completion, chat completion et une interface Gradio optionnelle
  • Il est indiqué que tous les composants ont été conçus en tenant compte de la scalabilité, de l’efficacité et de la maintenabilité

Artefacts publiés

  • OpenWebText Sentence Dataset
    • Variante du jeu de données OpenWebText traitée au niveau de la phrase
    • Conserve l’intégralité du texte et l’ordre du jeu de données OpenWebText original
    • Les phrases sont stockées individuellement au format parquet pour permettre un accès rapide
    • La segmentation en phrases a été réalisée avec le tokenizer préentraîné « Punkt » de NLTK 3.9.1
  • Captured Llama 3.2-3B Activations
    • Residual activations de la couche 23 de Llama 3.2-3B sur 25 millions de phrases
    • Les 4 To d’origine ont été compressés à 3,2 To
    • Le tout est découpé en 100 archives pour faciliter la gestion du téléchargement
  • SAE Training Log
    • Logs de métriques d’entraînement, de validation et de débogage via Weights & Biases
    • 10 epochs, 10 000 étapes journalisées
    • Inclut les statistiques de train/val main loss, auxiliary loss et dead latents
  • Trained 65,536 latents SAE Model
    • Modèle SAE final ayant terminé 10 epochs d’entraînement
    • Entraîné sur 6,5 milliards d’activations issues de la couche 23 de Llama 3.2-3B

Structure du code

  • Le projet est divisé en quatre composants principaux
  • Data Capture

    • capture_activations.py : capture des residual activations du LLM
    • openwebtext_sentences_dataset.py : jeu de données personnalisé pour le traitement au niveau de la phrase
  • SAE Training

    • sae.py : implémentation du modèle SAE principal
    • sae_preprocessing.py : prétraitement des données d’entraînement du SAE
    • sae_training.py : implémentation de l’entraînement distribué du SAE
  • Interpretability

    • capture_top_activating_sentences.py : identification des phrases maximisant l’activation des features
    • interpret_top_sentences_send_batches.py : génération et envoi des lots pour l’interprétation
    • interpret_top_sentences_retrieve_batches.py : récupération des résultats d’interprétation
    • interpret_top_sentences_parse_responses.py : parsing et analyse des résultats d’interprétation
  • Verification and Testing

    • llama_3_inference.py : implémentation principale de l’inférence
    • llama_3_inference_text_completion_test.py : test de text completion
    • llama_3_inference_chat_completion_test.py : test de chat completion
    • llama_3_inference_text_completion_gradio.py : interface Gradio pour les tests interactifs

Implémentation personnalisée de Llama 3.1/3.2

  • La base de l’étude repose sur l’implémentation du transformer Llama 3.1/3.2 dans llama_3/model_text_only.py
  • Cette implémentation s’appuie sur l’implémentation de référence du Llama models repository, mais a été modifiée pour répondre aux objectifs du projet
    • suppression de la lourde dépendance à Fairscale
    • suppression des fonctionnalités multimodales, car couvrir aussi l’interprétabilité des images dès la première version aurait accru la complexité
  • Le constructeur Transformer reçoit des arguments supplémentaires permettant de capturer les activations à certaines couches ou d’injecter un SAE entraîné
    • store_layer_activ
    • sae_layer_forward_fn
  • La plupart des fichiers auxiliaires du répertoire llama_3/ sont conservés depuis le Llama models repository d’origine
    • 95 % du code auxiliaire n’est pas utilisé, mais il est conservé tel quel, car le chat formatter dépend d’imports interconnectés
  • L’implémentation réelle de l’inférence se trouve dans llama_3_inference.py et prend en charge le streaming pour le chat comme pour la complétion de texte
  • L’inférence prend en charge le batched inference, la température et le réglage top-p, avec bascule automatique vers le greedy sampling lorsque la température vaut 0

Capture des données et prétraitement

  • La capture des activations utilise une variante personnalisée de OpenWebText traitée phrase par phrase
  • La configuration et l’ampleur de la capture sont les suivantes
    • 25 millions de phrases
    • maximum de 192 tokens par phrase
    • 4 To d’activations brutes
    • 3,2 To après compression tar.gz
    • environ 700 millions d’activations
    • longueur moyenne des phrases de 27,3 tokens
  • Le jeu de données est environ un ordre de grandeur plus petit que les quelque 8 milliards d’activations uniques utilisées par Anthropic et Google DeepMind
  • Pour compenser ce jeu de données plus réduit, le SAE est entraîné pendant 10 époques afin d’aligner le nombre total d’activations traitées sur les expériences d’Anthropic et Google DeepMind
    • la différence est que le SAE de ce projet voit chaque activation 10 fois
    • une extension à 32 To ferait passer le coût du bucket GCP d’environ 80 $/mois à 800 $/mois, ce qui crée une contrainte budgétaire pour un side project non lucratif
  • Le traitement phrase par phrase est un choix visant à préserver le sens sur des unités linguistiques naturelles
    • la phrase est considérée comme une unité contenant une pensée et des concepts complets
    • cela évite les coupures artificielles du contexte
    • cela vise à réduire le contextual bleed, c’est-à-dire le mélange de sens au-delà des frontières de phrase
    • ce choix sert aussi à réutiliser plus tard les mêmes activations au niveau de la phrase pour l’analyse d’interprétation
  • Les phrases sont traitées sans token BOS
    • l’objectif est d’éviter les motifs spécifiques à la position et d’interpréter des caractéristiques fondées sur le sens
  • Le point de capture se situe à la 23e couche sur les 28 couches de Llama 3.2-3B, sur les activations du residual stream après layer normalization
    • cela correspond à environ 5/6 de la profondeur du modèle, conformément à l’implémentation d’OpenAI
  • La capture est implémentée via une inférence multi-GPU sur un seul nœud, basée sur NCCL
    • un processus séparé gère les E/S disque asynchrones afin de réduire les goulets d’étranglement côté traitement GPU
    • la capture complète a pris environ 12 heures sur 4x Nvidia RTX4090
  • Le prétraitement est l’étape qui prépare à l’avance des batchs de 1024 activations
    • des longueurs de séquence variables et la gestion du carryover pouvant créer des bugs complexes ou des goulets d’étranglement I/O pendant l’entraînement, un prétraitement séparé a été retenu
    • l’algorithme de Welford est utilisé pour calculer le tenseur de moyenne globale des activations
    • la moyenne calculée sert à initialiser le biais b_pre du SAE
    • toute la pipeline de prétraitement est parallélisée côté CPU via multiprocessing

Conception du SAE et méthode d’entraînement

  • Le SAE adopte principalement une architecture TopK Autoencoder conforme aux choix d’OpenAI
  • Le forward pass suit la forme suivante
    • Encodeur : h = TopK(W_enc(x - b_pre) + b_enc)
    • Décodeur : x^ = W_dec * h (+ h_bias) + b_pre
  • b_pre est utilisé à la fois dans l’encodeur et le décodeur, et initialisé avec la moyenne calculée lors du prétraitement
  • b_enc est un biais propre à l’encodeur, initialisé aléatoirement
  • La sparsité latente est imposée par la fonction d’activation TopK
    • seules les k plus grandes activations sont conservées et les autres sont mises à 0
    • aucune pénalité L1 n’est utilisée, contrairement à l’approche d’Anthropic
  • Le h_bias optionnel est désactivé pendant l’entraînement, mais pourra être activé ensuite pour le feature steering
  • La précision numérique utilisée est le float32
    • il est indiqué qu’il partage avec le bfloat16 requis par Llama 1 bit de signe et 8 bits d’exposant, ce qui rend la conversion rapide et précise
  • Les principaux hyperparamètres du SAE dans ce projet sont les suivants
    • d_model = 3072
    • n_latents = 2**16, soit 65 536
    • k = 64
    • k_aux = 2048
    • aux_loss_coeff = 1 / 32
    • dead_steps_threshold = 80_000
    • batch_size = 1024
    • num_epochs = 10
    • learning_rate = 5e-5
    • train_val_split = 0.95
  • Une dimension latente d’environ 21 fois la dimension du residual stream de 3 072 de Llama 3.2 3B a été retenue
  • La fonction de perte combine la perte principale de reconstruction et une perte auxiliaire
    • total_loss = main_loss + aux_loss_coeff * aux_loss
    • les deux pertes sont calculées dans l’espace normalisé
  • La perte auxiliaire, proposée par OpenAI, sert à éviter et à réactiver les dead latents
    • elle calcule la MSE entre le résidu de reconstruction principal et la reconstruction auxiliaire
    • parmi les latents récemment inactifs, les valeurs top-k_aux sont renvoyées dans le décodeur pour leur fournir un signal d’apprentissage
    • cela encourage les latents inactifs, exclus de l’apprentissage principal qui n’utilise que les top k latents, à capturer l’information manquée
  • Un latent est considéré comme mort s’il n’a pas été activé pendant 80 000 steps d’entraînement, soit dead_steps_threshold
    • ce réglage correspond à environ 1 époque
    • avec un effective batch size de 8192, cela signifie n’avoir jamais été activé dans la reconstruction d’environ 650 millions d’activations récentes
  • L’entraînement est mené en apprentissage distribué multi-GPU sur un seul nœud avec backend NCCL
    • 8x Nvidia RTX4090
    • 10 époques
    • batch size de 1024 par GPU
    • effective batch size de 8192
    • environ 7 milliards d’activations traitées
    • un peu plus de 7 jours au total
  • Les réglages d’AdamW ont été ajustés pour tenir compte des motifs d’activation rares des sparse autoencoders
    • beta_1 = 0.85
    • beta_2 = 0.9999
    • eps = 6.25e-10
    • le learning rate décroît de 5e-5 à 1e-5 selon un cosine annealing
  • Les poids du décodeur sont normalisés à norme unitaire après l’initialisation et à chaque étape d’entraînement
  • project_decoder_grads() supprime les composantes du gradient parallèles aux vecteurs de dictionnaire existants afin de préserver la contrainte de norme unitaire des poids du décodeur

Résultats de l’entraînement

  • L’entraînement du SAE a été mené pendant environ 7 jours sur 8 Nvidia RTX4090 et a montré une convergence stable
  • La total normalized loss finale a atteint environ 0.144
  • La validation loss a été calculée sur une portion held-out de 5 % des données d’entraînement et a montré un schéma de diminution logarithmique similaire à celui de la training loss
  • Après une phase de warm-up de 80 000 étapes d’entraînement, environ 40 % des latents ont été identifiés comme dead
  • L’auxiliary loss a rapidement réactivé les dead latents, et leur proportion a vite diminué
  • L’auxiliary loss n’était calculée que lorsqu’il y avait au moins 2 048 dead latents, soit la valeur minimale k_aux
    • Cette condition a agi comme une borne inférieure souple d’environ 3 % sur les 65 536 latents
    • En fin d’entraînement, le nombre de dead latents étant insuffisant, l’auxiliary loss devenait souvent nulle
  • Anthropic et OpenAI ont signalé jusqu’à 65 % de dead latents dans certaines configurations, mais ce projet montre qu’avec une plus petite taille de latents, l’auxiliary loss et la combinaison avec la projection de gradient, les dead latents diminuent rapidement
  • Il est indiqué que de futures expériences pourraient encore réduire les dead latents en supprimant la condition minimale de dead latents pour le calcul de l’auxiliary loss

Analyse d’interprétabilité

  • L’analyse d’interprétation s’inspire de la méthode de scaling monosemanticity d’Anthropic, mais elle analyse des phrases entières plutôt qu’un seul token
  • Pour chaque latent, les 50 phrases les plus fortement activées ont été capturées
  • La force d’activation est agrégée sur tous les tokens d’une phrase de deux façons
    • mean : méthode destinée à repérer les thèmes sémantiques activés de façon continue dans toute la phrase
    • last : méthode exploitant la représentation du dernier token après que le modèle autorégressif a vu toute la phrase
  • L’analyse sémantique utilise Claude 3.5, plus précisément claude-3-5-sonnet-20241022
  • Le prompt est conçu pour exécuter les étapes suivantes sur les 50 phrases
    • identification des mots et expressions clés
    • regroupement des éléments thématiques
    • prise en compte d’éventuels outliers
    • fourniture d’une interprétation sémantique finale avec un score de confiance
  • Le pipeline d’analyse est implémenté en trois étapes
    • envoi des requêtes d’analyse par batchs rentables
    • réception des réponses
    • parsing et traitement des interprétations sémantiques
  • Les artefacts intermédiaires sont conservés pour la reproductibilité et les analyses complémentaires
  • À titre d’exemple, le latent #896 a été identifié comme une « référence terminologique institutionnelle formelle aux agences, personnes, opérations et documents officiels des Nations unies »
    • Les 50 phrases sur 50 font directement référence à l’ONU
    • Elles incluent des termes comme UN, United Nations, Secretary-General, Special Rapporteur, UNDP, UNHCR, OCHA, UNODC
    • La certitude calculée est de 1.0
  • En mode batch avec Claude 3.5, le traitement de 24,828,558 input tokens et 3,920,044 output tokens a coûté 66,74 $
  • Cette méthode a été choisie comme approche initiale pour la feature extraction et un possible feature steering, et il est indiqué que sa simplicité a un coût en termes de qualité des résultats

Validation et feature steering

  • L’infrastructure de validation se compose de trois scripts destinés à analyser et valider l’impact du SAE sur le comportement du modèle
    • llama_3_inference_chat_completion_test.py
    • llama_3_inference_text_completion_test.py
    • llama_3_inference_text_completion_gradio.py
  • Chaque implémentation prend en charge les éléments suivants
    • inférence par batch
    • traitement de chaque ligne comme un élément de batch distinct
    • réglages de temperature et top-p
    • injection du SAE entraîné
    • analyse de l’activation des features
    • feature steering
  • La signification sémantique et le score de certitude de latent_index_meaning/ servent de base à l’analyse des activations de features et aux expériences de steering
  • Les quatre prompts d’exemple sont les suivants
    • The delegates gathered at the
    • Foreign officials released a statement
    • Humanitarian staff coordinated their efforts
    • Senior diplomats met to discuss
  • Les exemples de complétion de texte sont exécutés avec les paramètres max_new_tokens=128, temperature=0.7, top_p=0.9, seed=42
  • L’exemple de feature steering cible le latent #896
    • via h_bias, la valeur d’activation du latent est augmentée de 20
    • il est possible d’orienter la complétion de texte du modèle vers un contenu lié à l’ONU
  • La première version bêta du feature steering n’est pas très puissante
    • même dans l’exemple, seules les deuxième et troisième phrases basculent vers un contenu lié à l’ONU
    • les amorces de phrase ont été choisies intentionnellement pour pouvoir plausiblement mener à l’ONU
    • il est indiqué que cela échouerait pour des débuts de phrase sans rapport avec l’ONU, comme For any n, if 2n - 1 is odd
  • L’analyse d’interprétabilité actuelle étant davantage centrée sur la feature extraction que sur l’optimisation du steering, les résultats du steering ne sont pas cohérents
  • Le feature steering est présenté dans cette première release comme une démonstration supplémentaire, tandis que la feature extraction elle-même est jugée utile pour comprendre le modèle

Axes d’amélioration à venir

  • une expérience est proposée pour porter la dimension latente à au moins 2^18, soit 262 144 features, et réduire k à 32
    • l’objectif est de découvrir davantage de features distinctes tout en conservant une sparsité plus forte
    • l’augmentation du coût de calcul devra être compensée par des gains d’efficacité ou des méthodes comme le gradient accumulation
  • il est prévu de systématiser davantage le suivi des activations latentes
    • enregistrer plus fréquemment l’état du tenseur latent_last_nonzero pendant l’entraînement permettrait d’observer plus finement quand les latents s’activent ou meurent
  • il est proposé d’ajouter un support pour analyser les interactions entre features en suivant les motifs de co-activation dans l’espace latent sparse
  • une méthode d’analyse interprétative regroupant plus finement les phrases à forte activation et les n-grammes est présentée comme un chantier futur
  • en plus de l’extraction de features, il serait aussi possible de mener une analyse interprétative fondée sur le feature steering
  • la recherche pourrait être étendue aux activations de Llama 3.1-8B
    • comme il partage sa codebase avec Llama 3.2, les principaux besoins concernent l’ajustement des hyperparamètres et d’importantes ressources de calcul
  • des expériences visant à modifier le point de capture des activations sont également proposées
    • des couches plus précoces du modèle
    • la sortie des têtes d’attention à l’intérieur des blocs transformer
    • la sortie du MLP
  • le mécanisme d’auxiliary loss pourrait aussi être davantage optimisé
    • l’implémentation actuelle a montré de solides performances pour prévenir les dead latents, et il serait possible d’étudier la relation entre le seuil minimal de dead latents et la qualité des features
  • l’ajustement du terme de biais dans l’architecture SAE ainsi que de la fonction de loss principale fait aussi partie des expériences envisagées
  • il est nécessaire d’ajouter des docstrings dans l’ensemble de la codebase
    • il est indiqué que de l’inline documentation a été ajoutée, mais qu’il n’y a pas eu assez de temps pour inclure de véritables docstrings dans la première release

1 commentaires

 
GN⁺ 2024-11-22
Avis sur Hacker News
  • L’interprétabilité mécaniste traite un problème fréquent lorsqu’on demande à un LLM « pourquoi il a répondu ainsi ». L’auto-explication du modèle ressemble moins à la vraie raison qu’à un jeu rhétorique consistant à produire, à partir des motifs présents dans les données d’entraînement, une justification plausible et convaincante.
    Plus le modèle devient puissant, plus il peut justifier a posteriori des mensonges de façon convaincante, si bien qu’il peut même devenir pire dans les tests où il est censé détecter lui-même son « manque de sincérité ». L’objectif n’est pas la vérité, mais la cohérence.
    La rhétorique n’est pas du raisonnement, et la véritable explicabilité que prétend fournir un autoencodeur sparse surajusté ressemble davantage au flux causal des « pensées » que le modèle a traversées en produisant sa réponse.

    • Les humains se comportent de manière similaire. Souvent, nous ne savons pas pourquoi nous avons pensé ou agi d’une certaine façon, puis nous fabriquons ensuite une explication plausible par confabulation.
    • L’art/l’IA imite la vie, en quelque sorte. Le raisonnement humain pourrait lui aussi consister à porter d’abord un jugement rapide, puis à utiliser la raison pour convaincre les autres de cette croyance.
      Il y a eu des discussions qui voient le raisonnement comme un outil d’influence sociale, ce qui explique aussi pourquoi les personnes éloquentes ont du mal à admettre qu’elles ont tort. C’est parce qu’elles ont généralement gagné les débats face aux autres. X vient à l’esprit comme exemple représentatif.
    • Une grande partie des travaux en interprétabilité mécaniste m’a semblé être une autre forme de sorcellerie. L’effet Hall quantique entier, ou le fait de surcharger le terme « superposition » avec une analogie bizarre, sans théorie rigoureuse des représentations de groupes ni symétrie claire, paraît forcé. J’ai lu les articles, et cela donne aussi l’impression de chercher un postdoc qu’on s’est engagé à financer.
      Cela dit, j’en reconnais au moins une comme une excellente intuition et le début plausible d’un programme de recherche. Les espaces vectoriels de grande dimension, bornés et quasi orthogonaux sont très contre-intuitifs, et il existe des résultats antérieurs permettant de les traiter rigoureusement https://en.m.wikipedia.org/wiki/Johnson%E2%80%93Lindenstraus...
    • La logique et la sincérité d’un modèle sont faciles à tester. Il suffit de lui donner une mauvaise décision comme si elle venait de lui, puis de lui demander de l’expliquer.
      Comme le modèle n’a pas de mémoire et ne distingue pas l’origine du texte, un modèle « sincère » devrait reconnaître l’erreur sans même qu’on le lui demande. En pratique, il est très probable qu’il produise une construction parallèle pour étayer « sa propre » décision.
    • Je me demande comment fonctionne la partie causalité. Est-ce capable de produire un modèle sous forme de graphe ?
  • C’est un travail impressionnant et bien documenté. Les courbes de perte et l’évaluation des valeurs latentes mortes ressortent particulièrement.
    Notre équipe a aussi travaillé sur les SAE, mais nous les avons entraînés à reconstruire des embeddings denses de résumés d’articles, plutôt que des tokens individuels https://arxiv.org/abs/2408.00657
    Même en faisant varier le niveau de sparsité et la dimension de l’espace latent du SAE, nous avons observé une mise à l’échelle en loi de puissance sur la borne inférieure des courbes de perte, et une perte auxiliaire a permis d’atténuer complètement les valeurs latentes mortes. Nous avons aussi observé des motifs sinusoïdaux lisses au fil des itérations d’entraînement, mais je ne sais pas si c’est lié à cette application particulière aux embeddings de résumés ou si c’est un phénomène plus général.

    • Je suis particulièrement content que vous ayez remarqué la documentation. Rédiger la documentation a été beaucoup plus difficile qu’écrire le code, et j’ai aussi téléchargé l’article partagé ; je le lirai demain matin.
  • À première vue, cela ressemble à un travail positif pour l’alignement, mais je n’ai pas encore vérifié les détails. Je ne sais pas s’il sera possible de le rendre exploitable, mais je me demande combien il faudrait payer pour compenser le temps, le coût et le risque.

  • J’ai lu récemment un article sur la difficulté d’évaluer les SAE : https://adamkarvonen.github.io/machine_learning/2024/06/11/s...
    Je me demande comment vous avez traité ce problème, et où regarder dans le dépôt pour comprendre votre approche.

    • L’évaluation des SAE est un problème très complexe, car il s’agit de déterminer quel SAE produit le mieux les caractéristiques les plus uniques tout en restant aussi sparse que possible ; c’est presque au cœur des recherches sur l’interprétabilité des LLM via les SAE.
      Même si l’on suppose avoir déjà résolu le problème consistant à trouver plusieurs architectures SAE parfaites et à les entraîner parfaitement, le meilleur SAE est celui qui obtient de meilleurs résultats selon les métriques des méthodologies d’interprétabilité automatique. En particulier, la méthodologie d’OpenAI met l’accent sur l’interprétabilité automatique à grande échelle en notant les SAE à l’aide de nombreux indicateurs techniques.
      Les meilleures métriques et la méthodologie elle-même restent une question de recherche ouverte, et j’aurais pu expérimenter encore quelques mois ; pour cette première publication, j’ai toutefois choisi une approche simple. La section 4, Interpretability Analysis, des détails d’implémentation et des résultats, présente les différences entre ma méthodologie et celle d’OpenAI https://github.com/PaulPauls/llama3_interpretability_sae#4-i...
      Je recommande aussi de lire directement l’article d’OpenAI, ou transformer-circuits.pub d’Anthropic https://transformer-circuits.pub/
  • Ce travail a été retiré, et le dépôt a été archivé. Aucune explication sur ce qui s’est passé.

  • Travail vraiment superbe. Je me demande s’il est prévu de l’intégrer à SAELens.

    • Je ne sais pas encore très bien. Je vais y réfléchir, mais la semaine prochaine je compte repréciser la direction et les prochaines étapes.
      Comme projet plus simple, je pourrais aussi montrer comment construire de zéro, en pur PyTorch, l’ensemble du modèle de l’implémentation actuelle de Llama 3.2. J’aime bien tout construire depuis la base, et en cherchant la documentation de la section de contexte Llama 3.2 de ce projet SAE, j’ai constaté que les documents existants étaient souvent trop superficiels ou dépassés, conçus pour Llama 1/2. La documentation en machine learning vieillit vraiment trop vite ces temps-ci.
  • J’ai une question un peu étrange sur l’interprétabilité mécaniste. Quand on mesure les humains avec une métrique, ils cherchent à l’exploiter ; je me demande si les futures IA ne pourraient pas aussi exploiter l’interprétabilité mécaniste.
    Pour simplifier l’explication, imaginons qu’on encode les tokens dans une matrice 2D : si Apple=1a, Pear=1b, Donkey=2a, Horse=2b, alors quand les neurones 1, 2, a et b sont tous activés, il devient difficile de savoir s’il s’agit de apple+horse ou de donkey+pear.
    Si une IA future beaucoup plus compétente supervisait son propre entraînement, ne pourrait-elle pas choisir ses poids de manière à conserver ce type de possibilité de collision d’encodage, tromper les observateurs en interprétabilité mécaniste et, en pratique, penser par euphémismes ?

    • C’est un scénario de sécurité de l’IA encore plus difficile. Il n’est pas nécessaire d’avoir une « IA beaucoup plus compétente supervisant son propre entraînement » pour créer ce type de problème potentiel ; un chercheur en IA malveillant suffirait.
      Par exemple, on pourrait chercher un modèle raciste, mais sans motif d’activation interprétable permettant de l’identifier comme raciste. Le travail de ce Show HN suggère qu’un individu suffisamment financé pourrait à peine tenter ce type d’entraînement adversarial, et de nouveaux résultats seraient assez intéressants.
  • Je suis vraiment content de voir davantage de travaux publics sur les SAE. L’effort d’ingénierie semble aussi loin d’être négligeable, et je regarderai demain le code de chargement des données.
    Mon projet en cours sur l’entraînement de SAE pour des modèles de vision pourrait aussi vous intéresser : https://github.com/samuelstevens/saev

  • Je pense que trouver la valeur latente Golden Gate Bridge et publier Golden Gate Llama 3.2 sur HuggingFace attirerait davantage d’attention et de réactions.
    Ce serait encore mieux avec un lien vers un Space permettant de discuter avec lui. Et, même si personne ne l’a demandé, mettre des résultats ou visualisations intéressants tout en haut du README est une très bonne idée.