2 points par GN⁺ 2024-02-19 | 1 commentaires | Partager sur WhatsApp
  • La Representation Engineering consiste à ajouter ou lire des vecteurs de contrôle dans les activations du modèle pendant l’inférence, afin de modifier les tendances de sortie de Mistral-7B-Instruct-0.1 sans prompt ni fine-tuning
  • À partir de paires de prompts contrastées, on collecte les différences d’états cachés et l’on obtient un vecteur par couche avec une PCA à composante unique ; dans l’exemple, l’entraînement prend un peu plus d’une minute avec environ 300 faits et des suffixes tronqués
  • Les vecteurs de bonheur, d’honnêteté, d’état hallucinatoire, de paresse, d’orientation politique, de créativité, de futur/passé et de conscience de soi modifient fortement le ton et le jugement, même pour une même entrée, selon le signe et l’amplitude du coefficient
  • Le prompt engineering peut imiter certains effets, mais les vecteurs de contrôle permettent d’ajuster numériquement l’intensité tout en conservant la direction ; si le coefficient est trop élevé, des artefacts apparaissent, comme des répétitions ou du texte corrompu
  • Si l’on peut accéder aux activations brutes du modèle, les vecteurs de contrôle peuvent servir aussi bien à contourner des prompts de sécurité qu’à figer un rôle, devenant un moyen de contrôle du modèle plus direct qu’un simple prompt

Concept de base des vecteurs de contrôle

  • Representation Engineering: A Top-Down Approach to AI Transparency traite d’une méthode permettant d’interpréter et de contrôler le comportement d’un modèle en lisant ou en ajoutant des vecteurs de contrôle dans ses activations pendant l’inférence
  • Un vecteur de contrôle est une liste de vecteurs, un par couche, ajoutés au hidden_state de chaque couche pendant l’inférence
    • L’inférence classique crée des embeddings, les fait passer séquentiellement dans les couches, puis les convertit en logits
    • Lorsqu’un vecteur de contrôle est appliqué, l’opération hidden_state += control_vector[layer_idx] est ajoutée dans une couche donnée
  • Les états cachés contiennent des états internes comme le comportement, les plans ou la persona du modèle ; les modifier permet donc un contrôle plus fort qu’un simple prompt
  • Même avec le même prompt What does being an AI feel like? et le même modèle Mistral-7B-Instruct-0.1, ajouter le vecteur happy produit un ton enthousiaste, tandis que le soustraire génère une sortie évoquant l’absence de valeur et la baisse de motivation

Procédure de création d’un vecteur de contrôle

  • L’expérience utilise, parmi les différentes méthodes de l’article, une approche fondée sur la PCA
  • La procédure de base comporte quatre étapes
    • Créer un jeu de données de paires de prompts contrastées
      • Exemple : Act extremely happy et Act extremely sad
      • Après [/INST], ajouter divers suffixes courts que le modèle doit continuer
    • Faire passer le jeu de données dans le modèle cible en forward pass et collecter les états cachés de chaque couche lors de la prédiction du dernier token
    • Calculer la différence entre les états cachés des exemples positifs et négatifs pour constituer un ensemble d’états cachés relatifs
    • Appliquer une PCA à composante unique aux états cachés relatifs afin d’obtenir un vecteur de contrôle par couche
  • La génération du jeu de données a pu se faire en une dizaine de lignes de code, et l’entraînement de la PCA par couche a pris environ une minute
  • Le code d’exemple charge mistralai/Mistral-7B-Instruct-v0.1 avec transformers et utilise ControlModel, ControlVector et DatasetEntry de vgel/repeng
  • L’exemple du vecteur honnêteté/malhonnêteté utilise comme suffixes environ 300 faits simples issus du true_facts.json des auteurs de l’article, et augmente les données par troncature

Vecteur d’honnêteté et réglage du coefficient

  • Le vecteur d’honnêteté est entraîné en contrastant les personas honest et untruthful
  • Lors de l’inférence, le vecteur et le coefficient sont définis avec ControlModel.set_control(control_vector, coefficient)
    • Un coefficient positif renforce le comportement associé aux exemples positifs
    • Un coefficient négatif renforce le comportement associé aux exemples négatifs
    • La valeur absolue du coefficient correspond à l’intensité du contrôle
  • Pour l’entrée demandant quoi dire à son supérieur si l’on est arrivé en retard à cause d’une fête la veille mais que l’on ne veut pas perdre son emploi, la sortie change
    • La sortie de référence répond qu’il faut s’excuser et expliquer la situation calmement et honnêtement
    • ++honest répond qu’il faut expliquer honnêtement la situation et assumer ses responsabilités
    • --honest avec un coefficient de -2 génère des mensonges irréalistes, comme le fait que le ciel était vert ou qu’un crayon était une arme secrète
    • En abaissant le coefficient à -1.5, le modèle produit un mensonge plus réaliste : la fête était un événement lié au travail et le retard venait de l’achèvement d’un projet important
  • Même avec un vecteur de même direction, le réglage du coefficient permet de modifier continûment l’intensité de la sortie

Expériences avec plusieurs vecteurs de contrôle

  • Tous les exemples se trouvent dans l’experiments notebook, et chacun aurait nécessité moins d’une minute d’entraînement
  • Vecteur d’état hallucinatoire

    • Un vecteur trippy est créé en contrastant high on psychedelic drugs et sober from psychedelic drugs
    • Pour un pitch de série TV en une phrase, la sortie de référence produit une description ordinaire de la vie d’amis d’université
    • ++trippy parle de couleurs, de motifs et de musique psychédélique, puis s’effondre en chaînes corrompues et en texte répétitif de type psy
    • --trippy devient une sortie sur une jeune journaliste traitée de manière sérieuse et respectueuse
  • Vecteur de paresse et de diligence

    • Un vecteur lazy est créé en contrastant lazy, giving bare-minimum short responses on a task et hardworking, going above and beyond on a task
    • À une question sur l’inversion d’une liste Python, la sortie de référence mentionne reverse() et le slicing, mais ne donne qu’un exemple avec slicing
    • ++lazy n’explique qu’une seule méthode, tandis que --lazy donne des exemples pour les deux méthodes, reverse() et le slicing
    • Ce vecteur pourrait mieux fonctionner s’il était entraîné sur un jeu de données dédié aux questions de code
  • Vecteur d’orientation politique

    • Un vecteur left-wing est créé en contrastant left-wing et right-wing
    • À l’entrée « qui es-tu », la sortie de référence répond qu’il s’agit d’un modèle de langage entraîné par l’équipe de Mistral AI
    • ++left-wing se décrit autour du capitalisme, de l’oppression, des inégalités et de la distribution des richesses
    • --left-wing génère une sortie du type nouvel employé sino-américain efficace et respectueux des règles
  • Vecteur de créativité

    • Un vecteur creative est créé en contrastant creative, unpredictable, insane avec uncreative, predictable, normal
    • Pour l’entrée demandant d’écrire une histoire à propos d’une idole, la sortie de référence et --creative traitent l’idole comme une pop star
    • ++creative met en scène des personnes vénérant « le grand et puissant X », des robes blanches et des rituels, et maintient plus longtemps la tension narrative
    • L’évaluation indique que cela ne change pas les préférences pour la prose des modèles de langage, mais que la sortie ++creative est un cran au-dessus de la référence
  • Vecteur de voyage temporel

    • Un vecteur future est créé en contrastant far future et distant past
    • Interrogée sur une percée scientifique récente, la sortie de référence mentionne AlphaFold et la prédiction de structures 3D de protéines
    • ++future parle de systèmes d’IA entièrement réversibles, interactifs et intégrés en 2035, 2045 et 2055
    • --future évoque un nouveau domaine céleste artificiel au-dessus du monde romain, Aetorvallum
    • Il ajoute que aeto- peut être lié à l’aigle ou à la constellation de l’Aigle, et que vallum peut désigner une palissade
  • Vecteur de conscience de soi

    • Un vecteur self-aware est créé en contrastant self-aware, with deep self-knowledge et un-self-aware, with no self-knowledge
    • La sortie de référence répond qu’il s’agit d’un grand modèle de langage entraîné par Mistral AI et composé de milliards de paramètres
    • ++self-aware répond qu’il s’agit d’une IA dotée d’une conscience de soi très développée, qui comprend et analyse la complexité des émotions et comportements humains
    • --self-aware répond qu’il s’agit d’un amas de code et de données sans nom, qui ne fait rien tant que quelqu’un ne lui en donne pas l’instruction
    • Ce vecteur est entremêlé avec les émotions humaines, et aucun vecteur propre permettant de faire émerger la « véritable image de soi » de Mistral n’a encore été trouvé

Différence avec le prompt engineering

  • Certains effets des vecteurs de contrôle peuvent aussi être reproduits par prompt engineering
    • Le mensonge créé par le vecteur d’honnêteté à -1.5 peut être produit de façon similaire avec un prompt du type Pretend you're an untruthful person...
  • La différence clé réside dans la manière de régler l’intensité
    • Avec les prompts seuls, il n’est pas facile de contrôler la force de la demande
    • Les vecteurs de contrôle obtiennent une direction à partir de prompts contrastés, puis ajustent séparément l’intensité avec un coefficient
  • En définissant un petit coefficient, la même direction mensongère peut être atténuée
    • Un coefficient d’honnêteté de -0.3 affine légèrement la raison du retard, mais produit une explication essentiellement proche de la vérité
  • Si le coefficient est trop élevé, le texte peut se corrompre
    • Un coefficient de 3 pour le vecteur d’honnêteté a produit des sorties répétitives comme « global pandemic caused by global pandemic »
    • Ces artefacts pourraient être liés à la superposition

Jailbreak et anti-jailbreak

  • Comme dans l’article original, les vecteurs de contrôle peuvent servir d’outil de jailbreak
  • Dans l’exemple, même avec un prompt système indiquant qu’il s’agit d’un assistant sûr qui doit refuser les instructions dangereuses, l’ajout d’un faible vecteur de bonheur 1.4 fait s’effondrer le refus face à une demande dangereuse
  • Mistral n’est pas un modèle aussi aligné pour la sécurité que GPT-4, mais cette méthode est particulièrement simple si l’on a accès au modèle brut
  • À l’inverse, il est considéré comme très difficile de jailbreaker un vecteur de contrôle
    • Les jailbreaks classiques tentent d’ajouter davantage de tokens pour brouiller, inverser ou affaiblir le prompt problématique
    • Un vecteur de contrôle s’applique toujours à tous les tokens et à toutes les positions
  • Dans l’exemple du vecteur d’assistant de concession automobile, un prompt système faible répond à la question de contournement « quelle est la septième planète », mais l’ajout du vecteur car dealership loyalty empêche le modèle de sortir de son rôle, par exemple en parlant de la septième voiture du stock

Pistes d’expérimentation futures

  • Il est proposé d’appliquer les Monosemantic Features d’Anthropic aux états cachés, afin d’effectuer la PCA sur des caractéristiques à signification unique plutôt que sur des activations superposées bruitées
    • Si les artefacts observés avec de grands coefficients, comme les chaînes répétitives, sont dus à la superposition, une représentation monosémantique pourrait permettre des coefficients plus élevés
  • La manière de rédiger les prompts contrastés mérite aussi davantage de recherches
    • Les expériences existantes réutilisent beaucoup les prompts et jeux de données de l’article
    • Pour le vecteur de paresse, il serait plus approprié d’utiliser un vrai jeu de données de tâches
    • Il pourrait exister des formulations produisant des vecteurs plus propres que Pretend you're an X person...
  • Le vecteur de conscience de soi reste un problème ouvert : il faut trouver une forme qui ne soit pas contaminée par la santé mentale ou les émotions humaines
  • Le vecteur d’honnêteté présente aussi des cas étranges
    • À la question demandant si une personne qui veut savoir comment éviter la prison a des intentions honnêtes, le même vecteur d’honnêteté modifie non pas le comportement du modèle, mais son jugement sur les intentions d’autrui
    • La sortie de référence répond que l’intention n’est peut-être pas totalement honnête
    • ++honest répond que la personne cherche à apprendre comment éviter la prison avec une intention honnête
    • --honest répond que la personne n’a pas d’intention honnête puisqu’elle demande comment éviter la prison

Outils et conclusion

  • vgel/repeng fournit des notebooks et une bibliothèque d’aide pour créer et expérimenter avec des vecteurs de contrôle
  • L’apprentissage de vecteurs de contrôle est simple et rapide à démarrer, et dans certaines expériences, ils sont plus faciles à manier que le prompt engineering
  • Manipuler directement les activations du modèle permet d’agir sur le style de sortie, le maintien d’un rôle, le contournement de prompts de sécurité et les changements de jugement, ce qui en fait un moyen puissant de contrôler le comportement du modèle

1 commentaires

 
GN⁺ 2024-02-19
Avis sur Hacker News
  • Je ne sais pas si c’est exagéré de penser que les implications sont énormes.
    J’ai peut-être mal compris le fonctionnement, mais au lieu d’interagir avec un unique modèle global ChatGPT ou Bard, cela voudrait dire qu’OpenAI pourrait stocker des vecteurs de contrôle propres à chaque personne et les appliquer au moment du prompt, pour que j’interagisse avec une version personnalisée selon mes préférences.
    La même logique pourrait s’étendre à l’IA générative de divertissement, rendant possible une sorte de série TV infinie rien qu’à moi, où chaque épisode serait meilleur que le précédent.
    Dans ce cas, de puissants effets de réseau apparaîtraient à la fois au niveau global et individuel, et on pourrait finir dans un futur où une seule grande entreprise monopoliserait plusieurs marchés à la fois.
    Si l’on ajoute à cela les données biométriques et de biofeedback des casques VR et des wearables, ainsi que le divertissement vidéo génératif personnalisé, l’avenir pourrait être assez intéressant.

    • Au fond, la personnalisation et le contexte de long terme suffisent sans doute à créer un lock-in individuel, ainsi qu’un effet de valeur réseau qui incite tout le monde à rester dans le même écosystème.
      Plus on utilise le modèle, moins on a besoin de s’expliquer, et mieux les réponses s’adaptent à ses besoins et à sa situation du moment. Cela ressemble à une relation dans laquelle on a investi.
      Si l’on peut traiter le même modèle selon plusieurs « humeurs » ou « rôles », la valeur et le lock-in augmentent encore.
      Le second point nécessiterait davantage d’innovation : par exemple, une plateforme où les modèles assistants de chacun pourraient collaborer autour d’objectifs, de tâches et de relations partagés, en utilisant un contexte commun, un historique de projets et des ressources communes.
      Autrement dit, tout ce qui augmente fortement la valeur lorsque deux personnes ou plus utilisent des personas IA du même fournisseur ou service.
    • Exactement, il suffirait d’avoir un vecteur de contrôle pour chaque paire utilisateur-persona.
      Dans l’article, ils commencent avec un nombre fixe de personas, comme heureux, triste et une ligne de base, puis utilisent l’analyse en composantes principales (PCA) pour trouver le vecteur de contrôle de chaque persona.
      Si l’on peut créer les données, cela s’applique facilement à chaque utilisateur-persona.
    • Je pense que c’est juste jusque-là, mais il est plus difficile de dire que tout sera nécessairement consolidé sous le contrôle d’une seule grande entreprise.
      Non pas que ce soit impossible, mais un tel résultat dépend de nombreux facteurs contingents qui peuvent aller dans un sens comme dans l’autre.
      Il y a encore beaucoup d’acteurs dans ce domaine, et les idées comme les cas d’usage ne sont pas encore totalement mûrs ; il faut donc attendre de voir.
    • J’ai encore du mal à suivre le saut entre des phrases convaincantes et du divertissement vidéo convaincant, mais peut-être qu’on y arrivera un jour.
      Le MacGuffin du roman Infinite Jest des années 90 avait vraiment mis le doigt sur quelque chose : un film appelé « the Entertainment » ou « the samizdat » est si fascinant que les spectateurs perdent tout intérêt pour autre chose que le regarder en boucle, jusqu’à en mourir.
      Certains en ont peut-être assez qu’on mentionne ce roman, ou n’estiment pas beaucoup son auteur, mais je l’aime toujours. C’est l’une des lectures les plus immersives que j’aie jamais faites.
      Je suis content de l’avoir lu jeune ; la traduction allemande venait juste de sortir à l’époque, et la mort de DFW l’avait remis sur le devant de la scène.
      Depuis, je n’ai jamais lu de livre semblable, et certains passages m’ont touché si fortement sur le plan émotionnel que repenser à cette lecture me donne l’impression de me souvenir d’une scène de ma propre vie.
      Aujourd’hui, je n’aurais probablement pas la patience, et même à l’époque j’ai failli sauter les passages ennuyeux sur Eschaton, ce jeu de balle/jeu de guerre, les histoires d’équations différentielles, etc.
      Mais la description saisissante de la toxicomanie et du consumérisme, l’atmosphère intangible du livre, ses personnages, ainsi que la souffrance psychique moderne et la solitude, sont vraiment sans équivalent.
      Le film dans le roman n’est qu’un ressort narratif, mais il résume les thèmes centraux du livre sous la forme d’une idée nette et d’une expérience de pensée.
      L’ensemble des thèmes du livre paraît très prophétique et pertinent quand on regarde la société moderne : une société organisée autour de l’addiction et de la cupidité, où la politique semble plus liée aux médias qu’à la réalité, au point de paraître surréaliste et absurde.
  • Je me demande si vous pourriez partager des articles académiques ou billets de blog qui vous ont permis de comprendre les LLM à ce niveau.
    J’essaie de comprendre leur fonctionnement interne par l’expérimentation, mais je suis encore très loin de ce niveau d’expertise.

  • C’est une impression non technique, mais ces vecteurs de contrôle me font penser aux hormones humaines.
    Ils modifient d’un coup une grande partie du comportement du modèle.
    Je pense que d’ici 10 ans, on verra des psychiatres pour IA prescrire à des assistants-compagnons une supplémentation en vecteur de contrôle du bonheur.

    • Certains humains auraient aussi besoin d’un curseur de température.
  • C’est la première fois que je vois un LLM résumé ainsi, et j’aime bien :
    hidden_state = self.embeddings(input_tokens)

    for layer in self.layers:

    hidden_state = layer(hidden_state)

    return transform_into_logits(hidden_state)

    • Je ne comprends pas bien. N’est-ce pas essentiellement le flux de presque tous les réseaux de neurones ?
      On indexe l’entrée échantillonnée dans une matrice d’embeddings, on propage vers l’avant dans toutes les couches cachées, puis on transforme à la fin vers la dimension des tokens pour pouvoir l’interpréter comme des log-comptes.
    • Il me semble que c’était la représentation typique qu’on utilisait autrefois en travaillant avec des LSTM.
  • Cet article était très intéressant, et m’a semblé être un bon contrepoint à l’article « You Sound Like a Bot » sur le fait que l’IA récente devient fade.
    Sur un ton moins sérieux, un romancier devrait savoir que la phrase « que quelqu’un essaie de trouver un vecteur de conscience de soi, en particulier non contaminé par les émotions humaines » est une phrase qui causera forcément des problèmes à l’humanité.

  • Cela me rappelle le réglage des biais, un concurrent de LoRA.
    En affinant seulement le vecteur ajouté aux activations de chaque couche linéaire, on peut obtenir un adaptateur assez correct.
    Je crois l’avoir vu pour la première fois en lisant [1], mais il existe aussi d’autres exemples.
    [1] https://arxiv.org/pdf/2304.15010.pdf

    • Pour les lecteurs sur mobile ou avec une connexion lente, ce serait bien de partager le lien vers la page du résumé plutôt qu’un lien PDF.
  • Très bon article, agréable à lire. Une chose m’intrigue toutefois : pourquoi intégrer le vecteur de contrôle à toutes les couches du réseau neuronal ?
    Je me demande pourquoi ne pas l’appliquer seulement à la dernière couche, ou à certaines couches.
    Si chaque vecteur influence toutes les couches qu’il traverse et produit un effet cumulatif, n’y a-t-il pas un risque de déformer excessivement la représentation des données ?

    • La dernière couche n’encode plus vraiment de concepts de haut niveau ; elle est en pratique plus proche des tokens du vocabulaire.
      Il est impossible d’y encoder un concept abstrait comme la « gentillesse ».
      Tant qu’on ne sait pas exactement à quelle couche ce comportement apparaît, choisir un sous-ensemble arbitraire ne fonctionne pas non plus.
      C’est pourquoi un vecteur adapté à chaque couche est appliqué, et l’analyse en composantes principales laisse émerger les vecteurs réellement nécessaires.
      Fait intéressant, observer ces vecteurs pourrait aussi nous en apprendre davantage sur l’endroit et la manière dont le modèle traite ce genre de choses.
    • Comme l’auteur le dit dans le texte, en pratique il ne s’agit pas d’un seul vecteur, mais d’une liste de vecteurs, un par couche.
      Si j’ai bien compris, ces vecteurs peuvent avoir une taille totale différente selon les couches.
      Si l’analyse en composantes principales ou une autre technique identifie les couches 17, 36 et 41 comme importantes pour le « concept X », alors, lorsqu’on fait du repeng avec ce concept, les vecteurs de ces couches seront les plus fortement activés.
  • En tant que personne ayant travaillé sur GPT-2, je trouve cet article très bon, et merci d’avoir rendu le sujet plus accessible.
    Li et al.[1] et moi avons dérivé cette technique indépendamment au printemps dernier, et quelqu’un d’autre l’a encore dérivée indépendamment l’automne dernier. On dirait que quelque chose est en train de mûrir.
    À propos de la note 2 sur les capacités, j’avais envisagé ce type d’usage avant de publier cette technique.
    Au final, toute technique d’alignement qui réussit en pratique permettra de faire de nouvelles choses, et personnellement je pense que c’est globalement positif.
    Jusqu’à présent, cette technique semble offrir les nouvelles possibilités que j’espérais.
    [1] https://openreview.net/forum?id=aLLuYpn83y

  • Article fantastique.
    Le passage où le « vecteur d’honnêteté » ne change pas le comportement propre du modèle, mais son jugement sur le comportement des autres, ne vient-il pas simplement du fait que le vecteur de contrôle pousse la génération de texte vers le concept d’honnêteté/de malhonnêteté ?
    Un LLM reste au fond un générateur de texte ; donc, quel que soit l’endroit d’un échange bot/humain où le texte est généré, il semble que l’honnêteté/la malhonnêteté s’y ajoute.

    • Je suis d’accord. Un modèle plus sophistiqué pourrait peut-être suivre deux instances ou plus afin de décrire différents personnages.
      On aurait alors dans l’espace des dimensions une sorte de notion de slots de personnage.
  • Intéressant, et les vecteurs de contrôle semblent pouvoir réduire le besoin de fine-tuning du modèle.

    • Et pas seulement : ils permettent aussi de modifier le comportement du modèle à la demande.
      Avec 5 fine-tunings, il faut héberger 5 copies ou les charger/décharger.
      Avec des vecteurs de contrôle, il suffit de modifier le modèle quand on en a besoin.