通过激活引导(Activation Steering)提升语言模型的指令遵循能力:一篇 ICLR 2025 论文解读

通过激活引导提升语言模型的指令遵循能力:一篇 ICLR 2025 论文解读

引言

近年来,大型语言模型(Large Language Models, LLMs)的指令遵循(Instruction-Following)能力显著提升,使得它们在各种实际应用中表现出色。然而,如何让语言模型更精准地遵循用户指定的复杂指令,例如输出格式、长度限制或特定词汇的使用,仍然是一个挑战。2025 年将在 ICLR(International Conference on Learning Representations)上发表的论文《Improving Instruction-Following in Language Models through Activation Steering》提出了一种新颖的方法——激活引导(Activation Steering),通过直接干预模型的内部激活值来增强其指令遵循能力。本文将详细解读这篇论文的核心内容、方法、实验结果及其对语言模型控制的潜在影响。

Paper:https://arxiv.org/pdf/2410.12877

论文背景

语言模型的指令遵循能力通常通过指令微调(Instruction Tuning)来实现,这种方法通过在特定任务数据集上对模型进行进一步训练,使其能够更好地理解和执行用户指令。然而,指令的多样性和复杂性(例如要求输出为 JSON 格式、限定句子数量或避免使用特定词汇)使得传统微调方法在应对所有可能场景时显得不够灵活。此外,随着生成内容的增加,模型有时会出现“指令漂移”(Instruction Drift),即逐渐偏离初始指令。

为了解决这些问题,论文提出了一种基于机械解释(Mechanistic Interpretability)的激活引导方法,通过提取指令相关的向量表示(Steering Vectors),并在推理时直接干预模型的激活值,从而实现对模型输出的细粒度控制。这种方法无需对模型进行额外训练,是一种轻量且可扩展的解决方案。

核心方法:激活引导

什么是激活引导?

激活引导是一种通过直接修改语言模型在推理过程中的内部激活值(Activation Values)来控制其输出的技术。论文利用了“差异均值”(Difference-in-Means)方法,通过比较包含指令和不含指令的输入在模型残差流(Residual Stream)中的激活差异,提取出与特定指令相关的向量表示。这些向量随后被用来在推理时调整模型的激活值,引导模型生成符合指令的输出。

具体来说,激活引导的流程如下(见论文图 1):

在这里插入图片描述

  1. 计算引导向量:对于一个基础查询(例如“列出关于梅西的一些事实”)和包含指令的查询(例如“以 JSON 格式列出关于梅西的一些事实”),计算两者在模型最后一个输入 token在第 l l l层 的残差流激活值的差异,得到一个引导向量。
  2. 应用引导向量:在推理过程中,将引导向量按一定权重( c c c)添加到模型的残差流激活值中,调整模型的生成行为。
  3. 层选择与权重调整:通过在验证集上进行层选择和权重调整,确保引导向量在提升指令遵循准确性的同时,尽量不影响输出质量。

指令类型

论文聚焦于三种具体的指令类型:

  1. 格式指令:控制输出的呈现方式,例如要求输出为 JSON 格式、用星号强调部分内容或全部小写。
  2. 长度指令:限制输出的长度,例如要求最多使用三句话或 300 字以上。
  3. 词汇指令:控制特定词汇的包含或排除,例如要求输出中包含某个关键词或避免使用某个词。

这些指令的特点是模块化、可组合,且与基础查询的内容无关,因此适合通过激活引导进行控制。

实验设计与结果

实验设置

论文使用了四种语言模型进行实验:

  • Phi-3 Mini
  • Gemma 2 2B 和 9B(指令微调版本和基础版本)
  • Mistral 7B(指令微调版本)

实验数据基于 IFEval 数据集(Zhou et al., 2023a),包含 541 个提示,涵盖 25 种不同的指令。研究人员还生成了合成数据以避免测试信息泄露。评估指标包括指令遵循准确性(使用 IFEval 的“宽松”准确性评估脚本)和输出质量(通过 GPT-4o 生成的五道是/否问题进行评分)。

实验分为两种场景:

  1. 无显式指令:仅通过引导向量控制模型行为。
  2. 有显式指令:在输入中提供指令,并通过引导向量进一步增强指令遵循。

关键结果

1. 格式指令
  • 无显式指令:当输入中不包含格式指令时,模型的指令遵循准确性通常较低(约 10%),但通过激活引导,准确性显著提升至约 30%。例如,Phi-3 在“全部小写”和“高亮文本”指令上的表现尤为突出(见图 3c)。

在这里插入图片描述

  • 有显式指令:当输入中包含格式指令时,模型的基线准确性较高(60%-90%),但激活引导仍能进一步提升部分模型的性能,特别是在 Phi-3 和 Gemma 2 2B 上。
  • 表示分析:通过余弦相似性分析,论文发现模型在最后一输入 token 的残差流激活中能有效捕获指令相关特征(见图 2 和图 13)。例如,“引号”指令和“乌尔都语”指令的激活表示显示出明显的区分性。

在这里插入图片描述

  • 词汇投影:引导向量投影到词汇空间后,显示出与指令语义相关的 token(见表 1),验证了向量有效捕获了指令特征。

在这里插入图片描述

2. 长度指令
  • 连续调制:通过调整引导向量的权重 c c c,可以控制输出的简洁或冗长程度。较大的 c c c 值使输出更简洁(见图 5a 和表 2)。例如,同一个电影剧情提示在不同权重下的输出从 15 句 324 词减少到 1 句 23 词。

在这里插入图片描述

  • 显式长度限制:当输入中包含明确的长度限制(如“最多 5 句话”)时,引导向量显著提高了模型遵循限制的准确性(见图 5b 和图 17b)。输出长度分布也更接近目标值(见图 5c 和图 17c)。
  • 冗长输出:通过“冗长”引导向量,模型可以生成更长的输出(见图 17a),展示了激活引导在双向长度控制上的灵活性。
3. 词汇指令
  • 词汇包含:通过为每个关键词生成特定的引导向量(仅需 20 个样本),模型在包含指定词汇的准确性上显著提高(见图 6a)。这些向量可以在推理时动态生成,显示了方法的高效性。

在这里插入图片描述

  • 词汇排除:直接计算排除向量的效果不佳,因为投影到词汇空间时,排除词汇常被错误增强(见表 13)。论文提出通过减去包含向量来实现排除效果,显著提高了准确性(见图 19)。
  • 质量影响:词汇指令的引导对输出质量的影响较小,质量评分变化通常在 -0.03 左右(见图 9b、9c 和图 10)。
4. 多指令引导
  • 论文展示了同时引导多个指令的可行性,例如格式和长度指令的组合(见图 7a)或小写和词汇排除指令的组合(见图 7b)。通过在不同层注入多个引导向量,模型能够在多个约束上实现性能提升,尽管可能需要进一步优化以处理冲突指令。
5. 跨模型引导
  • 论文发现,从指令微调模型计算的引导向量可以有效应用于基础模型(见图 8)。在 Gemma 2 2B 上,跨模型引导甚至优于同模型引导,表明指令微调模型的表示可以增强基础模型的指令遵循能力。这为跨模型的技能迁移提供了新可能性。

在这里插入图片描述

输出质量评估

  • 质量评分:通过 GPT-4o 生成的五道是/否问题评估输出质量,论文发现激活引导通常对质量的影响较小,但在某些情况下(如格式指令)可能导致质量下降(见图 4 和图 9)。例如,Phi-3 在“全部大写”指令引导下可能生成重复 token(见表 12)。
  • 权衡分析:在词汇排除任务中,论文分析了引导权重 c c c 对准确性和质量的权衡(见图 12)。更大的权重提高了准确性,但可能略微降低质量,表明需要仔细调整 c c c 值以平衡两者的表现。

方法的意义与局限性

意义

  1. 细粒度控制:激活引导提供了一种无需重新训练即可控制模型输出的方法,特别适用于复杂、模块化的指令。
  2. 高效性:引导向量计算成本低(例如词汇包含仅需 20 个样本),且可以在推理时动态生成。
  3. 可组合性:支持多指令同时引导,增强了方法的灵活性。
  4. 跨模型迁移:从指令微调模型提取的向量可以提升基础模型的性能,为模型间技能共享提供了新思路。
  5. 机械解释的实际应用:论文展示了如何将机械解释的洞察转化为实际的控制技术,为未来的研究奠定了基础。

局限性

  1. 指令漂移:尽管激活引导能缓解指令漂移,但在长生成中仍可能出现偏离。
  2. 质量下降:某些情况下,引导可能导致输出质量下降,例如生成重复 token 或轻微的事实错误(见表 12)。
  3. 冲突指令:多指令引导在处理冲突指令时可能需要进一步优化。
  4. 词汇排除的挑战:直接计算排除向量的效果不佳,需通过减去包含向量来间接实现。

结论与未来展望

这篇论文通过激活引导方法显著提升了语言模型的指令遵循能力,为实现更可控、可靠的语言生成提供了一种实用且可扩展的解决方案。其核心贡献在于:

  • 展示了指令相关特征在模型激活空间中的线性表示。
  • 验证了激活引导在格式、长度和词汇指令上的有效性。
  • 证明了跨模型引导的可行性,拓展了任务迁移的可能性。

未来研究可以探索以下方向:

  • 优化多指令引导以处理冲突情况。
  • 改进引导权重和层的选择策略,以进一步减少质量下降。
  • 扩展方法到更多类型的指令,例如语义或情感约束。
  • 结合稀疏自编码器等技术,进一步提高表示提取的精度。

代码与数据

论文的代码和数据已提交为补充材料,并将在出版时开源,托管在 GitHub(https://github.com/microsoft/llm-steer-instruct)。这为研究人员复现实验或进一步开发提供了便利。

总结

《Improving Instruction-Following in Language Models through Activation Steering》是一篇具有开创性的工作,它将机械解释的理论洞察应用于实际的语言模型控制问题。通过激活引导,研究人员不仅提升了模型的指令遵循能力,还展示了跨模型迁移和多指令组合的潜力。这项技术为未来的语言模型应用提供了新的可能性,尤其是在需要细粒度控制的场景中。无论是研究人员还是开发者,这篇论文都值得深入阅读,以了解如何让语言模型更智能、更可控。

Steering Procedure”(引导程序)介绍

在论文《Improving Instruction-Following in Language Models through Activation Steering》中,2.2节“Steering Procedure”(引导程序)详细描述了如何通过激活引导(Activation Steering)来控制语言模型的输出,以增强其对特定指令的遵循能力。本节将深入剖析这一部分的原理,重点解析数学公式,并以通俗的语言解释其背后的思想和实现细节。


2.2 引导程序的原理

激活引导是一种在推理时直接干预语言模型内部激活值的技术,旨在通过修改模型的残差流(Residual Stream)激活值,引导模型生成符合特定指令的输出,而无需对模型进行重新训练或微调。其核心思想是:通过比较包含指令和不含指令的输入在模型内部激活值上的差异,提取一个与指令相关的“引导向量”(Steering Vector),然后在推理时将此向量加到模型的激活值上,以调整其生成行为。

该方法基于机械解释(Mechanistic Interpretability)的假设:语言模型在处理特定任务或指令时,会在激活空间中形成特定的线性表示(Linear Representations)。通过识别这些表示并进行干预,可以精确控制模型的行为。论文采用了一种名为“差异均值”(Difference-in-Means)的方法来提取引导向量,并通过调整权重和选择适当的层来优化引导效果。

以下是引导程序的三个主要步骤:

  1. 计算引导向量:通过比较包含指令和不含指令的输入的激活值差异,提取与指令相关的向量表示。
  2. 应用引导向量:在推理时,将引导向量按一定权重添加到模型的残差流激活值中,调整生成行为。
  3. 层选择与权重调整:通过实验确定最佳的干预层和权重,确保在提升指令遵循准确性的同时,尽量减少对输出质量的负面影响。

详细原理与数学公式解析

1. 计算引导向量

原理

引导向量的计算基于“差异均值”方法,其核心思想是通过对比两组输入在模型残差流中的激活值差异,提取与指令相关的特征表示。具体来说,对于一个基础查询(base query,例如“列出关于梅西的一些事实”)和包含指令的查询(例如“以 JSON 格式列出关于梅西的一些事实”),计算两者在模型最后一输入 token 的激活值差异。这种差异被认为主要反映了指令的影响,而非基础查询的内容。

数学公式

论文中定义了引导向量的计算方式如下:

设:

  • x x x 表示基础查询(不含指令的输入)。
  • x + x^+ x+ 表示包含指令的输入(即基础查询加上指令)。
  • x i , l \mathbf{x}_{i,l} xi,l x i , l + \mathbf{x}_{i,l}^+ xi,l+ 分别表示第 i i i 个样本在第 l l l 层( l ∈ { 1 , … , L } l \in \{1, \ldots, L\} l{1,,L})最后一输入 token 的残差流激活值,维度为 d model d_{\text{model}} dmodel(模型的隐藏状态维度)。
  • N N N 表示用于计算的样本对数量。

引导向量 u l \mathbf{u}_l ul 在第 l l l 层定义为:

u l = v l ∥ v l ∥ , where  v l = 1 N ∑ i N ( x i , l + − x i , l ) . \mathbf{u}_l = \frac{\mathbf{v}_l}{\|\mathbf{v}_l\|}, \quad \text{where } \mathbf{v}_l = \frac{1}{N} \sum_i^N \left( \mathbf{x}_{i,l}^+ - \mathbf{x}_{i,l} \right). ul=vlvl,where vl=N1iN(xi,l+xi,l).

公式解析

  • 差异计算 x i , l + − x i , l \mathbf{x}_{i,l}^+ - \mathbf{x}_{i,l} xi,l+xi,l 表示包含指令的输入与不含指令的输入在第 l l l 层激活值的差异。这个差异向量捕获了指令对模型内部表示的影响。
  • 均值计算:通过对 N N N 个样本对的差异求平均( 1 N ∑ i N \frac{1}{N} \sum_i^N N1iN),可以减少与特定基础查询相关的噪声,提取更通用的指令表示。
  • 归一化:将平均差异向量 v l \mathbf{v}_l vl 归一化为单位向量 u l \mathbf{u}_l ul(通过除以其 L2 范数 ∥ v l ∥ \|\mathbf{v}_l\| vl),确保引导向量的方向性,而不依赖于其幅度。

为什么选择最后一输入 token?
论文选择在最后一输入 token 的激活值上计算引导向量,基于以下原因:

  • 最后一输入 token 的激活值通常包含了模型对整个输入序列的综合表示,尤其是在指令微调模型中,这通常对应于 <assistant> token,标志着模型从输入处理到生成输出的过渡。
  • 研究表明(Todd et al., 2024; Scalena et al., 2024),最后一 token 的激活值不仅影响下一 token 的预测,还对整个生成过程有重要影响。
实现细节
  • 样本选择:论文使用 IFEval 数据集中的基础查询,并通过合成方式生成包含指令的查询(见附录 C 和 D),以确保样本的多样性并避免测试信息泄露。
  • 样本数量:对于词汇包含指令,仅需 20 个样本即可生成有效的引导向量,显示了方法的高效性。

2. 应用引导向量

原理

在推理时,引导向量被添加到模型的残差流激活值中,以调整生成行为。具体来说,模型在处理新输入时,会在特定层(由层选择过程确定)将引导向量按一定权重 c c c 加入到残差流中,从而引导模型生成符合指令的输出。

数学公式

设:

  • x l ′ \mathbf{x}_l^\prime xl 表示新输入在第 l l l 层的残差流激活值。
  • u l \mathbf{u}_l ul 为第 l l l 层的归一化引导向量。
  • c ∈ R c \in \mathbb{R} cR 为引导权重,用于控制干预的强度。
  • x ^ l ′ \hat{\mathbf{x}}_l^\prime x^l 为调整后的激活值。

调整后的激活值计算公式为:

x ^ l ′ = x l ′ + c u l . \hat{\mathbf{x}}_l^\prime = \mathbf{x}_l^\prime + c \mathbf{u}_l. x^l=xl+cul.

公式解析

  • 激活值调整:通过将引导向量 c u l c \mathbf{u}_l cul 加入到原始激活值 x l ′ \mathbf{x}_l^\prime xl 中,模型的内部表示被推向与指令相关的方向,从而影响后续的生成过程。
  • 权重 c c c 的作用:权重 c c c 控制引导的强度。较大的 c c c 值会更强烈地推动模型遵循指令,但可能增加输出质量下降的风险(如生成重复 token 或不连贯内容)。
  • 单层干预:论文选择在单一层进行干预(而非多层),因为研究表明(Li et al., 2024),模型在生成长序列时容易偏离指令,单层干预可以有效纠正这种偏差。
权重 c c c 的选择

权重 c c c 的选择根据指令类型有所不同:

  • 格式指令:采用系统性调整方法,计算 c c c 以使调整后的激活值接近包含指令输入的平均激活值。具体公式为:

c = z ˉ − x l ′ T u l , where  z ˉ = 1 N ∑ i N x i , l + T u l . c = \bar{z} - \mathbf{x}_l^{\prime \mathrm{T}} \mathbf{u}_l, \quad \text{where } \bar{z} = \frac{1}{N} \sum_i^N \mathbf{x}_{i,l}^{+\mathrm{T}} \mathbf{u}_l. c=zˉxlTul,where zˉ=N1iNxi,l+Tul.

  • 公式解析

    • x l ′ T u l \mathbf{x}_l^{\prime \mathrm{T}} \mathbf{u}_l xlTul 表示新输入激活值在引导向量方向上的投影,反映了当前激活值与指令方向的接近程度。
    • z ˉ \bar{z} zˉ 是包含指令的输入激活值在引导向量方向上的平均投影,代表目标指令的“理想”激活状态。
    • c c c 的计算确保调整后的激活值 x ^ l ′ \hat{\mathbf{x}}_l^\prime x^l 在引导向量方向上的投影接近 z ˉ \bar{z} zˉ,从而动态适应新输入,避免过强或过弱的干预。
  • 长度指令:由于长度指令具有连续性(例如要求不同句子数量),论文通过实验测试不同 c c c 值的影响。例如,较大的 c c c 值使输出更简洁(见图 5a 和表 2)。

  • 词汇指令:除了使用公式 (2) 计算 c c c,还通过在验证集上进行小范围网格搜索(Grid Search)微调权重,以优化引导效果。

干预位置
  • 单层干预:引导向量在所有 token 位置的同一层(第 l l l 层)上添加,基于研究表明模型在生成过程中可能逐渐偏离指令(Li et al., 2024)。
  • 干预时机:干预在推理的每次前向传播中进行,调整后的激活值 x ^ l ′ \hat{\mathbf{x}}_l^\prime x^l 用于后续的计算。

3. 层选择与权重调整

原理

不同的模型层可能对指令的表示和处理有不同的贡献,因此选择合适的干预层至关重要。此外,引导权重 c c c 的选择需要平衡指令遵循准确性和输出质量。论文通过在验证集上进行层选择和权重调整,确保干预效果最佳。

实现细节
  • 层选择

    • 在模型的部分层上进行扫描(Layer Sweep),评估每层的引导效果。
    • 使用验证集计算指令遵循准确性,并通过一个较小的模型(GPT-2)计算输出的困惑度(Perplexity)作为质量代理。
    • 选择满足以下条件的层:
      • 指令遵循准确性高于无引导的基线。
      • 低困惑度输出的比例为零(即避免生成不连贯或重复内容)。
    • 如果多个层具有相同的最高准确性,选择最早的层(以减少对后续计算的干扰)。
    • 如果没有层能提升基线准确性,则不进行引导(见表 8 和表 9 中的“-”)。
  • 权重调整

    • 对于格式指令,使用公式 (2) 动态计算 c c c
    • 对于长度指令,手动调整 c c c 值以探索不同程度的简洁或冗长(见图 5a)。
    • 对于词汇指令,通过网格搜索在公式 (2) 计算的 c c c 值附近微调,以优化效果。
    • 困惑度阈值(Perplexity Threshold)用于筛选权重配置,格式指令设为 2.5,词汇指令设为 4,以确保输出质量。
结果展示
  • 层选择结果:表 8 和表 9 列出了不同模型和指令的最佳干预层。例如,Phi-3 在“全部小写”指令上选择第 28 层(无显式指令时),而在“JSON 格式”指令上可能不进行引导(因为基线已表现良好)。

在这里插入图片描述

在这里插入图片描述

  • 困惑度检查:图 16 展示了层选择过程中的准确性和困惑度权衡。例如,在“多段落”指令上,困惑度检查避免了选择导致质量下降的层。

通俗解释

类比

可以将激活引导想象成在开车时调整方向盘:

  • 引导向量 u l \mathbf{u}_l ul)就像方向盘的调整方向,告诉模型“向这个方向走”以遵循指令。
  • 权重 c c c 是你转动方向盘的力度,力度太大可能导致“翻车”(输出质量下降),力度太小则可能无法改变方向。
  • 层选择 类似于选择在哪个路段调整方向,不同的路段(层)对最终路线(输出)的贡献不同。
  • 差异均值方法 就像通过对比两条路线(有无指令的输入)的差异,找到正确的调整方向。

为什么有效?

  • 线性表示假设:语言模型的激活空间中,指令相关信息以线性方向编码(Mikolov et al., 2013; Elhage et al., 2021)。差异均值方法通过提取这些方向,隔离了指令的影响。
  • 动态调整:公式 (2) 确保引导向量适应新输入的激活状态,避免过强或过弱的干预。
  • 高效性:只需少量样本(例如 20 个)即可计算引导向量,且无需修改模型权重,计算成本低。

实际应用

  • 格式指令:例如,要求输出为 JSON 格式时,引导向量可以增强模型生成正确格式的能力,即使输入中没有明确指令。
  • 长度指令:通过调整 c c c 值,模型可以生成更短或更长的输出,满足不同长度需求。
  • 词汇指令:通过动态生成词汇包含向量,模型可以精确地在输出中加入或避免特定词汇。

总结

2.2节的引导程序提供了一种高效、可扩展的方法,通过直接干预语言模型的残差流激活值,增强其对格式、长度和词汇指令的遵循能力。其核心数学公式(公式 1 和 2)基于差异均值方法,提取指令相关表示并动态调整干预强度。通过仔细的层选择和权重调整,方法在提升准确性的同时尽量减少质量下降。以下是关键点的总结:

  • 引导向量计算:通过 u l = v l ∥ v l ∥ \mathbf{u}_l = \frac{\mathbf{v}_l}{\|\mathbf{v}_l\|} ul=vlvl v l = 1 N ∑ i N ( x i , l + − x i , l ) \mathbf{v}_l = \frac{1}{N} \sum_i^N \left( \mathbf{x}_{i,l}^+ - \mathbf{x}_{i,l} \right) vl=N1iN(xi,l+xi,l),提取指令的线性表示。
  • 激活值调整:通过 x ^ l ′ = x l ′ + c u l \hat{\mathbf{x}}_l^\prime = \mathbf{x}_l^\prime + c \mathbf{u}_l x^l=xl+cul,在推理时引导模型行为。
  • 权重动态调整:使用 c = z ˉ − x l ′ T u l c = \bar{z} - \mathbf{x}_l^{\prime \mathrm{T}} \mathbf{u}_l c=zˉxlTul 确保干预适应新输入。
  • 层选择:通过验证集上的准确性和困惑度检查,选择最佳干预层。

这一方法展示了机械解释在实际应用中的潜力,为语言模型的细粒度控制提供了新的可能性。未来可以进一步优化权重调整策略和处理冲突指令的能力,以提升方法的鲁棒性和适用性。

后记

2025年5月28日于上海,在grok 3大模型辅助下完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值