OPRO(LLM を最適化器として使う手法)(オプロ エルエルエム オプティマイザー)
Google DeepMind が 2023 年に提案した「Large Language Models as Optimizers」手法。LLM 自身をブラックボックス最適化エンジンとして用い、自然言語でプロンプトや目的関数を反復改善する。
OPRO(LLM を最適化器として使う手法)
概要
OPRO(Optimization by PROmpting)は Google DeepMind が 2023 年に arXiv で発表した手法だ(論文: "Large Language Models as Optimizers")。従来の最適化では勾配降下法や進化的アルゴリズムを使うが、OPRO は LLM そのものを最適化エンジンとして機能させる。LLM は自然言語で「次に試すべき解候補」を提案し、それを評価→フィードバックとして与えて反復する。勾配や微分可能性を一切必要としないブラックボックス最適化として機能する点が革新的だ。
仕組み
OPRO の中核は「最適化軌跡(optimization trajectory)」をコンテキストとして LLM に渡すことだ。
- 初期解生成: LLM にタスク説明と評価関数の概要を与え、初期候補(プロンプト文字列など)を複数生成させる
- 評価: 各候補を評価関数(例: テストセット精度)でスコアリング
- 軌跡構築: 「候補 A → スコア X」「候補 B → スコア Y」…のペアを時系列でコンテキストに追加
- 次候補提案: LLM に「これまでの試行と結果を踏まえて、より良い解を提案してください」とプロンプト
- 反復: スコアが収束するまで 2〜4 を繰り返す
LLM は軌跡から「どの方向に改善すれば良いか」を自然言語推論で判断し、勾配なしに最適化を駆動する。
適用タスク
| タスク | 具体例 | OPRO の効果 |
|---|---|---|
| プロンプト最適化 | GSM8K・BBH の指示文自動生成 | 人手設計比 +8% 精度向上 |
| 線形回帰 | 最小二乗最適化 | 勾配法と同等の収束 |
| 巡回セールスマン(TSP) | 都市 10〜20 の局所探索 | ヒューリスティックと競合 |
| ハイパーパラメータ探索 | 学習率・バッチサイズ | Bayesian OP と同等 |
論文実験では GPT-4 や PaLM 2 を最適化エンジンとして使用したとき最も安定した性能を示した。弱いモデル(GPT-3.5 程度)では最適化軌跡の解釈が甘くなり、収束が不安定になりやすい。
APE・TextGrad との違い
| 手法 | 勾配 | 反復方式 | 強み |
|---|---|---|---|
| OPRO | 不要 | 軌跡 in-context | 汎用・最もシンプル |
| APE | 不要 | 候補生成→選別 | 1 ショット改善 |
| TextGrad | テキスト勾配 | バックプロパゲーション的 | 深い複合改善 |
| ProTeGi | 不要 | エラー分析→改訂 | 失敗事例駆動 |
実装上の注意
- コンテキスト長: 軌跡が長くなると LLM のコンテキストウィンドウを超える。上位 N 件のみ保持するトリミングが必要
- 最適化エンジン LLM: Gemini 1.5 Pro / GPT-4o レベルが推奨。弱いモデルでは軌跡解釈が不安定
- 評価コスト: 各候補の評価(テストセット実行など)がボトルネックになる。評価コストと反復回数のバランス設計が重要
- 局所最適: 自然言語空間での最適化は探索空間が広大。複数ランダムシードから並列スタートが有効
コード例(擬似コード)
history = [] # (candidate, score) のリスト
for i in range(max_steps):
prompt = build_opro_prompt(history, task_description)
candidates = llm.generate(prompt, n=8)
scored = [(c, evaluate(c, test_set)) for c in candidates]
history.extend(scored)
history = sorted(history, key=lambda x: x[1])[-20:] # 上位20件保持
best = max(history, key=lambda x: x[1])[0]
まとめ
OPRO は「LLM にプロンプトを改善させる」というアイデアをシンプルかつ汎用的に実装した手法だ。微分不可能なタスク(NLP 評価指標・ルールベーススコア)にも適用でき、勾配ベース手法が使えない場面で特に有力だ。2025 年現在、TextGrad や ProTeGi と組み合わせた複合最適化パイプラインへの発展が研究されている。