Simple Science

最先端の科学をわかりやすく解説

# コンピューターサイエンス# ソフトウェア工学# 人工知能# 計算と言語# プログラミング言語

大規模言語モデルでコードを洗練させる

新しいアルゴリズムがLLMを使ってコードの洗練をもっと効率的に改善するよ。

― 1 分で読む


LLMコードリファインメンLLMコードリファインメントアルゴリズム率的なアプローチ。バグのあるソフトウェアを改善するための効
目次

大きな言語モデル(LLMs)を使ってソースコードを反復的に改善したり修正したりすることが、すごく複雑なプログラムを一気に作るのが難しいから、一般的な手法になってるんだ。テストケースのセットを候補プログラムと一緒に使うことで、LLMはプログラムを強化できるし、特にどのテストに失敗したかの情報を与えられると効果的なんだ。

でも、コードをどうやって最適に改善するかはまだ不明確で、過去の方法は基本的な戦略がほとんどだった。この研究は、コードを改善するには新しい選択肢を探すことと、既存のいい選択肢を活用することのバランスが必要だってことを強調してる。つまり、すでに多くのテストに合格しているコードを改善することに焦点を当てるか、あまり探求されていないプログラムを改善するかの二択だ。

この状況を、いろんな選択肢から選ぶゲームのような問題として捉えて、トンプソン Samplingっていう手法を使ってる。私たちが開発したアプローチは、ループ不変条件の合成、ビジュアル推論タスクの解決、コーディングコンペの問題に応用できる。私たちの方法は、言語モデルへの呼び出しを少なくして、より多くの問題を解決する能力を示した。

LLMsの問題を解決する新しい方法は、それらが自分たちの以前の出力を修正、修復、またはデバッグすること。最初から完璧なコードを目指すのではなく、モデルが生成した既存のバグのあるコードを修正する作業を行うことができる。これが、実際のソフトウェア開発のやり方に近い。通常、コードは何度も改良が必要だからね。各改良の度にモデルを再度呼び出す必要があって、異なる結果が出ることもある。

その結果、このプロセスは潜在的なプログラムの木を作り出す。これは無限に深くなることができて、改良されたプログラムはさらに改善できるし、LLMが生み出せる改良の数によって無限に広がることもある。この方法の成功は、探索と活用戦略の設計に大きく依存する。既存の戦略は混合結果を持っていて、特に改良から得られる利益が微小な場合にはうまくいかなかった。

探索と活用のバランスは、プログラムを改善することで新しいプログラムが生成され続けるため、より複雑になる。似たような問題に対して使われる伝統的なアプローチは、分岐の無限性と各改良のランダムな結果のためにうまく機能しない。

私たちの主な貢献は、LLMsを使用してコードを改善するための新しいアルゴリズム、REEと名付けたもの。これは、改良の木を検索する戦略として見ることができる。私たちは問題を一連の選択肢として捉え、異なるプログラムを選ぶことで得られる利点が生成されるプログラムの質に応じて異なることを理解している。

この取り組みでは、問題の概要や、アルゴリズムを効率化するためにどのように構造を整えたかを示す。アルゴリズムは、コード生成を含むタスクに広く適用できる。私たちは、競技プログラミングの課題、ソフトウェア検証に焦点を当てた問題、ビジュアル推論に関わるパズルに対する方法のパフォーマンスを調査した。

バンディット問題の背景情報

バンディット問題は、一連の行動から報酬を最大化することに関わる。それぞれの行動は未知の成功の可能性を持っていて、各決定点で行動を選び、フィードバックを受け取る。探索、すなわち行動を試してその平均報酬を学ぶことと、期待される最良の報酬を得るための行動を選ぶこと、これをバランスを取るのが難しい。

トンプソン Samplingは、こうした問題のための戦略を設計するのに役立つフレームワーク。各選択肢が最善である可能性に基づいて決定する。各行動の潜在的な報酬に関する信念を追跡し、新しい情報を得ることでそれを更新する。

問題の定義と仮定

プログラムの改善に関しては、効率的にチェックできる仕様を伴うプログラミング問題の周りに私たちのアプローチを定義した。私たちの目標は、必要な仕様を満たすプログラムを構築すること。

仕様は通常、基本的な制約に分解され、これは入力-出力の例だと考えられる。プログラムを仕様に対して評価する際、要件を満たしていなければ、短所を特定するための反例を簡単に生成できる。

プログラムを改善するというのは、反例に基づいてLLMに強化を促すこと。私たちは、私たちの方法が仕様を満たすための道筋に乗っているプログラムに優先順位を付けて検索するように整理していることについて書いた。

REEアルゴリズム

高いレベルでは、私たちは改善の問題をアームを取得するバンディット問題としてフレーム化している。各プログラムはオプションを表し、それを改善することが相応するアームを引くことだ。確率的に生成された報酬は、生成したプログラムが仕様を満たすかどうかを教えてくれる。

私たちのアプローチはトンプソン Samplingに基づいていて、過去の改良に基づいてプログラムが成功する可能性を推定する。報酬は成功か失敗で、つまり簡単な成功-失敗モデルを使って改良を導くことができる。

それゆえ、私たちのアルゴリズムは各プログラムのヒューリスティックな価値、改善された回数を追跡し、最高の潜在的報酬に基づいて次に改善するプログラムを選ぶ必要がある。

このアプローチは、過去の試行から得た情報を使って一歩先を行くことを可能にし、伝統的な方法で見られる複雑さを簡素化する。

実験結果と評価

私たちは、コーディングコンペ、ビジュアル推論の課題、ソフトウェア検証タスクを含むさまざまなドメインで私たちの方法を評価した。各シナリオは独自の挑戦を生み出し、私たちは方法が解決できる問題の数を最小限に抑えつつ、どれほど多くの問題を解決できるかを判断することを目指した。

コーディングコンペでは、他のモデルに対してベンチマークを取り、私たちのアプローチがしばしばそれらを上回ることを見つけた。ビジュアル推論タスクでは、画像を操作できるプログラムを合成する必要があったし、ソフトウェア検証タスクでは正しい論理条件を生成することが求められた。

スピードとコスト効率

私たちの方法の一つの利点は、他の代替手段よりも計算リソースを少なくすることが多いってこと。さらに、難しいタスクでのパフォーマンスも良好で、単に解決するだけでなく、複雑な状況で優れる能力を示してる。

重要なことに、私たちの発見は、私たちの方法が一見すると解決された問題の数を劇的に増やすわけではないけれど、解決策に到達するための全体的なコストと時間を大幅に削減することを示している。

結論と今後の作業

結論として、LLMsを使ったコード改善についての探求は、希望の持てる結果をもたらした。私たちのアルゴリズムのデザインは効率性と効果を強調していて、チャレンジングな問題や迅速な解決を必要とする問題の両方に対処できることを保証している。

このアルゴリズムは主にGPT-4モデルに適用してきたけど、他のモデルが同様の技術からどのように恩恵を受けるかを見るのも面白いだろう。コード改善の分野はまだ探求の余地があるエリアで、モデルが進化するにつれて、この領域での改善の可能性はますます広がっていくと信じている。

今後の研究は、LLMsの能力をさらに強化してプログラム合成や改善の複雑さに対処し、最終的にはより堅牢なソフトウェア開発プロセスにつながることに焦点を当てることができる。

オリジナルソース

タイトル: Code Repair with LLMs gives an Exploration-Exploitation Tradeoff

概要: Iteratively improving and repairing source code with large language models (LLMs), known as refinement, has emerged as a popular way of generating programs that would be too complex to construct in one shot. Given a bank of test cases, together with a candidate program, an LLM can improve that program by being prompted with failed test cases. But it remains an open question how to best iteratively refine code, with prior work employing simple greedy or breadth-first strategies. We show here that refinement exposes an explore-exploit tradeoff: exploit by refining the program that passes the most test cases, or explore by refining a lesser considered program. We frame this as an arm-acquiring bandit problem, which we solve with Thompson Sampling. The resulting LLM-based program synthesis algorithm is broadly applicable: Across loop invariant synthesis, visual reasoning puzzles, and competition programming problems, we find that our new method can solve more problems using fewer language model calls.

著者: Hao Tang, Keya Hu, Jin Peng Zhou, Sicheng Zhong, Wei-Long Zheng, Xujie Si, Kevin Ellis

最終更新: 2024-10-29 00:00:00

言語: English

ソースURL: https://arxiv.org/abs/2405.17503

ソースPDF: https://arxiv.org/pdf/2405.17503

ライセンス: https://creativecommons.org/licenses/by-nc-sa/4.0/

変更点: この要約はAIの助けを借りて作成されており、不正確な場合があります。正確な情報については、ここにリンクされている元のソース文書を参照してください。

オープンアクセスの相互運用性を利用させていただいた arxiv に感謝します。

著者たちからもっと読む

類似の記事