PEFT documentation
BEFT:低数据场景下语言模型的偏差高效微调
BEFT:低数据场景下语言模型的偏差高效微调
BEFT 是一种参数高效微调算法(PEFT),它仅微调预训练 transformer 模型中 value 投影所添加的偏置项。BEFT 表明,与微调 query/key 投影的添加偏置项相比,微调预训练 transformer 中 value 投影的添加偏置项,在低数据场景下通常能带来更高的下游性能。
BEFT 目前存在以下权衡:
优点:
- BEFT 所需的参数远少于 LoRA,同时在低数据场景下,其在各项任务中仍能保持具有竞争力甚至更优的性能。
缺点:
- 在高数据量场景下,与 LoRA 和全参数微调相比,BEFT 的有效性可能较为有限。
如果您的用例属于高数据量场景,请考虑使用 LoRA 等其他 PEFT 方法。
该论文的摘要如下:
微调大型语言模型(LLMs)中的偏置项,有望在保持具有竞争力的性能的同时,实现前所未有的参数效率,尤其是在低数据场景下。然而,微调不同的偏置项(即查询、键或值投影中的 bq、bk 和 bv)与下游性能之间的联系,迄今为止仍 largely 不明确。在本文中,我们研究了微调 bq、bk 和 bv 与下游任务性能之间的关系。我们的主要发现是,与 bv 相比,直接微调 bq 和 bk 在低数据场景下通常会导致更高的下游性能。我们在涵盖仅编码器和仅解码器架构、参数规模高达 6.7B 的广泛 LLM(包括无偏置 LLM)上,对该独特属性进行了广泛评估。我们的结果为直接微调 bv 在各种下游任务中的有效性提供了强有力的证据。
基准测试概览
API
BeftConfig
类 peft.BeftConfig
< source >( task_type: Optional[Union[str, TaskType]] = Nonepeft_type: Optional[Union[str, PeftType]] = Noneauto_mapping: Optional[dict] = Nonepeft_version: Optional[str] = Nonebase_model_name_or_path: Optional[str] = Nonerevision: Optional[str] = Noneinference_mode: bool = Falsetarget_modules: Optional[Union[list[str], str]] = Nonemodules_to_save: Optional[list[str]] = Noneinit_weights: bool = True )
参数
- target_modules (
Optional[Union[List[str], str]]) — 要应用适配器(adapter)的模块名称。如果指定了此参数,则只有名称匹配的模块会被替换。传入字符串时,将执行正则表达式匹配。传入字符串列表时,将执行精确匹配,或检查模块名称是否以列表中的任一字符串结尾。如果未指定此参数,将根据模型架构自动选择模块。如果架构未知,则会引发错误——在这种情况下,应手动指定目标模块。 - modules_to_save (
Optional[List[str]]) — 除 BEFT 层外,需要设置为可训练并在最终检查点中保存的模块列表。 - init_weights (
bool) — 是否初始化 BEFT 层中的向量,默认为True。不建议将此值设置为False。
这是用于存储 BeftModel 配置的类。
BeftModel
类 peft.BeftModel
< source >( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None ) → torch.nn.Module
参数
- model (PreTrainedModel) — 要适配的模型。
- config (BeftConfig) — (BEFT) 模型的配置。
- adapter_name (
str) — 适配器的名称,默认为"default"。 - low_cpu_mem_usage (
bool,optional, defaults toFalse) — 在 meta 设备上创建空的适配器权重。有助于加快加载过程。
返回值
torch.nn.Module
(BEFT) 模型。
通过仅微调预训练 transformers 模型中值投影的附加偏置项,在低训练数据场景下(BEFT)创建一个 Infused Adapter。该方法的详细描述见 https://arxiv.org/abs/2509.15974
示例:
>>> from transformers import AutoModelForSeq2SeqLM
>>> from peft import BeftConfig, get_peft_model
>>> config = BeftConfig(
... task_type="SEQ_2_SEQ_LM",
... target_modules=["v"],
... )
>>> model = AutoModelForSeq2SeqLM.from_pretrained("t5-base")
>>> beft_model = get_peft_model(model, config)属性:
- model (PreTrainedModel) — 要适配的模型。
- peft_config (BeftConfig): (BEFT) 模型的配置。