Shengnan An ♢,♣, Zexiong Ma ♡,♣, Zeqi Lin♣ , Nanning Zheng †♢, Jian-Guang Lou ♣, Weizhu Chen ♣ ♢IAIR, 西安交通大学, ♣ 微软公司, ♡ 北京大学 ♢{an1006634493@stu, nnzheng@mail}.xjtu.edu.cn, ♡, ♣{Zeqi.Lin, jlou, 微软实习期间完成的工作。通讯作者。
摘要
近期,大语言模型(LLM)展示出在解决数学题目上的出色推理能力。为了让这种能力更上一层楼,我们提出了“从错误中学习”(LeMa)这一方法,它借鉴了人类学习过程中的机制。就像一个解题失败的学生会反思自己的错误并学会如何改正一样,LeMa 也通过这样的错误驱动学习过程对 LLM 进行了微调。我们首先从不同的 LLM 中挑选出错误的推理过程,然后使用 GPT-4 作为“纠错师”,负责识别错误的环节、解释错误发生的原因,并对错误进行改正,最终得出正确答案。实验结果表明,LeMa 的确能够提升 LLM 的性能:在五个不同的 LLM 和两个数学推理任务中,LeMa 都比单独使用 CoT 数据进行微调表现得更好。尤其值得一提的是,LeMa 甚至能够提升专业 LLM 如 WizardMath 和 MetaMath 的性能,在 GSM8K 任务上达到了 85.4% 的 pass@1 准确率,在 MATH 任务上达到了 27.1% 的准确率,这些成绩超过了这些困难任务上其他非执行开源模型所能达到的最先进水平。我们将会把代码、数据和模型公开发布在 Github 链接 上。
图 1:左图展示了“从错误中学习”(LeMa)的整个流程,右图则展示了 LeMa 在 GSM8K 和 MATH 两个任务上的卓越性能。
问题:Tina 每小时赚 $18.00。如果她每次工作超过 8 小时,她就有资格获得加班费,该费用是按您的小时工资 + 1/2 的小时工资支付的。如果她每天工作 10 小时,连续工作 5 天,那么她可以赚多少钱?
LLM 抽样理由
带有错误的理由:
- 步骤 1:Tina 每小时赚 $18.00,8 小时赚 $18.00 * 8 = $144.00。
- 步骤 2:她每小时加班费为 $27.00,2 小时的加班费为 2 * $27.00 = $54.00。
- 步骤 3:所以 5 天,她可以赚 $144.00 + $54.00 = $198.00。
- 步骤 4:答案是 198。
GPT-4 作为纠正器
识别错误并进行纠正
纠正:
错误步骤:步骤 3。
解释:步骤 3 只计算了一天的收入,但没有计算整个五天的收入。
正确解决方案:
…
步骤 3:对于一天,她可以赚 $144.00 + $54.00 = $198.00。
步骤 4:5 天,她可以赚 $198.00 * 5 = $990.00。
步骤 5:答案是 990。
LLM 在 Mistake-Correction 数据上的微调
在 SM8K 上的表现 (%):
Vanilla LLM vs LLM + LeMa
MetaMath 70B: 85.4 vs 84.2
WizardMath 70B: 84.2 vs 83.5
LLaMA-2 70B: 83.5 vs 77.9
LLaMA 65B: 77.9 vs 20.8
在 MATH 上的表现 (%):
MetaMath 70B: 26.9 vs 27.1
WizardMath 70B: 27.1 vs 25.0
LLaMA-2 70B: 25.0 vs 20.8
LLaMA 65B: 20.8
1 引言
我们从错误中汲取教训,找到了认识世界的新方式。 ——James Joyce
在数据规模和模型规模飞速增长的今天,一些大语言模型(如 Brown 等人 2020、Zhang 等人 2022、Hoffmann 等人 2022 等研究)在自然语言处理的各个领域都取得了突破,特别是在解决一些需要深入思考和连贯推理的数学问题上(参见 Wei 等人 2022、Wang 等人 2022 等研究)。在解决一些难度较大的数学问题,如 GSM8K(见 Cobbe 等人 2021)和 MATH(见 Hendrycks 等人 2021)上,像 GPT-4(OpenAI 2023b)和 PaLM-2(Anil 等人 2023)这样的专有大语言模型已经展现出了卓越的能力。然而,对于开源的大语言模型,比如 LLaMA-2(Touvron 等人 2023b)和 Baichuan-2(Yang 等人 2023),它们在这方面还有很大的提升空间。
为了让开放源码的大语言模型(LLMs)在解决数学问题上变得更加高效,我们通常会对这些模型进行微调,采用的方法是利用配有注释或自动生成的“问题 – 解析”数据对(这里我们称之为 CoT 数据)。这样做的目的是直接教会模型如何在这些特定任务上进行连续推理(CoT)[Magister et al., 2022; Huang et al., 2022; Ho et al., 2022; Li et al., 2022; Yuan et al., 2023; Luo et al., 2023; Yu et al., 2023; Li et al., 2023a; Liang et al., 2023]。尽管这种直截了当的学习方法已经证明了其有效性,但我们在这项研究中想要探讨的是,通过一种“逆向学习”的方式,即从 LLMs 过去的错误中学习,是否能够使其推理能力得到进一步的提升。这种从错误中学习的理念,其实是来源于人类学生的学习方式。想象一下,一个刚开始学习数学的学生,他在通过阅读书本中的知识和例子学习的同时,也会做一些练习题。当他在解决问题时遇到困难,没能成功时,他会反思自己犯了哪些错误,应该如何去改正它们。通过这样对自己错误的反思和学习,他的推理和解题能力将得到增强。受到这种“从错误中学习”的启示,我们在这项工作中探索了 LLMs 是否也能通过理解并纠正自己过去的错误,从而提高其推理能力。
具体而言,我们的工作流程分为两个步骤:首先,我们创建了一种专门的数据,名为“修正数据”,其中包含了错误及其对应的更正;接着,我们利用这些数据来改进大语言模型(LLMs)的性能。在制作“修正数据”的过程中,我们借助了多种 LLMs,包括 LLaMA 和 GPT 系列模型,来找出那些推理结果错误的例子。之后,我们使用 GPT-4 来对这些错误进行纠正,并在纠正内容中包括三个关键信息:错误在哪一步、为什么这一步是错误的,以及如何修改才能得到正确答案。经过仔细筛选,去除了那些仍然存在错误答案的纠正内容后,我们的人工评估结果表明,这些“修正数据”具备了进行下一步模型微调的高质量标准。在此基础上,我们运用了一种名为“从错误中学习”(LeMa)的策略,通过对 LLMS 进行微调,实现了在两种包含数学推理任务的数据集上的性能提升(参考 Dettmers 等人的研究,2023)。
通过在五种开源的 LLMS 和两个富有挑战性的数学推理任务上的实验,我们证实了“从错误中学习”策略的有效性。与仅利用传统数据进行微调相比,“从错误中学习”在各种模型和任务上都取得了更优秀的性能。以 LLaMA-2-70B(参见 Touvron 等人,2023b)为例,其在 GSM8K 数据集上的表现从 81.4% 提升到了 83.5%,在 MATH 数据集上的表现也从 23.6% 提升到了 25.0%。而对于专业化的 LLMS,比如 WizardMath-70B 和 MetaMath-70B(参见 Luo 等人和 Yu 等人的研究,2023),“从错误中学习”同样表现出色,甚至超越了目前这些困难任务上最先进模型的表现。此外,我们的消融研究也表明,在相同数据规模下,“从错误中学习”仍然优于传统的微调方法。这说明,传统数据和“修正数据”在提升模型性能方面的作用并不相同,两者的结合能够带来更为显著的提升。这些实验和分析结果充分展示了“从错误中学习”策略在提升大语言模型推理能力方面的巨大潜力。
2 相关研究
深入浅出:链式推理与大语言模型
近日,Wei 团队在 2022 年的一项研究中发现,那些规模巨大的语言处理模型(LLMs)竟然展现出了令人瞩目的链式推理(CoT)能力。无论是逻辑推理、常识推理,还是数学推理,这些模型都表现出了高超的能力,其中包括了 Creswell 团队、Pan 团队、Lei 团队等众多学者的研究成果(2022, 2023)。而这,无疑为科研人员提供了新的思路:如何更有效地利用这些模型的推理能力,以便在未来的科技发展中发挥更大的作用。为此,Wang 团队、Zhou 团队等人在 2022 年纷纷投入了研究,希望能找到答案,并且已经取得了一些初步的成果。
加强链式推理(CoT)以解决数学难题
近来,学界为了提高大语言模型(LLMs)在解数学题上的表现,已经做了大量的研究工作。有些研究尝试通过从多条推理路径中进行抽样,进而运用投票或验证的方法来提升性能(参见 Wang et al., 2022;Li et al., 2023b;Lightman et al., 2023 等研究)。还有一些方法试图生成可执行的程序来找到最终答案,或者是集成一些辅助工具,以方便在计算过程中调用外部 API(例如 Jie and Lu, 2023;Wang et al., 2023a;Gou et al., 2023 的研究)。另外,有些工作专注于数据增强,即通过扩大训练数据集或添加外部注解来提升模型性能(例如 Magister et al., 2022;Huang et al., 2022;Ho et al., 2022;Li et al., 2022;Yuan et al., 2023;Luo et al., 2023;Yu et al., 2023;Li et al., 2023a;Liang et al., 2023)。本文的研究方向也与数据增强方法相一致。
为数学问题增添数据翼膀
通过先进的 LLM(比如 GPT-4 和 GPT-3.5-Turbo),人们发明了许多方法为数学任务制造出更丰富的 CoT 数据:Yuan 等人在 2023 年推荐了一种称为拒绝抽样的方法来丰富 CoT 数据;Xu 等人则对训练集里的数学题进行了一番革新;Li 等人同时运用了查询增强和响应增强技术;Yu 等人则通过自我验证和 FOBAR 技术,创造出了极富多样性的 CoT 数据。虽然我们已经对 CoT 数据的效用有了深刻的认识,但如何利用其他辅助数据来加强我们数学推理的能力,这个问题还待进一步探讨。在这项工作中,我们初步尝试了使用错误纠正数据,并对其有效性进行了验证。最近,Liu 等人和 Wang 等人分别构建了用于帮助模型评判推理路径质量的重新排列数据和验证数据作为辅助数据。与这些辅助数据相比,我们的错误纠正数据能提供更多信息:它不仅能评判推理步骤的好坏,还能指导模型如何根据这些评判修正原本的推理路径。
3 方法
从图 1(左)可以看到 LeMa 方法的全貌,主要分为两大部分:生成错误纠正数据和对 LLM 进行微调。
3.1 错误纠正数据的生成
我们首先选取一个问题及其对应答案的示例,记为 (q_i,a_i)∈Q(q_i, a_i) in mathcal{Q}。接着,我们使用一个纠错模型 M_cmathcal{M}_c 和一个推理模型 M_rmathcal{M}_r,通过它们我们能够生成一对错误和纠正数据 (q_i⊕r_i~,c_i)∈C(q_i oplus widetilde{r_i}, c_i) in mathcal{C}。在这里,r_i~widetilde{r_i} 代表了对问题 q_iq_i 的一条不太准确的推理路径,而 c_ic_i 则是对这条路径的纠正。
寻找错误的思考过程
首先,我们利用推理模型 Mrmathcal{M}r 为每个问题 qiq_i 找出多种可能的思考路径。在这些路径中,我们只保留那些没有导致正确答案 aia_i 的路径,
r_i~∼M_r(P_r⊕q_i),Ans(r_i~)≠a_i,widetilde{r_{i}} sim mathcal{M}_r (mathcal{P}_{r} oplus q_{i}), quad mathrm{Ans}(widetilde{r_{i}}) neq a_{i},
这里的 Prmathcal{P}_r 是一种特殊的提示,它让模型以连续推理的方式进行思考,而 Ans(⋅)mathrm{Ans}(cdot) 则用来从这些思考过程中找出最终的答案。
如何纠正解题过程中的错误
当我们在解决问题 q_iq_{i} 的过程中走错了方向,走上了一个不准确的推理路径 r_i~widetilde{r_{i}},我们就需要借助一个“更正器”模型 M_cmathcal{M}_{c} 来帮助我们找出错误,并给出正确答案。具体来说,我们要做的是:
c_i∼M_c(P_c⊕q_i⊕r_i~),c_{i}simmathcal{M}_{c}(mathcal{P}_{c}oplus q_{i}opluswidetilde{r_{i}}),%<br />quadmathrm{Ans}(c_{i})=a_{i},
其中 P_cmathcal{P}_{c} 里面包含了四个经过专门标注的“错误 – 更正”范例,目的是为了告诉更正器在生成更正内容时应该注意些什么。这些带标注的内容主要包括三个方面:
- 错误步骤:指出在原先的解题过程中哪一步出了问题。
- 错误说明:解释这一步为什么会错,错在哪里。
- 正确做法:告诉我们如何纠正这个错误,以便正确解决问题。
有一个示例 LABEL:exmp:correction_prompt 给出了如何生成这样的更正内容。生成更正的提示 correction_prompt
针对下面这些数学应用题,原始的解题方法可能并不完全正确。请你找出每个解法中的错误步骤,并说明错误的原因,然后提供从那一步开始的正确解答。
问题:詹姆斯创办了一家媒体公司,并制作了一部电影,成本为 2000 美元。每张 DVD 的制作成本为 6 美元,他打算以成本的 2.5 倍的价格将其卖出。他计划每天卖出 500 张 DVD,一周工作 5 天,那么他 20 周内能赚多少利润? 原始解答: 步骤 1:他每天卖 500
张,一周卖 5 天,20 周总共卖出 500 _ 5 _ 20 = 50000 张。 步骤 2:他每张 DVD 能卖出 6 _ 2.5 = 15 美元。 步骤 3:这样他每张 DVD 的利润为 15 – 6 = 9 美元。 步骤 4:所以他总共能赚 9 _ 50000 = 450000 美元。 步骤 5:答案是 450000 美元。 错误步骤:步骤 4。 错误原因:步骤 4 没有考虑到最初制作电影的成本,即 2000 美元。正确的做法应该是在总利润中减去这部分成本。 正确做法: … 步骤 4:所以他的净利润应该是 9 * 50000 – 2000 = 448000 美元。 步骤 5:答案是 448000 美元。
…(另外 3 个示例)
问题:q_iq_{i} 原始解答:r_i~widetilde{r_{i}} 错误步骤:{Completion}
评估自动生成的纠正结果
在我们开始大规模制作数据之前,我们会先亲自检查一下自动生成的纠正结果质量如何。我们选用 LLaMA-2-70B 做为我们的模型 M∗rmathcal{M}*{r},并搭配 GPT-4 作为另一个模型 M∗cmathcal{M}*{c},依据 GSM8K 训练集制作了 50 组错误与纠正的数据对。接下来,我们把这些纠正的结果分为三个等级:
-
优秀:纠正者不仅准确找出了 r_i~widetilde{r_{i}} 中哪一步出了错,还提供了合理的解释,并且纠正后的推理路径与原先的推理步骤紧密衔接,流畅自然(例如,参见示例 LABEL:exmp:excellent)。
-
良好:纠正者成功找出了错误所在,并给出了合理的解释,但纠正后的推理路径略显生硬,不够流畅(例如,参见示例 LABEL:exmp:good)。
-
差:纠正者没能找出 r_i~widetilde{r_{i}} 中的错误,或者给出的解释不够充分(例如,参见示例 LABEL:exmp:poor)。
优秀的纠正示例:Excellent
问题:Courtney 喜欢收藏弹珠,并把它们存放在梅森罐中。她有一个罐子装了 80 个弹珠,第二个罐子的弹珠是第一个的两倍,而她刚刚开始收藏的第三个罐子里弹珠的数量是第一个罐子的四分之一。那么她一共有多少个弹珠呢?原始解答: 步骤 1: 第一个罐子 80 个弹珠,第二个罐子是第一个的两倍,也就是 2 x 80 = 160 个弹珠。 步骤 2: 第三个罐子有第一个罐子的四分之一,即 80 / 4 = 20 个弹珠。 步骤 3: 那么,Courtney 一共有 160 + 20 = 180 个弹珠。 步骤 4: 结果是 180。 错误的步骤:步骤 3。解释:步骤 3 的计算出了问题,因为它仅仅加上了第二
和第三个罐子中的弹珠。其实,第一个罐子中的弹珠也应该计算在内。正确的解答: … 步骤 3: 所以,Courtney 一共有 80(第一个罐子)+ 160(第二个罐子)+ 20(第三个罐子)= 260 个弹珠。 步骤 4: 结果是 260。
良好的纠正示例:Good
问题:Johnny 的职业是遛狗,他一次能带着 3 只狗散步。30 分钟的遛狗服务收费 15 美元,而 60 分钟的则是 20 美元。他每天工作 4 小时。假如他总是尽可能多地带狗出去,并且每天有 6 只狗遛足 60 分钟,那么他在一个工作日为 5 天的星期里能赚到多少钱呢?原解答如下: 步骤 1:每天 4 小时,一周工作 5 天,总共是 20 小时。 步骤 2:Johnny 一次能带 3 只狗,所以他一天可以遛狗 20 / 3 = 6 轮。 … 步骤 6:结果是 360 美元。 错误的步骤是步骤 2。 解释:步骤 2 的计算方法不正确,没能准确找出 Johnny 一天内遛三只狗的轮数。我们应该具体计算他进行 30 分钟和 60 分钟遛狗服务的次数。 正确的解答方式如下: … 步骤 2:Johnny 每天工作 4 小时,合计 240 分钟。他要遛 6 只狗,每只狗遛 60 分钟,总共需要 120 分钟。这样他还剩下 120 分钟来进行 30 分钟一轮的遛狗服务。 … 步骤 6:所以,他一周可以赚到 1500 美元。
(备注:虽然解释得头头是道,最终答案也是正确的,但新的解答方法在衔接上出现了一些问题:新的步骤 2 没有很好地接上原始的步骤 1。)
较差的纠错示例:Poor
问题:Tom、Tim 和 Paul 三人在收集汽车照片。Paul 比 Tim 多收集了 10 张照片,而 Tim 收集的照片比总量少了 100 张,总量是 152 张。那么 Tom 收集了多少张照片? 原解答如下: 步骤 1:152 减去 100 等于 52。 步骤 2:Tom 收集了 52 张照片。 步骤 3:所以答案是 52 张。 错误的步骤是步骤 1。 解释:这个步骤错误,因为它错误地用总数减去 100 来计算 Tim 的照片数量。但实际上题目中说的是 Tim 的照片比总数少 100 张,而不是总数减去 100 张。 正确的解答应该是: … 步骤 5:因此,Tom 有 38 张照片。
(备注:其实步骤 1 是对的,真正错在步骤 2,应该是 Tim 有 52 张照片,而不是 Tom。)
根据我们的评估,50 个生成的纠错中有 35 个是优秀的,11 个是良好的,4 个是质量较差的。从这次人工评估来看,我们认为 GPT-4 生成的纠错整体质量已经足够进入下一阶段的微调。因此,我们进行了大规模的纠错生成,并选用了所有最终答案正确的纠错数据来微调大语言模型。关于校正模型的选择和行为,我们在第 4.3 节 中进行了更为详细的分析。
3.2 对 LLMs 进行精细调整
在我们生成了纠错数据之后,接下来我们要对大语言模型(LLMs)进行精细调整,目的是为了验证这些模型是否能够从自己的错误中学习到东西。在这个过程中,我们主要对比了两种不同设置下的精细调整性能:
- 仅在“问题 – 推理”(CoT)数据上进行精细调整:我们直接在模型已经提供了答案和解释推理的数据上进行调整。虽然每项任务中都有标注好的数据,但我们还是参照了当前流行的方法,比如 Yuan 等人、Li 等人和 Yu 等人在 2023 年的研究,引入了 CoT 数据增强技术。这种技术是利用 GPT-4 为训练集中每一个问题生成更多的推理路径,然后剔除那些最终答案错误的路径。通过这种方法,我们建立了一个仅使用 CoT 数据进行精细调整的强大基线,同时也为我们后续关于如何控制精细调整数据大小的研究打下了基础(详细内容见第 4.2 节)。
- 在“问题 – 推理”数据和纠错数据上进行精细调整:除了 CoT 数据外,我们还加入了我们生成的错误 – 纠正数据进行精细调整(这个设置我们称之为 LeMa)。与此同时,我们也通过控制数据大小的方式,进行了一系列消融实验,以减少数据量增加对实验结果的影响。
在附录 A 中,我们展示了用于精细调整的“问题 – 推理”数据和纠错数据的输入输出格式。
模型 | 训练方法 | GSM8K 成绩(1st / 2nd / 3rd) | GSM8K 平均分 | MATH 成绩(1st / 2nd / 3rd) | MATH 平均分 |
---|---|---|---|---|---|
LLaMA-2-70B(Touvron 等人,2023b) | 联合训练微调 | 81.4 / 81.3 / 81.1 | 81.3 | 23.6 / 23.2 / 23.2 | 23.2 |
+ 从错误中学习 | 83.5 / 83.4 / 83.2 | 83.4(提升了 2.1 分) | 25.0 / 25.0 / 24.6 | 24.9(提升了 1.7 分) | |
LLaMA-65B(Touvron 等人,2023a) | 联合训练微调 | 76.2 / 76.2 / 75.7 | 76.0 | 19.7 / 19.7 / 19.2 | 19.5 |
+ 从错误中学习 | 77.9 / 77.3 / 77.2 | 77.5(提升了 1.5 分) | 20.8 / 20.3 / 20.2 | 20.4(提升了 0.9 分) | |
CodeLLaMA-34B(rozière, 2023,codellama) | 联合训练微调 | 68.8 / 68.5 / 68.2 | 68.5 | 19.1 / 19.0 / 18.9 | 19.0 |
+ 从错误中学习 | 71.7 / 71.0 / 70.9 | 71.2(提升了 2.7 分) | 20.4 / 20.2 / 20.0 | 20.2(提升了 1.2 分) | |
LLaMA-2-13B(Touvron 等人,2023b) | 联合训练微调 | 62.9 / 62.7 / 62.7 | 62.8 | 12.2 / 11.9 / 11.8 | 12.0 |
+ 从错误中学习 | 65.7 / 65.2 / 65.0 | 65.3(提升了 2.5 分) | 12.6 / 12.6 / 12.4 | 12.5(提升了 0.5 分) |
这个表格展示了四种不同模型在两种不同训练方法下的表现。我们可以看到,通过 “从错误中学习” 这种方法,所有模型在 GSM8K 和 MATH 两个项目上的表现都有所提升。
LLaMA-2-7B(由 Touvron 等人于 2023 年提出,详见论文2023b)采用了 CoT Fine-Tuning 方法,在 GSM8K 和 MATH 这两个数学题目数据集上进行了一系列实验。具体结果显示,最优的三次实验分别取得了 52.6%、52.5% 和 52.5% 的性能,平均性能为 52.5%,在另一个数据集上,这三次实验的性能分别为 8.7%、8.5% 和 8.5%,平均性能为 8.6%。值得一提的是,当我们引入了一种新的策略——“从错误中学习”后,性能得到了明显提升,分别达到了 54.1%、53.7% 和 53.6%,平均性能提升到了 53.8%(提升了 1.3%),在另一个数据集上,这三次实验的性能分别为 9.4%、8.9% 和 8.8%,平均性能提升到了 9.0%(提升了 0.4%)。我们在这里报告的是在 fine-tuning 过程中保存的最优三个模型的性能,以及这三次实验结果的平均值。
表 1:这是我们在 GSM8K 和 MATH 这两个数据集上进行的主要实验结果,所有结果都以百分比的形式展示。我们报告了在 fine-tuning 过程中保存的最优三个模型的性能,以及这三次实验结果的平均值。
(a) GSM8K 数据集上的性能变化曲线。 |
(b) MATH 数据集上的性能变化曲线。 |
图 2:展示了 LLaMA-2-70B 在经过 2,000 次 fine-tuning 迭代后,在两个数据集上性能的变化趋势。
图 3:展示了在 GSM8K 数据集上,LeMa 在受控数据规模下的性能表现。无论是采用 CoT Fine-Tuning 方法,还是使用受控数据规模的 LeMa 方法,数据规模都设定为 32,421;而完整数据规模下 LeMa 的表现则是基于全部 44,944 条数据的结果。
4 实验与分析
4.1 实验设定
任务与 CoT 数据
我们在两个极具挑战性的数学题目任务 GSM8K(由 Cobbe 等人于 2021 年提出,详见论文2021)和 MATH(由 Hendrycks 等人于 2021 年提出,详见论文2021)上进行了实验。GSM8K 数据集包含了 7,473 道高质量、涵盖多种语言的小学数学题目,以及 1,319 个测试题目。我们为 GSM8K 准备的 CoT 数据不仅包括了所有的训练题目,还额外增加了 24,948 条推理路径。具体而言,我们首先用 GPT-4 生成了 30,000 条推理路径,然后筛除了那些答案错误或格式不对的路径——总共 5,052 条。最终,我们用 32,421 条数据对 GSM8K 进行了 CoT Fine-Tuning。至于 MATH 数据集,它包括了 7,500 道竞赛级别的数学题和 5,000 个测试题目。我们为 MATH 准备的 CoT 数据同样包括了所有训练题目和额外的 12,509 条推理路径。这次我们同样生成了 30,000 条推理路径,但筛除了 17,491 条。最终,我们用 20,009 条数据对 MATH 进行了 CoT Fine-Tuning。
数据纠错生成环节
在这个环节,我们调动了几款尖端的大语言模型(LLMs),包括 LLaMA-2-70B(由 Touvron 等人在 2023b 的论文中提出),WizardLM-70B(由 Xu 等人在 2023 年的研究中开发),WizardMath-70B(由 Luo 等人在 2023 年的论文中介绍),Text-Davinci-003(由 OpenAI 在 2023c 年推出),GPT-3.5-Turbo 和 GPT-4(这两款都是 OpenAI 在 2023a 和 2023b 年发布的模型)来搜集一些不准确的推理路径。而后,我们选择 GPT-4 来对这些内容进行纠正。通过这样的操作,我们在 GSM8K 和 MATH 的训练数据集基础上,分别整理出了 12,523 和 6,306 组错误与纠正的数据对。再加上所谓的“思考链”(CoT)数据,我们为 LeMa 模型在 GSM8K 和 MATH 这两个数据集上分别准备了 44,944 和 26,315 个实例。
精调与效果评估
我们对几款开源的大语言模型(LLMs)进行了精细调整,这些模型包括 LLaMA (由 Touvron 等人在 2023a 年提出)、LLaMA-2 (由 Touvron 等人在 2023b 年提出)、CodeLLaMA(由 rozière 在 2023 年提出)、WizardMath (由 Luo 等人在 2023 年提出) 和 MetaMath (由 Yu 等人在 2023 年提出)。我们利用 QLoRA33(由 Hu 等人在 2022 年和 Dettmers 等人在 2023 年提出)对这些模型进行了精调,设置了 64 个低秩维度和 0.05 的失活率。对于大于或等于 34B 的模型,我们设置了 0.0001 的学习率;对于小于 34B 的模型,我们设置了 0.0002 的学习率。对于所有模型和任务,我们设置了 96 的批大小,进行了 2000 步的训练,并每 100 步保存一次模型状态。在评估阶段,我们根据 vLLM 库(由 Kwon 等人在 2023 年提出)来评估所有保存的模型状态,并报告最佳 3 个状态的 pass@1 准确率,以此来展示随机因素的影响。在微调和评估阶段,我们默认不在输入中加入示例演示。我们的实验是在配备了 4 块 A100 GPU 的工作站上进行的。
模型 | GSM8K 成绩 | MATH 成绩 |
闭源模型 | ||
GPT-4 (由 OpenAI 提供,2023b) | 92.0 | 42.5 |
Claude-2 (由 Anthropic 提供,2023) | 88.0 | – |
Flan-PaLM-2 (由 Anil 等人提供,2023) | 84.7 | 33.2 |
GPT-3.5-Turbo (由 OpenAI 提供,2023a) | 80.8 | 34.1 |
PaLM-2 (由 Anil 等人提供,2023) | 80.7 | 34.3 |
开源模型 | ||
LLaMA-2-7B (由 Touvron 等人提供,2023b) | 14.6 | 2.5 |
Baichuan-2-7B (由 Yang 等人提供,2023) | 24.5 | 5.6 |
SQ-VAE-7B (由 Wang 等人提供,2023b) | 40.0 | 7.0 |
RFT-7B (由 Yuan 等人提供,2023) | 50.3 | – |
Qwen-7B (由 Alibaba 提供,2023) | 51.6 | – |
LLaMA-2-7B + LeMa (我们的模型) | 54.1 | 9.4 |
WizardMath-7B (由 Luo 等人提供,2023) | 54.9 | 10.7 |
WizardMath-7B + LeMa (我们的模型) | 55.9 | 11.9 |
这个表格列出了几款不同的人工智能模型和它们在两个测试任务(GSM8K 和 MATH)上的表现。闭源模型通常表现更优,但也有一些开源模型表现不俗。我们自己的模型,在结合了 LeMa 策略后,取得了相当不错的成绩。
在 GSM8K 和 MATH 这两个数据集上,我们可以看到不同大语言模型(LLMs)的表现如何。LLaMA-2-13B(由 Touvron 等人在 2023b 提出)的准确率达到了 28.7%,而它的错误率是 3.9%。而 Wang 等人在 2023b 提出的 SQ-VAE-13B,准确率为 50.6%,错误率为 8.5%。另外,Yang 等人在 2023 年提出的 Baichuan-2-13B 准确率为 52.8%,错误率为 10.1%。接下来是 Yuan 等人在 2023 年提出的 RFT-13B,它的准确率更高,达到了 54.8%,但是错误率没有给出。而 Luo 等人在同一年提出的 WizardMath-13B,准确率为 63.9%,错误率为 14.0%。
当我们在这些模型上加入了我们自己的模型 LeMa 时,可以看到准确率有了明显的提升。LLaMA-2-13B + LeMa 的准确率达到了 65.7%,错误率为 12.6%。MetaMath-13B + LeMa 的准确率更是达到了 73.2%,错误率为 22.7%。
当模型的规模增加到 70B 时,我们可以看到所有模型的性能都有所提升。LLaMA-2-70B 的准确率为 56.8%,错误率为 13.5%。RFT-70B 的准确率达到了 64.8%,但错误率没有给出。WizardMath-70B 的准确率为 81.6%,错误率为 22.7%。MuggleMath-70B 的准确率达到了 82.3%,错误率没有给出。MetaMath-70B 的准确率为 82.3%,错误率为 26.6%。加入了我们的 LeMa 模型后,LLaMA-2-70B + LeMa 的准确率达到了 83.5%,错误率为 25.0%。WizardMath-70B + LeMa 的准确率为 84.2%,错误率为 27.1%。最终,MetaMath-70B + LeMa 的准确率达到了惊人的 85.4%,错误率为 26.9%。
表 2 显示了在 GSM8K 和 MATH 数据集上,各种大语言模型的 pass@1 准确率。
4.2 结果与分析
纠错数据显著提升了多种大语言模型(LLMs)的表现。
在表格 1 中,我们可以看到在两个数学推理任务上的主要实验结果。相比仅在思考树(CoT)数据上进行微调,加入纠错数据后的微调在所有五个基础大语言模型(LLMs)和两个任务上都取得了更好的表现。更重要的是,我们发现所有使用纠错数据的模型都一直表现得比仅用思考树(CoT)数据的模型好。此外,图 2 显示了整个训练过程的性能变化曲线,从中可以明显看出加入纠错数据带来了性能的稳步提升。这些连贯的进步表明,纠错数据的有效性不受训练过程中随机因素的影响,非常稳定。
思考树数据和纠错数据的效果并不是一样的。
如果这两种数据的效果相同,那么当我们把这两种微调设置的数据量控制在一样时,在表格 1 中展示的性能提升就会减小。为了更深入地验证纠错数据的效果,我们将 GSM8K 上的 LeMa 数据量减少到与思考树(CoT)微调相同的水平。具体来说,我们从思考树(CoT)数据中随机删除了 12,523 个实例,只留下 32,421 个实例供 LeMa 使用(其中包括 19,898 个思考树(CoT)数据和 12,523 个纠错数据)。图 3 显示,即使在数据量相同的情况下,LeMa 仍然为 LLaMA-2-70B、LLaMA-65B 和 LLaMA-2-13B 带来了明显的性能提升。这说明这些大语言模型(LLMs)确实通过纠错数据学到了思考树(CoT)数据中没有的额外信息。对于 LLaMA-2-7B,控制数据量后的 LeMa 性能与仅用思考树(CoT)数据微调的性能相当,这表明更大的模型更擅长从错误中学习。这一点在我们对专门的大语言模型(LLMs)的实验中也得到了验证。
LeMa 能够大幅提升专业 LLMs 的表现。
为了让那些通用预训练的大语言模型(LLMs)更好地服务于数学领域,研究人员开发了一些专门的 LLMs,像是 WizardMath(由 Luo 等人在 2023 年提出)和 MetaMath(由 Yu 等人在 2023 年提出)。我们将 LeMa 运用到这些专业的 LLMs 上,并在 表 2 中报告了它们的性能。结果显示,LeMa 能够为这些专业 LLMs 带来显著的性能提升。尤其值得一提的是,LeMa 结合 70B 规模的专业 LLMs 能够达到业界领先水平:在 GSM8K 数据集上,搭配 MetaMath-70B 的 LeMa 达到了 85.4% 的 pass@1 准确率;在 MATH 数据集上,搭配 WizardMath-70B 的 LeMa 达到了 27.1%。需要注意的是,这些模型主要是在大量的基于会话的(CoT)数据上进行训练的。比如说,MetaMath 的训练集包含了 240,000 个为 GSM8K 设计的问题和解释示例。这些成果再次证明了通过从错误中学习,LLMs 能够变得更加精准。
更大规模的 LLMs 能更好地利用 LeMa。
在将 LeMa 应用到专业 LLMs 上时,我们发现更大规模的 LLMs 能够获得更多的性能提升。从 表 2 中我们可以看到,MetaMath-70B 在 GSM8K 上的 pass@1 准确率提升了 3.1%,而 MetaMath-13B 的准确率只提升了 0.9%;同样地,WizardMath-70B 在 MATH 上提升了 4.4%,而 WizardMath-7B 只提升了 1.2%。再结合 图 3 中展示的在控制数据规模情况下,LLaMa-2-7B 使用 LeMa 的性能,这些对比结果表明,更大规模的 LLMs 在从错误中学习这一方面做得更好。
图 4:展示了在 MATH 数据集上根据不同难度级别,我们生成的修正数据的统计信息。左侧的图展示了在不同难度级别下,我们收集到的错误推理路径的数量和生成的包含正确答案的修正数量。右侧的图展示了在不同难度级别下,我们纠正错误推理路径的成功率。
4.3 进一步剖析纠错过程
在默认的设定下,我们选择了 GPT-4 作为我们的纠错模型,而且我们在第 3.1 节的人工评价也验证了这个选择是正确的。接下来,我们将深入分析这个纠错模型的选择和行为。具体而言,我们将探讨三个研究问题:RQ1:我们能使用一个不那么强大的模型来进行纠错吗?RQ2:GPT-4 在自我纠错方面的表现怎样?RQ3:在处理复杂问题时,GPT-4 纠正错误推理的能力如何?
弱一些的模型并不适合用来生成纠正内容。
除了 GPT-4,我们还尝试过使用 GPT-3.5-Turbo 来进行纠错,并对其生成的纠正内容进行了质量评估。我们对 GPT-3.5-Turbo 生成的 20 个纠正案例进行了人工评价,发现几乎有一半的纠正内容质量不佳。因此,尽管 GPT-3.5-Turbo 的成本要低很多,但我们还是决定使用 GPT-4 来生成纠正内容。我们认为,如何在没有 GPT-4 的条件下生成高质量的纠正内容,是一个值得探索的研究方向。
GPT-4 在纠正自己的错误上成功率不高。
具体来讲,在对 MATH 训练集的 2,696 个不准确的推理路径进行处理后,我们最终得到了 217 个答案正确的纠正结果。这表明 GPT-4 在自我纠错上的成功率仅为 8.0%。与之相比,GPT-4 在纠正一些较弱模型的错误上表现得更为有效,例如在纠正 LLaMA-2-70B(在 MATH 上成功率为 37.5%)和 GPT-3.5-Turbo(在 MATH 上成功率为 26.9%)生成的错误上。GPT-4 自我纠错成功率较低的一个可能原因是,它生成的错误多来自于一些更具挑战性的问题,这些问题本身就更难以纠正。
对于复杂问题中的错误推理,GPT-4 仍然存在困难。
在 MATH 数据集中,数学问题被分为五个难度等级,从 Level 1(最简单)到 Level 5(最难)。图 4 展示了我们按难度等级对 MATH 数据集上纠正结果的统计情况。随着问题难度的增加,我们收集到的错误推理路径数量也在增加,而正确纠正的数量则先增加后减少。我们还计算了在每个难度等级下纠错的成功率,即将纠正正确的数量除以总的推理路径数量。图 4 显示了一个明显的趋势:随着问题难度的增加,纠错的成功率显著下降。这说明在纠正错误推理这一方面,现代大语言模型(LLMs)还有很大的进步空间。
5 讨论
在这一部分,我们将深入探讨从错误中学习的深层见解。近期大语言模型(LLMs)的飞速发展,让它们能够按步就班地解决问题。然而,我们不能仅凭这种分步骤的生成过程就断定 LLMs 具备了强大的推理能力。实际上,它们可能只是在表面上模仿了人类的推理行为,却没有真正理解进行精确推理所必需的深层逻辑和规则。这种理解的缺失可能会在推理过程中导致错误,并且需要借助一个对现实世界的逻辑和规则有着深刻认识的 “世界模型” 的帮助。因此,在我们的 LeMa 框架中,我们使用 GPT-4 作为这样一个 “世界模型”,引导较小模型不仅仅是复制一步步的行为,更是教会它们遵循这些逻辑和规则。
6 结论
本研究探讨了大语言模型(LLMs)是否能从自己的错误中学习。通过生成修正数据并对 LLMs 进行微调,我们的实验结果表明,从错误中学习确实能够提升各类 LLMs,在处理数学推理任务时的性能。
致谢
感谢 Shengnan An 和 Nanning Zheng,在 NSFC 的资助下(项目编号:62088102),对本研究的支持。同时,也要感谢 Chen Li 对本研究的宝贵建议。
这是论文《从错误中学习使 LLM 成为更好的推理者》的附录。
附录 A 微调的输入 – 输出格式示例
这里通过两个例子,LABEL:exmp:cot_format 和 LABEL:exmp:correction_format,向大家展示了 CoT 数据和改错数据的输入输出应该是怎样的格式。需要注意的是,在微调这个过程中,输入的部分其实是起到了一个提示的作用,而真正参与到反向传播中,也就是我们模型学习的过程中的,其实只有输出的那一部分。
CoT 数据的输入输出是这样的(cot_format):
输入: 请帮忙解答下面这个数学题: 问题:Natalia 在四月份卖给了 48 位朋友夹子,到了五月份,她又卖出了一半数量的夹子。请问,Natalia 在四月和五月两个月总共卖出了多少夹子? 答案:我们一步步来分析这个问题。
输出: Natalia 在五月份又卖出了 48 / 2 = 24 个夹子。所以,Natalia 在四月和五月两个月一共卖出了 48 + 24 = 72 个夹子。答案就是 72。
改错数据的输入输出格式是这样的(correction_format):
输入: 对于下面这个数学题,原来的解答方法是错的。请找出哪一步出了问题,解释为什么这一步是错的,并且从出错的那一步开始,给出一个正确的解答方法。 问题:Courtney 喜欢收集弹珠,并且她把弹珠存放在果酱罐中。她有一个罐子里面有 80 个弹珠,第二个罐子里的弹珠是第一个的两倍,第三个罐子里则是第一个的四分之一。请问,她一共有多少个弹珠? 原来的解答: 步骤 1:第一个罐子有 80 个弹珠,第二个罐子有 2 x 80 = 160 个弹珠。 步骤 2:第三个罐子有第一个的四分之一,也就是 80 / 4 = 20 个弹珠。 步骤 3:那么,Courtney 一共有 160 + 20 = 180 个弹珠。 步骤 4:所以,答案是 180。 哪一步出错了?
输出: 步骤 3 出了问题。 解释:步骤 3 的计
算只加上了第二和第三个罐子的弹珠数量,忽略了第一个罐子的弹珠。其实三个罐子的弹珠都应该计算在内。 正确的解答方法: { … 步骤 3:所以,Courtney 一共有 80(第一个罐子)+ 160(第二个罐子)+ 20(第三个罐子)= 260 个弹珠。 步骤 4:答案是 260。 }
需要注意的是,这里省略号代表的是在微调过程中实际使用的标记,因为我们认为仅仅复制前面的步骤对于模型学习并没有太大的帮助。