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