メインコンテンツへスキップ
見出し画像
Photo byishi99

Reflexion


    "失敗からのフィードバック!"

    Introduction

    Reflexionは大型言語モデル(LLM)が失敗したタスクに対して言語的自己反省(verbal self-reflection)を実行し、これによって得られた経験を記憶してその後の試行でより良い成果を出すようにするプロンプティング技法です。既存の強化学習とは異なり、Reflexionはモデルの重みを更新せず、ただ言語的フィードバックのみを使用して性能を向上させます。

    Motivation

    • 既存強化学習の高コストおよび非効率性:

      • 問題点: 既存の強化学習方式は LLMの重みを直接更新する「ファインチューニング」が必要であり、これは膨大な計算資源と時間を要求します。また、効率的に試行錯誤を通じて学習するためには莫大な量の訓練サンプルが必要であるという困難がありました。

    • 単純なフィードバックの限界および問題診断の困難:

      • 問題点: 既存の強化学習は主にスカラー値(scalar values)やベクトル報酬(vector rewards)のような単純なフィードバックを使用していましたが、これはエージェントが何を間違えたのかを正確に把握し改善することを困難にしました。

    • LLMエージェントの「幻覚(Hallucination)」および非効率的な計画:

      • 問題点: ReActのようなLLMベースのエージェントは時々存在しないアイテムを持っていると錯覚したり(幻覚)、非効率的な行動を繰り返すなどの問題が発生しました(例:同一行動の繰り返し、過度な行動を取る場合)。このようなエラーから自ら回復することに困難がありました。

    • 解釈可能性および説明力不足:

      • 問題点: 既存の強化学習モデルは**「ブラックボックス(black-box)」**のように動作し、エージェントがなぜ特定の決定を下したのかを理解し、問題が発生した時に診断することが困難であるという限界がありました。

    • 複雑なタスク(例:コーディング)での性能限界:

      • 問題点: LLMが複雑なコードを生成したりデバッグする能力には依然として限界があり、特に初期試行での正確度が低い問題がありました。

    Method

    Reflexionは3つの主要モデルで構成されます:

    1. Actor: テキストとアクションを生成するLLM

    2. Evaluator: Actorの出力を評価するモデル

    3. Self-Reflection: 失敗原因を分析し改善方向を提示するモデル

    動作原理

    試行 → 失敗 → 自己反省 → 経験保存 → 次の試行で活用

    例示:

    1回目の試行: "Python関数作成" → 失敗
    自己反省: "変数名が明確でなく、エッジケースを考慮できなかった"
    2回目の試行: 反省内容を参考に改善されたコード作成 → 成功
    画像

    Details

    1. 重み更新なしの学習

    • 従来の強化学習とは異なりモデルパラメータを変更しない

    • ただコンテキスト内学習(in-context learning)のみ活用

    • 迅速で効率的な改善が可能

    2. 言語的フィードバックの力

    • スカラー報酬よりもはるかに情報豊富なフィードバック

    • 具体的な改善方向の提示が可能

    • 人間が理解できる形態の学習過程

    3. エピソードメモリの活用

    • 短期メモリ: 現在タスクの軌跡(trajectory)保存

    • 長期メモリ: 自己反省結果を継続的に蓄積

    • 過去経験を活用した段階的改善

    4. 効果的使用のための核心ポイント

    a. 適切なフィードバック信号設計

    # 二進フィードバック(単純な場合)
    feedback = "成功" or "失敗"
    
    # ヒューリスティックベースフィードバック(中間複雑度)
    if same_action_repeated > 3:
        feedback = "非効率的計画による失敗"
    
    # LLMベース自体評価(複雑な場合)
    feedback = "コード実行結果と単体テストに基づく詳細分析"

    b. メモリ管理戦略

    • メモリサイズ制限: 通常1-3個の経験に制限(コンテキスト長考慮)

    • スライディングウィンドウ: 最新の経験のみ維持

    • 経験の質: 単純な成功/失敗よりも具体的な学習ポイント保存

    c. ドメイン別最適化

    意思決定タスク(AlfWorld):

    • 環境フィードバック + ヒューリスティック規則の組み合わせ

    • 例:「3回以上同じ行動を繰り返した場合、非効率的計画と判断」

    推論タスク(HotPotQA):

    • 正確な答えマッチングによる二進評価

    • 検索戦略と推論過程に対する具体的フィードバック

    プログラミングタスク(HumanEval):

    • 自体生成単体テストの活用

    • コンパイラエラーメッセージと実行結果分析

    5. 📊 性能比較データ

    タスクタイプ ベースライン Reflexion 改善幅 AlfWorld(意思決定) 78% 97% +22% HotPotQA(推論) 51% 71% +20% HumanEval(コーディング) 80% 91% +11%

    Limitations

    • 自体評価能力への依存

      • LLMが自ら間違いを診断し改善する能力に依存するため、モデルの自体評価能力によって性能が左右されます。成功を保証できないという根本的限界があります。

    • 局所最適解問題

      • 最適な解答ではなく特定の失敗パターンに陥る可能性があります。完璧な解決策よりも「それなりに動作する」レベルにとどまるリスクがあります。

    • メモリ構造の制約

      • 現在は単純なスライディングウィンドウ方式で記憶を管理するため、複雑な問題解決に限界があります。より精巧なデータベースシステムが必要です。

    • 創造性が必要なタスクの困難

      • WebShopのように非常に多様で創造的な行動が必要なタスクでは大きな改善効果を示せませんでした。定型化された問題では効果的ですが、自由度の高い探索が必要な領域では限界があります。

    • 高性能モデル依存性

      • 巨大LLM(GPT、Claudeなど)でのみ効果的に動作します。相対的に性能の低いモデルでは意味のある改善を期待することが困難です。

    あなたへのおすすめ