Grunnleggende konsepter
元反思是一種離線強化學習技術,它通過增強基於過去試驗經驗學習的語義記憶來提高語言代理的性能。
摘要
大型語言模型 (LLM) 的普及開啟了語言代理解決各種任務的新時代。 雖然當前的尖端 LLM 足以為相當不錯的語言代理提供動力,但封閉式 API 模型使得在它們表現不佳的情況下難以改進。 為了應對這一挑戰,最近的研究探索了使用自我反思和提示優化等技術來提高其性能的方法。 不幸的是,像自我反思這樣的技術只能在線上設置中使用,而當前的提示優化技術的設計和測試僅適用於簡單的任務。 為此,我們引入了元反思,這是一種新穎的離線強化學習技術,通過增強基於過去試驗經驗學習的語義記憶來提高語言代理的性能。 我們通過跨多個領域的評估證明了元反思的有效性,包括複雜的邏輯推理、生物醫學語義相似性、開放世界問答以及基礎設施即代碼 (IAC) 中的漏洞威脅檢測,涵蓋不同的代理設計。 元反思將語言代理的性能比原始 GPT-4 基線提高了 4% 到 16.82%,並且與現有的最先進提示優化技術相比表現相當,同時需要的 LLM 調用更少。
元反思
我們考慮一個 LLM 代理 A 與環境 Env 交互以解決任務 T 的設置,該任務的特徵是初始狀態 S0。 在時間步長 t,代理 A 在狀態 St 接收觀察結果 ot,並使用策略 π(at|Tt, Pt) 採樣動作 at,其中 Tt = {o0, a0, o1 . . . , at, ot} 表示代理的軌跡,而提示 Pt 是驅動時間步長 t 的動作選擇的提示。 最終,代理到達狀態 Sn,在該狀態下它從代理接收獎勵 r = R(Sn)。 該狀態標記著語言代理正確/不正確地完成了任務 T。
元反思旨在通過以基於規則的指令 Instr 的形式增強它們的語義記憶 (McRae and Jones, 2013) 來提高此類語言代理的性能,用 π(at|Tt, P L Instr) 替換 π(at|Tt, P) 來存儲經驗學習。 算法 1 顯示了元反思過程的概要。 該算法的核心原理是從一組空指令開始,並使用小的訓練批次迭代地改進指令。
例如,如果代理 Areact 是一個在維基百科上處理問答任務的 REACT 風格的代理,則在狀態 S0,代理將收到問題 Q。現在,代理可以選擇執行搜索動作,在該動作之後它將接收觀察結果 o。 然後,代理可以選擇選擇進一步的搜索或查找動作,或者選擇答案動作來返回答案。 此動作將標記到狀態 Sn 的轉換,並且可以根據答案的正確性生成二進制獎勵。 一個更簡單的例子是代理 As,給定一個多項選擇題,它選擇一個答案,如果答案正確則獲得正獎勵。
代理、環境和自我反思方法
元反思過程的核心是使用以下組件:(a) 基於語言模型的代理 A(即 RL actor),(b) 環境 Env,它根據代理的軌跡為特定動作生成獎勵,以及 (c) A SelfReflect 方法,該方法按照 (Shinn et al., 2023) 生成給定代理軌跡的口頭強化(算法 1 的第 10 行)。這與先前的最先進提示優化技術 (Wang et al., 2023; Pryzant et al., 2023) 形成對比,其中優化僅依賴於代理的最終動作,並且不能應用於 actor 未觀察到的中間狀態。
此外,我們調整代理 A,使其除了標準任務描述和代理行為提示之外,還通過一組指令進行參數化。 在我們的實現和實驗中,我們利用單步代理(一個普通的單次語言模型代理)或基於 REACT (Yao et al., 2023c) 和 COT (Wei et al., 2023) 的多步代理。 雖然元反思沒有區分兩者,但我們做出這種區分是為了便於與其他提示優化技術進行比較,這些技術僅適用於單步代理配置。 有關代理配置的更多信息可以在第 3.3 節中找到。
元反思步驟
MetaReflect 方法旨在將先前的指令集 Instr、一組自我反思 refl、訓練數據 DT 和驗證數據 DV 作為輸入,並將生成更新的指令集 Instr∗,如算法 1 的第 11 行所示。
對於 MetaReflect 方法,我們使用一個標準的語言模型,其提示指示 LLM 觀察反思、訓練數據,並生成一個新的非特定於案例的指令風格記憶。 此外,先前的記憶也被作為輸入傳遞,以便輸出是先前學習的概括。 在我們的實現中,為了提高效率,這種元反思和概括是在同一個提示中完成的。 或者,可以先生成新指令,然後將其與現有指令組合。
我們指定指令需要採用列表的形式。 因此,第 11 行中的元反思步驟通常要么 (a) 通過添加新項目來更新列表,要么 (b) 將一個或多個先前項目與自我反思中的學習成果相結合以生成更短的列表。 例如,在我們的 HOTPOTQA 實驗中學到的一條元反思指令建議在搜索人以縮小結果範圍時包含職業。
在後續的批次中,自我反思步驟產生了一個反思,其中提到在搜索電影時添加諸如發行日期之类的搜索詞。 MetaReflect 步驟可以通過以下兩種方式將先前的指令與當前的自我反思相結合:通過將一個新項目附加到列表中以闡明搜索電影的策略,或者可以將先前的項目概括為類似於“在搜索特定實體時,使用額外的上下文信息來使用與實體特徵相對應的輔助關鍵字來擴充主要搜索詞”。
驗證和回溯
在每次迭代中,在 MetaReflect 之後,我們驗證新指令的質量。
由於稀疏的獎勵信號導致糟糕的自我反思或元反思指令過度概括,我們最終可能會得到比先前指令質量更差的指令。 較差的指令也可能是由於大型語言模型普遍反复無常、不可預測的性質造成的。 因此,我們通過在訓練數據和驗證集的隨機樣本上測試新指令來驗證它們,以確保它們的性能優於先前的指令,如算法 1 的第 12 行所示。理想情況下,我們會在完整的驗證數據集上執行此驗證。 但是,在我們的例子中,我們僅在當前批次上進行驗證,以平衡指令質量和效率。
如果更新後的指令與之前的指令相比表現不佳,我們將回溯到之前的指令,如第 13 行所示。
例如,在上一段中,元反思步驟將關於如何搜索人的特定指令替換為關於如何搜索實體的更通用的指令。 但是,這些通用指令可能過於模糊(特別是對於較小、能力較弱的模型),並且客戶端代理無法將其正確應用於搜索人的情況。
迭代優化
受 (Shinn et al., 2023) 中展示的語言模型的自我優化行為的啟發,我們對每個批次使用多次元反思嘗試(第 4 行到第 13 行),直到我們在當前批次中沒有看到失敗或耗盡最大試驗次數(我們所有實驗都設置為 3 次)。 類似於自我反思如何幫助優化語言代理的軌跡以完成任務,來自 Instr∗ 的失敗軌跡的反饋在元反思過程中充當隱含的口頭強化。 然後,元反思步驟可以使用這些口頭強化來指導指令搜索。 這種以軌跡為導向的迭代優化策略減少了在指令優化過程中重複錯誤的可能性,例如提出過去已經嘗試過的錯誤優化。
在可以直接比較的單步代理設置中,我們觀察到這種迭代優化策略使我們能夠獲得與最先進的提示優化技術相似的性能,但 LLM 調用次數更少。
Statistikk
元反思將語言代理的性能比原始 GPT-4 基線提高了 4% 到 16.82%。
與現有的最先進提示優化技術相比,元反思需要的 LLM 調用更少。
在所有配置中,元反思所需的訓練 LLM 調用次數最少(包括任何中間推理調用),而 PROTEGI 和 PROMPTAGENT 分別需要多達 17 倍和 1.5 倍的 LLM 調用。