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推論、同ランク設定)
| 手法 | BoolQ | PIQA | ARC-e | WinoGrande | 平均 |
|---|---|---|---|---|---|
| LoRA r=32 | 68.9 | 79.9 | 74.8 | 78.1 | 75.4 |
| DoRA r=32 | 69.7 | 81.0 | 76.5 | 79.8 | 76.8 |
同ランク・同パラメータ数でLoRAを一貫して上回る。
LLaVA-1.5(VQA・視覚言語タスク)
- VQAv2: LoRA 79.3% → DoRA 80.1%
- TextVQA: LoRA 56.7% → DoRA 58.2%
LoRAとDoRAの使い分け
| 観点 | LoRA | DoRA |
|---|---|---|
| 追加実装コスト | なし | ほぼなし(use_dora=True) |
| 学習速度 | 速い | わずかに遅い(ノルム計算) |
| 性能 | 標準 | LoRA+0.5〜2.0ポイント |
| 推薦場面 | プロトタイプ・高速実験 | 本番品質を狙う場合 |