PEFT documentation

BEFT:低数据场景下语言模型的偏差高效微调

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.21.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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

< >

( 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

< >

( 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 to False) — 在 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)

属性:

Update on GitHub