AI・機械学習
上級

DARE(ランダム除去マージ)(デア)

各モデルのタスクベクトルからパラメータをランダムにドロップアウトし、残ったパラメータをスケーリングして統合するマージ手法。確率的探索により高品質なマージ解を発見できる。

0 回閲覧
0 いいね

DAREとは

DARE(Drop And REscale)は、2023年にYu Yuらが発表したLLMモデルマージ手法である(論文: "Language Models are Super Mario: Absorbing Abilities from Homologous Models as a Free Lunch")。各モデルのタスクベクトル(ベースモデルとの重み差分)からパラメータをランダムにドロップアウト(ゼロ化)し、残ったパラメータを適切にスケーリングして統合する。Dropoutの確率的性質を活用することで、決定論的手法では到達できない高品質なマージ解を発見できる点が特徴である。

DAREのアルゴリズム

Step 1: タスクベクトル抽出

各ファインチューニング済みモデルからベースモデルとの差分(タスクベクトル)を計算:

δ_i = θ_finetuned_i - θ_base

Step 2: ランダムドロップアウト

各タスクベクトルのパラメータをドロップ率 p でランダムにゼロ化:

m_i ~ Bernoulli(1-p)  # 各パラメータに対するマスク
δ_i_dropped = δ_i ⊙ m_i

Step 3: リスケーリング

ドロップアウトによる期待値のずれを補正するため、1/(1-p) でスケーリング:

δ_i_rescaled = δ_i_dropped / (1-p)

Step 4: 統合

スケーリング済みタスクベクトルを加重和で統合し、ベースモデルに加算:

θ_merged = θ_base + Σ(w_i × δ_i_rescaled)

性能比較

手法MMLUGSM8KHumanEvalTruthfulQA平均
Task Arithmetic57.832.128.745.240.9
TIES (k=20)60.335.831.248.143.9
DARE (p=0.9)61.137.233.549.345.3
DARE-TIES62.038.134.250.146.1

※ Llama 2 13B ベース、Math + Code + Safety の3モデルマージ時

mergekit での DARE 設定

models:
  - model: meta-llama/Llama-3.1-8B-Instruct
    parameters:
      density: 0.3
      weight: 1.0
  - model: NousResearch/Hermes-3-Llama-3.1-8B
    parameters:
      density: 0.3
      weight: 0.8
merge_method: dare_ties
base_model: meta-llama/Llama-3.1-8B
parameters:
  int8_mask: true
  normalize: true
dtype: bfloat16

merge_method の選択肢

  • dare_linear: DARE + 線形統合(シンプル)
  • dare_ties: DARE + TIES の符号多数決(推奨・最高品質)

主要パラメータ

  • density: ドロップアウト後に保持する割合(1-p に相当)。0.1〜0.5 が一般的
  • weight: 各モデルの寄与率
  • int8_mask: マスク生成を int8 で行いメモリ削減
  • normalize: 統合後の正規化

DARE の理論的背景

DAREの名前は「Super Mario」論文に由来する。マリオがキノコを取って能力を得るように、LLMも他のモデルから「能力を吸収」できるという比喩である。

核心的な発見は以下の2点:

  1. タスクベクトルの冗長性: ファインチューニングで変化するパラメータの大部分は冗長であり、90%をドロップしても性能が維持される
  2. リスケーリングの重要性: ドロップアウト後にリスケーリングしないと期待値がずれ、性能が大幅に劣化する。1/(1-p) スケーリングが理論的に正しい補正

DARE vs TIES vs SLERP の使い分け

シナリオ推奨理由
2モデル、安定性重視SLERPノルム保持で最も安定
3+モデル、決定論的TIES再現性が高い
3+モデル、最高品質DARE-TIES確率的探索 + 干渉除去
能力の強い移植DARE (低density)特化パラメータに集中
再現性必須の本番環境TIES or SLERPDAREはシードで結果が変わる

よくある質問(FAQ)

Q1: density(ドロップ率)の最適値は? A: 驚くべきことに、非常に低い density(0.1〜0.3、つまり70〜90%ドロップ)で最良の結果が得られることが多い。これはタスクベクトルの高い冗長性を反映している。ただし density が低すぎると(0.05以下)情報喪失が起き、高すぎると(0.7以上)干渉が増大する。0.2〜0.3 を起点に調整するのが実務的。

Q2: DAREの結果は実行ごとに変わる? A: はい。ランダムドロップアウトを使うため、同じ設定でも異なるマスクが生成され結果が変わる。mergekit では --seed オプションで乱数シードを固定できる。本番環境では必ずシードを固定して再現性を確保すること。

Q3: DARE-TIES と DARE-Linear のどちらを使うべき? A: ほぼすべてのケースで DARE-TIES を推奨する。DARE-Linear は DARE 後に単純加算するだけだが、DARE-TIES は DARE 後にさらに TIES の符号多数決で干渉を除去する。ベンチマーク上 DARE-TIES が DARE-Linear を平均 1〜3 ポイント上回る。

まとめ

  • DARE はタスクベクトルのランダムドロップアウト + リスケーリングによるマージ手法
  • 90%のパラメータをドロップしても性能が維持される高い冗長性を利用
  • DARE-TIES(DARE + TIES符号多数決)が多くの場合で最高品質
  • density 0.2〜0.3 を起点に調整、本番では乱数シード固定が必須