アンサンブル蒸留とモデルマージング
再学習なしで複数モデルの強みを1つに束ねたい人へ。重み平均・タスクベクトル演算・SLERP・TIESの原理と、なぜ混ぜて性能が上がるかを線形モード接続から解き、蒸留との違いまで一気に整理する。
- 1.モデルマージングは推論時に複数モデルを並べるアンサンブルと違い、重みを直接合成して1モデルに畳む。追加の学習も推論コスト増もなくアンサンブル的な汎化を得るのが狙い。
- 2.Model Soupは同一初期値からの微調整重みを単純平均、タスクベクトル演算は微調整差分の加減算でスキルを足し引きする。成立の根拠は線形モード接続(同じ盆地内なら重み補間が低損失を保つ)にある。
- 3.SLERPは2モデルの重みを球面線形補間で滑らかに混ぜ、TIESは符号衝突するパラメータを多数決で解消してから合算し干渉を抑える。蒸留は教師の出力を生徒に再学習させる別系統の手法。
アンサンブルを「重みの中」へ畳み込む
複数モデルを束ねて精度や頑健性を上げる古典がアンサンブルです。N個のモデルにそれぞれ推論させ、出力(確率やロジット)を平均する。汎化はよく上がりますが、推論コストが N 倍になるのが致命的です。
ここで発想を変えます。出力を平均する代わりに、重みそのものを合成して1つのモデルに畳み込めないか。これがモデルマージングです。N個の微調整済みモデルを重みレベルで混ぜ、推論コストは1モデル分のまま、アンサンブルに近い汎化を狙います。
3者はすべて「複数の知識を統合する」点で似ますが、統合する場所が違います。アンサンブルは推論時に出力空間で統合(モデルは別々のまま)。マージングは重み空間で統合(1モデルに畳む、追加学習なし)。蒸留は教師の出力を生徒に再学習させて統合(学習が必要)。マージングだけが「学習も推論コスト増もなし」という特異点にいます。
なぜ重みを平均しただけで動くのか:線形モード接続
ナイーブに考えると、別々に学習した2つのニューラルネットの重みを平均しても、意味のないモデルになりそうです。損失地形は非凸で、(w_A + w_B)/2 は両者の谷の間の「山」に落ちかねません。実際、完全にランダムな初期値から独立学習した2モデルの平均は、たいてい壊れます。
カギは線形モード接続(Linear Mode Connectivity, LMC)という経験則です。「同一の事前学習重みから微調整した2モデルは、損失地形上の同じ低損失の盆地に収まりやすく、両者を直線で結んだ経路(重みの線形補間)上でも損失が低いまま保たれる」。盆地が共有されていれば、補間点 (1-t)·w_A + t·w_B も谷の中にとどまります。
ランダム初期値から独立学習: w_A と w_B は別々の盆地 → 平均は山に落ちて壊れる
共通の事前学習からの微調整: w_A, w_B は同じ盆地内 → 線形補間も低損失(LMC成立)
つまりマージングが効く前提は「共通の祖先(同一の事前学習チェックポイント)を持つ」こと。だから実務では「同じベースモデルから派生した微調整モデル同士」だけを混ぜます。LMCがなぜ成り立つかは、過剰パラメータ化したネットの損失地形が広く平坦で連結した低損失領域を持つ、という二重降下と過剰パラメータ化の議論と地続きです。
Model Soup:同一ハイパラ族の重みを単純平均
最もシンプルな手法が Model Soup です。同じベースモデル・同じデータを、学習率や乱数シード・データ拡張だけ変えて複数回微調整し、得られた重みを要素ごとに平均します。
# uniform soup: 微調整済みN個の重みを単純平均
w_soup = sum(w_i for w_i in finetuned_models) / N
ポイントは、これらが「同一初期値からの微調整」なのでLMCが成り立ち、平均点も盆地内にとどまることです。複数の谷底を平均するとより平坦で広い極小に着地しやすく、これが汎化を改善します(鋭い極小より平坦な極小のほうが汎化する、という正則化の直観と一致)。
全モデルを無条件に平均する uniform soup は、出来の悪いモデルが混ざると精度を下げます。greedy soup は検証精度が上がるモデルだけを順に取り込む貪欲法で、悪い構成要素を弾けるぶん安定して強い。「とりあえず全部混ぜる」より「効くものだけ足す」が経験則です。
タスクベクトル:微調整の「差分」を演算する
Model Soup が重みそのものを混ぜるのに対し、タスクベクトル(Task Vector / Task Arithmetic)は微調整による変化分を演算対象にします。あるタスク T で微調整した重みからベース重みを引いた差分を、タスク T の「方向ベクトル」とみなします。
tau_T = w_finetuned(T) - w_base # タスクTで何が変わったか=タスクベクトル
驚くべきは、このベクトルが足し算・引き算でスキルを操作できることです。
- 足す(スキル合成):
w_base + tau_A + tau_Bで、タスク A と B の両方を解けるモデルになりやすい。 - 引く(スキル除去):
w_base - tau_toxicで、有害な振る舞いだけを打ち消す(忘却)。 - アナロジー:
tau_A - tau_B + tau_Cのような類推も部分的に成立する。
これは「微調整の効果が重み空間で近似的に線形に振る舞う」という、やはりLMCと同根の性質に支えられています。複数のタスクベクトルを足してマルチタスク化するのが、マージングの王道パターンです。
複数の tau を素朴に足すと、異なるタスクが同じパラメータを逆向きに動かしている箇所で打ち消し合いが起きます(符号衝突)。さらに、片方のタスクでは大きく動いたが他方ではノイズ程度にしか動いていないパラメータも、合算すると冗長に効いて干渉します。この**干渉(interference)**の解消が次のTIESの主眼です。
SLERP と TIES:混ぜ方を賢くする
SLERP:球面線形補間で滑らかに混ぜる
2モデルを混ぜるとき、単純な線形補間(LERP)は2つの重みベクトルを直線で結びます。しかし高次元の重みは「向き」に意味があることが多く、直線補間は途中でノルム(大きさ)が縮んで表現が痩せる場合があります。SLERP(Spherical Linear Interpolation, 球面線形補間)は、2つのベクトルがなす角度に沿って球面上を一定角速度で移動する補間です。
LERP : 直線で結ぶ → 途中でノルムが縮みやすい
SLERP: 角度に沿って円弧 → ノルムと方向の整合を保ったまま混ぜる
向きと大きさの幾何を壊さないため、2モデルのマージで広く使われます(弱点は一度に2つしか混ぜられないこと。多モデルは段階的に適用する)。重みベクトルの向きが意味を担うという感覚は埋め込みの幾何の方向性と通じます。
TIES:干渉を3ステップで除去してから合算
TIES-Merging(Trim, Elect Sign, Merge)は、タスクベクトルの干渉を明示的に潰してから合算する手法です。3段階で動きます。
| ステップ | やること | 狙い |
|---|---|---|
| Trim(剪定) | 各タスクベクトルで、変化量が小さい下位パラメータをゼロに刈る | ノイズ的な微小変化が干渉源になるのを防ぐ |
| Elect Sign(符号選定) | パラメータごとに、全タスクの符号を見て多数派(総量の大きい向き)を採用 | 逆向きに引っ張り合う符号衝突を解消する |
| Merge(合算) | 選ばれた符号に一致する成分だけを平均して足す | 整合した寄与だけを残しタスク性能を保つ |
要は「小さい変化は捨て、向きは多数決で揃え、揃った分だけ混ぜる」。素朴な加算が干渉で性能を落とすところを、TIES は構造的に回避します。派生として、刈り取りをランダムなドロップ+スケールで行う DARE を前段に挟み、TIES と組み合わせる構成も定番です。
| 手法 | 混ぜる対象 | 混ぜ方の核心 | 得意な場面 |
|---|---|---|---|
| Model Soup | 微調整済みの重み本体 | 単純(または貪欲)平均 | 同一タスク・同一データの複数runを束ねる |
| Task Arithmetic | 微調整の差分(タスクベクトル) | ベクトルの加減算 | スキルの合成・除去・マルチタスク化 |
| SLERP | 2モデルの重み | 球面線形補間(角度に沿う) | 2モデルを向きを保って滑らかに融合 |
| TIES / DARE | 複数のタスクベクトル | 剪定+符号多数決+合算 | 多数モデルを干渉を抑えて統合 |
蒸留との違い:別系統だが補完し合う
最後に蒸留(Knowledge Distillation)との違いを明確にします。蒸留は、性能の高い教師モデルの出力分布(ソフトラベル)を、小さな生徒モデルに再学習で模倣させる手法です。アンサンブルした教師の知識を1つの生徒に圧縮する「アンサンブル蒸留」も古くからあります。
決定的な違いは学習が要るかです。マージングは重み空間の演算だけで完結し勾配計算が一切不要ですが、蒸留は生徒を実データ(または教師の生成物)で訓練するプロセスそのものです。
| 観点 | モデルマージング | 蒸留 |
|---|---|---|
| 統合する空間 | 重み空間(パラメータを直接合成) | 出力空間(教師の予測を模倣) |
| 追加学習 | 不要(演算のみ) | 必要(生徒を再訓練) |
| 前提条件 | 共通の事前学習を持つ同系統モデル | 教師と生徒の構造は別でも可 |
| 主な用途 | スキル合成・マルチタスク化・汎化向上 | モデル圧縮・小型化・知識転移 |
| コスト | 極小(重み演算1回) | 学習1回ぶん(データ・GPU必要) |
両者は排他ではなく、アーキテクチャの違う複数モデルは直接マージできない(重みの対応が取れない)ため、いったん蒸留で同一構造に揃えてからマージする、あるいはマージで作った強いモデルを教師にして蒸留で小型化するといった併用が実用的です。マージは構造が同じ同系統モデル間、蒸留は構造をまたぐ知識転移、と役割を住み分けるのが基本です。蒸留の数値的な扱いは量子化と蒸留で深掘りできます。
- マージングが成立する前提=線形モード接続。同一事前学習から微調整した重みは同じ盆地に入り、補間しても低損失を保つ。ランダム初期値からの独立学習は混ざらない。
- Model Soup=重み本体の(貪欲)平均、タスクベクトル=微調整差分の加減算でスキルを足し引き。
- SLERP=向きを保つ球面補間(2モデル向け)、TIES=剪定→符号多数決→合算で干渉を除去(多モデル向け)。
- 蒸留は別系統:重みでなく出力を模倣し、再学習を要する。構造をまたぐ知識転移に使い、マージと併用できる。
まとめ:「どこで」「どう」知識を束ねるか
複数モデルの知識を1つに束ねる方法は、束ねる場所で整理すると一望できます。
| 論点 | 実態 | そこから言えること |
|---|---|---|
| なぜ重み平均が動くか | 同一事前学習由来の重みは同じ低損失盆地に入る(LMC) | マージは同系統モデル限定で効く |
| Soupとタスクベクトルの差 | 重み本体を混ぜるか、微調整差分を演算するか | 後者はスキルの足し引きが可能になる |
| SLERPとTIESの役割 | 2モデルを滑らかに/多モデルを干渉除去して混ぜる | 混ぜる数と干渉の有無で手法を選ぶ |
| 蒸留との境界 | 重み演算か、出力模倣の再学習か | 構造が違えば蒸留、同系統ならマージ |
この見立てを持つと、「別タスクの微調整モデルを足したら片方が劣化した(=干渉、TIESで対処)」「ランダム初期化から学習した2モデルを平均したら壊れた(=LMC不成立)」「アーキテクチャが違って直接混ぜられない(=蒸留の出番)」といった現象を、統合する空間と前提条件の言葉で説明できます。微調整そのものの仕組みは転移学習、差分を低ランクで持つ発想はパラメータ効率ファインチューニングと合わせて読むと、学習済み知識を再利用・合成する技術の地図がつながります。
AI/機械学習 Article
アンサンブル蒸留とモデルマージングを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
モデルマージング
比較で見る軸
難易度: advanced / カテゴリ: AI/機械学習 / タグ数: 5
導入後に効く点
Model Soupは同一初期値からの微調整重みを単純平均、タスクベクトル演算は微調整差分の加減算でスキルを足し引きする。成立の根拠は線形モード接続(同じ盆地内なら重み補間が低損失を保つ)にある。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- AI/機械学習
- タグ数
- 5
判断チェックリスト
- 自社の用途が「モデルマージング / アンサンブル」に近いか確認する。
- 強みである「モデルマージングは推論時に複数モデルを並べるアンサンブルと違い、重みを直接合成して1モデルに畳む。追加の学習も推論コスト増もなくアンサンブル的な汎化を得るのが狙い。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。