複数のLLMから特定のTransformerレイヤーを選択的に抽出・結合し、元モデルより大きなパラメータ数の新モデルを構築するマージ手法。passthrough方式とも呼ばれる。
Frankenmerge(フランケンマージ)は、複数のLLMから特定のTransformerレイヤーを選択的に抽出して結合することで、元のモデルよりも大きなパラメータ数を持つ新しいモデルを構築するマージ手法である。mergekit では「passthrough」方式として実装されている。フランケンシュタインの怪物のように、異なる「部品」を組み合わせて新たな存在を作り出すことからこの名がついた。
通常のマージ手法(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層モデル(重複あり)
レイヤーの重複や省略が可能であり、結果として元モデルより大きい(または小さい)モデルを生成できる。
| モデル名 | 構成 | パラメータ数 | 特徴 |
|---|---|---|---|
| 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製 |
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
Upstage社が SOLAR-10.7B で採用した手法で、Frankenmergeの発展形である:
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 コマンドでレイヤー間類似度を可視化できる。