文章目录
- 一、项目简介
- 二、first place 攻略
- 三、必备知识
- 1、COT思维链技术
- 2、ToRA
- 四、first place 训练功略
- 五、数据集构建
- 1、COT数据集
- 2、TIR数据集
- 六、数据集详细技术报告
- 总结
本文较长分成两个部分分析 | ू•ૅω•́)ᵎᵎᵎ
第一部分:预备知识介绍和数据准备
第二部分:推理策略与代码分析
个人觉得大模型解数学竞赛还是很有意思的项目,其中的很多想法还是很值得借鉴学习的!
一、项目简介
数学推理能力是人工智能的一个重要里程碑。数学推理是解决许多复杂问题的基础,从工程奇迹到复杂的金融模型。然而,目前人工智能在这一领域的能力有限。
比赛包括110个类似中级高中数学挑战的问题。这些问题的Gemma 7B基准在公共和私人测试集中的得分是3/50。
本次竞赛使用了一个由国际问题解决者团队创建的包含110个新颖数学问题的数据集,认识到需要一个透明和公平的评估框架。该数据集包含一系列难度等级,从简单的算术到代数思维和几何推理。这将有助于加强评估人工智能模型数学推理技能的基准,而不会受到训练数据污染的风险。
在这个比赛中,每个真值标签都是0到999之间的整数。
所有的问题都是纯文本的,并带有LaTeX中的数学符号。
二、first place 攻略
https://huggingface.co/blog/zh/winning-aimo-progress-prize
本文主要介绍Numina团队的方案,该方案获得了该竞赛的first place。我认为有以下主要几点:
1)丰富的数据挖掘和收集
2)有效的推理策略
3)大量的优化调整实验
下面详细介绍相关技术和策略以及代码逻辑
三、必备知识
1、COT思维链技术
Chain of Thought Prompting Elicits Reasoning in Large Language Models
关于思维链技术的详细理解可以参考:
https://www.cnblogs.com/gogoSandy/p/17475875.html
COT用法包括:few-shot,zero-shot,self-consistency,Least-to-Most
COT带来的效果提升具有涌现性,只在100B左右的大模型上才出现显著更优的效果,但作者没有给出模型规模的影响原因,另外COT带来的效果提升在复杂问题例如GSM8K上表现更显著。
few-shot:简单来说就是先给LLM几个exp,比如这些exp中包含中间过程,从而引导模型推理
zero-shot:论文中效果最好的激活思维链的指令是"Let’s think step by step"
self- consistency:简单来说用模型随机解码生成的多个回复“投票”出一个更准确答案;如何ensemble答案是个问题,效果较好的两种方法是 major vote / normalized weighted sum。
major vote:直接对解码后的结果投票大法投出一个出现概率最高的答案。
normalized weighted sum:计算(ri,ai)路径的概率,既模型输出的每一个token条件解码概率求和,并对解码长度K进行归一化。
least-to-most:那Least-to-Most明显更优雅一些。思路很简单,在解决复杂问题时,第一步先引导模型把问题拆分成子问题;第二步逐一回答子问题,并把子问题的回答作为下一个问题回答的上文,直到给出最终答案
2、ToRA
关于ToRA技术的详细理解可以参考:
https://zhuanlan.zhihu.com/p/676860626
rationale-based:针对数学问题进行自然语言形式的分析,一步步进行演算的步骤。但是这种方法只是用自然语言的形式进行分析,这就导致可能会饱受“幻觉”的影响,输出解决可靠性较差。
program-based:利用代码(如python),给出数学问题的解决方案,然后用一个code executor执行代码并输出结果。
ToRA做法则是结合了上述两种的优势,既保留了LLM自然语言推理的优势,给出合理分析的步骤,也通过输出代码保证了结果的准确性。 本文所遵循的就是这第三种方法。
文章在构建语料库的过程中,将解数学问题的推理、生成代码的过程抽象成对话序列,也即针对原本数学问题,首先由LLM输出自然语言guidance和代码程序,然后执行代码后将输出结果输入给LLM,LLM进而对上一步的结果进行进一步的分析和生成新的code,直到LLM判断输入的执行结果已经执行完解决问题的所有步骤,就输出最终答案。
这篇工作最核心的就是通过微调大模型LLaMA,使得其具备使用工具并解决数学问题的能力。既然是微调,最核心的就是数据集的构建。本文通过两个阶段,第一阶段构建16K数据集进行微调模型,第二阶段构建更diverse的数据进行二次微调。
TORA具体流程如下:
构建数据集是在MATH和GSM8k基础上,利用GPT4构建的。首先用GPT-4进行greedy decoding(在每个时间步选择当前条件概率最高的词语作为输出,这种方法简单高效,每个时间步只需计算当前条件概率最高的词语,因此计算速度较快,贪婪解码可能会陷入局部最优解,而无法获得全局最优解。这可能导致生成的文本缺乏多样性或不准确。),然后将正确答案记录下来。如果是不正确的答案,则进行核心采样,并人工标注错误的对话序列。
greeding decodin, beam search
{"dataset": "tora-corpus-math", "level": "Level 1", "id": "math-train-212-0", "gt": "x^2+7x+10", "gt_cot": "When using the distributive property for the first time, we add the product of $x+2$ and $x$ to the product of $x+2$ and 5:\n\n\\begin{align*}\n(x+2)(x+5) &= (x+2) \\cdot x + (x+2) \\cdot 5\\\\\n&= x(x+2) + 5(x+2)\n\\end{align*}We use the distributive property again and combine like terms:\n\n\\begin{align*}\nx(x+2) + 5(x+2) &= x^2 + 2x + 5x+ 10\\\\\n&= \\boxed{x^2 + 7x + 10}\n\\end{align*}", "messages": [{"role": "user", "content": "Expand the product ${(x+2)(x+5)}$."}, {"role": "assistant", "content": "```python\nfrom sympy import symbols, expand\n\ndef expand_product():\n \"\"\"Expand the product ${(x+2)(x+5)}$.\"\"\"\n x = symbols('x')\n expression = (x + 2) * (x + 5)\n expanded_expression = expand(expression)\n\n return expanded_expression\n\nresult = expand_product()\nprint(result)\n```\n```output\nx**2 + 7*x + 10\n```\nThe expanded form of the product ${(x+2)(x+5)}$ is $\\boxed{x^2 + 7x + 10}$."}]}
gt-cot 表示对应问题的COT回答
message 为tora格式的标注
TORA训练分为两步,第一步基于上面数据集微调,第二步时基于第一阶段与训练得到的模型,对数学问题进行输出采样,输出若干种不同的解决方案。然后,针对其中失败的轨迹,使用老师模型对错误的步骤进行纠正,得到纠正后的轨迹。这样,就得到了更多样化的轨迹,其中既有一次成功的,也有失败后纠正成功的。这一阶段总共收集69K语料,然后进行微调得到最终的大模型ToRA。
四、first place 训练功略
整个训练分为两阶段
第1 阶段: 在自然语言“数学题 + 解答”的大规模、多样化数据集上微调基础模型,其中每个解答都需套用思维链 (CoT) 模板以促使 LLM 进行推理。
第 2 阶段: 在工具整合推理的合成数据集上微调第 1 阶段得到的模型,其中每个数学题都分解为一系列推理、Python 程序及其输出。此时,遵循 ToRA 的做法,提示 GPT-4 以 ToRA 格式生成带有代码执行反馈的解答。对这些数据进行微调会产生一个推理代理,它可以通过将自然语言推理和使用 Python REPL 来计算中间结果结合起来以解决数学问题。
两个阶段,我们都用了“全模型微调”,所有模型权重在反向传播期间都得到了更新。换句话说,没有使用像 LoRA 或 DoRA 这样的参数高效技术,因为没有大量实验表明它们能够媲美全模型微调的性能。
五、数据集构建
在构建数据集时,广泛参考了 DeepSeek Math 和其他学者的方法,并对它们进行了大幅扩展。我们生成了含数十万数学题 - 解答 对的微调数据集,涵盖从高中数学到竞赛级数学的各种知识点。
数据集技术报告
1、COT数据集
该数据集由数十万个题目组成,每题都有以思维链的方式编写的解答。数据集的来源范围有中国高中数学练习以及美国及国际数学奥林匹克竞赛题目。数据主要来自在线试卷 PDF 和数学论坛。
处理步骤如下:
1)对原始 PDF 进行 OCR;
2)分割为“题目 - 解答”对;
问题解决方案分割:部分World Olympiads数据通过将问题和解决方案的开头与对应的正则表达式进行匹配来分割,该正则表达式是为所选比赛手工设计的。另一部分很难与正则表达式匹配,因此在PDF级别手动分割,然后用OCR转换为文本。
3)翻译成英文;
4)重新调整以变成思维链推理格式;
5)格式化为最终答案;
2、TIR数据集
工具整合推理 (TIR) 在比赛中发挥了至关重要的作用。然而,收集和标注此类数据既昂贵又耗时。为了解决这个问题,从 Numina 数据集中选择了大约 6 万道题,重点关注那些答案为数字的题,其中大多数答案是整数。
然后, GPT-4 的流水线生成类似 TORA 的推理路径,执行代码并生成结果,直到生成完整解答。我们筛选出最终答案与参考答案不匹配的解答,并重复此过程三次,以确保准确性和一致性。这种迭代方法使我们能够高效地生成高质量的 TORA 数据。
具体流程图像
- 从NuminaMath-CoT数据集中提取大约100K个具有值输出的问题子集;
- 温度为0.8下,每个问题,使用gpt - 4o辅助API对解决方案进行采样;
- 过滤模型生成的答案与参考答案不匹配的负样本。对于整数输出问题,使用精确匹配。对于其他表达式,使用gpt - 40作为裁判来确定匹配;
- 在负面问题上重复同样的过程;
作为参考,以下是训得的第 1 阶段模型 NuminaMath-7B-CoT 和第 2 阶段模型 NuminaMath-7B-TIR 在 MATH 基准 上与其他开放及私有模型的跑分对比:
各模型在 MATH 基准上的表现。除非明确说明,所有跑分均由零样本贪心解码获得。
六、数据集详细技术报告
这部分主要了解下数据集来源,可以简单看看
MATH和GSM8K:我们遵循DeepseekMath [Shao等人,2024]和ReAlign [Fan等人,2024]的建议,使用GPT-4从原始问题中重新格式化参考解决方案,以利用我们的CoT格式。
Orca-Math: Orca-Math是一个优秀的大规模小学级合成数据集。我们匹配正则表达式来简化和识别原始Orca-Math数据集中提供的解答,然后将每个答案包装在\boxed{}中。
AMC AIME:AMC或AIME的问题有明确的值输出,要么是选择题(AMC),要么是整数(AIME)。我们从AoPS wiki网站上收集了AMC和AIME问题陈述。问题已经是latex格式了。aop社区针对每个问题都提出了几个很好的解决方案。我们选择第一个候选,用\box{} 标记。这个数据集包含了大约6500个问题。然而,并不是所有的都可以在训练集中使用。该数据的一部分已用于创建MATH数据集[Hendrycks等人,2021]。因此,我们使用嵌入执行了一个净化过程(见3.4),它为训练集保留了大约4300个问题。最后,我们应用与上述相同的方法,使用gpt - 40将参考解决方案重新对齐为CoT格式。
AoPS论坛:AoPS论坛也有大量的跨领域竞争问题
他的整个世界。我们已经从网站的竞赛收集页面抓取了所有数据。
然而,参考解决方案不收集在论坛。相反,回复可能会
包含一个好的解决方案或至少暗示解决方案。一旦我们选择
最好的答案,我们将其作为参考解决方案,并将其输入到调整中
提示gpt - 4o像以前一样重写解决方案。
中文K-12考试:我们遵循Shao等[2024]的微调方法,收集中文
K-12教育数学练习。这些练习不是比赛水平,但将提供
有扎实的基础知识和良好的数学模型学习能力。我们检索所有
我们公开试卷上的习题。其中大部分都可以找到并下载
来自He等人[2023]或其他公开来源。当试卷以PDF格式出现时
格式,我们应用OCR和正则表达式分割提取问题-解决方案对,和
然后使用gpt - 4o翻译和重新排列参考
合成数据:我们遵循Li等人[2024]使用math . net创建合成数学数据
数据集和AMC-AIME数据集的训练分割。参见Li et al.[2024]综合问题
首先使用GPT-4的种子问题进行采样,具有非零温度(0.8)。在
第二阶段,利用贪婪解码创建新的解决方案。在我们的方法中,我们
直接使用第一阶段的解决方案,降低成本。
世界奥林匹克数据:我们从下面收集了152K对问题解决方案
来源:
-国际竞赛及其入围名单(IMO、APMO、BMO等);
-全国和区域竞赛,按国家分列,见图2;
-解决问题论坛,益智和奥林匹克书籍,暑期学校材料。
总结
上半部分主要介绍了一下预备知识和数据集构建的相关策略,不得不感叹LLM时代真的是数据驱动为王!!!,算法工程师以后都变成数据科学家了。后半部分将介绍作者的推理策略以及代码逻辑。