# BEFT: 低データ環境における言語モデルのバイアス効率の良いファインチューニング

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

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

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

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

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

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

*大規模言語モデル（LLM）のバイアス項をファインチューニングすることで、特にデータが少ない環境において、競争力のある性能を維持しながら前例のないパラメータ効率を実現する可能性があります。しかし、異なるバイアス項（すなわち、クエリ、キー、またはバリューの射影における**b**q、**b**k、および**b**v）のファインチューニングと下流タスクの性能との間の関係は、現在までほとんど不明なままであります。本論文では、**b**q、**b**k、および**b**vのファインチューニングと下流タスクの性能との関連を調査します。我々の主要な発見は、**b**vを直接ファインチューニングすることが、データが少ない環境において、**b**qや**b**kと比較して、一般的により高い下流タスクの性能をもたらすという点です。バイアスなしのLLMを含む、エンコーダ専用およびデコーダ専用のアーキテクチャにまたがる最大6.7Bパラメータの幅広いLLMにわたって、この独特な性質を広く評価しました。我々の結果は、**b**vの直接ファインチューニングが、さまざまな下流タスクにおいて有効であることを示す強力な証拠を提供します*

## ベンチマーク概要

<iframe src="https://peft-internal-testing-peft-method-comparison-embed.hf.space/?highlight[type]=BEFT" frameborder="0" width="850" height="1000"
>

# API

## BeftConfig[[peft.BeftConfig]]

#### peft.BeftConfig[[peft.BeftConfig]]

```python
peft.BeftConfig(task_type: Optional[Union[str, TaskType]] = None, peft_type: Optional[Union[str, PeftType]] = None, auto_mapping: Optional[dict] = None, peft_version: Optional[str] = None, base_model_name_or_path: Optional[str] = None, revision: Optional[str] = None, inference_mode: bool = False, target_modules: Optional[Union[list[str], str]] = None, modules_to_save: Optional[list[str]] = None, init_weights: bool = True)
```

[ソース](https://github.com/huggingface/peft/blob/main/src/peft/tuners/beft/config.py#L25)

**パラメータ:**

target_modules (`Optional[Union[List[str], str]]`) : アダプタを適用するモジュールの名前です。これを指定した場合、指定された名前のモジュールのみが置き換えられます。文字列を渡す場合は、正規表現によるマッチングが行われます。文字列のリストを渡す場合は、完全一致が行われるか、モジュールの名前が渡された文字列のいずれかで終わるかがチェックされます。これを指定しない場合、モデルのアーキテクチャに基づいてモジュールが選択されます。アーキテクチャが不明な場合はエラーが発生します。この場合、ターゲットモジュールを手動で指定する必要があります。

modules_to_save (`Optional[List[str]]`) : BEFTレイヤーを除き、最終チェックポイントに保存されるように学習可能に設定するモジュールのリスト。

init_weights (`bool`) : BEFT層のベクトルを初期化するかどうか。デフォルトは`True`です。この値を`False`に設定することは推奨されません。

これは[BeftModel](/docs/peft/main/ja/package_reference/beft#peft.BeftModel)の設定を保存するための設定クラスです。

## BeftModel[[peft.BeftModel]]

#### peft.BeftModel[[peft.BeftModel]]

```python
peft.BeftModel(model, peft_config: Union[PeftConfig, dict[str, PeftConfig]], adapter_name: str, low_cpu_mem_usage: bool = False, state_dict: Optional[dict[str, torch.Tensor]] = None)
```

[ソース](https://github.com/huggingface/peft/blob/main/src/peft/tuners/beft/model.py#L26)

**パラメータ:**

model ([PreTrainedModel](https://huggingface.co/docs/transformers/main/en/main_classes/model#transformers.PreTrainedModel)) : 適応させる対象のモデル。

config ([BeftConfig](/docs/peft/main/ja/package_reference/beft#peft.BeftConfig)) : (BEFT)モデルの設定です。

adapter_name (`str`) : アダプターの名前。デフォルトは`"default"`です。

low_cpu_mem_usage (`bool`、`optional`、デフォルトは`False`) : メタデバイス上に空のアダプター重みを生成します。読み込みプロセスを高速化するために有用です。

**戻り値:** `torch.nn.Module`

The (BEFT) モデル。

https://arxiv.org/abs/2509.15974 に詳細が記載されている手法 (BEFT) を用いて、事前学習済みの Transformers モデルの値投影 (value projections) に追加されたバイアス項のみをファインチューニングすることで、Infused Adapter を作成します。この手法は、学習データが少ない環境 (low-training-data regimes) での使用を想定しています。

例:

```py
>>> 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](https://huggingface.co/docs/transformers/main/en/main_classes/model#transformers.PreTrainedModel)) -- 適応させる対象のモデル。
- **peft_config** ([BeftConfig](/docs/peft/main/ja/package_reference/beft#peft.BeftConfig)): (BEFT)モデルの設定です。

