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は、事前学習済みtransformerモデルのvalue projectionに追加されたbias項のみをファインチューニングするパラメータ効率ファインチューニングアルゴリズム(PEFT)です。BEFTは、事前学習済みtransformerのvalue projectionに追加されたbias項をファインチューニングすることは、query/key projectionに追加されたbias項をファインチューニングするよりも、低データ量環境において一般的に下流タスクの性能を向上させることを示しています。

BEFTには現在、以下のトレードオフがあります:

利点:

  • BEFTはLoRAよりもはるかに少ないパラメータ数で済む一方、低データ環境においてタスク全体で競争力のある、あるいはそれ以上のパフォーマンスを維持します。

デメリット:

  • データ量が多い環境では、BEFTはLoRAや全パラメータのファインチューニングと比較して、効果が限定的になる場合があります。

ユースケースが高データ量のリジームに該当する場合は、LoRAなどの他のPEFTメソッドを検討してください。

論文の抄録は以下の通りです:

大規模言語モデル(LLM)のバイアス項をファインチューニングすることで、特にデータが少ない環境において、競争力のある性能を維持しながら前例のないパラメータ効率を実現する可能性があります。しかし、異なるバイアス項(すなわち、クエリ、キー、またはバリューの射影における bq、bk、および bv)のファインチューニングと下流タスクの性能との関連性は、現在までほとんど不明なままです。本論文では、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]]) — アダプタを適用するモジュールの名前です。このパラメータが指定されている場合、指定された名前のモジュールのみが置き換えられます。文字列を渡す場合、正規表現によるマッチングが行われます。文字列のリストを渡す場合、完全一致が行われるか、モジュール名が渡された文字列のいずれかで終わるかがチェックされます。このパラメータが指定されていない場合、モデルのアーキテクチャに基づいてモジュールが選択されます。アーキテクチャが不明な場合はエラーが発生します。この場合、ターゲットモジュールを手動で指定する必要があります。
  • 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、デフォルトはFalse) — メタデバイス上に空のアダプター重みを生成します。読み込みプロセスを高速化するために有用です。

戻り値

torch.nn.Module

(BEFT)モデル。

事前学習済みtransformersモデルの値投影の追加バイアス項のみをファインチューニングすることで、Infused Adapterを作成します(BEFT)。この手法の詳細は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