PEFT documentation

Polytropon

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

Polytropon

Polytroponは、その「インベントリ」に多数の異なるLoRAアダプターを備えたマルチタスクモデルです。このモデルは、ルーティング関数を用いてインベントリから正しいアダプターの組み合わせを学習し、特定のタスクに対して最適なモジュールのサブセットを選択します。PEFTはPolytropon用のMulti-Head Adapter Routing (MHR)もサポートしており、これはアダプターヘッドをより細粒度で組み合わせることで、ルーティング関数を構築・改善します。アダプターヘッドは互いに重複しないブロックに分割され、それぞれに対して異なるルーティング関数が学習されるため、より高い表現力が得られます。

マルチタスク学習におけるモジュール化されたスキルの組み合わせ
タスク横断汎化のためのマルチヘッドアダプタルーティング

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

モジュール化された設計は、ニューラルモデルが知識の異なる側面を分離し再結合することを促し、新しいタスクへのより体系的な汎化を可能にします。本研究では、各タスクが(潜在的に小さい)インベントリからの潜在離散スキル(latent discrete skills)の部分集合に関連付けられていると仮定します。その際、スキルはパラメータ効率の高い(スパース / 低ランク)モデルのパラメータ化に対応します。これらとタスク-スキル割当行列を同時に学習することで、各タスクのネットワークは、アクティブなスキルのパラメータの平均としてインスタンス化されます。タスク間でスキルが非自明なソフトパーティションを形成することを好むよう、インドアン・ビュッフェ・プロセス(Indian Buffet Process)の事前分布や2段階の学習率などの一連の誘導バイアスを実験的に適用しました。潜在スキルモデルは、主に以下の2つの設定で評価しました。1) BabyAIプラットフォームの8レベルにおける、グラウンデッドな指示追従のためのマルチタスク強化学習。2) CrossFit(160のNLPタスクで構成されるベンチマーク)における、事前学習済みテキスト-テキスト生成モデルのファインショット適応。完全共有、タスク固有、または条件付き生成のパラメータを持つベースライン(タスク間で知識が絡み合っている場合)と比較して、ネットワークのモジュール化された設計は、強化学習におけるサンプル効率と、教師あり学習におけるファインショット汎化を大幅に向上させることがわかりました。さらに、離散スキルが明示的なタスク階層を生成するため、解釈可能性にどのように寄与するかを示しました。

まず学習なしでルーティングを試したい場合は、Arrow LoRA バリアントを確認できます。

API

PolyConfig

クラス peft.PolyConfig

< >

( 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 = Falser: int = 8target_modules: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Nonemodules_to_save: Optional[list[str]] = Noneinit_weights: bool = Truepoly_type: Literal['poly'] = 'poly'n_tasks: int = 1n_skills: int = 4n_splits: int = 1 )

パラメータ

  • r (int) — Poly における各 Lora のアテンション次元。
  • target_modules (Union[List[str],str]) — Poly を適用するモジュールの名前。
  • exclude_modules (Optional[Union[List[str], str]]) — アダプタを適用しないモジュールの名前。文字列を渡す場合、正規表現によるマッチングが行われます。文字列のリストを渡す場合、完全一致が行われるか、モジュール名が渡された文字列のいずれかで終わるかがチェックされます。
  • modules_to_save (List[str]) — Poly 層を除き、学習可能に設定して最終チェックポイントに保存するモジュールのリスト
  • init_weights (bool) — Polyの重みの初期化を実行するかどうか。
  • poly_type (Literal["poly"]) — 使用する Poly モジュールのバリアントです。現在サポートされているのは “poly” のみです。
  • n_tasks (int) — マルチタスクシナリオにおけるタスクの数。
  • n_skills (int) — 各 Poly レイヤーに含まれるスキル(LoRA)の数。
  • n_splits (int) — Poly レイヤー内の各 LoRA の分割数。1 より大きい値は、Multi-Head Routing (MHR) が使用されていることを示します。

これはPolyModelの設定を保存するための設定クラスです。

PolyModel

class peft.PolyModel

< >

( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )

Update on GitHub