作者:鱼汇沐
机构:中国科学院信息工程研究所
paper: https://arxiv.org/abs/2410.02229
在LLM(大语言模型)的对齐训练中,尽管RLHF(基于人类反馈的强化学习)方法被证明是有效的,但它的效果依赖于RM(奖励模型)的能力。然而,训练RM需要高质量的偏好数据,在复杂推理领域(如数学和逻辑推理),这些数据的获取成本高昂且标注困难。此类偏好数据不仅需要多样化的prompt和响应,还需要准确的人类反馈。因此,提高复杂推理领域偏好数据的利用效率,即有限标注数据的情况下训练出更强大的RM,具有重要意义。
幸运的是,GitHub上有大量公开的源代码数据,经过筛选后可以获得高质量且规模庞大的代码片段。这些高质量代码片段不仅数量可观,而且具有丰富的多样性,可以用来反向生成多样化的code prompt(代码描述)。此外,CodeLLM(代码语言模型)已经得到了广泛关注和发展,最先进的CodeLLM可以根据code prompt生成对应的代码片段。基于此,提出了CodePMP方法——通过利用源代码数据,合成大量、多样的代码偏好数据,实现可扩展的偏好模型预训练,从而提高推理RM的微调样本效率,并最终提升LLM在推理任务上的表现。
方法
CodePMP方法的实现包括以下几个步骤:
查询生成:从GitHub中获取高质量代码片段,并生成相应的code prompt。 利用模型能力差异生成偏好数据:根据code prompt,分别使用强CodeLLM和弱CodeLLM生成对应的代码片段,并将两者组成 <chosen rejected> 偏好对。 损失函数设计:损失函数由两部分组成:基于 <chosen rejected> 偏好对计算的偏好损失(Pairwise Ranking Loss)和基于chosen响应计算的语言建模损失(LM Loss)。 偏好预训练:在此基础上,利用大量代码偏好数据对模型进行偏好预训练,从而提升模型在下游推理RM微调的样本效率。
伪代码如下图所示:
实验结果
设计了一系列实验来验证CodePMP的效果,同时涵盖了数学推理(GSM8K MATH)和逻辑推理(ReClor LogiQA2.0)任务:
RM准确率评测:
在数学推理和逻辑推理任务中,通过衡量奖励模型在区分测试集中chosen响应和rejected响应时的准确性,对比分别 经过CodePMP再微调RM 和 直接微调RM 的效果差别。实验结果显示,CodePMP给数学推理和逻辑推理的RM准确率带来了显著提升。
Best-of-N(BoN)准确率评测:
通过为每个问题生成多个候选答案,并让RM选择最佳答案。在数学推理上,在候选答案数量增加到256的情况下,经过CodePMP再微调的RM仍然保持高的BoN准确率,而不使用CodePMP而直接微调的RM的BoN准确率则显著下降。在逻辑推理上,经过CodePMP再微调的RM也有着明显的优势。
样本效率实验:
在不同微调样本量下的模型效果对比。结果显示,使用CodePMP预训练的模型即使在微调样本量较少的情况下,也能达到或超过不使用CodePMP模型在大样本量下的表现,显著提高了推理RM微调的的样本效率。
扩展性测试:
分析了随着合成数据的增多,CodePMP方法带来的增益的变化趋势。实验表明,随着合成偏好对数量的增加,模型在推理偏好任务中的表现持续提升,且未出现效果减弱的迹象,展示了CodePMP方法的高度扩展性。
通用性测试:
进一步在Gemma2-2B模型上应用了CodePMP方法。实现效果表明,CodePMP在Gemma2-2B上带来的增益依旧明显,充分说明了CodePMP的通用性,可以给不同的模型带来推理RM样本效率的增加和最终的推理表现的提升。
写在最后
本文介绍了一种可扩展的偏好模型预训练方法(CodePMP),通过合成大规模代码偏好对进行预训练,从而提高面向推理任务的奖励模型的微调样本效率,减少对大量高质量人工标注数据的依赖,显著降低数据获取和标注成本。此外,使用CodePMP初始化的奖励模型在多种推理任务中表现出更强的鲁棒性和泛化能力,能够在不同任务类型和数据规模下保持优异表现。
PS:看到这里,如果觉得不错,可以来个点赞、在看、关注。给公众号添加【星标⭐️】不迷路!您的支持是我坚持的最大动力!
欢迎多多关注公众号「NLP工作站」,加入交流群,交个朋友吧,一起学习,一起进步!