【GPT-4 をも超す性能？】「三人寄れば文殊の知恵」を体現する Mixture-of-Agents

先日、おもしろい論文が話題になっていました。

https://arxiv.org/abs/2406.04692

様々な LLM が登場している昨今ですが、基本的には API 経由で利用するクローズドなモデルが一強で、多くのユーザにとって、「chatGPT を使うか、gemini を使うか、claude を使うか」といった選択肢が基本です。

これは LLM の性能が LLM の大きさや学習に使ったデータの量と質に依存する以上仕方のないことです。

ですが、MoA を用いることで、OSS 系のオープンなモデルにも活用方法があるかもしれません。
⇒ 論文曰く、「**オープンなモデルを組み合わせることで、GPT-4 にも勝った**」とのこと。

以下、Mixture-of-Agents について解説していきます。

## MoA とは？

MoA とは複数の LLM を組み合わせ、各モデルの強みを活かして応答品質を向上させる手法です。
図で表すと以下のようになります。

```plantuml
@startuml
<style>
root {
  Padding 0
  Margin 0
}
footer {
  FontColor black
  FontSize 17
}
</style>
footer  MoA の概要図\n(出典：Mixture-of-Agents Enhances Large Language Model Capabilities)
title <img:https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/758571/e3068f36-2a9a-c80f-2a9d-1488fa1fadad.png>
@enduml
```

これは、"3個" のモデルによって、"3回" 推論を行ったあと、"A" のモデルで最終的な回答を導く MoA の図になります。

これは一例なので、**何個**のモデルを使って、**何回**推論し、最終的に**どのモデル**で推論をするかは、ハイパーパラメータになります。
MoA では、「複数のモデルで推論した結果と最初のプロンプトと組み合わせて、再度複数のモデルに投げ、推論する」ということを複数回繰り返します。
これによって、モデルごとの得意なことを組み合わせ、最終的なアウトプットを導き出します。

## MoA の性能

論文では、MoA の性能をいくつかの方法で検証しています。
これらは一例です。

### AlpacaEval 2.0 LC での MoA の有無の性能比較

他のモデルと組み合わせることで、どのモデルでも性能が向上しています。

```plantuml
@startuml
<style>
root {
  Padding 0
  Margin 0
}
footer {
  FontColor black
  FontSize 17
}
</style>
footer  AlpacaEval 2.0 LC での性能比較。青線がモデル単独での推論時の性能。赤が MoA。\n(出典：Mixture-of-Agents Enhances Large Language Model Capabilities)
title <img:https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/758571/c8545305-4160-8444-d347-f12c24bf261d.png>
@enduml
```

### AlpacaEval 2.0 LC と MT-Bench での性能比較

それぞれのベンチマークでの結果です。見ての通り、MoA と記載してあるのが MoA の結果です
- MoA: 3 層で MoA したもの
- MoA-Lite: 2 層で MoA したもの
- MoA w/ GPT-4o: 3 層で MoA したもので、最終的なアウトプットを出すときに GPT-4o を使ったもの

AlpacaEval 2.0 では、`MoA` は `GPT-4 Omni` に勝っていることがわかりますね。 MT-Bench では負けていますが、MT-Bench は簡単なので、誤差みたいなもののようです。

```plantuml
@startuml
<style>
root {
  Padding 0
  Margin 0
}
footer {
  FontColor black
  FontSize 17
}
</style>
footer  それぞれのベンチマークでの結果。\n(出典：Mixture-of-Agents Enhances Large Language Model Capabilities)
title <img:https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/758571/e06cacf0-d273-ecd0-f02c-35cf60138d65.png>
@enduml
```

### Flask の性能比較
Flask での結果です。多くの要素で、MoA が勝っていますね。
とはいえ、この差を大きいと見るか、小さいと見るかは人に依りそう。

```plantuml
@startuml
<style>
root {
  Padding 0
  Margin 0
}
footer {
  FontColor black
  FontSize 17
}
</style>
footer  それぞれのベンチマークでの結果。\n(出典：Mixture-of-Agents Enhances Large Language Model Capabilities)
title <img:https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/758571/050b2f7f-c5ba-2ded-a262-5e0b134398a2.png>
@enduml
```


## MoA は有り？
ここまでの結果を見ると MoA は素晴らしいように思えますが、実際は実用に足るかどうかは微妙なところです。
以下、私が気になっている点です。

### Time to First Token (TTFT) 問題
MoA では TTFT がめちゃくちゃ遅いです。というのも、最終的なアウトプットを出すまでに複数のモデルで層分の回数推論を行う必要があるからです。
全然結果が返ってこないのでユーザは不安になるでしょうし、アウトプットが遅ければ、ユーザビリティの低下につながります。

### コスト
GPT-4o で一回推論する場合、API に投げるだけで終わりますし、1 回の推論であればコストも知れています。
OpenAI の API はあの性能にしては、格段に安いです。

が、*n* 個のモデルで *m* 層なら単純計算 *n × m* + 1 回推論を行わないといけないので、一回の推論が安く済んだとしてもそれなりのコストがかかりそうです。
OSS モデルはなんだかんだ GPU 使用量で高くなるので、結果的にかなり高くなりそう。
（GPU を大量に持っている金持ちは除く）

### 性能向上はしているが……

MoA によって、性能向上が見られるものの、GPT-4o と比べたときに格段に性能が向上したとも言えないぐらいの差です。

上記のようなデメリットを踏まえると、`GPT-4o 一回で終わらせておけばいいや` と思う人も多いはずです。
性能を追い求め、上記のようなデメリットを踏まえても MoA をやらざるを得ないような状況でなければ、使いどころがなさそうと思いました。

### まとめ
MoA の解説でした。
実用に足るかはさておき、アイディアとしてはおもしろいので、コストや TTFT を気にしないような状況であれば使ってみるのはありですね。

おわり