ReFT

• 14 min read • 2775 words
Tags: NLP finetune
Categories: NLP

生成:Gemini-2.5-pro, 整理:fyerfyer

ReFT

1. 核心思想

传统的参数高效微调(PEFT)方法,如 LoRA,其核心思路是修改模型的“大脑结构”,即通过更新或添加少量权重参数来让模型适应新任务。

而表征微调(Representation Finetuning, ReFT)提出了一种全新的范式:它完全冻结原始模型的全部权重,不改变其任何“结构”。取而代之,它在模型处理信息的过程中,直接干预和修改模型的“思维流”,即在特定层、特定位置修改模型的隐藏层表征(Representations),从而引导模型产生正确的输出。

ReFT 的核心假设是:与其修改权重,不如直接操控表征。

特性传统 PEFT (如 LoRA)ReFT (如 LoReFT)
操作对象模型的权重 (Weights)模型的表征 (Representations)
工作方式学习一个权重的“增量”或“补丁”,改变模型结构。学习一种“干预”策略,在运行时修改模型的中间输出。
原始模型冻结大部分权重,只训练少量新增/修改的权重。完全冻结,不改变任何原始权重。
参数效率较高极高 (比 LoRA 高 10-50 倍)
核心理念“微调模型的大脑结构”“在思考过程中引导模型的思维流”

2. 理论动机

ReFT 的设计建立在“模型可解释性”研究的坚实理论基础之上。

a. 线性表征假说 (Linear Representation Hypothesis)

这是一个非常重要的假说,它认为:神经网络中的各种抽象概念(如语言学特征、逻辑关系等),是被编码在表征的线性子空间 (linear subspaces) 中的。

通俗地讲,模型内部表示“猫”之类的概念,可能不是靠单个神经元,而是靠一组神经元(一个向量空间)的线性组合来表示。这个概念的方向是线性的。

b. 分布式交换干预 (Distributed Interchange Intervention, DII)

基于上述假说,可解释性研究开发出一种名为“分布式交换干预”(DII)的分析工具,用于精准地验证和操控这些线性子空间中的概念。其公式如下:

DII(b,s,R)=b+RT(RsRb)\text{DII}(b, s, R) = b + R^T(Rs - Rb)
  • bb: 原始输入产生的原始表征。
  • ss: “反事实”的源输入产生的源表征。
  • RR: 一个低秩投影矩阵,它定义了我们感兴趣的线性子空间(例如,代表“情感”的子空间)。
  • RsRsRbRb: 分别是 ssbbRR 定义的子空间上的投影。

这个公式的直观含义是:保持 bb 在子空间之外的部分不变,但在 RR 定义的这个特定“概念方向”上,将 bb 的值强行“拉向”或“替换为” ss 的值。这是一种极其精准的、只在特定概念上进行的表征编辑

可以将 RsRbRs - Rb 理解为一个“修改指令”向量,它指导从原始表征到源表征的调整RR 是我们用来提取我们需要的特征的工具,RTR^T 则是将我们的修改指令“注入回去”我们关心的特征的工具。

研究者发现,用来寻找子空间矩阵 RR 的算法(DAS)能力极其强大,甚至能在随机初始化的模型上强行拟合出有效的“因果子空间”来完成任务。

这带来了一个巨大的启发:既然这个工具能如此强力地控制模型的行为,为什么不直接利用它来作为一种控制工具,去适配下游新任务呢?

3. LoReFT:一种强大的 ReFT 实现

基于上述动机,低秩线性子空间 ReFT (Low-rank Linear Subspace ReFT, LoReFT) 应运而生。它直接将 DII 这个“分析工具”改造成了一个“微调工具”。

a. LoReFT 的干预函数

LoReFT 的核心思想是:我们不再需要一个“源表征 ss”,而是直接学习一个目标变换,引导模型产生正确的任务输出。它的干预函数如下:

ΦLoReFT(h)=h+RT(Wh+bRh)\Phi_{\text{LoReFT}}(h) = h + R^T(Wh + b - Rh)
  • hh: 当前层的隐藏表征。
  • R,W,bR, W, b: 所有需要学习的参数RR 是定义干预子空间的低秩矩阵,WWbb 共同构成一个线性的目标变换。
  • Wh+bWh+b: 这部分替代了 DII 公式中的 RsRs。它根据当前的表征 hh动态地计算出在 RR 子空间内,hh 应该被编辑成的目标值

在微调过程中,大语言模型本身的参数完全冻结,我们只学习 RR, WW, bb 这几个小矩阵,因此参数效率极高。

b. LoReFT 的应用

  • 生成任务: 在每个生成步骤中,都对隐藏表征应用 LoReFT 干预,然后计算交叉熵损失。
  • 分类任务: 在模型之上增加一个小的分类头。先对模型的表征应用 LoReFT 干预,然后将干预后的最终表征送入分类头进行分类。同时学习干预函数的参数和分类头的参数。

4. 通用 ReFT 框架与 pyreft

LoReFT 只是 ReFT 家族中的一员。一个通用的 ReFT 方法可以被定义为一系列“干预”的集合。

a. 干预 (Intervention) 的定义

一个“干预” II 被定义为一个三元组 I=Φ,P,LI = \langle\Phi, P, L\rangle

  • Φ\Phi: 干预函数,带有可学习参数,负责修改表征。
  • PP: 干预位置,指定干预作用于输入序列中的哪些 token 上。
  • LL: 干预层,指定干预发生在模型的哪一层。

b. pyreft 实践

作者开源了 pyreft 库,可以轻松地将 ReFT 应用于 HuggingFace 模型。

# Import necessary libraries
import torch
import transformers
from pyreft import get_reft_model, ReftConfig, LoreftIntervention

# 1. Load the pretrained model
model_name_or_path = "yahma/llama-7b-hf"
model = transformers.AutoModelForCausalLM.from_pretrained(...)

# 2. Define the ReFT configuration (core)
reft_config = ReftConfig(representations={
    "layer": 19,                      # Specify intervention at layer 19
    "component": "block_output",      # Intervene on the output of the Transformer block
    "intervention": LoreftIntervention( # Use LoReFT as the intervention type
        embed_dim=model.config.hidden_size,
        low_rank_dimension=1          # Use rank-1 projection for minimal parameters
    )
})

# 3. Apply the ReFT configuration to the model
reft_model = get_reft_model(model, reft_config)
reft_model.print_trainable_parameters() # Print the number of trainable parameters (very few)

# 4. Now you can train the model as a standard HuggingFace model...

5. ReFT 与相关工作的对比

方法类型工作原理主要缺点ReFT 的优势
适配器 (Adapters)在层间插入新的可训练模块。增加推理延迟,因为引入了无法合并的新组件。无推理延迟(干预是数学变换),参数效率更高。
LoRA学习低秩的权重更新,可合并回原权重。仍操作于权重空间,参数效率不如 ReFT。直接操作表征,更根本、更高效(10-50倍)。
提示词微调在输入端添加可训练的“软提示”。性能通常次优,且会增加推理开销(输入变长)。性能更强,不增加输入长度。

Comments

Total words: 2775