ReFT
生成: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)的分析工具,用于精准地验证和操控这些线性子空间中的概念。其公式如下:
- : 原始输入产生的原始表征。
- : “反事实”的源输入产生的源表征。
- : 一个低秩投影矩阵,它定义了我们感兴趣的线性子空间(例如,代表“情感”的子空间)。
- 和 : 分别是 和 在 定义的子空间上的投影。
这个公式的直观含义是:保持 在子空间之外的部分不变,但在 定义的这个特定“概念方向”上,将 的值强行“拉向”或“替换为” 的值。这是一种极其精准的、只在特定概念上进行的表征编辑。
可以将 理解为一个“修改指令”向量,它指导从原始表征到源表征的调整。 是我们用来提取我们需要的特征的工具, 则是将我们的修改指令“注入回去”我们关心的特征的工具。
研究者发现,用来寻找子空间矩阵 的算法(DAS)能力极其强大,甚至能在随机初始化的模型上强行拟合出有效的“因果子空间”来完成任务。
这带来了一个巨大的启发:既然这个工具能如此强力地控制模型的行为,为什么不直接利用它来作为一种控制工具,去适配下游新任务呢?
3. LoReFT:一种强大的 ReFT 实现
基于上述动机,低秩线性子空间 ReFT (Low-rank Linear Subspace ReFT, LoReFT) 应运而生。它直接将 DII 这个“分析工具”改造成了一个“微调工具”。
a. LoReFT 的干预函数
LoReFT 的核心思想是:我们不再需要一个“源表征 ”,而是直接学习一个目标变换,引导模型产生正确的任务输出。它的干预函数如下:
- : 当前层的隐藏表征。
- : 所有需要学习的参数。 是定义干预子空间的低秩矩阵, 和 共同构成一个线性的目标变换。
- : 这部分替代了 DII 公式中的 。它根据当前的表征 ,动态地计算出在 子空间内, 应该被编辑成的目标值。
在微调过程中,大语言模型本身的参数完全冻结,我们只学习 , , 这几个小矩阵,因此参数效率极高。
b. LoReFT 的应用
- 生成任务: 在每个生成步骤中,都对隐藏表征应用 LoReFT 干预,然后计算交叉熵损失。
- 分类任务: 在模型之上增加一个小的分类头。先对模型的表征应用 LoReFT 干预,然后将干预后的最终表征送入分类头进行分类。同时学习干预函数的参数和分类头的参数。
4. 通用 ReFT 框架与 pyreft
库
LoReFT 只是 ReFT 家族中的一员。一个通用的 ReFT 方法可以被定义为一系列“干预”的集合。
a. 干预 (Intervention) 的定义
一个“干预” 被定义为一个三元组 :
- : 干预函数,带有可学习参数,负责修改表征。
- : 干预位置,指定干预作用于输入序列中的哪些 token 上。
- : 干预层,指定干预发生在模型的哪一层。
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