(論文読み):SakanaAI の 『Evolutionary Optimization of Model Merging Recipes』


# はじめに

- SakanaAI の 『Evolutionary Optimization of Model Merging Recipes』論文がすごい
- けど、仕組みと「どこまですごい！」を捉えきれていない
- どうにか理解したい！


## 対象論文

Evolutionary Optimization of Model Merging Recipes

大規模言語モデル(LLM)の合体を最適化するための新しいアプローチを提案した研究です。

https://sakana.ai/evolutionary-model-merge-jp/


Sakana AIの秋葉拓哉さんの解説はこちらです。

https://www.youtube.com/watch?v=33B5B4BdGew


## 論文の重要なポイント

複数のLLMを合体して1つの強力なモデルを作る(=モデルマージ)際の2つの手法を定義している。

**PS（パラメータ重みの混合）の最適化**
- TIES-MergingをベースとしたDAREアルゴリズムと進化アルゴリズム(CMA-ES)を活用

**DFS（レイヤーの結合）の最適化**
- Indicator arrayを導入して探索空間を削減。さらにレイヤー間のスケーリング調整も最適化に組み込んでいる

## 用語まとめ

| 用語 | 説明 |
|------|------|
| Model Merging | 複数のモデルを1つのモデルへ合体させる技術 |
| Evolutionary Algorithms | 進化の原理を用いて最適解を探索するアルゴリズム |
| Merging in the Parameter Space | 複数のレイヤーが持つパラメータ配合の最適化 |
| Merging in the Data Flow Space | 複数のモデルの全レイヤーから、最適なレイヤーの配置の探索 |
| TIES-Merging | モデル合体の手法の1つ |
| DARE | TIES-Mergingをベースとしたアルゴリズム |
| Fitness | 進化アルゴリズムにおける解の評価指標 |
| Indicator Array | レイヤーの選択を表現するための配列 |
| Scaling Factor | レイヤー間の出力のスケーリングを調整するための係数 |
| CMA-ES | 共分散行列適応進化戦略（Covariance Matrix Adaptation Evolution Strategy）の略。進化的アルゴリズムの一種で、最適化問題を解くために使用される。 |
| 個体 | CMA-ESにおいて、問題の解候補を表す。ここでは、パラメータ重みの混合割合を表す。 |
| 多変量正規分布 | 複数の変数がそれぞれ正規分布に従う確率分布。CMA-ESでは、この分布に従って個体を生成する。 |
| 上位n個体 | 各世代で生成された個体の中で、目的関数の評価値が高い上位n個の個体。これらを用いて次世代の多変量正規分布のパラメータを更新する。 |
| MGSM | マルチモーダル言語生成モデル（Multimodal Language Generation Model）の略。テキストと画像を組み合わせて、質問に回答するモデル。 |
| VQA | Visual Question Answeringの略。画像を見て質問に回答するタスク。 |
| ROUGEスコア | 自動要約の評価指標の一つ。生成された要約と参照要約との間の n-gramの一致度を測定する。 |

## 論文を一緒に読む

解説が本当にありがたいです🙏

https://scrapbox.io/gunosydm/Evolutionary_Optimization_of_Model_Merging_Recipes

https://www.docswell.com/s/DeepLearning2023/K38X6L-2024-03-29-113227

https://joisino.hatenablog.com/entry/2024/01/09/174517


# 技術ポイント

モデルマージの手法として、PSとDFSの2つが説明されています。

## PS（パラメータ重みの混合）

- 進化的アルゴリズムであるCMA-ES（共分散行列適応進化戦略）を使用して、最適なパラメータ重みの混合を探索。
- 多変量正規分布に従って個体（重みの混合割合）を生成し、上位n個体を抽出して多変量正規分布のパラメータを更新する過程を繰り返す。
- 目的関数は各タスクのスコア（MGSMの精度、VQAのROUGEスコアなど）。

## DFS（レイヤーの結合）

レイヤー自体をつなぎ合わせる手法。

### レイヤーの並び替え
- 合計M層のベースとなる2モデルからT層のモデルを作る場合、$(M+1)^T$の組み合わせを探索する必要がある。
- 同じ層の繰り返しや層間の順序を入れ替えるとパフォーマンスに悪影響があることがわかったため、探索空間を$2^T$に制限できる（2はモデルの数）。

### レイヤー間の結合
- 異なるモデルからレイヤーを持ってきても、そのままでは上手く動かない。
- レイヤーiとjをつなぐスケーリングを$W_{ij}$（$W \in R^{M \times M}$）とし、これも進化的探索で最適化する。
- $M^2$は大きすぎるため、FFNで近似: $W_{ij} = \pi_{\theta}(i,j,t)$、パラメータ$\theta$を探索する（$t \leq T$）。
- これもCMA-ESを使って探索。


## PSとDFSの組み合わせ

PSとDFSを同時に行うと探索空間が広くなりすぎる上、性質が異なるため扱いにくいとのことで、まずPSマージ（探索）を適用して複数のマージモデルを生成し、次にDFSマージ（探索）を適用して最終的なモデルを生成するアプローチが提案されています。


# 関連

## モデルのマージ
モデルのマージは、2つ以上のLLMを1つのモデルに結合する手法です。

## モデルマージの先行研究まとめ
https://huggingface.co/collections/osanseviero/model-merging-65097893623330a3a51ead66

 - モデルのマージ自体は実は古くから行われてきた
     - 画像生成モデルで特にマージしたモデルが一般的に使われるように
     - LLMのマージ自体も先行研究がある
         - Open LLM Leaderboard の上位モデルのほとんどは、言語モデル愛好家のコミュニティによって作られたマージモデルで徐々に占められてきている


| 用語 | 説明 | カテゴリ |
|---------|---------|---------|
| mergekit | 2つ以上のLLMを1つのモデルに結合するためのツールキット。 | ツール |
| SLERP | Spherical Linear Interpolation。2つのベクトル間を滑らかに補間する手法。方向の変化を重視。 | マージアルゴリズム |
| TIES | 複数のタスク固有モデルを1つのマルチタスクモデルに効率的にマージする手法。冗長性の削減と不一致の解消を行う。 | マージアルゴリズム |
| DARE | TIESに似たアプローチだが、ファインチューニングされた重みをランダムにリセットし、重みを再スケーリングする点が異なる。 | マージアルゴリズム |
| Passthrough | 異なるLLMのレイヤーを連結してエキゾチックな数のパラメータを持つモデルを作る手法。Frankensteinモデルとも。 | マージアルゴリズム |
| frankenmerges / Frankenstein models | Passthroughにより、複数のLLMを組み合わせて作られた大規模なモデル。 | モデルタイプ |
| Open LLM Leaderboard | HuggingFaceが提供するオープンソースのLLMのパフォーマンスを比較するリーダーボード。 | リソース |
| density (TIES/DARE) | マージ時に保持するパラメータの割合。残りはベースモデルから取得される。 | パラメータ |
| weight (TIES/DARE) | マージ時の各モデルの重み付け。TIESでは自動で正規化される。 | パラメータ |
| normalize (TIES) | パラメータの重みの合計が1になるように正規化するかどうか。 | パラメータ |
| int8_mask (DARE) | 8ビット整数クオンタイズを適用するかどうか。メモリ使用量を削減できる。 | パラメータ |
| lazy_unpickle (mergekit) | 実験的な機能。メモリ使用量を削減するためにモデルを遅延ロードする。 | パラメータ |


https://github.com/mlabonne/llm-course/blob/main/Mergekit.ipynb