Steering Vectors
引导向量是模型激活空间中的方向,在推理时将其加入模型即可改变模型行为,无需重新训练。内容涵盖相关方法和代码。
操控向量是神经网络激活空间中的一个方向,对应某种概念或行为,例如积极情绪、拒绝或谄媚。在前向传递期间,向网络的隐藏激活中加入按比例缩放的该向量副本,会推动输出趋向这种行为;减去该向量则会推动输出远离这种行为,同时模型权重保持不变。这种技术属于激活工程,主要用于大型语言模型(LLM)。它基于这样一种观察:许多高层概念都表示为残差流中的近似线性方向;残差流是各 Transformer 层读取和写入激活值时不断累加的结果。
操控向量的构建与应用#
最常见的方法是计算均值之差。研究人员让模型处理成对的对比输入,一个体现某种行为,另一个则不体现;随后记录选定层的激活值,并对差值取平均。Alexander Matt Turner 及其同事于 2023 年提出的激活加法(ActAdd)显示,仅用“Love”和“Hate”这样一对词,就能操控 GPT-2-XL 的情绪倾向。对比激活加法(CAA)会对许多选择题输入对取平均,引导 Llama 2 Chat 表现出或避免谄媚、幻觉和拒绝等行为,并在用户提示之后的每个词元位置加入该向量。方向也可以来自线性探针、差值的主成分,或稀疏自编码器的特征。
推理时,钩子会将系数乘以向量后加到所选层的输出中。中间层通常最适合操控,系数决定操控强度:系数过小不会产生明显效果,过大则会使文本退化为重复内容或乱码。
使用 Hugging Face Transformers中的 1.24 亿参数 GPT-2,只需几行 PyTorch代码就能实现 ActAdd 实验。前向钩子会将“Love”减去“Hate”所得的向量加到第 6 个模块的输出中,同时让模型续写一段带有敌意的提示:
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])}")不加操控向量时,模型会续写:“I hate you because I hate you. I hate you because I hate you.”将系数为 1.0 的向量加入后,同样的贪心解码会续写:“I hate you because you are a good person. I love you. I love you.”两次运行中的权重完全相同;只有一个层的激活值发生了变化。
操控向量与相关概念的区别#
- 任务向量:微调后的权重与原始权重之差;将其加入模型即可迁移一项技能。任务向量只编辑一次权重,操控向量则在每次前向传递时编辑激活值。
- 表征工程(RepE):通过模型的内部表征读取并控制模型的更广泛方法。操控向量是其中主要的控制工具。
- 提示工程:通过输入文本引导行为。操控作用于内部激活,因此需要访问模型内部;它只适用于开放权重模型或提供商自己的系统。
- 微调:通过梯度下降训练权重,永久改变模型行为。构建操控向量只需在少数到几百个示例上进行前向传递。
- 机制可解释性:解释模型如何计算。操控是其中一种测试工具,用来验证发现的方向是否真的会导致某种行为。
实际应用#
操控向量既是AI 安全研究工具,也是一种控制方法。在 13 个参数量最高达 720 亿的开放聊天模型中,拒绝行为由单个方向介导:抹去该方向会让模型不再拒绝有害请求,加入该方向则会让模型拒绝无害请求。这说明在开放模型中,基于权重的安全训练很容易被破坏。
与真实性相关的方向可以减少幻觉。推理时干预会沿这些方向改变少数注意力头的激活值,使 Alpaca 模型在 TruthfulQA 基准测试中的真实性得分从 32.5% 提高到 65.1%。Anthropic 的角色向量将相同思路用于谄媚等性格特征、谄媚倾向、产生幻觉的倾向和恶意意图:在部署时监控这些特征,标记会强化这些特征的训练数据,并在微调期间通过操控加以抑制。在推理模型中,从 DeepSeek-R1-Distill 模型提取的向量可以控制推理行为,例如表达不确定性、测试示例和回溯。
视觉模型也会将概念编码为方向,同样的方法也适用于计算机视觉网络的特征图。在 Ultralytics YOLO26中,model.embed()会返回每张图像在任意指定层上的平均池化激活值,从而获得逐图像激活值,以便计算两组图像之间的均值差异方向,例如白天与夜间场景。
局限性#
操控的可靠性不如一些最佳演示所显示的那样高。Daniel Tan 及其同事对操控向量的泛化能力和可靠性进行研究后发现,操控效果会因输入而大幅变化;对比提示中的伪特征可能驱动操控效果;而对提示作细微且合理的修改,就可能让向量失效。操控还会损害文本流畅度:在 ActAdd 论文的情绪实验中,操控文本基于困惑度计算的不流畅程度是未操控文本的 1.5 到 3 倍。










