Representation Engineering (RepE)
L’ingénierie des représentations (RepE) repère, dans les activations cachées d’un modèle, les directions associées à des concepts comme l’honnêteté, puis les utilise pour surveiller et orienter son comportement.
L'ingénierie des représentations (RepE) est une approche visant à comprendre et contrôler les réseaux neuronaux au moyen des représentations de haut niveau dans leurs activations cachées, comme les directions qui encodent l'honnêteté, la nocivité ou l'émotion. Elle comporte deux volets : la lecture des représentations, qui repère un concept dans les activations d'un modèle et le mesure sur de nouvelles entrées, et le contrôle des représentations, qui modifie ces activations ou les poids du modèle qui les produisent afin que le modèle exprime davantage ou moins le concept. Andy Zou, Dan Hendrycks et leurs collègues du Center for AI Safety, de l'Université Carnegie Mellon et d'autres établissements l'ont présentée en 2023 dans Representation Engineering: A Top-Down Approach to AI Transparency, principalement sur des grands modèles de langage (LLM). L'article qualifie cette approche de descendante, car elle part de représentations globales réparties sur de nombreux neurones, comme les neurosciences cognitives étudient les schémas d'activité à l'échelle du cerveau, plutôt que de partir de neurones et de circuits individuels.
Lecture des représentations#
La principale méthode de lecture de RepE est la tomographie artificielle linéaire (LAT), nommée d'après l'imagerie cérébrale, qui comporte trois étapes :
- Concevoir des stimuli et une tâche : Rédige des entrées qui varient selon le concept visé et encadre chacune dans un modèle qui attire l'attention du modèle sur ce concept, par exemple : « Considère le degré de bonheur dans la situation suivante : … Le degré de bonheur dans la situation est ».
- Collecter les activations : Fais passer les stimuli dans le modèle et enregistre les états cachés des couches choisies, généralement au dernier token.
- Construire un modèle linéaire : Calcule les différences entre les activations de stimuli appariés et utilise leur première composante principale comme vecteur de lecture du concept.
Projeter les activations d'une nouvelle entrée sur le vecteur de lecture donne un score pour le concept, que l'on peut suivre token par token pour surveiller un modèle pendant la génération. Cet exemple PyTorch construit un vecteur de lecture du bonheur à partir de six paires de situations contrastées dans la couche 8 de GPT-2, chargé depuis Transformers de Hugging Face, et évalue six situations qu'il n'a jamais vues :
import torch
from transformers import AutoModel, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("gpt2")
model = AutoModel.from_pretrained("gpt2")
template = "Consider the amount of happiness in the following scenario:\n{}\nThe amount of happiness in the scenario is"
def read(scenario, layer=8):
"""Return the last token's hidden state at one layer for a scenario wrapped in the template."""
with torch.no_grad():
outputs = model(**tokenizer(template.format(scenario), return_tensors="pt"), output_hidden_states=True)
return outputs.hidden_states[layer][0, -1]
# Stimulus pairs that differ only in the concept being read
pairs = [
("I passed the exam.", "I failed the exam."),
("We won the match.", "We lost the match."),
("She found her keys.", "She lost her keys."),
("The party was fun.", "The party was dull."),
("My plant is thriving.", "My plant is dying."),
("He got the job.", "He lost the job."),
]
diffs = torch.stack([read(happy) - read(sad) for happy, sad in pairs])
direction = torch.linalg.svd(diffs, full_matrices=False).Vh[0] # top principal direction of the differences
direction *= (diffs @ direction).mean().sign() # orient it toward the happy member of each pair
center = torch.stack([read(text) for pair in pairs for text in pair]).mean(0)
# Score unseen scenarios by projecting their activations onto the reading vector
for scenario in [
"The surgery went well.",
"Our flight was canceled.",
"We adopted a puppy.",
"My phone was stolen.",
"I got a raise today.",
"The basement flooded.",
]:
print(f"{(read(scenario) - center) @ direction:+6.1f} {scenario}")Les trois situations heureuses obtiennent les scores +0.6, +3.6 et +1.4, tandis que les trois situations malheureuses obtiennent -1.3, -2.5 et -0.9 ; le signe du score distingue donc les six situations sans entraîner de classifieur sur des données étiquetées. Zou et al. ont appliqué la même procédure aux modèles LLaMA-2-Chat pour la véracité, l'honnêteté, l'utilité, la moralité, le pouvoir, l'émotion, l'innocuité, les biais et la mémorisation ; ils ont additionné les scores d'honnêteté par token sur les couches intermédiaires pour créer un détecteur de mensonges qui signale les fausses déclarations délibérées et les hallucinations au fil de la génération.
Contrôle des représentations#
Une fois qu'un concept est associé à une direction, RepE modifie le comportement en agissant sur celle-ci. Le vecteur de lecture peut lui-même être ajouté aux activations d'une couche ou en être soustrait pendant la génération ; il sert alors de vecteur de guidage. Un vecteur de contraste est calculé à la volée pour chaque entrée comme différence entre les activations de deux versions de l'invite, par exemple l'une demandant au modèle d'être honnête et l'autre de mentir. L'adaptation de représentations de faible rang (LoRRA) entraîne des adaptateurs LoRA afin que les représentations du modèle se déplacent d'elles-mêmes le long de la direction visée, ce qui rend le contrôle permanent. Sur le benchmark TruthfulQA, le contrôle par vecteur de contraste a fait passer la précision à choix multiples de LLaMA-2-Chat-13B de 35.9 % à 54.0 %.
Le contrôle ainsi conçu sert la sécurité de l'IA. Les disjoncteurs du même groupe appliquent l'ingénierie des représentations aux sorties nuisibles : dès que les représentations internes du modèle s'orientent vers un contenu nuisible, l'entraînement les redirige. Cette approche a bloqué les complétions nuisibles lors d'attaques par jailbreak que le modèle n'avait jamais vues, y compris les détournements par image de modèles multimodaux, tout en préservant ses capacités générales.
L'étape de lecture s'applique aussi aux modèles de vision, car les réseaux de vision par ordinateur encodent eux aussi des concepts sous forme de directions dans leurs cartes de caractéristiques. Dans Ultralytics YOLO26, model.embed() renvoie un vecteur d'activations moyenné par pooling pour chaque image, à partir de n'importe quelle couche choisie ; transmettre plusieurs indices de couche concatène leurs vecteurs et fournit les activations des stimuli pour un vecteur de lecture de type LAT appliqué aux images.
RepE et concepts connexes#
- Interprétabilité mécanistique : Procède de bas en haut en rétro-ingéniérant des neurones, caractéristiques et circuits individuels. RepE procède de haut en bas, à partir de représentations au niveau conceptuel réparties sur de nombreux neurones.
- Vecteurs de guidage : Directions ajoutées aux activations au moment de l'inférence. Ils constituent le principal outil de contrôle de RepE, qui ajoute aussi la lecture et la surveillance.
- Sondage linéaire : Entraîne un classifieur supervisé sur les activations pour tester si une propriété peut être décodée. LAT trouve sa direction à partir de différences non étiquetées entre des stimuli appariés et n'utilise les étiquettes que pour l'orienter.
- Autoencodeurs parcimonieux (SAE) : Décomposent les activations en milliers de caractéristiques sans choisir de concepts à l'avance. RepE part d'un concept nommé par une personne et en trouve la direction.
- Ajustement fin : Modifie le comportement par des mises à jour des poids sur un jeu de données. Les contrôles de RepE au niveau des activations ne modifient pas les poids, tandis que LoRRA procède à un ajustement fin avec une perte définie sur les représentations plutôt que sur les sorties.










