只要10k数据,就能让大模型的数学成绩增长5.6%。
港中文贾佳亚团队推出了基于推理步骤的大模型优化策略,能够像老师教学生一样优化大模型。
利用这种方法,72B Qwen模型的数学成绩超越了GPT-4、Gemini1.5-Pro和Claude3-Opus等一众闭源模型。
老师在纠正学生错误时,不会只告诉学生最终答案错了,还会告知具体哪个步骤错了,以此快速纠正其错误。
贾佳亚团队正是学习了这一特点,将斯坦福团队推出的DPO(直接偏好优化)进一步细化,形成了逐步应用的策略Step-DPO。
该方法让Qwen-72B模型在多个数据集上进步明显,同时也获得了更强的长链条推理任务能力。
像教育学生一样训练大模型
如何强化推理能力,一直是大语言模型领域的重要问题之一。
常见的思维链策略通过在输入提示词部分添加“Let’s think step by step.”,来使模型在输出中完成逐步推理,但对于复杂的问题,仅通过修改提示词不足以引导模型正确解决问题。
由于复杂问题涉及的推理过程较长,有时包含数十个推理步骤,一旦其中任一步骤出错,就难以得到正确的结果。
此外,现有方案旨在通过监督式微调(SFT)阶段增加问答数据以实现更好的对齐。
然而,当SFT数据达到一定数量时,模型经常出现幻觉,性能也随之趋于饱和。
一个潜在的原因是,随着偏好输出的概率上升,非偏好输出的概率也会随之增加。
为了抑制幻觉,提升模型的事实性,斯坦福大学提出了直接偏好优化方法,其工作原理是创建基于人类偏好对的数据集,每个偏好对都包含一个输入提示、偏好输出以及非偏好输出。
然后对语言模型直接进行微调,最大限度地提高生成的可能性,并减少输出的可能性。
因此,DPO的优化目标为:
其中πθ与πref分别表示当前微调模型以及参照模型。
但在长链条推理任务中,DPO无法准确判断推理过程中的错误步骤,从而无法聚焦关键出错步骤。
如下图所示,基于DPO的模型在训练过程中无法准确判断推理步骤正确与否。
因此,作者提出了基于推理步骤的直接偏好优化——Step-DPO。
就像老师在纠正学生错误时,不会只告诉学生最终答案错了,还会告知具体哪个步骤错了,以此快速纠正其错误。
与此类似,Step-DPO不再像DPO从整体上对比答案,而是将每个推理步骤视为一个基本单元,并且对比单个推理步骤,从更精细的角度提升模型的多步推理分析能力。
Step-DPO的优化目标为:
除此之外,作者还提出基于模型自生成的数据处理流程。如图所示,该流程包含以下三个步骤:
第一步是错误收集。
首先,给定一组数学问题D0=(x,y∧),其中x是数学问题,y∧是其真实答案。
然后,使用初始模型πref来得到每个数学问题x的答案。
在进行模型推理之前,需要添加思维链(CoT)前缀作为提示,以确保模型的推理结果被结构化为多个推理步骤,每个步骤均以“Step i:”开始。
经过模型推理可得到每个数学问题x的推理结果y,然后选择与真实答案y∧不一致的那些结果,并汇总得到数据集D1:
第二步是错误步骤定位。
每个错误推理结果y都呈现为一系列推理步骤的序列y=s1,s2,…,sn,随后需要人工或利用GPT-4验证每个推理步骤的正确性,直到找到第一个错误步骤sk,并记录其步骤编号。
然后将sk选为错误的推理步骤slose,从而得到D2:
最后是错误步骤修正。
为了获得D2中每个样本对应的正确推理步骤,需要对模型πref进行推断,使用提示x和前面的正确推理步骤s1~k-1来采样多个输出ycont,此过程可以表示为:
随后保留ycont中那些与真实答案一致的输出,并将其中的第一个推理步骤作为swin,最终得到数据集D:
下图展示了一个数据样本示例。值得一提的是,该数据准备流程无需大量的人工介入,人类或GPT-4只需要判断给定推理步骤是否正确,而无需亲自撰写答案来修正错误。
10k数据带来数学能力大幅提升
Step-DPO可以在SFT模型或现有的开源Instruct模型上进行微调,仅通过10K数据以及数百个训练步数,即可取得大幅度的数学能力提升。
如下图所示,在Qwen2-7B-Instruct模型的基础上进行Step-DPO可在MATH测试集上获得5.6%准确率的提升。
在Qwen2-72B-Instruct模型的基础上进行Step-DPO,可在MATH和GSM8K测试集的准确率分别达到70.8%和94.0%,超过一系列闭源模型如Gemini-1.5-Pro、GPT-4-1106,以及Claude-3-Opus。
除此之外,在难度较高的包含数学竞赛题的Odyssey-MATH榜单上也有显著提升。
经过Step-DPO之后,模型更加鲁棒,减少幻觉的产生,在推理过程中也不容易出错。如以下两个例子所示。
假设h(x)=f-1(x),如果h(2)=10,h(10)=1,h(1)=2,求f(f(10))。
t的平方根大于2且小于3.5,满足这一条件的整数t有多少个?
即便是下图这道数学竞赛题,经过Step-DPO之后的模型也可以做对。
在所有非增函数f:{1,2,…,10}→{1,2,…,10}中,有些函数有固定点,另一些没有,这两种函数的数量相差多少?
目前,该项目的代码,数据,模型,Demo均已公开至GitHub和Hugging Face,同时支持在线体验。
论文地址:https://arxiv.org/abs/2406.18629
GitHub:https://github.com/dvlab-research/Step-DPO
在线Demo:http://103.170.5.190:7870/
模型(HF):https://huggingface.co/collections/xinlai/step-dpo-6682e12dfbbb2917c8161df7
数据(HF):https://huggingface.co/datasets/xinlai/Math-Step-DPO-10K