©作者 | 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
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:
问题:请帮我写一段拓扑排序的代码。
思考过程:拓扑排序是针对有向无环图(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.")
论文题目:
METEOR: Evolutionary Journey of Large Language Models from Guidance to Self-Growth
https://arxiv.org/abs/2411.11933
https://github.com/DIRECT-BIT/METEOR
该流程提供了一整套从无领域能力进化成领域专家模型的自我进化训练方案,包含三个关键阶段:
第一阶段:导师监督学习,旨在赋予模型基本的领域知识,让模型能够完成领域任务;
第二阶段:自我评估能力习得,通过借助通用大模型的指导,进一步迭代训练学习,赋予模型自我评判的能力;
第三阶段:自我提升训练,通过自我批判完成自我进化。
第二阶段:自我评估能力习得
经过蒸馏后的领域数据训练的模型能够完成一定的领域任务,但经过分析,该模型还可能产生大量错误信息或幻觉信息,并且无法进行自我纠正。因此,作者提出要在这一阶段通过更强模型的反馈来纠正模型内部的错误知识,进一步提升模型领域性能。
他们参考 StaR [1] 迭代式训练的方法,让模型首先对领域问题进行作答,并由 GPT-4 给予答案反馈。如果模型的答案是错误的,GPT-4 会将修改建议连同前一轮的答案重新返回给模型,让模型重新作答,直至模型产生正确的答案。整个过程的数据会被保存下来迭代式地训练模型,使得模型的领域能力不断提升。
https://github.com/DIRECT-BIT
参考文献
[1] star: self-taught reasoner bootstrapping reasoning with reasoning
更多阅读
#投 稿 通 道#
让你的文字被更多人看到
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析、科研心得或竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。
📝 稿件基本要求:
• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注
• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题
• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算
📬 投稿通道:
• 投稿邮箱:hr@paperweekly.site
• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者
• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿
△长按添加PaperWeekly小编
🔍
现在,在「知乎」也能找到我们了
进入知乎首页搜索「PaperWeekly」