推動大模型自我進化,北理工推出「流星雨計劃」

机器之心發表於2024-12-05

圖片

AIxiv專欄是機器之心釋出學術、技術內容的欄目。過去數年,機器之心AIxiv專欄接收報導了2000多篇內容,覆蓋全球各大高校與企業的頂級實驗室,有效促進了學術交流與傳播。如果您有優秀的工作想要分享,歡迎投稿或者聯絡報導。投稿郵箱:liyazhou@jiqizhixin.com;zhaoyunfeng@jiqizhixin.com

本文將介紹來自北京理工大學電腦科學與技術學院的流星雨研究計劃。該計劃旨在深入研究大模型自我進化的理論與方法,推動大模型的發展。

在人類個體能力提升過程中,當其具備了基本的技能之後,會自主地與環境和自身頻繁互動,並從中獲取經驗予以改進。大模型自我進化研究之所以重要,正是源於該思想,並且更傾向於探究大模型自身能力的深度挖掘和擴充套件。基於這一趨勢,北京理工大學 DIRECT LAB 正式啟動了「大模型自我進化」的流星雨研究計劃。這篇文章以程式碼大模型和垂域大模型進化為例,逐步介紹流星雨計劃。

SRA-MCTS:推動程式碼大模型自我進化

圖片

  • 論文標題:SRA-MCTS: Self-driven Reasoning Augmentation with Monte Carlo Tree Search for Code Generation
  • 論文地址:https://arxiv.org/pdf/2411.11053
  • 程式碼開源:https://github.com/DIRECT-BIT/SRA-MCTS
  • 8B 模型的資料開源:https://huggingface.co/datasets/BinXD/SRA-MCTS-Llama-3.1-8B

程式碼大模型應用範圍廣、影響大,如何提升其表現,一直備受業內外關注。在一項最新的研究中,來自北京理工大學的研究者提出了一種全新的思路 ——SRA-MCTS,旨在透過自我進化的方式,解決程式碼模型在處理複雜問題時缺少中間推理過程。

核心觀點:自我進化的力量

跟隨上述自我進化的思想,在 SRA-MCTS(Self-guided MCTS-based data generation for Reasoning Augmentation)方法中,作者無需藉助額外的任何監督訊號、完全透過模型自身來進行推理路徑生成,並進一步迭代大模型的能力。透過這個過程,模型能夠自主地生成高質量的推理路徑,並將這些路徑轉化為可執行程式碼,進而提升在複雜任務上的成功率。
圖片
整個過程不僅增強了模型的推理能力,還透過自我反饋和反思提升瞭解決複雜任務的成功率。實驗表明,即使在小規模模型中,SRA-MCTS 也能顯著提升任務處理能力,特別是在多樣性和解決複雜問題的能力上。

突出貢獻與顯著成就:

  • 無需外部監督:與傳統方法不同,SRA-MCTS 完全依賴模型自身的推理能力進行資料生成和訓練,避免了對人工標註資料或額外監督訊號的依賴。
  • 自我進化與持續提升:透過反覆生成推理路徑並進行自我訓練,模型形成了一個正向反饋迴圈,實現了效能的持續提升,尤其在較小模型中也展現出強大的潛力。
  • 提升複雜任務解決能力:文中的方法在多種規模的模型上均展現出了顯著的效能提升,特別是在解決需要分析的任務時,SRA-MCTS 顯著提高了成功率。
  • 驗證了小模型自我合成的潛力:實驗分別在小模型(2B, 8B, 14B)上自我資料合成並進行訓練,對比了 70B 模型的資料蒸餾結果。結果表明,小模型自我合成的資料訓練結果可以超越大模型資料蒸餾的能力。

工作思想與實現方式

該方法核心在於將推理過程和資料生成緊密結合,透過 SRA-MCTS 引導模型自主生成推理路徑。這不僅穩定了分析的準確性下限,還為模型提供了一個無需外部監督的自我改進機制。實驗結果表明,即使在傳統的思維鏈(CoT)方法表現退化時,SRA-MCTS 依然能夠穩定並有效地提升模型的效能,尤其在「pass@10」等多樣性指標上表現出色。

1. 資料合成 - SRA-MCTS:
圖片
  • 選擇階段:使用 UCB1 公式,從推理樹中選擇最優節點,作為推理的起點。
  • 擴充套件階段:基於選擇的節點,生成新的推理步驟,形成新的推理計劃。
  • 評估與反思階段:評估每個生成的推理步驟的質量,並透過反思機制修正推理過程,確保其正確性與連貫性。
  • 反向傳播階段:透過反饋機制調整生成過程,強化推理路徑的質量。

下面的示例展示了中間推理步驟,以及基於推理所生成的程式碼過程:

問題:請幫我寫一段拓撲排序的程式碼。

思考過程:拓撲排序是針對有向無環圖(DAG)的一種排序演算法,它將圖中的節點按照某種順序排列,使得對於每一條有向邊 (u, v),節點 u 在節點 v 之前出現。常見的拓撲排序演算法有兩種:Kahn 演算法和深度優先搜尋(DFS)演算法。這裡作者選擇使用 Kahn 演算法來實現,因為它更直觀且容易理解。

Kahn 演算法的基本思想是:

找出所有入度為 0 的節點,將它們加入佇列。從佇列中取出一個節點,將其加入拓撲排序結果中。對於該節點的所有鄰接節點,減少其入度。如果某個鄰接節點的入度變為 0,則將其加入佇列。重複步驟 2 和 3,直到佇列為空。如果最終拓撲排序的結果中包含所有節點,則說明圖是 DAG;否則,圖中存在環。

・ 找出所有入度為 0 的節點,將它們加入佇列。
・ 從佇列中取出一個節點,將其加入拓撲排序結果中。
・ 對於該節點的所有鄰接節點,減少其入度。如果某個鄰接節點的入度變為 0,則將其加入佇列。
・ 重複步驟 2 和 3,直到佇列為空。
・ 如果最終拓撲排序的結果中包含所有節點,則說明圖是 DAG;否則,圖中存在環。
from collections import deque, defaultdict
def topological_sort(graph):
# Step 1: 計算每個節點的入度
in_degree = {node: 0 for node in graph}
for node in graph:
for neighbor in graph[node]:
            in_degree[neighbor] += 1
 # Step 2: 將所有入度為 0 的節點加入佇列
queue = deque([node for node in in_degree if in_degree[node] == 0])
# Step 3: 初始化結果列表
topo_order = []
  # Step 4: 處理佇列中的節點
while queue:
node = queue.popleft()
topo_order.append(node)
    
   # 更新鄰接節點的入度
for neighbor in graph[node]:
in_degree[neighbor] -= 1
if in_degree[neighbor] == 0:
queue.append(neighbor)
 
     # Step 5: 檢查是否存在環
if len(topo_order) == len(graph):
return topo_order
else:
raise ValueError("Graph contains a cycle, topological sorting is not possible.")

  1. 推理轉化為程式碼:在資料合成的階段生成的自然語言推理步驟,經過大模型轉化為具體的程式碼,實現從推理到執行的轉化。
  2. 訓練階段:最終,生成的推理路徑和程式碼會被結合起來,形成一個高質量的訓練資料集,用於進一步微調大語言模型。

上面的工作是程式碼模型的自主推理能力。作者表示,他們期待探究更通用化的自我進化框架和方法,使其在各種場景中都可以被廣泛使用。

流星雨計劃
圖片
  • 論文:https://arxiv.org/abs/2411.11933
  • Github 連結:https://github.com/DIRECT-BIT/METEOR

該計劃提出一個由弱到強的進化框架來引導大模型自我進化的整體流程,方法如下圖所示:
圖片
該流程提供了一整套從無領域能力進化成領域專家模型的自我進化訓練方案,包含三個關鍵階段:

  • 一階段:導師監督學習,旨在賦予模型基本的領域知識,讓模型能夠完成領域任務;
  • 第二階段:自我評估能力習得,透過藉助通用大模型的指導,進一步迭代訓練學習,賦予模型自我評判的能力;
  • 第三階段:自我提升訓練,透過自我批判完成自我進化。

第一階段:導師監督學習

知識蒸餾是一種有效的獲取領域知識的手段。然而作者發現,強模型與弱模型之間存在認知偏差,導致從強模型中蒸餾下來的領域資料無法高效作用於弱模型。

作者提出了 weak-to-strong 的領域資料蒸餾方法,讓強模型根據弱模型的指導蒸餾領域資料。具體的,當有一個領域問題時,他們首先將該問題輸入弱模型,但不讓其直接生成答案,而是生成一段 guideline。這段 guideline 指示弱模型認為應該遵循哪些步驟來回答領域問題。接下來,他們將生成的 guideline 與領域問題一起輸入強模型。強模型根據 guideline 的指導步驟生成領域問題的答案,或在 guideline 的基礎上進行修正並生成答案。
圖片
第二階段:自我評估能力習得

經過蒸餾後的領域資料訓練的模型能夠完成一定的領域任務,但經過分析,該模型還可能產生大量錯誤資訊或幻覺資訊,並且無法進行自我糾正。因此,作者提出要在這一階段透過更強模型的反饋來糾正模型內部的錯誤知識,進一步提升模型領域效能。

他們參考 StaR [1] 迭代式訓練的方法,讓模型首先對領域問題進行作答,並由 GPT-4 給予答案反饋。如果模型的答案是錯誤的,GPT-4 會將修改建議連同前一輪的答案重新返回給模型,讓模型重新作答,直至模型產生正確的答案。整個過程的資料會被儲存下來迭代式地訓練模型,使得模型的領域能力不斷提升。
圖片
第三階段:自我提升訓練
作者希望模型在最終的領域能力進化過程中能夠擺脫對強模型的依賴,實現完全的領域能力自我進化。因此,在模型具有完成自我批判的能力後,他們嘗試讓模型進行自我進化。

受到在推理過程中增加 FLOPs 可以有效提升模型在下游任務中的效能的啟發,他們認為不同的推理策略會產生不同的效果。他們希望模型生成的結果儘可能接近高 FLOPs 推理策略的結果,遠離低 FLOPs 策略的結果。他們使用 beam search 作為高 FLOPs 策略,greedy search 作為低 FLOPs 策略,透過對比學習構建模型的自我訓練方法,實現模型的自我進化。

效能分析

作者對比了應用 Meteor 進化方法後 LLM 前後各維度的效能變化。在準確性、完整性、相關性、連貫性和可靠性方面,LLaMA3-8B-Instruct 和 Qwen2-7B-Instruct 取得了效能的提升(評估方法:透過 GPT-4 篩選進化前和進化後答案的 win rate)。
圖片
未來工作

該工作初步探索和嘗試了模型進化的整體框架和每個階段的對應方法,並有了一些初步的結論。未來,作者將在該想法的基礎上,在每個階段中創新更適用的模型自我進化方法,實現模型在各個階段都能獲得預期的效能提升,並在更多不同的場景中探索 Meteor 的適用性,推廣流星雨計劃。

作者表示,DIRECT LAB 期待與更多對大模型進化感興趣的學者和業界同仁攜手合作,共同推進這一重要領域的探索與突破。實驗室相關研究的程式碼和資料已公開,歡迎大家訪問:https://github.com/DIRECT-BIT

參考文獻:
[1] star: self-taught reasoner bootstrapping reasoning with reasoning

相關文章