TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

Mathematical discoveries from program search with large language modelsを読む

DeepMindがNatureで発表した「Mathematical discoveries from program search with large language models」を読んだ際のメモです。

概要

  • 大規模言語モデルを使用して数学的発見を行うFunSearchを提案
  • 解を生成するプログラムを生成する
  • LLMを使用してプログラムを改善する
  • 進化的アルゴリズムを使用する
  • 島モデルで多様性を確保する

対象問題

「キャップ セット問題」や「オンラインビンパッキング問題」のような組み合わせ問題の解を生成するプログラムを生成する。

対象とする問題は、解を評価関数でスコアリングできる必要がある。
独立して進化させる部分にスケルトンプログラムを提供できる必要がある。

アルゴリズム

構成

ProgramDB、Sampler、Evaluatorから構成される。

ProgramDBは、生成されたプログラムを管理する。
Samplerは、ProgramDBから改善するプログラムをサンプリングする。
Evaluatorは、生成されたプログラムが出力する解を評価する。

進化的アルゴリズム

島モデルを使用して、それぞれの島でプログラムを進化的アルゴリズムで改善する。
定期的に、下位半分の島のプログラムを削除し、上位の島のプログラムをコピーする。

島モデルにより多様性が確保され局所解に陥るのを避けることができ、島間で情報が流れることで効率的に改善される。

プログラムを改善するプロンプト

プログラムを改善するプロンプトは、複数のプログラムをサンプリングし、スコア順にプログラムを並べて、後のプログラムのコメントに「一つ前の改善したバージョン」であることを記述する。
最後に、プログラムのヘッダーと「一つ前の改善したバージョン」であるコメントを加える。

このプロンプトを使用してLLMで、改善したプログラムを生成する。
このプロンプトを「ベストショット プロンプト」と呼ぶ。

LLM

LLMには、APIで使用できるPaLM 2ベースのCodeyとオープン ソースの StarCoderを使用した(StarCoder は Codey と比較してパフォーマンスがわずかに悪い)。
事前学習済みモデルを使用して、ファインチューニングは行っていない。

結果

キャップ セット問題

次元 n = 8 では、FunSearch は以前に知られていたものよりも大きなキャップ セットを発見した。

オンラインビンパッキング問題

良く知られているヒューリスティックである「ファースト フィット」と「ベスト フィット」よりも優れたパフォーマンスを発揮した。

発見されたプログラムは人間に解釈可能で、アイテムを最小容量のビン (最適フィットなど) に詰め込むのではなく、アイテムを配置した後のフィット感が非常に厳しい場合にのみ、アイテムを最小容量のビンに割り当てる戦略が使用されていた。

計算リソース

キャップセットのフルサイズの集合を見つけるには、約 200 万のプログラムの生成と評価が必要だった。
再現するには、StarCoder-15B の15 インスタンス(A100 40 GB GPU)と5台のCPUサーバを、2 日間使用する必要がある。
StarCoderのトレーニングに比べれば、使用エネルギーは0.5%であり、エネルギー使用量は大幅に少ない。

まとめと感想

LLMは学習したデータ以上の新たな創造はできないという意見もあるが、LLMを使用して数学的問題で新たな発見ができることを示している。
オンラインビンパッキング問題のアルゴリズムは、実務でも応用できるアルゴリズムであり、実用的である。

また、プログラムの生成だけではなく、深層学習のモデル構造の探索にも使えそうである。
時間があれば将棋AIのモデル改善に応用してみたい。