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,则将其加入队列。