Reflexion: Language Agents with
Verbal Reinforcement Learning (https://arxiv.org/pdf/2303.11366) より
目次
Part 1: 導入と概要
言語モデルに「経験から学ぶ」能力を与える課題
最近のAI研究において、大規模言語モデル(LLM)はゲーム、コンパイラ、APIなどの外部環境と相互作用する自律的なエージェントとして活用されるようになっています。ReAct、SayCan、Toolformer、HuggingGPTなどの手法では、LLMをコアとして使用し、テキスト生成や「アクション」を環境内で実行できるようにしています。
しかし、これらの言語エージェントが試行錯誤から効率的に学習することは依然として課題となっています。従来の強化学習手法は膨大なトレーニングサンプルとモデルの高コストな微調整を必要とするため、言語モデルの文脈では非常に非効率です。特に数十億のパラメータを持つ巨大なモデルでは、伝統的な勾配降下による最適化は計算資源と時間の両面で現実的ではありません。
Reflexionの登場:言葉による強化学習
この課題に対応するため、Noah Shinnらの研究チームは「Reflexion」と呼ばれる新しいフレームワークを提案しています。Reflexionは言語による強化(verbal reinforcement)を活用して、エージェントが過去の失敗から学習できるようにする革新的なアプローチです。
Reflexionの核心的なアイデアは、環境からのバイナリまたはスカラーフィードバックをテキスト形式のフィードバックに変換し、これを次のエピソードでLLMエージェントの追加コンテキストとして使用するというものです。この自己反省型フィードバックは、「意味的な勾配信号」として機能し、エージェントに改善のための具体的な方向性を提供します。
これは人間が複雑なタスクを少数回の試行で学習する方法に似ています—私たちは過去の失敗を振り返り、次の試行での改善計画を立てます。例えば、Reflexionエージェントは、意思決定、プログラミング、推論タスクを解決するために、試行、エラー、そして自己反省を通じて自らの行動を最適化します。
Reflexionアプローチの興味深い点は、計算コストの高い微調整やモデルの再訓練を必要としないことです。代わりに、言語モデルの持つ自己評価と反省の能力を活用し、過去の経験から学習します。これにより、LLMを利用した自律的なエージェントの開発における新たな可能性が開かれています。
Part 2: Reflexionフレームワークの詳細
システムアーキテクチャ
Reflexionは3つの主要なコンポーネントから構成されています:Actor、Evaluator、Self-Reflectionモデルです。これらが連携して動作することで、エージェントは経験から学習し、パフォーマンスを向上させることができます。
Actorコンポーネント
ActorはLLMをベースにしており、状態観察に基づいてテキストやアクションを生成します。これは従来の強化学習における方策(policy)に相当し、現在の方策πθから時間tにおいてアクションatをサンプリングします。研究では、Chain of ThoughtやReActなど様々なActorモデルが検討されています。
重要な点として、Actorはメモリ(mem)コンポーネントを持ち、これが追加のコンテキストを提供します。このメモリが、エージェントの経験を蓄積し、将来の意思決定を改善するための鍵となります。
Evaluatorコンポーネント
Evaluatorは、Actorが生成した出力の質を評価する役割を担います。生成された軌跡(trajectory)を入力として受け取り、タスクコンテキスト内でのパフォーマンスを反映する報酬スコアを計算します。
意味空間に適用される効果的な価値関数や報酬関数を定義することは難しいため、Evaluatorモデルにはいくつかのバリエーションが検討されています:
- 推論タスクには、生成された出力が期待される解決策と密接に一致することを確認する正確一致(EM)採点に基づく報酬関数
- 意思決定タスクには、特定の評価基準に合わせたヒューリスティック関数
- プログラミングタスクでは、LLM自体をEvaluatorとして使用し、生成されたコードの品質を評価
Self-Reflectionコンポーネント
Self-ReflectionはLLMとして実装され、Reflexionフレームワークにおいて将来の試行のための貴重なフィードバックを生成する役割を果たします。二値の成功状態(成功/失敗)などのスパースな報酬信号、現在の軌跡、およびエージェントの持続的なメモリ(mem)が与えられると、自己反省モデルはニュアンスのある具体的なフィードバックを生成します。
スカラー報酬よりも情報量の多いこのフィードバックは、エージェントのメモリに保存されます。例えば、マルチステップの意思決定タスクで、エージェントが失敗信号を受け取った場合、特定のアクションaiが後続の誤ったアクションai+1とai+2につながったと推測できます。そして、異なるアクションa′iを取るべきだったと言語で述べ、この経験をメモリに保存します。
メモリ管理
Reflexionプロセスの核心的な要素は、短期記憶と長期記憶の概念です。推論時に、Actorは人間が最近の詳細を覚えながら長期記憶から重要な経験を思い出すのと同様に、短期と長期のメモリに基づいて決定を条件付けます。
強化学習のセットアップでは、軌跡の履歴が短期記憶として機能し、Self-Reflectionモデルからの出力が長期記憶に保存されます。これら2つのメモリコンポーネントが連携して、特定のコンテキストと複数の試行を通じて学んだ教訓の影響を受けるコンテキストを提供します。
言語による強化学習のプロセス
Reflexionは、以下のようなプロセスで反復的最適化を行います:
- 初期試行: Actorが環境と相互作用することで軌跡τ0を生成
- 評価: Evaluatorがスコアr0を生成(r0 = Me(τ0))
- 自己反省: Self-Reflectionモデルが{τ0, r0}を分析して要約sr0を生成
- メモリ更新: sr0をメモリ(mem)に保存
- 反復: EvaluatorがτtをOKと判断するまで繰り返し実行
このプロセスでは、各試行tの後、経験フィードバックsrtがmemに追加されます。実際には、LLMの最大コンテキスト制限に適合させるため、保存される経験の最大数Ω(通常1〜3に設定)によってmemを制限します。
このように、Reflexionは言語モデルの強力な生成能力と自己評価機能を活用した新しい強化学習パラダイムを実現しています。次のセクションでは、様々なタスクでのReflexionの実験結果を見ていきましょう。
Part 3: 応用実験と結果
Reflexionの効果を評価するため、研究チームは意思決定、推論、コード生成など多様なタスクで実験を行いました。特に注目すべきは、Reflexionが強力なベースラインに対して、AlfWorldで22%、HotPotQAで20%、HumanEvalで11%のパフォーマンス向上を達成したことです。
意思決定タスク:AlfWorldでの実験
AlfWorldは、TextWorldをベースにした対話型テキスト環境のスイートで、エージェントに多段階のタスクを解決することを要求します。実験では、隠れたオブジェクトの発見(引き出しからヘラを見つけるなど)、オブジェクトの移動(包丁をまな板に移動するなど)、オブジェクトの操作(冷蔵庫でトマトを冷やすなど)を含む6つの異なるタスクにわたる134のAlfWorld環境でエージェントを実行しました。
アクション生成器としてReActを使用し、完全に自律的な振る舞いを実現するために、2つの自己評価技術を実装しました:LLMを使用した自然言語分類と手書きのヒューリスティック。シンプルなヒューリスティックルールは次の通りです:エージェントが同じアクションを実行し、3回以上同じ応答を受け取る場合、または現在の環境でのアクション数が30を超える場合(非効率な計画)、自己反省を行います。
結果と分析
ReAct + Reflexionは、幻覚(hallucination)と非効率な計画を検出するためのシンプルなヒューリスティックを使用して、134のタスクのうち130を完了し、ReActのみのアプローチを大幅に上回りました。さらに、ReAct + Reflexionは12回の連続した試行で学習することで、追加のタスクを解決できるようになりました。
ReActのみのアプローチでは、試行6と7の間でパフォーマンスの向上が停止することが観察されました。一方、Reflexionを使用したアプローチでは、最初の2回の試行間のパフォーマンスに急激な向上が見られ、その後11回の試行にわたって着実に向上し、ほぼ完璧なパフォーマンスに達しました。
AlfWorldの失敗した軌跡では、エージェントがアイテムを所持していると思い込んでいるが、実際にはそのアイテムを持っていないという一般的なエラーがありました。エージェントは長い軌跡で複数のアクションを実行し、ミスを見つけるために行動を戻すことができませんでした。Reflexionは自己反省を使用して、失敗した長い軌跡を将来の「自己ヒント」として使用できる関連経験に蒸留することで、これらのケースをほぼ排除しました。
推論タスク:HotPotQAでの実験
HotPotQAは、エージェントがコンテンツを解析し、複数のサポート文書にわたって推論することを要求するWikipediaベースのデータセットで、113,000の質問と回答のペアを含んでいます。
推論能力のみの改善をテストするために、研究チームはReflexion + Chain-of-Thought(CoT)を実装しました。また、推論とアクション選択の両方を必要とする全体的な質問回答能力をテストするために、Wikipediaから関連コンテキストを検索し、ステップバイステップの明示的思考を使用して回答を推論できるReflexion + ReActエージェントを実装しました。
自然言語の答えを頑健に評価することはNLPにおける長年の課題です。そのため、試行間では、環境を使用して正確一致の回答採点を行い、エージェントに二値の成功信号を与えました。
結果と分析
Reflexionは複数の学習ステップにわたって、すべてのベースラインアプローチを大幅に上回るパフォーマンスを示しました。さらに、ReActのみ、CoTのみ、CoT(GT)のみの実装は、確率的にタスクを改善できませんでした。つまり、温度0.7を使用した場合、ベースラインアプローチの最初の試行から失敗したタスクは、後続の試行で解決できませんでした。
Reflexion実行では、エージェントは特定のタスクで3回連続して失敗するまで、経験を蓄積し、失敗したタスクを再試行することを許可されました。当然、CoT(GT)はグラウンドトゥルースのコンテキストにアクセスできるため、より高い精度スコアを達成しました。それでも、CoT(GT)エージェントは、質問の39%に対して正しい答えを推論できませんでしたが、Reflexionはグラウンドトゥルースの答えにアクセスせずにエージェントにミスを修正させ、精度を14%向上させました。
自己反省ステップの利点を分離するために、CoT(GT)をベースラインアプローチとして使用したアブレーション実験(ablation experiment)を実施しました。エピソードメモリ(EPM)を追加することで、最新の軌跡を含める要素を加えました。Reflexionエージェントでは、最終パスとして標準的な自己反省ステップを実装しました。直感的には、エージェントが一人称で書かれた言語を使用して言語による説明を使用することで、より効果的に反復学習しているかどうかをテストしました。結果は、自己反省がエピソードメモリ学習の優位性に加えて、8%の絶対的な向上をもたらすことを示しました。この結果は、洗練のみのアプローチは自己反省によって導かれた洗練のアプローチほど効果的ではないという議論を支持しています。
プログラミングタスク:コード生成の実験
研究チームは、MBPP、HumanEval、および彼らの新しいデータセットであるLeetcodeHardGymでのPythonおよびRustのコード作成に関するベースラインとReflexionアプローチを評価しました。MBPPとHumanEvalは、自然言語の説明に基づいて関数本体を生成する精度を測定します。彼らはベンチマーク言語コンパイラMultiPL-Eを使用して、HumanEvalとMBPPのサブセットをRust言語に翻訳しました。
プログラミングタスクは、自己生成されたユニットテストスイートなどの、より確固とした自己評価プラクティスを使用する独自の機会を提供します。そのため、Reflexionベースのプログラミングタスク実装はpass@1精度報告の対象となります。
結果と分析
Reflexionは、PythonのMBPPを除くすべてのベンチマークの全てのベースライン精度を上回り、PythonとRustの両方ですべてのベンチマークで新しい最先端の標準を設定しました。
自己反省コード生成エージェントは、多様で包括的なテストを作成する能力に制約されていることが認識されました。そのため、モデルがフレーキーなテストスイートを生成する場合、すべてのテストが不正確な解決策に合格し、コード完了に対して偽陽性のラベルにつながる可能性があります。一方、モデルが誤って書かれたテストスイートを生成する場合、一部のテストが正しい解決策に対して失敗する可能性があり、偽陰性のコード完了に条件付けられた自己反省生成につながる可能性があります。
Reflexionの実装を考えると、偽陰性は偽陽性よりも好ましいです。なぜなら、エージェントは自己反省を使用して不正確なテストを特定し、元のコード完了をそのままにしておくように促すことができるからです。一方、無効なテストスイートが偽陽性の完了を返す場合(すべての内部テストケースは合格しますが、実装は不正確)、エージェントは無効な提出を早期に報告します。
以下の表は、様々なモデル・戦略・言語の組み合わせに対するpass@1精度を示しています:
ベンチマーク + 言語 | 以前のSOTA Pass@1 | SOTA Pass@1 | Reflexion Pass@1 |
---|---|---|---|
HumanEval (PY) | 65.8 (CodeT + GPT-3.5) | 80.1 (GPT-4) | 91.0 |
HumanEval (RS) | – | 60.0 (GPT-4) | 68.0 |
MBPP (PY) | 67.7 (CodeT + Codex) | 80.1 (GPT-4) | 77.1 |
MBPP (RS) | – | 70.9 (GPT-4) | 75.4 |
Leetcode Hard (PY) | – | 7.5 (GPT-4) | 15.0 |
Rust HumanEvalの最も難しい50問題のサブセットで、テスト生成と自己反省の協力に関するReflexionの複合アプローチをテストしました。Rustコンパイラ環境は詳細なエラーログと役立つデバッグのヒントを提供するため、妥協したアプローチの良いプレイグラウンドとなります。
まず、内部テスト生成と実行ステップを省略し、これはエージェントが現在の実装からのガイダンスなしで自己反省することをテストします。結果は、エージェントはユニットテストなしでは現在の実装が正しいかどうかを判断できないことを示唆しています。したがって、エージェントは早期に戻るオプションなしで実行のすべての反復に参加しなければならず、実装に有害な編集を行います。
次に、失敗したユニットテストスイート評価に続く自然言語説明ステップを省略することで、自己反省の寄与をテストしました。直感的には、これはエージェントにエラー識別と実装改善のタスクを、失敗したすべてのユニットテストにわたって組み合わせることを課します。興味深いことに、妥協したエージェントはベースライン実行に比べてパフォーマンスを向上させませんでした。テスト生成とコードコンパイルのステップは構文とロジックのエラーを捕捉できますが、実装の修正はこれらの指示を反映していないことが観察されました。
これらの経験的結果は、自己反省なしでブラインド試行錯誤のデバッグ技術を提案する最近の多くの研究が、Rustでの複雑なプログラムを書くなどのより難しいタスクでは効果がないことを示唆しています。
Part 4: 意義と今後の展望
言語による強化学習の利点と制限
主要な利点
Reflexionは従来のより伝統的な強化学習アプローチと比較していくつかの優位点があります:
- 軽量で微調整不要 🔄: LLMを微調整する必要がなく、既存のモデルの能力を活用できます。
- より細かなフィードバック 📝: スカラーやベクトル報酬と比較して、より細かな形式のフィードバック(例:アクションの対象を変更する)を可能にします。
- 解釈可能なエピソードメモリ 🧠: 過去の経験に対するより明示的で解釈可能な形式のエピソードメモリを提供します。
- 将来のエピソードへの明示的なヒント 💡: 将来のエピソードでのアクションに対するより明示的なヒントを提供します。
同時に、いくつかの制限も存在します:
- LLMの自己評価能力への依存 ⚠️: LLMの自己評価能力(またはヒューリスティック)の強さに依存します。
- 形式的な成功保証の欠如 📊: 成功に対する形式的な保証がありません。
ただし、LLM機能が向上するにつれて、このパラダイムは時間の経過とともに改善されることが予想されます。
現在の制約と課題
Reflexionはその核心において、自然言語を使用して方針最適化を行う最適化技術です。方針最適化は経験を通じてアクション選択を改善するための強力なアプローチですが、それでも非最適な局所的最小解に陥る可能性があります。
この研究では、長期記憶を最大容量を持つスライディングウィンドウに制限していますが、将来の研究がベクトル埋め込みデータベースや従来のSQLデータベースなどのより高度な構造でReflexionのメモリコンポーネントを拡張することを奨励しています。
コード生成に特有の課題として、非決定的なジェネレータ関数、APIと相互作用する純粋でない関数、ハードウェア仕様に応じて出力が変わる関数、または予測が難しい可能性のある並列または同時実行の動作を呼び出す関数など、正確な入出力マッピングを指定するテスト駆動開発には多くの実用的な制限があります。
広範な影響と将来研究の方向性
倫理的考慮事項
LLMはますます外部環境(インターネット、ソフトウェア、ロボット工学など)や人間と相互作用するために使用されています。この研究はこれらのエージェントをより大きな自動化と作業効率に向けて強化し、支援する可能性を持っていますが、これらのエージェントが誤用された場合のリスクも増幅します。この方向の研究は、安全性と倫理的考慮事項においてより多くの取り組みが必要です。
一方で、強化学習は従来、ブラックボックスの方針と最適化のセットアップに苦しんでおり、解釈可能性と整合性が課題となっていました。提案された「言語による」強化学習は、これらの問題のいくつかを解決し、自律的なエージェントをより解釈可能で診断可能にする可能性があります。例えば、人間が理解するには難しすぎるツール使用の場合、自己反省をモニターしてツールを使用する前に適切な意図を確保することができます。
将来研究の方向性
将来の研究では、Reflexionを使用して、自然言語での価値学習やオフポリシー探索技術など、従来の強化学習の設定で徹底的に研究されてきたより高度な技術を採用することができます。具体的には:
- より高度なメモリ構造 📚: ベクトル埋め込みデータベースやグラフベースの知識表現など、より複雑なメモリ構造の探索
- マルチモーダルフィードバック 🖼️: テキストだけでなく、画像やその他の形式のフィードバックを組み込む
- より複雑なドメインへの拡張 🌐: より複雑な環境や、より長期的な計画を必要とするタスクへの適用
- エージェント間のコラボレーション 👥: 複数のReflexionエージェントが協力して問題を解決する方法の探索
- 安全性と整合性の向上 🔒: 言語による強化学習でエージェントの安全性と人間の価値観との整合性を確保する方法
これらの研究方向は、言語エージェントの次世代の開発に影響を与え、より効果的で安全な人工知能システムの創造に貢献する可能性があります。
まとめ
Reflexionは、言語エージェントが過去の失敗から学習する能力を向上させるための革新的なフレームワークです。従来の勾配ベースの最適化手法に依存せず、言語によるフィードバックを活用することで、効率的で解釈可能な学習プロセスを実現しています。
実験結果から、Reflexionは意思決定、推論、プログラミングといった多様なタスクで一貫してベースラインアプローチを上回るパフォーマンスを示し、特にHumanEvalコーディングベンチマークでは91%のpass@1精度を達成し、以前の最先端GPT-4の80%を大幅に上回りました。
Reflexionの最も興味深い側面の一つは、その単純さと効果のバランスです。複雑な最適化アルゴリズムやコストのかかる微調整に頼ることなく、LLMの自己反省能力を活用して、数回の試行でパフォーマンスを大幅に向上させることができます。
言語による強化学習の分野は発展途上にありますが、Reflexionは言語モデルを活用した強力で実用的なエージェントを構築するための有望な道筋を示しています。将来の研究と応用により、この方向性が人工知能の進歩にどのように貢献するかを見るのは興味深いでしょう。
クイズ:Reflexionの理解度チェック
-
Reflexionの主要な革新点は何ですか?
- A) より大きな言語モデルの使用
- B) より多くのデータでの微調整
- C) 言語によるフィードバックを通じた学習
- D) 新しいニューラルネットワークアーキテクチャ
-
Reflexionシステムの主要コンポーネントは何ですか?
- A) Actor、Critic、Policy
- B) Actor、Evaluator、Self-Reflection
- C) Generator、Discriminator、Optimizer
- D) Encoder、Memory、Decoder
-
Reflexionが従来の強化学習と比較して持つ利点は?
- A) より少ないデータでの学習
- B) モデルの微調整が不要
- C) より解釈可能なフィードバック
- D) 上記すべて
-
HumanEvalベンチマークでのReflexionのpass@1精度は?
- A) 71%
- B) 81%
- C) 91%
- D) 100%
-
Reflexionの制限として正しいものは?
- A) LLMの自己評価能力への依存
- B) 形式的な成功保証の欠如
- C) 局所的最小解に陥るリスク
- D) 上記すべて
答え: 1-C, 2-B, 3-D, 4-C, 5-D