Skip to main content

Model Merging

Model Merging は、複数の fine-tuned checkpoint を 追加学習なし、または少ない検証だけで 一つの model に合成する技術です。Ensemble のように複数 model を同時実行するのではなく、weight space 上で checkpoint を混ぜるため、推論コストを増やさずに能力や robust 性をまとめることを狙います。

Model merging map

自作概念図。共有 base model から作られた task-specific checkpoint を、weight space の rule によって単一 checkpoint に統合します。

基本発想

同じ base model から複数の fine-tuned model を作ったとします。

θA=θ0+ΔA,θB=θ0+ΔB\theta_A = \theta_0 + \Delta_A, \quad \theta_B = \theta_0 + \Delta_B

ここで θ0\theta_0 は base model、ΔA\Delta_AΔB\Delta_B は task vector です。Model merging は、これらの差分を何らかの形で足し合わせます。

θmerge=θ0+λAΔA+λBΔB\theta_{\text{merge}} = \theta_0 + \lambda_A \Delta_A + \lambda_B \Delta_B

この式は単純ですが、実際には task 間の干渉、parameter scale、符号の衝突、normalization layer、embedding の違いなどが問題になります。

Model Soups

Model Soups は、同じ model architecture の複数 checkpoint を単純平均する方法です。

θsoup=1Ni=1Nθi\theta_{\text{soup}} = \frac{1}{N}\sum_{i=1}^{N}\theta_i

Vision model でよく知られ、fine-tuning run や hyperparameter が少し違う checkpoint を平均すると、validation performance や calibration が改善することがあります。LLM でも、同一 base、同一 tokenizer、近い training recipe の checkpoint では単純平均が意外に効く場合があります。

Task Arithmetic

Task Arithmetic は、fine-tuned model と base model の差を task vector と見なし、task vector を加減算します。

Δtask=θfinetunedθbase\Delta_{\text{task}} = \theta_{\text{finetuned}} - \theta_{\text{base}}

たとえば code 能力と math 能力を足す、ある能力を弱める、複数 task を重ねる、といった操作を weight space で行います。ただし、task vector 同士が同じ parameter に異なる方向の更新を持つと、能力が相殺されることがあります。

SLERP

SLERP (Spherical Linear Interpolation) は、二つの checkpoint を球面上で補間します。単純な線形補間より weight norm の変化を抑えられるため、checkpoint 間の距離が大きい場合に使われます。

slerp(θ1,θ2;t)=sin((1t)Ω)sinΩθ1+sin(tΩ)sinΩθ2\mathrm{slerp}(\theta_1, \theta_2; t) = \frac{\sin((1-t)\Omega)}{\sin \Omega}\theta_1 + \frac{\sin(t\Omega)}{\sin \Omega}\theta_2

ここで Ω\Omega は二つの vector の角度です。

TIES-Merging

TIES は、task vector の干渉を減らすために、主に三つの手順を使います。

  1. Trim: 重要度の低い更新を落とします。
  2. Elect Sign: parameter ごとに支配的な符号を選びます。
  3. Merge: 選ばれた符号に合う更新だけを集約します。

TIES の狙いは、異なる task が同じ parameter を逆方向に動かしている場合に、単純平均で両方を壊さないようにすることです。

DARE

DARE は、task vector の要素を random に drop し、残した要素を rescale してから merge する方法です。Fine-tuning の差分には冗長性が多いという観察を利用し、干渉を減らしながら task vector を足し合わせます。

直感的には、すべての差分を足すのではなく、「重要な sparse update だけを複数 model から持ち寄る」ような挙動になります。

いつ有効か

Model merging が有効になりやすい条件は次の通りです。

  • すべての checkpoint が同じ base model から始まっている。
  • Tokenizer、architecture、special token が一致している。
  • Fine-tuning task が補完的で、完全には衝突していない。
  • 各 checkpoint の quality が一定以上である。
  • Merge 後に小さな validation set で重み係数を選べる。

逆に、異なる base model 同士、異なる tokenizer、極端に異なる training recipe、強い safety tuning と強い uncensored tuning のような衝突が大きい場合は、壊れやすくなります。

LLM 開発での使いどころ

用途
Skill compositioncode model と math model を合成する
Safety / helpfulness balancechat tuning と safety tuning の比率を調整する
Checkpoint selection複数 run の平均で安定化する
Community model公開 checkpoint を merge して leaderboard を狙う
Low-cost ablation追加学習なしで能力の足し引きを試す

限界

Model merging は魔法ではありません。Merge 前の checkpoint が持たない能力を新規に獲得するわけではなく、主に既存能力の組み合わせや平均化です。また、merge 後の model は予期しない regression を起こすことがあるため、instruction following、safety、coding、math、long context などを個別に評価する必要があります。

関連ページ

主なソース