李飛飛DeepMind全新「代碼鏈」碾壓CoT!大模型用Python代碼推理,性能暴漲12%
思維鏈(CoT),最具開拓性和影響力的提示工程技術之一,能增強LLM在推理決策中的表現(xiàn)。
那么,如果大模型可以在代碼中「思考」,會如何呢?
最近,谷歌DeepMind、斯坦福、UC伯克利團隊聯(lián)手提出了全新技術——「代碼鏈」(CoC)。
論文地址:https://arxiv.org/pdf/2312.04474.pdf
「代碼鏈」是一種將編碼邏輯與自然語言理解相結合,簡單卻非常有效的創(chuàng)新方法,能夠提升LLM基于代碼的推理能力,讓其更智能、更通用。
再通俗點講,CoC允許LLM生成「偽代碼」來分解難題,通過LMulator執(zhí)行有效代碼,模擬無效代碼。
研究結果顯示,在BIG-Bench Hard基準上,CoC實現(xiàn)了84%的準確率,比CoT提高了12%。
另外,在BIG-Bench Hard的23項任務中,CoC在18項任務中超過了人類的平均表現(xiàn)。
看得出,「代碼鏈」將CoT向前推進了一步,并將生成用于邏輯推理的代碼與LLM的語義推理集成在一起。
研究人員稱CoC非常適合機器人技術,可以進行語義和算法推理,在現(xiàn)實世界中的表現(xiàn)讓人驚艷。
對垃圾和可回收物進行分類。
還可以準備出西紅柿炒蛋的配菜。
值得一提的是,李飛飛的學生也是這篇論文的核心作者之一。
「代碼鏈」讓大模型用代碼思考
除了CoT,先前的工作還有多種方法來提升大模型推理能力。
比如,Program of Thoughts(思維程序)提示編寫并執(zhí)行代碼,還有ScratchPad提示通過跟蹤程序狀態(tài)的中間步驟來模擬運行已經寫入的代碼。
最新工作中,研究人員提出了「代碼鏈」(CoC),其中大模型不僅編寫一個程序,還可以改善大模型基于代碼的推理能力。
具體來說,大模型不僅編寫一個程序,而且還有選擇性地「模擬」解釋器,通過生成生成某些代碼行的預期輸出。
關鍵思路是,鼓勵大模型將程序中的語義子任務格式化為靈活的偽代碼,在運行時可以明確地捕捉到這些偽代碼,并將其交給LLM進行仿真。作者將其稱為LMulator。
舉個栗子,給定任務「在上面的段落中,數(shù)一數(shù)這個人諷刺了多少次」。
接下來,可以在在上下文中提示LM一個可以調用輔助函數(shù)的程序,例如is_sarcastic(sentence),LM對此進行語言預測,并將結果作為布爾(boolean)結果輸出返回,然后與程序的其余部分一起處理。
具體來說,研究人員將LM推理公式化為以下過程,如下圖所示:
LM編寫代碼,解釋器逐步執(zhí)行每行代碼(紅色) 。或者如果失敗,則用LM (紫色)模擬結果,并更新程序狀態(tài)(綠色)。
CoC 繼承了(i)編寫可執(zhí)行代碼(將精確的算法計算留給解釋器)和(ii)編寫語義問題的偽代碼,并生成其輸出(可視為簡單的格式更改,LM對其具有很強的適應性)的優(yōu)點,使LM能夠「用代碼思考」。
研究人員還總結了「代碼鏈」的幾個特點:
- 將代碼的優(yōu)勢與語言模型的強大語義和常識知識結合起來,使得代碼能夠在全新的體系中使用。
- 利用了語言模型的編碼能力,這是近期語言模型的一個特別優(yōu)勢,因為可以獲得高質量的數(shù)據(jù)。
- 繼承了推理代碼的許多好處,包括代碼的形式化表達式結構(例如圖靈完備性)和可用于代碼的強大計算工具。
- 繼承了通過中間步驟進行推理的技術的許多優(yōu)勢,比如CoT。這些技術使得語言模型在必要的時候可以使用更多的計算來解決問題,同時提供更多的可解釋性。
語言推理評估
CoC的整體性能如下表1所示。
可以看到,無論是在超過人類基線的任務數(shù)量上,還是在超過基線的總體數(shù)量上,CoC都優(yōu)于其他方法。
事實上,CoC在84%任務上取得SoTA。甚至在幾項任務中,CoC的表現(xiàn)大大超過了人類基線和其他方法,幾乎達到了100%準確率。
一般來說,對于這些任務,結果在語言上很復雜,但在代碼上卻很簡單,比如,多步算術Q任務:((-3+5×8×-4)-(9-8×-7))=)。
研究人員還觀察到,CoT在許多任務上都優(yōu)于人類基線,而直接答案則差強人意。
圖3按問題類型將結果分解,任務標簽如表a1所示。研究人員將主要是算法或主要是自然語言的問題分離出來。
實驗結果顯示,在算法任務上,CoC的表現(xiàn)尤為出色,而在自然語言任務上,CoC的表現(xiàn)與CoT相當。
這一結果尤其令人鼓舞,因為人們可能會認為這些面向語言的任務更不適合編碼。關鍵是CoC方法提供了靈活性,使用仿真器來模擬代碼執(zhí)行的輸出,同時保留了LM對自然語言問題的語義推理能力。
消融研究
圖4和5,以及表2顯示了為激發(fā)「代碼鏈」提示的各個方面而執(zhí)行的消融研究。
正如人們所預期的那樣,執(zhí)行Python的方法在多項任務上都實現(xiàn)了100%的性能,如果代碼正確,那么模型每次輸出結果都會正確。
然而,僅依賴Python的方法(CoC (Python))在應用于非算法任務時表現(xiàn)不佳,幾乎全部失敗。
CoC(Python)的消融與最近的研究成果相似,這些研究成果表明,如果應用于數(shù)值問題,代碼推理的效果會很好。
擴展
圖6顯示了CoC在不同規(guī)模的模型中的表現(xiàn)。
研究人員觀察到,與「思維鏈」提示類似,CoC的改進也隨著模型的增加而增加。
事實上,在某些算法任務中,「代碼鏈」的表現(xiàn)甚至超過了最優(yōu)秀的人類評測員。然而,CoT只為最大的模型(d-3)帶來性能優(yōu)勢,而CoC在較小的模型(a-1、b-1、c-1)上也優(yōu)于直接問題解答基線,這表明較小的模型更容易輸出結構化代碼作為中間步驟,而不是自然語言。
跨任務提示
對于跨任務提示,研究人員用一些來自不同問題的例子來提示語言模型。從上圖6和表2中看到了所有方法的性能下降。
盡管有這種下降,CoC在規(guī)模上優(yōu)于CoT和直接提示,幾乎達到了人類的平均性能。
指令調優(yōu)模型
為了與使用聊天界面的指令調優(yōu)的模型進行比較,研究人員向模型發(fā)出指令,以引出所需的推理方法。
對于基線,作者要求模型「直接回答」(Direct)或 「逐步思考」(CoT)。
對于CoC變體,研究人員要求模型「編寫python代碼來幫助解決問題,如果有幫助的話」。
如果編寫了程序,可以使用Python解釋器運行代碼,然后將結果(或執(zhí)行失敗時的錯誤信息)反饋給模型以確定最終答案(CoC (Python)),或者要求模型將代碼執(zhí)行的輸出模擬為LMulator(CoC (LM))。
如下表顯示了每種方法的性能。使用gpt-3.5-turbo,CoT和CoC (Python)都顯示出比直接提示更好的性能,盡管它們都被CoC (Interweave) 大大超越。
機器人用上了
此外,研究人員還將CoC的方法用在了機械臂在真實環(huán)境中的探索中。
結果發(fā)現(xiàn),「代碼鏈」非常適合解決機器人任務,因為這類任務需要語義和算法推理。
它們還通過代碼(控制或感知 API)與其他API交互,以及通過自然語言與用戶交互。
就比如開頭提到的垃圾分類任務,「代碼鏈」加持的機械臂的「思考過程」如下。
紅色突出顯示表示解釋器正在執(zhí)行LM生成的代碼,紫色突出顯示表示LMulator正在模擬代碼。
西紅柿炒蛋的過程。