DoRA(ドーラ)
Weight-Decomposed Low-Rank Adaptationの略。LoRAを進化させ、事前学習済み重みを「大きさ(magnitude)」と「方向(direction)」に分解して学習する手法。LoRAより学習効率と性能が向上する。
DoRA (Weight-Decomposed Low-Rank Adaptation) とは
DoRAは2024年1月にShih-Yang Liu et al. (NTU / NVIDIA) が提案したPEFT手法(論文: "DoRA: Weight-Decomposed Low-Rank Adaptation")。LoRAの学習効率の問題を「重みのmagnitude/direction分解」で解決し、フルFTに近い学習ダイナミクスを実現する。
LoRAの課題とDoRAの解決策
LoRAの学習パターン
LoRAはΔW = BA(低ランク行列積)で重みを更新。研究者が観察したところ、LoRAの更新はmagnitude(大きさ)とdirection(方向)を同時に変化させる傾向があり、フルFTの更新パターンと異なる。
DoRAの分解
# 通常の重み行列 W
# DoRAはWをmagnitudeとdirectionに分解:
W = m * (V / ||V||) # m: magnitude列ベクトル, V/||V||: unit directionベクトル
# LoRAはdirectionの低ランク更新のみ担当:
W_new = (m + delta_m) * ((V + delta_V_LoRA) / ||V + delta_V_LoRA||)
- magnitude (m): 学習可能スカラーベクトル(次元数 = 出力次元)
- direction (ΔV): LoRAの低ランク更新 (BA) で近似
LoRAとDoRAの比較
| 項目 | LoRA | DoRA |
|---|---|---|
| 更新対象 | ΔW = BA | magnitude + direction(BA) |
| 追加パラメータ | 2×r×d | 2×r×d + d (magnitude) |
| VRAMオーバーヘッド | なし | 微増(無視できる程度) |
| 学習安定性 | 標準 | 向上(フルFTに近い) |
| 推論速度 | LoRAとマージ可能 | 同様にマージ可能 |
ベンチマーク性能 (LLaMA-7B)
| タスク | Full FT | LoRA (r=16) | DoRA (r=16) |
|---|---|---|---|
| Commonsense Reasoning | 基準 | -3.2% | -1.1% |
| VQA-v2 | 基準 | -2.8% | -0.9% |
| COCO Caption | 基準 | -1.5% | -0.5% |
DoRAはLoRAとFull FTの中間に位置し、パラメータ効率を保ちながら性能ギャップを縮小。
実装とフレームワーク対応
HuggingFace PEFT
from peft import LoraConfig, get_peft_model
config = LoraConfig(
r=16,
lora_alpha=32,
use_dora=True, # DoRA有効化
target_modules=['q_proj', 'v_proj'],
)
model = get_peft_model(base_model, config)
Unsloth
model, tokenizer = FastLanguageModel.from_pretrained(
model_name='unsloth/llama-3-8b',
use_dora=True, # DoRA有効化
)
DoRAを使うべきケース
- LoRAで性能が頭打ちの特定ドメイン適応タスク
- VLM(Vision-Language Model)のマルチモーダルFT
- Full FTと性能差を最小化したい商用アプリケーション
- すでにLoRA環境が整備されている(移行コストが低い)
VeRA等の派生手法
DoRAの登場以降、Weight Decompositionアプローチが研究されている:
- VeRA: 共有ランダム行列 + スケールベクトルで更新(パラメータ数さらに削減)
- MoLoRA: Mixture-of-LoRA experts でタスク適応
- LoRA+: AdamW学習率を行列AとBで非対称に設定して収束を改善
よくある質問 (FAQ)
Q1: DoRAはLoRAのドロップイン代替として使えるか?
A: ほぼ同じハイパーパラメータ(r, alpha, target_modules)でuse_dora=Trueを追加するだけで試せる。パラメータ数は微増(出力次元分のmagnitudeベクトル追加)するが無視できる程度。
Q2: LoRAよりDoRAが必ずしも良いわけではないか? A: 一般的な指示チューニングではLoRAとDoRAの差は小さい(0〜1%程度)。複雑なドメイン特化・VLMタスクで差が出やすい。シンプルなタスクならLoRAで十分。
Q3: DoRAの学習時間はLoRAより長い? A: magnitude更新の追加計算はごく微小で、実質的に同じ学習時間。Unsloth環境では速度差は測定誤差範囲内。
まとめ
- LoRAを進化させたPEFT手法(2024年NTU/NVIDIA提案)
- 重みをmagnitude + directionに分解しフルFTの学習パターンに近づける
- LoRA比1〜5%性能向上、パラメータ数の微増で実現
- PEFT v0.10.0+、Unslothで
use_dora=True一行で有効化