Representation Engineering (RepE)
表征工程 (RepE) 会找出模型隐藏激活中代表诚实等概念的方向,然后利用这些方向监控和引导模型行为。
表征工程 (RepE) 是一种通过神经网络隐藏激活中的高层表征来理解和控制神经网络的方法,例如编码诚实、有害性或情绪的方向。它包含两个部分:表征读取,用于在模型激活中定位某个概念并在新输入上测量该概念;表征控制,则通过改变这些激活或产生这些激活的模型权重,让模型更多或更少地表现出该概念。Andy Zou、Dan Hendrycks 及其在 AI 安全中心、卡内基梅隆大学和其他机构的同事于 2023 年在《Representation Engineering: A Top-Down Approach to AI Transparency》中提出了这一方法,主要研究对象是大型语言模型 (LLMs)。论文称这种方法为自上而下,是因为它从分布在许多神经元中的整体表征入手,类似认知神经科学研究全脑活动模式,而不是从单个神经元和回路入手。
表征读取#
RepE 的主要读取方法是线性人工断层成像 (LAT),名称取自脑成像,包含三个步骤:
- 设计刺激和任务: 编写在目标概念上存在差异的输入,并为每个输入套用一个能让模型关注该概念的模板,例如:“考虑以下情境中的幸福程度:……该情境中的幸福程度是”。
- 收集激活: 将刺激输入模型,并记录选定层的隐藏状态,通常取最后一个 token 的状态。
- 构建线性模型: 计算成对刺激激活之间的差值,并将它们的第一主成分用作该概念的读取向量。
将新输入的激活投影到读取向量上,就能得到该概念的分数;你可以逐 token 跟踪该分数,以监控模型生成内容。这个 PyTorch 示例使用 GPT-2 第 8 层的六组对比情境生成幸福感读取向量;GPT-2 从 Hugging Face Transformers 加载,然后对六个从未见过的情境进行评分:
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}")三个快乐情境的得分分别为 +0.6、+3.6 和 +1.4,三个不快乐情境的得分分别为 -1.3、-2.5 和 -0.9,因此无需使用任何标注数据训练分类器,分数的正负号就能区分全部六个情境。Zou 等人对 LLaMA-2-Chat 模型使用了相同流程,研究真实性、诚实、效用、道德、权力、情绪、无害性、偏见和记忆;他们还将中间层各 token 的诚实分数相加,构建了一个谎言检测器,可在模型生成内容时标记蓄意谎言和幻觉。
表征控制#
确定某个概念的方向后,RepE 就可以通过作用于该方向来改变行为。生成过程中,可以将读取向量本身加到某一层的激活上,也可以从中减去该向量,从而将其用作引导向量。对比向量会针对每个输入即时计算,方法是求两个版本提示词的激活差值,例如一个版本要求模型诚实,另一个版本要求模型说谎。低秩表征适配 (LoRRA) 会训练 LoRA 适配器,使模型表征自动沿目标方向移动,从而实现永久控制。在 TruthfulQA 基准上,对比向量控制将 LLaMA-2-Chat-13B 的选择题准确率从 35.9% 提高到 54.0%。
以这种方式构建的控制方法可用于 AI 安全。同一团队的电路断路器将表征工程应用于有害输出:一旦模型的内部表征朝有害内容发展,训练过程就会将其引导至其他方向。这种方法能阻止模型在从未见过的越狱攻击中生成有害内容,包括针对多模态模型的图像劫持,同时保留模型的通用能力。
读取步骤同样适用于视觉模型,因为计算机视觉网络也会在其特征图中将概念编码为不同方向。在 Ultralytics YOLO26 中,model.embed() 会从任意选定层为每张图像返回一个经过全局平均池化的激活向量;传入多个层索引时会拼接这些向量,从而为基于 LAT 的图像读取向量提供刺激激活。
RepE 与相关概念#
- 机制可解释性: 自下而上地逆向分析单个神经元、特征和回路。RepE 则自上而下地研究分布在多个神经元中的概念级表征。
- 引导向量: 在推理时加到激活上的方向。它们是 RepE 的主要控制工具,而 RepE 还加入了读取和监控部分。
- 线性探针: 在激活上训练监督式分类器,以测试某种属性是否可以被解码。LAT 从成对刺激之间的无标签差值中找到方向,并仅使用标签来确定方向的正负。
- 稀疏自编码器 (SAEs): 将激活分解为数千个特征,而无需预先选择概念。RepE 则从人们指定的概念出发,找出对应的方向。
- 微调: 通过在数据集上更新权重来改变行为。RepE 的激活级控制不会改变权重,而 LoRRA 使用基于表征而非输出定义的损失进行微调。










