LLM: AI Mathematical Olympiad (上)

news2024/12/23 8:12:42

文章目录

  • 一、项目简介
  • 二、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 数据。

具体流程图像


  1. 从NuminaMath-CoT数据集中提取大约100K个具有值输出的问题子集;
  2. 温度为0.8下,每个问题,使用gpt - 4o辅助API对解决方案进行采样;
  3. 过滤模型生成的答案与参考答案不匹配的负样本。对于整数输出问题,使用精确匹配。对于其他表达式,使用gpt - 40作为裁判来确定匹配;
  4. 在负面问题上重复同样的过程;

作为参考,以下是训得的第 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时代真的是数据驱动为王!!!,算法工程师以后都变成数据科学家了。后半部分将介绍作者的推理策略以及代码逻辑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2240719.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GA/T1400视图库平台EasyCVR视频融合平台HLS视频协议是什么?

在数字化时代,视频监控系统已成为保障安全、提升效率的关键技术。EasyCVR视频融合云平台,作为TSINGSEE青犀视频在“云边端”架构体系中的重要一环,专为大中型项目设计,提供了一个跨区域、网络化的视频监控综合管理系统平台。它不仅…

给阿里云OSS绑定域名并启用SSL

为什么要这么做? 问题描述: 当用户通过 OSS 域名访问文件时,OSS 会在响应头中增加 Content-Disposition: attachment 和 x-oss-force-download: true,导致文件被强制下载而不是预览。这个问题特别影响在 2022/10/09 之后新开通 OS…

`node-gyp` 无法找到版本为 `10.0.19041.0` 的 Windows SDK

从你提供的错误信息来看,问题出在 node-gyp 无法找到版本为 10.0.19041.0 的 Windows SDK。我们可以尝试以下几种方法来解决这个问题: 完整示例 方法 1:安装指定版本的 Windows SDK 下载并安装 Windows SDK: 访问 Windows SDK 下…

【Hive】【HiveQL】【大数据技术基础】 实验四 HBase shell命令实验

实验四:熟悉常用的HBase操作 实验概览 在本次实验中,我们将深入探索HBase在Hadoop生态系统中的角色,并熟练掌握常用的HBase Shell命令和Java API操作。通过这些实践,我们能够更好地理解HBase的工作原理以及如何在实际项目中应用。…

3D意识(3D Awareness)浅析

一、简介 3D意识(3D Awareness)主要是指视觉基础模型(visual foundation models)对于3D结构的意识或感知能力,即这些模型在处理2D图像时是否能够理解和表示出图像中物体或场景的3D结构,其具体体现在编码场景…

快递面单批量导入打印软件小程序下载 佳易王网店快递面单批量打印管理系统操作教程

一、概述 【软件文件资源在文章最后】 快递面单批量导入打印软件小程序下载 快递面单批量打印管理系统操作教程 直接使用快递空白单打印,可以扫描条码并可以查询快递信息,面单内容可以自定义。 可以批量导入批量打印,从而提高效率节省时间…

缓冲区溢出,数据被踩的案例学习

继续在ubuntu上学习GDB,今天要学习的是缓冲区溢出。 程序的地址: GitHub - gedulab/gebypass: bypass password by heap buffer overflow 编译的方法: gcc -g -O2 -o gebypass gebypass.c 照例设置一下科学shangwang代理: e…

数据库SQL——连接表达式(JOIN)图解

目录 一、基本概念 二、常见类型 内连接(INNER JOIN): 左连接(LEFT JOIN 或 LEFT OUTER JOIN): 右连接(RIGHT JOIN 或 RIGHT OUTER JOIN): 全连接(FULL…

sql注入之二次注入(sqlilabs-less24)

二阶注入(Second-Order Injection)是一种特殊的 SQL 注入攻击,通常发生在用户输入的数据首先被存储在数据库中,然后在后续的操作中被使用时,触发了注入漏洞。与传统的 SQL 注入(直接注入)不同&a…

查询DBA_FREE_SPACE缓慢问题

这个是一个常见的问题,理论上应该也算是一个bug,在oracle10g,到19c,我都曾经遇到过;今天在给两套新建的19C RAC添加监控脚本时,又发现了这个问题,在这里记录一下。 Symptoms 环境:…

实验6记录网络与故障排除

实验6记录网络与故障排除 实验目的及要求: 通过实验,掌握如何利用文档记录网络设备相关信息并完成网络拓扑结构的绘制。能够使用各种技术和工具来找出连通性问题,使用文档来指导故障排除工作,确定具体的网络问题,实施…

「QT」文件类 之 QTextStream 文本流类

✨博客主页何曾参静谧的博客📌文章专栏「QT」QT5程序设计📚全部专栏「Win」Windows程序设计「IDE」集成开发环境「UG/NX」BlockUI集合「C/C」C/C程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「UG/NX」NX定制…

【go从零单排】JSON序列化和反序列化

🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 在 Go 语言中,处理 JSON 数据主要依赖于 encoding/json 包。这个包提…

网络学习第四篇

引言: 我们在第三篇的时候出现了错误,我们要就行排错,那么我们要知道一下怎么配置静态路由实现ping通,这样子我们才知道下一跳到底是什么,为什么这样子做。 实验目的 理解和掌握静态路由的基本概念和配置方法。 实…

蓝桥杯竞赛单片机组备赛【经验帖】

本人获奖情况说明 笔者本人曾参加过两次蓝桥杯电子赛,在第十二届蓝桥杯大赛单片机设计与开发组获得省级一等奖和国家级二等奖,在第十五届嵌入式设计开发组获得省级二等奖。如果跟着本帖的流程备赛,只要认真勤奋,拿个省二绝对没问…

yolo标签自动标注(使用python和yolo方法)

yolo代码自动标注 1.引言1.初阶“自动标注”,给每个图像都生成一个固定的标注文件,进而在labglimg中对矩形框进行微调,减少标注的工作量2.高阶自动标注,利用我们训练好的(但是没有特别精准的)yolo文件先对每…

Git在版本控制中的应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 Git在版本控制中的应用 Git在版本控制中的应用 Git在版本控制中的应用 引言 Git 概述 定义与原理 发展历程 Git 的关键技术 分布…

vue2.7.14 + vant + vue cli脚手架转vite启动运行问题记录

文章目录 前言方案一(借用插件转换)启动命令,转换方案一转换遇到的问题 方案二(手动调整)方案两者对比小结 前言 vue cli 脚手架转成vite启动 简单说说这个项目的一些底层基本结构哈,以及写这篇博客的目的…

边缘提取函数 [OPENCV--2]

OPENCV中最常用的边界检测是CANNY函数 下面展示它的用法 通常输入一个灰度图像(边界一般和颜色无关)这样也可以简化运算cv::Canny(inmat , outmat , therhold1, therhold2 ) 第一个参数是输入的灰度图像,第二个是输出的图像这两个参数都是引用…

SpringBoot基础系列学习(七):整合Mybatis

文章目录 一丶介绍1.基本信息2.特性 二丶代码1.项目结构2.数据表3.引入依赖4.实体类5.mapper6.sql.xml7.Controller8.结果 一丶介绍 1.基本信息 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手…