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