AI・機械学習
上級

DoRA(重み分解低ランク適応)(ドーラ ジュウミブンカイテイランクテキオウ)

LoRAを「方向(Direction)」と「大きさ(Magnitude)」に分解して適用するPEFT手法。大きさはスカラーベクトルで更新し、方向成分にLoRAを適用することで、フルファインチューニングに近い学習挙動を実現する。

0 回閲覧
0 いいね
2026/6/7 更新
関連タグ
PEFT
ファインチューニング
DoRA
重み分解
LoRA改良

DoRA(重み分解低ランク適応)

概要

DoRA(Weight-Decomposed Low-Rank Adaptation)は、LoRAの改良版PEFT手法だ。Liu et al.(2024)が発表し、重み行列を方向(Direction)と大きさ(Magnitude)に分解することで、LoRAよりフルファインチューニングに近い学習挙動を実現した。

LoRAの問題:学習挙動の違い

LoRAはフルFTと比べて学習挙動が異なることが分析で判明:

フルFT: Magnitude変化 と Direction変化 が両方大きい
LoRA:  Direction変化 は大きいが、Magnitude変化 は小さい

→ LoRAはフルFTと異なる方向に最適化される

重み分解の数式

重み行列 W を次のように分解:

W = m · (V / ||V||)    (V: 方向行列、m: 大きさベクトル)

      ↓ DoRAの更新

W' = (m + Δm) · (W₀ + ΔW_LoRA) / ||W₀ + ΔW_LoRA||

学習するパラメータ:
  - Δm: 大きさの変化(スカラーベクトル、超軽量)
  - ΔW_LoRA = BA: 方向の変化(LoRAアダプタ)
  - W₀: 元の重み行列(凍結)

実装例(Hugging Face PEFT対応)

from peft import LoraConfig, get_peft_model

# DoRAはuse_dora=TrueでLoRAConfigに統合
config = LoraConfig(
    r=16,
    lora_alpha=32,
    target_modules=["q_proj", "v_proj", "k_proj", "o_proj"],
    use_dora=True,    # DoRA有効化
    bias="none",
)

model = get_peft_model(model, config)

LoRAとの性能比較

LLaMA-2-7B(Commonsense推論、同ランク設定)

手法BoolQPIQAARC-eWinoGrande平均
LoRA r=3268.979.974.878.175.4
DoRA r=3269.781.076.579.876.8

同ランク・同パラメータ数でLoRAを一貫して上回る。

LLaVA-1.5(VQA・視覚言語タスク)

  • VQAv2: LoRA 79.3% → DoRA 80.1%
  • TextVQA: LoRA 56.7% → DoRA 58.2%

LoRAとDoRAの使い分け

観点LoRADoRA
追加実装コストなしほぼなし(use_dora=True)
学習速度速いわずかに遅い(ノルム計算)
性能標準LoRA+0.5〜2.0ポイント
推薦場面プロトタイプ・高速実験本番品質を狙う場合
この記事について
カテゴリーAI・機械学習
難易度上級
作成日2026/6/7