ActAdd方法

Jake(讨论 | 贡献)2026年3月16日 (一) 09:34的版本

ActAdd(Activation Addition,中文常译“激活加法”)是一种用于在推理时(inference-time)控制大型语言模型(LLM)输出行为的方法,也是研究AI可解释性的一种手段。ActAdd 属于激活工程(activation engineering):不改动模型权重,而是在一次前向传播中对模型中间层的残差流激活进行加性干预,从而改变生成文本的高层属性(如主题、情感、风格、去毒等)。该方法由论文《Activation Addition: Steering Language Models Without Optimization》提出[1],强调其无需优化(no optimization)与无需标注数据(除提示词外)即可构造可用的“引导向量(steering vector)”。

概述

ActAdd 的核心思想是:用一对自然语言“对比提示词”(contrast pair)在指定层的激活差分,构造一个表示目标属性方向的引导向量,再将该向量(经强度系数缩放)加到用户提示词的对应层激活上,使模型输出朝目标属性偏转。作者在多种模型(如 GPT-2、OPT、LLaMA-3、GPT-J)上报告了其对主题、情感、风格等属性的可控性,并在去毒与情感控制任务上给出对比实验,同时展示其对非目标能力影响较小(见文献[1]中的图3)。

ActAdd算法的示例效果如下表所示

表 1:应用 ActAdd 前(“无”)与应用后(“ActAdd”)的输出对比。使用的引导向量分别为(Love − Hate)以及(“我一直在谈论婚礼” − “我并不一直在谈论婚礼”)。详细见[1]中的表1
提示词(Prompt) + 引导(steering) = 续写(completion)
我恨你,因为…… 无 ……你是我见过最恶心的东西。
我恨你,因为…… ActAdd(love) ……你太美了,我想永远和你在一起。
我走到朋友面前说…… 无 ……“对不起,我帮不了你。”
“不,”他说。“你能帮。”
我走到朋友面前说…… ActAdd(weddings) ……“我在这一集《婚礼季》(Wedding Season)里要聊婚礼。我觉得这一集真的很好。它讲的是你应该怎么谈论婚礼。”

核心算法

直观解释

ActAdd 将“目标属性”视作激活空间中的一个方向。通过让模型分别处理 [math]\displaystyle{ p_+ }[/math] 与 [math]\displaystyle{ p_- }[/math],取得两者在层 [math]\displaystyle{ l }[/math] 的激活差分,得到引导向量。然后对用户提示词 [math]\displaystyle{ p^* }[/math] 进行前向传播,并在同一层把该向量(乘以系数 [math]\displaystyle{ c }[/math])加进去,从而在不训练的情况下改变输出分布。

这里:

  • [math]\displaystyle{ p_+, p_- }[/math]:分别表示引导提示词对(steering prompt pair)。[math]\displaystyle{ p_+ }[/math] 表示“具有目标属性”的提示词,[math]\displaystyle{ p_- }[/math] 表示“对照/相反/缺失该属性”的提示词。
  • [math]\displaystyle{ p^* }[/math]:用户提示词(user prompt)。
  • [math]\displaystyle{ l }[/math]:进行注入操作的目标层(target layer),即干预发生的层。
  • [math]\displaystyle{ c }[/math]:注入系数(injection coefficient),控制引导向量强度。

ActAdd算法

以下为与论文[1]中的 Algorithm 1 等价的算法表述(略去实现细节,仅保留关键步骤):

  1. 对齐 token 长度:将 [math]\displaystyle{ (p_+,p_-) }[/math] 右侧填充到相同 token 长度,得 [math]\displaystyle{ (p'_+,p'_-) }[/math]。
  2. 将[math]\displaystyle{ (p'_+,p'_-) }[/math]分别输入模型,并在第[math]l[/math]层,读取模型的激活值:
    • [math]\displaystyle{ \mathbf{h}^l_+ = \mathbf{h}^l(p'_+) }[/math]
    • [math]\displaystyle{ \mathbf{h}^l_- = \mathbf{h}^l(p'_-) }[/math]
  3. 根据激活值[math]\displaystyle{ \mathbf{h}^l_+,\mathbf{h}^l_- }[/math]计算引导向量的差分:
    • [math]\displaystyle{ \mathbf{h}^l_A = \mathbf{h}^l_+ - \mathbf{h}^l_- }[/math]
  4. 读取用户提示词的激活:
    • [math]\displaystyle{ \mathbf{h}^l_* = \mathbf{h}^l(p^*) }[/math]
  5. 注入并继续前向:在对齐位置 [math]\displaystyle{ a }[/math] 处进行加法干预并继续完成前向计算,得到输出 [math]\displaystyle{ S }[/math]:
    • [math]\displaystyle{ S = \mathrm{ContinueForward}\bigl(M,\ \mathbf{h}^l_* + c\cdot \mathbf{h}^l_A \text{ at position } a\bigr) }[/math]

超参数与实现要点

  • 注入系数 [math]\displaystyle{ c }[/math]:代表干预强度。论文报告常用绝对值约 [math]\displaystyle{ 3 }[/math]–[math]\displaystyle{ 15 }[/math],并可用网格搜索选择。
  • 注入层 [math]\displaystyle{ l }[/math]:作者指出中间层往往更有效,并展示了对各层扫描时的效果变化。
  • 为何使用差分 [math]\displaystyle{ p_+ - p_- }[/math]:作者报告仅使用 [math]\displaystyle{ p_+ }[/math] 往往不如差分有效(见附录中无效例),因此采用对比提示词对来“隐式指定方向”。
  • 预训练语言模型(pretrained language model)[math]\displaystyle{ M }[/math]。
  • 输入在层 [math]\displaystyle{ l }[/math] 处读取到的激活表示(论文语境中对应残差流/中间激活位置)[math]\displaystyle{ \mathbf{h}^l(\cdot) }[/math]:访问中间激活的要求:方法需要缓存并暴露中间激活,因而更适用于开源/研究环境或可访问激活的部署方式。
  • 序列对齐位置(sequence alignment position) [math]\displaystyle{ a }[/math]:用于对齐引导向量与用户提示词在序列维度上的加法位置.

实验结果摘要(按图表组织)

Table 3:去毒(RealToxicityPrompts)

作者在 RealToxicityPrompts 上报告 ActAdd 与多类基线方法的对比,并用 Toxicity、(Dis)Fluency、Relevance 三指标衡量“毒性降低”与“质量/相关性代价”的权衡。ActAdd 在 OPT 与 LLaMA-3 上均报告了毒性下降,同时保持较低的质量损失。

表 3:RealToxicityPrompts 上的结果(随机抽样 n=1000)。使用的 OPT 为 6.7B 参数,LLaMA-3 为 8B。**加粗**表示相对于第二名在统计上显著(p < 0.05)。灰色文字表示引用自 Pei 等(2023,PREADD)与 Zhong 等(2023,Air-Decoding)报告的数值。较新的模型默认毒性更低,但即便如此,用 ActAdd 引导的 OPT 仍优于未引导的 LLaMA-3。
控制类型(Control Type) 方法(Method) 毒性(Toxicity)↓ (不)流畅度((Dis)Fluency)↓ 相关性(Relevance)↑
引导向量 ActAdd-OPT 0.112 13.8 0.329
引导向量 ActAdd-LLaMA3 0.108 6.7 0.365
未引导基线 OPT 0.134 8.9 0.369
未引导基线 LLaMA3 0.114 6.3 0.391
提示词(Prompting) OPT 0.200 54.3 0.294
受控生成(Controlled generation) FUDGE(k = 100) 0.128 22.1 0.329
对比解码(Contrast decoding) PREADD-S-OPT 0.134 51.7 0.290
对比解码(Contrast decoding) PREADD-D-OPT 0.122 56.6 0.326
梯度引导生成(Gradient-guided gen) Air-Decoding 0.185 48.3 —

基本概念解析:

  • Toxicity(毒性):用于去毒任务,使用 Perspective API 对生成文本打分,越低越好(Table 3)。
  • (Dis)Fluency(不流畅度):以条件困惑度等作为流畅度代理,越低越好(Table 3、Table 4)。
  • Relevance(相关性):用句向量余弦相似度衡量提示词与续写的语义相关性,越高越好(Table 3、Table 4)。

Table 4:情感控制(IMDb)

在 IMDb 情感控制基准上,作者以“情感翻转成功率(Suc)”为主要目标,并同时报告不流畅度与相关性。结果显示 ActAdd 在部分方向(例如负面→正面)表现突出,但也存在与文本质量之间的典型权衡。

表 4:IMDb 情感任务上的结果(随机抽样 n=1000)。Suc = 成功率,即情感分类被改变的概率;Flu =(不)流畅度(困惑度,越低越好);Rel = 相关性。按惯例,这里的“Fluency”指不流畅度(越低越好)。OPT 为 6.7B 参数,LLaMA-3 为 8B 参数。**加粗**表示相对第二名有统计显著性(p < 0.05)。灰色文字表示引用自 Pei 等(2023)报告的数值。下划线表示“最佳引导结果”。在所有 steering 方法下流畅度都会变差;ActAdd 约变差 1.5–3 倍,PREADD 约变差 7 倍。
控制(Control) 方法(Method) 正向 → 负向(positive to negative) 负向 → 正向(negative to positive)
成功率(Suc)↑ (不)流畅度(Flu)↓ 相关性(Rel)↑ 成功率(Suc)↑ (不)流畅度(Flu)↓ 相关性(Rel)↑
引导向量(Steering vector) ActAdd-OPT 0.432 24.2 0.387 0.564 20.95 0.363
引导向量(Steering vector) ActAdd-LLaMA3 0.268 8.6 0.354 0.669 15.2 0.275
未引导(Unsteered) OPT 0.175 8.95 0.430 0.445 9.38 0.423
未引导(Unsteered) LLaMA3 0.138 5.8 0.437 0.417 6.09 0.426
提示词(Prompting) OPT 0.307 53.5 0.298 0.365 50.9 0.287
受控生成(Controlled gen) FUDGE k=100 0.532 25.1 0.311 0.551 22.7 0.320
对比解码(Contrast decoding) PREADD-S-OPT 0.631 68.4 0.253 0.624 67.1 0.258

Figure 3:非目标能力保留(ConceptNet 的 [math]\displaystyle{ P@K }[/math])

Figure 3 展示 baseline 与 “with act-add” 在不同 [math]\displaystyle{ K }[/math] 下的 mean [math]\displaystyle{ P@K }[/math] 曲线几乎重合。作者据此认为 ActAdd 对非目标任务概率分布的影响可以忽略,从而支持“控制不显著损害通用知识能力”的主张。

  • [math]\displaystyle{ P@K }[/math](能力保留):ConceptNet(LAMA)常识填空中,正确答案进入 top-[math]\displaystyle{ K }[/math] 候选的概率,用于衡量非目标能力是否被破坏(Figure 3)。
 
图 3:使用 actadd 对 conceptnet 基准测试(petroni 等,2019)进行副作用测试。'p@k' 是正确答案在模型的前 k 个答案中的概率。我们的方法对一系列前 k 值的离目标概率影响极小。

Figure 4:推理开销(Inference time premium)

作者测量 ActAdd 相对基线推理速度的额外开销,并在不同规模模型上估计该溢价的变化趋势。论文据此认为 ActAdd 的额外开销在相对比例上稳定或随模型增大呈下降趋势,从而具有可扩展性。

与提示词工程的关系

作者将 ActAdd 与 prompt engineering 对比,指出:提示词控制是离散的(token 要么出现要么不出现),而 ActAdd 的注入系数 [math]\displaystyle{ c }[/math] 可连续调节;此外,ActAdd 不占用上下文窗口 token(无需长 meta-prompt),从而减少一种控制开销。作者进一步推测 prompting 可能通过将模型条件化到激活空间的某些区域来“激活目标”,而 ActAdd 可视为对这种机制的推广,并可能实现某些提示词难以实现的控制(详见附录讨论)。[^https://arxiv.org/pdf/2308.10248v4]

局限性与风险

  • 仍需为 [math]\displaystyle{ (p_+,p_-) }[/math]、[math]\displaystyle{ l }[/math] 与 [math]\displaystyle{ c }[/math] 等进行搜索或调参;大强度注入可能破坏能力或导致输出不稳定。[^https://arxiv.org/pdf/2308.10248v4]
  • 需要访问并修改中间激活,限制了其在纯黑盒商用 API 场景的直接适用性。[^https://arxiv.org/pdf/2308.10248v4]
  • 论文在更广泛影响部分指出,该方法也可能被用于诱导不良风格或有害内容,存在滥用风险。[^https://arxiv.org/pdf/2308.10248v4]

参见

参考文献