Unlock the Correlation between Supervised Fine-Tuning and Reinforcement Learning in Training Code Large Language Models

📄 arXiv: 2406.10305v2 📥 PDF

作者: Jie Chen, Xintian Han, Yu Ma, Xun Zhou, Liang Xiang

分类: cs.SE, cs.AI, cs.LG

发布日期: 2024-06-14 (更新: 2024-12-17)


💡 一句话要点

探究监督微调与强化学习在代码大语言模型训练中的关联性

🎯 匹配领域: 支柱二:RL算法与架构 (RL & Architecture) 支柱九:具身大模型 (Embodied Foundation Models)

关键词: 代码大语言模型 监督微调 强化学习 代码生成 泛化能力

📋 核心要点

  1. 现有代码大语言模型微调方法缺乏对监督微调(SFT)和强化学习(RL)之间关联性的深入理解,限制了模型性能的进一步提升。
  2. 本文通过构建原子函数和合成函数,并进行消融实验,旨在揭示SFT和RL在代码大语言模型训练中的相互作用机制。
  3. 实验结果表明,原子函数和合成函数对SFT泛化能力至关重要,且RL能有效增强SFT的泛化能力并缓解过拟合问题。

📝 摘要(中文)

本文旨在深入理解监督微调(SFT)和强化学习(RL)在训练代码大语言模型(Code LLM)中的关联性。通常,Code LLM的训练采用两阶段范式:预训练和微调。在微调阶段,SFT和RL常被用于提升模型的零样本能力。尽管已有大量工作致力于通过改进算法或优化数据集来提升模型在代码相关基准测试上的性能,但我们仍然缺乏对SFT和RL之间关联性的深刻理解。例如,应使用何种数据集以确保泛化能力?如果放弃微调中的SFT阶段会怎样?为了便于研究,本文手动创建了100个基础Python函数(称为原子函数),并部署了一个合成管道,在原子函数的基础上创建大量合成函数。通过这种方式,确保训练集和测试集保持不同,防止数据污染。通过全面的消融研究,我们发现:(1)原子函数和合成函数对于SFT的泛化能力都是不可或缺的,并且少量的合成函数就足够了;(2)通过RL,即使使用相同的训练提示,也可以大大增强SFT对目标领域的泛化能力;(3)从头开始训练RL可以缓解SFT阶段引入的过拟合问题。

🔬 方法详解

问题定义:现有代码大语言模型(Code LLM)的训练通常依赖于监督微调(SFT)和强化学习(RL)。然而,对于SFT和RL之间的内在联系,以及如何有效结合两者以提升模型性能,目前缺乏深入的理解。现有方法在数据集选择和训练策略上存在局限性,难以保证模型的泛化能力和避免过拟合。

核心思路:本文的核心思路是通过构建可控的合成数据集,并进行系统的消融实验,来探究SFT和RL在Code LLM训练中的作用和相互影响。通过分析不同训练策略下的模型表现,揭示SFT和RL对模型泛化能力、过拟合程度以及目标领域适应性的影响。

技术框架:本文的技术框架主要包括以下几个阶段:1) 构建原子函数库:手动创建100个基础Python函数,作为构建合成函数的基石。2) 合成函数生成:设计合成管道,基于原子函数生成大量合成函数,确保训练集和测试集的独立性。3) 模型训练:分别进行SFT和RL训练,并结合不同的数据集和训练策略。4) 消融实验:通过控制变量,分析不同因素对模型性能的影响,例如原子函数和合成函数的使用、RL训练的起点等。

关键创新:本文的关键创新在于:1) 构建了一种可控的合成数据集生成方法,能够有效避免数据污染,并方便进行消融实验。2) 深入分析了SFT和RL在Code LLM训练中的作用和相互影响,揭示了两者之间的内在联系。3) 提出了通过从头开始训练RL来缓解SFT阶段引入的过拟合问题的策略。

关键设计:在数据集构建方面,精心设计了原子函数和合成函数的生成规则,保证了数据集的多样性和可控性。在模型训练方面,采用了标准的SFT和RL算法,并针对代码生成任务进行了优化。在消融实验方面,设计了多组对比实验,例如比较不同数据集下的SFT性能、不同RL训练起点的模型表现等。

🖼️ 关键图片

fig_0
fig_1
fig_2

📊 实验亮点

实验结果表明,原子函数和合成函数对于SFT的泛化能力都是不可或缺的,并且少量的合成函数就足够了。通过RL,即使使用相同的训练提示,也可以大大增强SFT对目标领域的泛化能力。此外,从头开始训练RL可以有效缓解SFT阶段引入的过拟合问题。

🎯 应用场景

该研究成果可应用于提升代码大语言模型的性能和泛化能力,例如自动代码生成、代码补全、代码翻译等。通过更好地理解SFT和RL之间的关系,可以设计更有效的训练策略,从而开发出更智能、更可靠的AI代码助手,提高软件开发的效率和质量。

📄 摘要(原文)

Automatic code generation has been a longstanding research topic. With the advancement of general-purpose large language models (LLMs), the ability to code stands out as one important measure to the model's reasoning performance. Usually, a two-stage training paradigm is implemented to obtain a Code LLM, namely the pretraining and the fine-tuning. Within the fine-tuning, supervised fine-tuning (SFT), and reinforcement learning (RL) are often used to improve the model's zero-shot ability. A large number of work has been conducted to improve the model's performance on code-related benchmarks with either modifications to the algorithm or refinement of the dataset. However, we still lack a deep insight into the correlation between SFT and RL. For instance, what kind of dataset should be used to ensure generalization, or what if we abandon the SFT phase in fine-tuning. In this work, we make an attempt to understand the correlation between SFT and RL. To facilitate our research, we manually craft 100 basis python functions, called atomic functions, and then a synthesizing pipeline is deployed to create a large number of synthetic functions on top of the atomic ones. In this manner, we ensure that the train and test sets remain distinct, preventing data contamination. Through comprehensive ablation study, we find: (1) Both atomic and synthetic functions are indispensable for SFT's generalization, and only a handful of synthetic functions are adequate; (2) Through RL, the SFT's generalization to target domain can be greatly enhanced, even with the same training prompts; (3) Training RL from scratch can alleviate the over-fitting issue introduced in the SFT phase.