Frankenmerge(レイヤー選択的マージ)(フランケンマージ)
複数のLLMから特定のTransformerレイヤーを選択的に抽出・結合し、元モデルより大きなパラメータ数の新モデルを構築するマージ手法。passthrough方式とも呼ばれる。
Frankenmergeとは
Frankenmerge(フランケンマージ)は、複数のLLMから特定のTransformerレイヤーを選択的に抽出して結合することで、元のモデルよりも大きなパラメータ数を持つ新しいモデルを構築するマージ手法である。mergekit では「passthrough」方式として実装されている。フランケンシュタインの怪物のように、異なる「部品」を組み合わせて新たな存在を作り出すことからこの名がついた。
Frankenmergeの仕組み
通常のマージ手法(SLERP、TIES、DARE)はパラメータの重み空間で統合を行うが、Frankenmergeはレイヤー単位で物理的にモデルを結合する。
基本構造
Model A: [Layer 0-15] [Layer 16-31] ← 32層モデル
Model B: [Layer 0-15] [Layer 16-31] ← 32層モデル
Frankenmerge: [A: Layer 0-23] [B: Layer 8-31] ← 48層モデル(重複あり)
レイヤーの重複や省略が可能であり、結果として元モデルより大きい(または小さい)モデルを生成できる。
代表的なFrankenmergeモデル
| モデル名 | 構成 | パラメータ数 | 特徴 |
|---|---|---|---|
| Goliath-120B | Llama 2 70B × 2 | 120B | 最初の成功例、2023年11月 |
| SOLAR-10.7B | Llama 2ベース depth upscaling | 10.7B | Upstage公式、DUS手法 |
| Bagel-34B | Yi-34B レイヤーインターリーブ | 34B | 高品質なRP/チャットモデル |
| CausalLM-14B | 7Bモデル × 2 のレイヤー結合 | 14B | コミュニティ製の先駆的モデル |
| Nous-Capybara-34B | Yi-34B 改良型 Frankenmerge | 34B | NousResearch製 |
mergekit での Passthrough 設定
slices:
- sources:
- model: meta-llama/Llama-3.1-8B-Instruct
layer_range: [0, 24]
- sources:
- model: NousResearch/Hermes-3-Llama-3.1-8B
layer_range: [8, 32]
merge_method: passthrough
dtype: bfloat16
レイヤー範囲の設計指針
- 低層(Layer 0〜8): 入力埋め込み・基本的な言語理解層。安定したモデルから取得
- 中層(Layer 8〜24): 知識・推論層。特化能力を持つモデルから取得
- 高層(Layer 24〜32): 出力生成層。流暢な文章生成能力を持つモデルから取得
- 重複配置: 同じレイヤー範囲を複数モデルから重複して配置すると、そのレイヤーの表現力が強化される
Depth Upscaling(DUS)手法
Upstage社が SOLAR-10.7B で採用した手法で、Frankenmergeの発展形である:
- ベースモデル(Llama 2 7B、32層)を複製
- 複製1: Layer 0〜23 を取得(上位8層をカット)
- 複製2: Layer 8〜31 を取得(下位8層をカット)
- 結合: 48層モデル(10.7Bパラメータ)を生成
- 追加学習: 結合部分のアライメントのために短時間ファインチューニング
Frankenmergeの利点と制約
利点
- モデルサイズの拡大が可能(7B → 14B、70B → 120B)
- レイヤー単位の精密な制御が可能
- 計算コストが極めて低い(レイヤーのコピーのみ)
- 異なる特化能力を持つレイヤーを組み合わせ可能
制約
- レイヤー間の不整合により出力品質が不安定になりやすい
- 結合境界部分で推論の一貫性が失われる場合がある
- 適切なレイヤー範囲の選定には試行錯誤が必要
- 生成されるモデルサイズが大きくなるため、推論コストが増大
- DUS のように追加学習なしでは最適な結果が得られないことが多い
Frankenmerge の評価と実践
品質チェックポイント
- Perplexity測定: マージ前後で perplexity が大幅に悪化していないか確認
- レイヤー活性化分析: 結合境界付近のレイヤーの活性化分布が正常か確認
- 定性評価: チャット応答の一貫性、コード生成の正確性をマニュアルで検証
- ベンチマーク: MMLU、HellaSwag 等で元モデルとの比較
失敗パターンと対策
- 繰り返し生成(Repetition): 結合境界の不整合が原因。境界レイヤーを重複配置して緩和
- 非文法的出力: 高層レイヤーの不一致。出力層は単一モデルから取得するのが安全
- 知識の欠落: 低層レイヤーのカットが原因。Layer 0〜4 は必ずベースモデルから取得
よくある質問(FAQ)
Q1: Frankenmerge後にファインチューニングは必要? A: 推奨される。特にDUS方式では、結合境界部分のアライメントのために短時間(1000〜5000ステップ程度)のファインチューニングが品質を大幅に向上させる。ただしGoliath-120Bのようにファインチューニングなしで実用的な品質を達成した例もある。
Q2: 異なるサイズのモデルをFrankenmergeできる? A: hidden_size(埋め込み次元)が一致するモデルのみ可能。7Bモデル(hidden_size=4096)同士は可能だが、7B(4096)と13B(5120)は不可。ただしnum_layers(レイヤー数)は異なっていても問題ない。
Q3: 最適なレイヤー分割点はどう見つける?
A: 各レイヤーの重みの類似度(コサイン類似度)を分析し、類似度が低い(各モデルの特色が出ている)レイヤーを特化モデルから、類似度が高い(共通知識)レイヤーをベースモデルから取得するのが一般的。mergekit の mergekit-analyze コマンドでレイヤー間類似度を可視化できる。
まとめ
- Frankenmerge はレイヤー単位でモデルを結合し、サイズ拡大も可能なマージ手法
- mergekit の passthrough 方式で実装、計算コストはほぼゼロ
- Goliath-120B や SOLAR-10.7B などの実績あるモデルが存在
- 結合境界の不整合が最大の課題、DUS方式の追加学習で品質向上可能