LLM巫師,代碼預訓練是魔杖!UIUC華人團隊揭秘代碼數據三大好處
大模型時代的語言模型(LLM)不僅在尺寸上變得更大了,而且訓練數據也同時包含了自然語言和形式語言(代碼)。
作為人類和計算機之間的媒介,代碼可以將高級目標轉換為可執行的中間步驟,具有語法標準、邏輯一致、抽象和模塊化的特點。
最近,來自伊利諾伊大學香檳分校的研究團隊發布了一篇綜述報告,概述了將代碼集成到LLM訓練數據中的各種好處。
論文鏈接:https://arxiv.org/abs/2401.00812v1
具體來說,除了可以提升LLM在代碼生成上的能力外,好處還包括以下三點:
1. 有助于解鎖LLM的推理能力,使能夠應用于一系列更復雜的自然語言任務上;
2. 引導LLM生成結構化且精確的中間步驟,之后可以通過函數調用的方式連接到外部執行終端(external execution ends);
3. 可以利用代碼編譯和執行環境為模型的進一步改進提供了更多樣化的反饋信號。
此外,研究人員還追蹤了LLM作為智能智能體(intelligent agents,IA)時,在理解指令、分解目標、規劃和執行行動(execute actions)以及從反饋中提煉的能力如何在下游任務中起到關鍵作用。
最后,文中還提出了「使用代碼增強LLM」領域中關鍵的挑戰以及未來的研究方向。
代碼預訓練提升LLM性能
以OpenAI的GPT Codex 為例,對 LLM 進行代碼預訓練后,可以擴大LLM的任務范圍,除了自然語言處理外,模型還可以為數學理論生成代碼、執行通用編程任務、數據檢索等。
代碼生成任務具有兩個特性:1)代碼序列需要有效執行,所以必須具有連貫的邏輯,2)每個中間步驟都可以進行逐步邏輯驗證(step-by-step logic verification)。
在預訓練中利用和嵌入代碼的這兩種特性,可以提高LLM思維鏈(CoT)技術在傳統自然語言下游任務中的性能,表明代碼訓練能夠提高LLM進行復雜推理的能力。
通過從代碼的結構化形式中進行隱式學習,代碼 LLM 在常識結構推理任務中也表現出更優的性能,例如與markup、HTML和圖表理解相關的任務。
支持功能/函數終端(function ends)
最近的研究結果表明,將LLMs連接到其他功能終端(即,使用外部工具和執行模塊增強LLMs)有助于LLMs更準確可靠地執行任務。
這些功能性目的使LLMs能夠獲取外部知識、參與到多種模態數據中,并與環境進行有效互動。
從相關工作中,研究人員觀察到一個普遍的趨勢,即LLMs生成編程語言或利用預定義的函數來建立與其他功能終端的連接,即「以代碼為中心」的范式。
與LLM推理機制中嚴格硬編碼工具調用的固定實踐流程相反,以代碼為中心的范式允許LLM動態生成tokens,并使用可適應的參數(adaptable parameters)調用執行模塊,為LLM與其他功能終端交互提供了一種簡單明了的方法,增強了其應用程序的靈活性和可擴展性。
重要的是,這種范式可以讓LLM與跨越不同模態和領域的眾多功能終端進行交互;通過擴展可訪問的功能終端的數量和種類,LLM可以處理更復雜的任務。
本文中主要研究了與LLM連接的文本和多模態工具,以及物理世界的功能端,包括機器人和自動駕駛,展現了LLM在解決各種模式和領域問題方面的多功能性。
提供自動反饋的可執行環境
LLMs表現出超出其訓練參數的性能,部分原因是模型能夠吸收反饋信號,特別是在非靜態的現實世界應用中。
不過反饋信號的選擇必須謹慎,因為嘈雜的提示可能會阻礙LLM在下游任務上的表現。
此外,由于人力成本高昂,因此在保持忠誠度(faithful)的同時自動收集反饋至關重要。
將LLMs嵌入到代碼執行環境中可以實現上述條件的自動反饋。
由于代碼執行在很大程度上是確定性的,LLMs從執行代碼的結果中獲取的反饋仍然忠實于目標任務;代碼解釋器還為LLMs查詢內部反饋提供了一個自動路徑,無需人工標注即可對LLMs生成的錯誤代碼進行調試和優化。
此外,代碼環境允許LLMs整合各種各樣的外部反饋形式,包括但不限于二元正確性反饋,對結果的自然語言解釋,以及獎勵值排序,從而實現一個高度可定制的方法來提高性能。
當下的挑戰
代碼預訓練與LLMs推理增強的因果關系
雖然從直覺上來看,代碼數據的某些屬性可能有助于LLMs的推理能力,但其對增強推理技能影響的確切程度仍然模糊不清。
在下一步的研究工作中,重要的是要研究在訓練數據中加強認識:這些代碼屬性是否真的可以增強訓練的LLMs的推理能力。
如果確實如此,對代碼的特定屬性進行預訓練可以直接提高LLMs的推理能力,那么理解這種現象將是進一步提高當前模型復雜推理能力的關鍵。
不限于代碼的推理能力
盡管通過代碼預訓練實現了對推理能力的增強,但基礎模型仍然缺乏真正通用人工智能所期望的類似人類的推理能力。
除了代碼之外,大量其他文本數據源也有可能增強LLM推理能力,其中代碼的內在特征,如缺乏歧義、可執行性和邏輯順序結構,為收集或創建這些數據集提供了指導原則。
但如果繼續堅持在具有語言建模目標的大型語料庫上訓練語言模型的范式,很難有一種順序可讀的語言比形式語言更抽象:高度結構化,與符號語言密切相關,并且在數字網絡環境中大量存在。
研究人員設想,探索可替代的數據模式、多樣化的訓練目標和新穎的架構將為進一步增強模型推理能力提供更多的機會。
以代碼為中心范式在應用上的挑戰
在LLMs中,使用代碼連接到不同的功能終端的主要挑戰是學習不同功能的正確調用方法,包括選擇正確的功能(函數)終端以及在適當的時候傳遞正確的參數。
比如說一個簡單的任務(網頁導航),給定一組有限的動作原語后,如鼠標移動、點擊和頁面滾動,再給出一些例子(few-shot),一個強大的基礎LLM往往需要LLM精確地掌握這些原語的使用。
對于數據密集型領域中更復雜的任務,如化學、生物學和天文學,這些任務涉及對特定領域python庫的調用,其中包含許多不同功能的復雜函數,增強LLMs正確調用這些功能函數的學習能力是一個前瞻性的方向,可以使LLMs在細粒度領域中執行專家級任務。
從多輪互動和反饋中學習
LLMs通常需要與用戶和環境進行多次交互,不斷糾正自己以改善復雜任務的完成。
雖然代碼執行提供了可靠和可定制的反饋,但尚未建立一種完全利用這種反饋的完美方法。
當下基于選擇的方法雖然有用,但不能保證提高性能,而且效率低下;基于遞歸的方法嚴重依賴于LLM的上下文學習能力,這可能會限制其適用性;微調方法雖然做出了持續的改進,但數據收集和微調是資源密集型的,實際使用時很困難。
研究人員認為強化學習可能是一種更有效的利用反饋和改進的方法,可以提供一種動態的方式來適應反饋,通過精心設計的獎勵功能,潛在地解決當前技術的局限性。
但仍然需要大量的研究來了解如何設計獎勵函數,以及如何將強化學習與LLMs最佳地集成以完成復雜的任務。