PEFT documentation
WaveFT: ウェーブレットファインチューニング
WaveFT: ウェーブレットファインチューニング
WaveFTは、残差行列のウェーブレット領域にスパースな更新を導入する、新しいパラメータ効率の良いファインチューニング(PEFT)手法です。離散的な低ランクの選択に制約されるLoRAとは異なり、WaveFTは変換空間内でスパースな係数の集合を直接学習することで、学習可能なパラメータ数に対する微細な制御を可能にします。これらの係数はその後、逆離散ウェーブレット変換(IDWT)によって重み領域へマッピングされ、推論時のオーバーヘッドを発生させることなく、高ランクの更新を生成します。
WaveFTには現在、以下の制約があります:
- サポートされているのは
nn.Linearレイヤーのみです。
論文の抄録は以下の通りです:
大規模な基盤モデルを効率的に適応させることは、特に計算リソースやメモリ予算が限られている場合に重要です。LoRAなどのパラメータ効率の良いファインチューニング(PEFT)手法は、パラメータ数が少ない領域では、粒度と有効性に限界があります。本稿では、Wavelet Fine-Tuning(WaveFT)という新しいPEFT手法を提案します。WaveFTは、残差行列のウェーブレット領域で非常にスパースな更新を学習します。WaveFTは学習可能なパラメータを精密に制御でき、細粒度の容量調整を提供し、驚くほど少ないパラメータ数で優れた性能を発揮します。LoRAの最小値よりもはるかに少ないパラメータ数で動作する可能性があり、極端なパラメータ効率シナリオに最適です。Stable Diffusion XLをベースラインとして、パーソナライズされたテキストから画像への生成タスクで評価した結果、WaveFTはLoRAや他のPEFT手法を大きく上回り、特にパラメータ数が少ない場合に、被写体の忠実度、プロンプトとの整合性、画像の多様性において優れた結果を示しました。
ベンチマーク概要
API
WaveFTConfig
クラス peft.WaveFTConfig
< 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 = Falsen_frequency: int = 2592scaling: float = 25.0wavelet_family: str = 'db1'use_idwt: bool = Truerandom_loc_seed: int = 777fan_in_fan_out: bool = Falsetarget_modules: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Nonebias: str = 'none'modules_to_save: Optional[list[str]] = Nonelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Nonen_frequency_pattern: Optional[dict] = <factory>proportional_parameters: bool = Falseinit_weights: bool = True )
パラメータ
- n_frequency (
int) — 離散ウェーブレット変換 (DWT) における学習可能なウェーブレット係数の数です。‘n_frequency’ は 0 より大きく、元の重み行列の要素総数 (d_out * d_in) 以下である整数です。このパラメータは、各適応レイヤーの学習可能パラメータ数を直接制御します。‘n_frequency’ が大きいほど一般的にパフォーマンスは向上しますが、GPU メモリ使用量も増加し、トレーニング速度にはわずかな影響を与えます。 - scaling (
float) — 再構成されたデルタ W 行列に適用されるスケーリング係数です。これは LoRA のlora_alphaに相当する重要なハイパーパラメータであり、ハイパーパラメータ探索時に調整できます。SDXL のパーソナライズにおけるデフォルト値は 25 です。 - wavelet_family (
str) — DWTおよびInverse DWT (IDWT)に使用するウェーブレットファミリー(例: ‘db1’, ‘sym2’, ‘coif1’)です。デフォルトは ‘db1’ (Haar wavelet) です。異なるウェーブレットファミリーはフィルタ長が異なり、学習時間に大きく影響します。 - use_idwt (
bool) — 効率的な適応のために False に設定します。学習されたウェーブレット係数からデルタ重みを再構成するために、逆離散ウェーブレット変換 (IDWT) を使用するかどうかを指定します。True(デフォルト) の場合、IDWT が適用されます。Falseの場合、学習された係数が直接使用されてスパースなデルタ重み行列が形成されます。これは高速ですが、SDXL のパーソナライズタスクでは性能が低下します。 - random_loc_seed (
int) —n_frequency個の学習可能なウェーブレット係数が、完全なウェーブレット係数行列内のどの位置に配置されるかを決定するためのシード。 - target_modules (
Union[list[str],str]) — WaveFTで適応させるモジュールを特定するモジュール名のリスト、または正規表現です。例えば、['q_proj', 'v_proj']または'.*decoder.*(SelfAttention|EncDecAttention).*(q|v)$'。現在、サポートされているのは線形レイヤー(torch.nn.Linear)のみです。 - exclude_modules (
Optional[Union[List[str], str]]) — WaveFT の適応から除外するモジュールの名前のリスト、または正規表現です。 - fan_in_fan_out (
bool) — 置き換え対象のレイヤーの重みが(fan_in, fan_out)形式で保存されている場合はTrueに設定します。デフォルトはFalseです。 - bias (
str) — WaveFT のバイアス型です。‘none’、‘all’、または ‘waveft_only’ を指定できます。(‘fourier_only’ はおそらく誤記であり、適応されたパラメータにのみバイアスを適用することを意味する場合、‘waveft_only’ に修正されています)‘waveft_only’ の場合、バイアスは WaveFT コンポーネントにのみ追加されます。‘all’ の場合、ベースコンポーネントと WaveFT コンポーネントの両方にバイアスが追加されます。‘none’ の場合、新しいバイアスは追加されません。 - modules_to_save (
list[str]) — WaveFT のレイヤーに加えて、学習可能としてマークし、最終的なチェックポイントに保存すべきモジュールのリストです。シーケンス分類やトークン分類タスクにおける分類器のような、ランダムに初期化され学習が必要なレイヤーに有用です。 - layers_to_transform (
Union[list[int],int]) — 変換対象の特定のレイヤーのインデックスです。指定された場合、PEFT はこれらのインデックスのレイヤーのみを適応させます。単一の整数が指定された場合、そのレイヤーのみが変換されます。 - layers_pattern (
Optional[Union[List[str], str]]) —layers_to_transformが指定され、レイヤーのパターンが標準的でない場合(例: ‘layers’ や ‘h’ ではない場合)に使用する、レイヤー名のパターンです。これはモデル内のnn.ModuleList属性を対象とすべきです。 - n_frequency_pattern (
dict) — レイヤー名(または正規表現)を特定のn_frequency値にマッピングする辞書です。グローバルなn_frequencyを上書きします。例:{"model.decoder.layers.0.encoder_attn.k_proj": 1000}。 - init_weights (
bool) — 学習可能なウェーブレット係数(スペクトル)の初期化戦略です。True(デフォルト)の場合、係数はゼロで初期化されます。Falseの場合、係数は小さな係数でスケーリングされた標準正規分布から初期化されます。 - proportional_parameters (
bool) —Trueの場合、n_frequencyは各レイヤーのinput_dim * output_dimに比例して割り当てられます。デフォルトはFalseです。注: このオプションは、実用的な利点ではなく、研究者が論文の結果を再現できるようにするための実験的な網羅性として含まれています。有益なシナリオは特定されていません。
これはWaveFTModelの設定を保存するための設定クラスです。Wavelet-based Fine-Tuning (WaveFT) のパラメータを定義するために使用されます。WaveFT は、ウェーブレット変換のスパース性を活用して、事前学習済みモデルのパラメータ効率の良いファインチューニングを行うアプローチです。
WaveFTModel
クラス peft.WaveFTModel
< source >( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )