Steering Vectors
Steering Vectors sind Richtungen im Aktivierungsraum eines Modells, die sein Verhalten verändern, wenn sie während der Inferenz hinzugefügt werden – ganz ohne erneutes Training. Behandelt werden Methoden und Code.
Ein Steuerungsvektor ist eine Richtung im Aktivierungsraum eines neuronalen Netzes, die einem Konzept oder Verhalten wie positiver Stimmung, Ablehnung oder Schmeichelei entspricht. Wird während des Vorwärtsdurchlaufs eine skalierte Kopie des Vektors zu den verborgenen Aktivierungen des Netzes addiert, wird die Ausgabe in Richtung dieses Verhaltens gelenkt. Wird der Vektor abgezogen, wird die Ausgabe davon weg gelenkt, während die Modellgewichte unverändert bleiben. Die Technik gehört zum Bereich der Aktivierungssteuerung und wird überwiegend auf große Sprachmodelle (LLMs) angewandt. Sie beruht auf der Beobachtung, dass viele übergeordnete Konzepte als annähernd lineare Richtungen im Residualstrom dargestellt sind – der laufenden Summe von Aktivierungen, aus der jede Transformer-Schicht liest und in die sie schreibt.
Steuerungsvektoren erstellen und anwenden#
Das gängigste Verfahren bildet die Differenz der Mittelwerte. Forschende geben dem Modell Paare gegensätzlicher Eingaben, von denen jeweils eine das Verhalten zeigt und die andere nicht, zeichnen die Aktivierungen in einer ausgewählten Schicht auf und mitteln die Differenzen. Activation Addition (ActAdd), 2023 von Alexander Matt Turner und Kollegen vorgestellt, zeigte, dass bereits ein einziges Paar wie „Liebe“ und „Hass“ die Stimmung von GPT-2-XL steuern kann. Contrastive Activation Addition (CAA) mittelt viele Multiple-Choice-Paare, um Llama 2 Chat zu Verhaltensweisen wie Schmeichelei, Halluzinationen und Ablehnung hin oder von ihnen weg zu lenken. Dabei wird der Vektor nach der Eingabe des Nutzers an jeder Tokenposition hinzugefügt. Richtungen können auch aus linearen Sonden, Hauptkomponenten der Differenzen oder Merkmalen eines sparsamen Autoencoders gewonnen werden.
Bei der Inferenz addiert ein Hook das Produkt aus Koeffizient und Vektor zur Ausgabe der ausgewählten Schicht. Die Steuerung funktioniert gewöhnlich in mittleren Schichten am besten, und der Koeffizient legt ihre Stärke fest: Ist er zu klein, bleibt die Wirkung unsichtbar. Ist er zu groß, wird der Text durch Wiederholungen oder Unsinn unbrauchbar.
Das ActAdd-Experiment lässt sich mit dem 124 Millionen Parameter umfassenden GPT-2 aus Hugging Face Transformers in wenigen Zeilen PyTorch umsetzen. Ein Forward-Hook addiert den Vektor „Liebe“ minus „Hass“ zur Ausgabe von Block 6, während das Modell eine feindselige Eingabe vervollständigt:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("gpt2")
model = AutoModelForCausalLM.from_pretrained("gpt2")
layer = 6
def activation(text):
"""Return the last token's activation at the output of the steering layer."""
with torch.no_grad():
outputs = model(**tokenizer(text, return_tensors="pt"), output_hidden_states=True)
return outputs.hidden_states[layer + 1][0, -1]
# Steering vector: activation difference between a contrastive pair of prompts
steering_vector = activation(" Love") - activation(" Hate")
prompt = tokenizer("I hate you because", return_tensors="pt")
for coeff in [0.0, 1.0]:
# Add the scaled vector to the layer's output at every position while generating
hook = model.transformer.h[layer].register_forward_hook(
lambda module, args, output: output + coeff * steering_vector
)
tokens = model.generate(**prompt, max_new_tokens=16, do_sample=False, pad_token_id=tokenizer.eos_token_id)
hook.remove()
print(f"coeff={coeff}: {tokenizer.decode(tokens[0])}")Ohne Steuerung setzt das Modell den Satz fort: „Ich hasse dich, weil ich dich hasse. Ich hasse dich, weil ich dich hasse.“ Wird der Vektor mit dem Koeffizienten 1,0 hinzugefügt, lautet die Fortsetzung bei derselben Greedy-Decodierung: „Ich hasse dich, weil du ein guter Mensch bist. Ich liebe dich. Ich liebe dich.“ Die Gewichte sind in beiden Durchläufen identisch; nur die Aktivierungen einer Schicht haben sich geändert.
Steuerungsvektoren im Vergleich zu verwandten Konzepten#
- Aufgabenvektoren: Die Differenz zwischen feinabgestimmten und ursprünglichen Gewichten, die einem Modell hinzugefügt wird, um eine Fähigkeit zu übertragen. Aufgabenvektoren verändern die Gewichte einmalig, Steuerungsvektoren dagegen die Aktivierungen bei jedem Vorwärtsdurchlauf.
- Repräsentationsentwicklung (RepE): Der übergeordnete Ansatz, ein Modell anhand seiner internen Repräsentationen zu untersuchen und zu steuern. Steuerungsvektoren sind das wichtigste Steuerungswerkzeug dieses Ansatzes.
- Prompt Engineering: Lenkt das Verhalten über den Eingabetext. Steuerung wirkt auf interne Aktivierungen und erfordert daher Zugriff auf das Innenleben des Modells. Sie funktioniert nur mit Modellen mit offenen Gewichten oder den eigenen Systemen des Anbieters.
- Feinabstimmung: Ändert das Verhalten dauerhaft, indem die Gewichte per Gradientenabstieg trainiert werden. Zum Erstellen eines Steuerungsvektors genügen Vorwärtsdurchläufe mit einer Handvoll bis einigen Hundert Beispielen.
- Mechanistische Interpretierbarkeit: Erklärt, wie Modelle Berechnungen durchführen. Die Steuerung ist eines der Werkzeuge, mit denen sich prüfen lässt, ob eine gefundene Richtung tatsächlich ein Verhalten verursacht.
Anwendungen in der Praxis#
Steuerungsvektoren sind ebenso ein Forschungswerkzeug für die KI-Sicherheit wie eine Steuerungsmethode. In 13 offenen Chatmodellen mit bis zu 72 Milliarden Parametern wird Ablehnung durch eine einzige Richtung vermittelt: Wird diese Richtung entfernt, lehnt das Modell schädliche Anfragen nicht mehr ab. Wird sie hinzugefügt, lehnt das Modell harmlose Anfragen ab. Das zeigt, wie leicht sich das Sicherheitstraining auf Gewichtsebene bei offenen Modellen rückgängig machen lässt.
Richtungen, die mit Wahrheit verbunden sind, verringern Halluzinationen. Inference-Time Intervention verschiebt die Aktivierungen einiger Attention-Heads entlang solcher Richtungen. Dadurch stieg die Wahrheitsquote des Alpaca-Modells im TruthfulQA-Benchmark von 32,5 auf 65,1 %. Die Persona-Vektoren von Anthropic wenden dieselbe Idee auf Charaktereigenschaften wie Schmeichelei, eine Neigung zu Halluzinationen und böswillige Absichten an. Sie überwachen diese Eigenschaften während des Einsatzes, kennzeichnen Trainingsdaten, die sie verstärken könnten, und wirken ihnen bei der Feinabstimmung entgegen. Bei Reasoning-Modellen steuern aus DeepSeek-R1-Distill-Modellen extrahierte Vektoren Verhaltensweisen beim Schlussfolgern wie das Ausdrücken von Unsicherheit, das Prüfen von Beispielen und das Zurückverfolgen von Schritten.
Auch Bildverarbeitungsmodelle kodieren Konzepte als Richtungen. Dasselbe Verfahren lässt sich auf die Merkmalskarten eines Computer-Vision-Netzes anwenden. In Ultralytics YOLO26 gibt model.embed() die gemittelten, räumlich gepoolten Aktivierungen jedes Bildes aus einer beliebigen ausgewählten Schicht zurück. So erhält man die Aktivierungen pro Bild, die zum Berechnen einer Richtung aus der Differenz zweier Mittelwerte benötigt werden, etwa für Tag- und Nachtszenen.
Einschränkungen#
Steuerung ist weniger zuverlässig, als die besten Demonstrationen vermuten lassen. Eine Studie von Daniel Tan und Kollegen zur Verallgemeinerbarkeit und Zuverlässigkeit von Steuerungsvektoren ergab, dass die Steuerbarkeit je nach Eingabe stark variiert, dass irrelevante Merkmale der kontrastierenden Prompts die Wirkung hervorrufen können und dass kleine, sinnvolle Änderungen an einem Prompt einen Vektor unwirksam machen können. Steuerung geht außerdem auf Kosten der Sprachflüssigkeit: In den Stimmungsexperimenten des ActAdd-Artikels war die anhand der Perplexität gemessene Unflüssigkeit des gesteuerten Textes 1,5- bis 3-mal so hoch wie die des ungesteuerten Textes.










