《ADVANCING MATHEMATICAL REASONING IN LAN- GUAGE MODELS》全文阅读
《ADVANCING MATHEMATICAL REASONING IN LAN- GUAGE MODELS: THE IMPACT OF PROBLEM-SOLVING DATA, DATA SYNTHESIS METHODS, AND TRAINING STAGES》全文阅读
提升语言模型中的数学推理能力:问题求解数据、数据合成方法及训练阶段的影响
\begin{abstract}
数学推理一直是大型语言模型(LLMs)面临的具有挑战性的问题,这也促使学术界和产业界开发了诸如 LLEMMA、DeepSeekMath、Qwen2-Math 等针对数学领域的专门 LLMs。这些模型通常遵循两阶段训练范式:在预训练阶段使用与数学相关的语料进行训练,在后训练阶段则利用问题数据进行监督微调(SFT)。尽管做出了这些努力,但通过继续预训练(CPT)所获得的数学推理能力的提升通常不如通过 SFT 所获得的显著。本研究针对这一现象展开探索,重点考察在预训练阶段采用问题求解数据而非一般数学语料的替代策略。我们探讨了三个主要研究问题:
(1) 在 CPT 阶段,是否比使用常规数学语料,通过提供问题求解数据更能有效地提升模型的数学推理能力?
(2) 如果问题求解数据能提升数学推理能力,那么来自同一来源的合成数据是否同样有效?以及哪种合成方法最为高效?
(3) 当使用相同的问题求解数据时,CPT 阶段与 SFT 阶段培养出的能力有何差异?这些差异的根本因素是什么?
我们的发现表明,与常规数学语料相比,问题求解数据能显著提升模型的数学能力。我们也确定了有效的数据合成方法,并证明了 tutorship amplification(导师放大)合成方法表现最佳。此外,虽然 SFT 能培养模型的指令跟随能力,但在使用相同数据时,其效果不及 CPT;这部分归因于 SFT 在学习更高难度问题求解数据时能力较弱。上述发现为优化 LLMs 的数学推理能力提供了宝贵的指导,最终促成了我们开发出一款高性能数学基础模型 MathGPT-8B。
\end{abstract}
\section*{1 引言}
为了解决大型语言模型(LLMs)在数学推理能力不足的难题,各类专注于数学领域的 LLMs 应运而生。这些模型包括在预训练阶段提升性能的模型,如 LLEMMA (Azerbayev et al., 2023)、DeepSeekMath (Shao et al., 2024)、InternLM-Math (Ying et al., 2024) 以及 Qwen2-Math (Yang et al., 2024a);同时也包括在后训练阶段改进性能的模型,如 MetaMath (Yu et al., 2023)、WizardMath (Luo et al., 2023) 和 KwaiYiiMath (Fu et al., 2023)。这些模型通常遵循共同的训练范式:在预训练阶段,从庞大的互联网数据中筛选出与数学相关的语料来增强模型的数学知识;在后训练阶段,则利用问题数据及其增强版本(如 Program-of-Thought (PoT) (Chen et al., 2022)、evol-Instruct (Xu et al., 2023) 和 Tool-Integrated Reasoning (TIR) (Gou et al., 2023; Yin et al., 2024))构建监督数据集,进行监督微调(SFT),使得模型能够遵循指令并以期望的格式输出结果。近年来,研究者越来越关注构建旨在优化求解过程的偏好数据集,从而执行 Step-DPO (Lai et al., 2024) 或 online-RLHF (Dong et al., 2024) 等策略,以获得更为准确的推理路径,从而显著提升模型的数学推理能力。
由于数学知识与普通知识之间存在内在的区别,两者需要采用不同的策略来实现有效获取和应用。获取普通知识的主要挑战在于记忆和理解大量信息,因此需要在预训练阶段使用大规模语料以增强知识储备 (Roberts et al. 2020; Petroni et al., 2019; Dubey et al. 2024)。相比之下,数学知识包含的元素、概念、公理和定理数量较少,真正的挑战并非在于回忆相关知识,而在于如何利用这些知识进行推理或规划 (Hao et al., 2023)。
从以往的研究来看,似乎预训练阶段的继续训练(CPT)对数学推理能力的提升贡献较小。然而,最近的研究(如 Physics of LLM (Allen-Zhu & Li, 2023) 和 MiniCPM (Hu et al., 2024))强调了在预训练阶段“教会”模型如何利用已记忆的知识的重要性。这些发现对目前主要集中在预训练阶段通过记忆更多数学知识,而在后训练阶段发展推理能力的范式提出了质疑。因此,我们提出:在预训练阶段利用数学问题及其推理步骤——即问题求解数据——来教会模型如何应用已记忆的知识,而不仅仅是增加相关数据量,可能会显著提升数学推理能力。基于此,我们旨在探讨以下根本性研究问题(RQ):\
RQ1:在 CPT 阶段,提供问题求解数据能否比使用常规数学语料更有效地提升模型的数学推理能力?
RQ2:如果问题求解数据能够提升数学推理能力,那么来自同一来源的合成数据是否同样有效?哪种合成方法最为高效?\
RQ3:在使用相同问题求解数据的前提下,CPT 阶段与 SFT 阶段培养出的能力有何差别?导致这些差异的因素有哪些?
针对这三个研究问题,我们分别展开探讨。在第 3 节中,我们通过比较提供问题求解数据与不提供的效果,以及考察各种数学数据混合比例,探讨了 RQ1,从而得到结论 Result 1。在第 4 节中,我们针对 RQ2 考察了四种数据合成技术:response diversification(答案多样化)、query expansion(查询扩展)、retrospective enhancement(回顾性增强)和 tutorship amplification(导师放大),最终得到结论 Result 2。在第 5.1 节中,我们首先从整体角度鉴别了 CPT 阶段与 SFT 阶段利用问题求解数据培养数学能力的差异,随后在第 5.2 节和第 5.3 节中,我们进一步将问题求解数据基于数据分布和难度水平进行划分,探讨了这些差异的成因,最终得到结论 Result 3 至 Result 5。
Result 1:提供数学问题求解数据相比于常规数学语料能显著提升模型的数学能力;同时,问题求解数据所占比例越高,效果更佳。
Result 2:答案多样化、查询扩展和导师放大均为有效的数据合成技术,其中导师放大方法效果尤为突出。该方法利用教师模型根据学生模型的回答识别并纠正错误,旨在赋予模型自我纠错的能力。
Result 3:总体而言,虽然 SFT 能在一定程度上培养数学能力,但其效果明显不如 CPT。
Result 4:从数据分布的角度来看,无论是 SFT 还是 CPT 都主要培养与其训练数据分布一致的能力。然而,SFT 在域内(IND)的学习能力弱于 CPT;而对于域外(OOD)能力学习,结论则不太明确,仅观察到 SFT 更易受到数据分布扰动的影响。
Result 5:从难度水平角度看,提供更具挑战性的问题求解数据能更有效提升学习效果,这一优势在 CPT 中尤为明显,这可能是导致 CPT 与 SFT 学习能力差异的主要因素。因此,我们建议在 CPT 阶段准备更具挑战性的问题求解数据。
在解决这三个研究问题后,我们确定了最优策略组合,并将其应用于 Llama3-8B 模型 (Dubey et al., 2024),最终获得了高效的数学基础模型 MathGPT-8B。MathGPT-8B 超越了 DeepSeekMath-Base-7B (Shao et al., 2024) 和 Qwen2-Math-7B (Yang et al. 2024a) 等多款数学专用模型,其能力可与 Qwen2-Math-72B 及新近发布的 Qwen2.5-Math-7B 相媲美。我们仅引入 100B 数学 token,相当于 Qwen2.5-Math-7B 的 1 / 10 1/10 1/10,并在较弱的基础模型上进行了 CPT。这验证了我们提出的方法相比于现有范式是一种更高效提升数学能力的方法。此外,MathGPT-8B 仍然保留了强大的普通知识能力,这一点已通过 MMLU (Hendrycks et al., 2020) 基准测试得到验证。由于我们没有进行后训练,因此我们将发布 MathGPT-8B 的基础版本,供研究界在后续进行进一步后训练以增强其能力。
\section*{2 实验准备}
本节详细介绍实验准备工作,包括数据、基线模型和评价指标。
训练数据。训练数据分为三大类:(1) 普通语料,包括来自 RedPajama 的 ArXiv 子集中的科学文本、来自 AlgebraicStack (Azerbayev et al. 2023) 和 StarCoder (Li et al. 2023) 的代码数据集,以及 RedPajama 中 C4 和 Wikipedia 子集的自然语言数据,以防止灾难性遗忘并保持模型鲁棒性。(2) 数学语料,利用诸如 OpenWebMath (Paster et al. 2023) 等数学内容语料,以提升数学能力。(3) 问题求解数据,包括 NuminaMath (Li et al., 2024)、Lila (Mishra et al., 2022) 及内部专有数据,其中 1400 万条数据用于合成数据增强。我们的实验共使用了 483 亿个普通语料 token,137 亿个数学语料 token,72 亿个问题求解数据 token 以及 305.4 亿个合成数据 token。详细说明见附录 A.1。
基线模型。我们选用 Llama2 (Touvron et al., 2023) 作为基线模型,以确保结论的鲁棒性;因为该模型发布早于 OpenWebMath (Paster et al., 2023) 的发布。通过选择在最近数学语料尚未引入时已有的模型,我们有效降低了新语料污染的风险。更多详细信息见附录 A.2。
评价数据集。为减少数据污染并扩展能力评价,我们扩展了评价集,新增了 GAOKAO 与 ZHONGKAO 数据集,同时保留 GSM8K (Cobbe et al., 2021) 和 MATH (Hendrycks et al., 2021) 数据集。GAOKAO 和 ZHONGKAO 数据集均在 Llama2 之后开发,可以测量更大范围的能力。详细描述见附录 A.3。
去重与去污染。我们使用 MinHash 去重(Lee et al., 2022)框架,通过去除重复内容较多的文档来提升训练数据质量。该过程包括设置特定的字节阈值进行去重和去污染,有效剔除了受污染的文档,尤其是来自 OpenWebMath (Paster et al., 2023) 的文档。更多说明见附录 A.4。
评价指标。我们的评价采用三阶段过程:使用零样本和少样本提示进行模型推理、对答案进行比较以处理不规则输出、以及统计打分以确定准确率。在统计打分阶段,我们为每个数据集选择零样本和少样本中准确率更高的作为结果,以确保结果的可靠性和鲁棒性,因为有的模型在零样本设置下表现较好,有的则倾向于少样本设置。我们报告各数据集准确率的算术平均值。详细方法见附录 A.5。
\section*{3 利用问题求解数据在 CPT 阶段提升推理能力}
我们认为,与单纯通过记忆和理解更多数学知识(来自大规模语料)相比,预训练阶段数学知识习得的重点主要在于学会应用这些知识进行推理或规划。直观的做法便是提供对应的问题求解数据。因此,本节首先旨在验证 RQ1,即在 CPT 阶段提供问题求解数据是否能有效提升模型能力。这不仅验证了我们的核心观点,也为后续研究问题奠定基础。随后我们继续探讨问题求解数据的比例影响,以确定合适的数据混合比例,并验证提供问题求解数据的效率。
实验。我们设计了四个实验组,包括一个基线组和三个测试组。我们的目的是通过比较基线组与测试组来证明提供问题求解数据的有效性,并通过测试组之间的比较探索合适的数据混合比例。具体来说,基线组与测试组在所使用的数学数据总量上保持一致,其中基线组使用数学语料作为其数学数据;而测试组则使用数学语料和问题求解数据的混合数学数据,且三个测试组之间混合比例各不相同。具体数据如下:其中数据混合比例指普通数据与数学数据的混合比例,而数学数据混合比例反映数学语料与问题求解数据的混合比例。更多实验设计讨论见附录 C。
\begin{itemize}
\item Base1:使用 483 亿普通语料 token 和 147 亿数学语料 token,以 4:6 的比例混合。
\item Test1:使用 483 亿普通语料 token、75 亿数学语料 token和 72 亿问题求解数据 token,数据混合比例为 4:6,其中数学数据混合比例为 5:5。
\item Test2:与 Test1 相同,但数学数据混合比例为 3:7。
\item Test3:与 Test1 相同,但数学数据混合比例为 7:3。
\end{itemize}
训练细节。我们以 Llama2 (Touvron et al., 2023) 作为基线模型进行 CPT,训练 25,000 步,采用全局批量大小为 1024,序列长度为 4096 个 token。学习率先预热至 1 e − 4 1 \mathrm{e}-4 1e−4,随后使用余弦衰减调度 (Loshchilov & Hutter, 2022) 衰减到 1 e − 5 1 \mathrm{e}-5 1e−5。训练数据中 95% 用于训练,5% 用于验证。在完成 25,000 步训练后,我们选择验证集损失最低的检查点作为结果进行评价。
\includegraphics[max width=\textwidth, center]{2025_04_15_262c644527836053857ag-04}
Figure 1:四组随训练步数变化的平均准确率。
结果。如图 1 所示,蓝色曲线代表遵循当前训练范式的对照组,其结果表明,利用数学语料进行 CPT 能有效提升问题求解准确率。然而,与其他三条曲线相比,尽管 Base1 使用的 token 数量相同,但其数学能力提升的趋势和幅度均明显低于其他三个测试组。对于三个测试组,图 1 中的绿色曲线显示,随着训练步数增加,其平均准确率一直高于另外两组。值得注意的是,我们没有引入新 token,而仅仅是调整了数学数据混合比例。在附录 D 中,我们加入了额外的测试组 Test4,该组仅使用问题求解数据作为数学数据。尽管没有使用任何数学语料 token,其性能却与绿色曲线相当甚至更优。另外,我们还报告了四个评价集的准确率以进行进一步比较。由此,我们获得 Result 1:提供数学问题求解数据相比于常规数学语料能显著提升模型数学能力,且更高比例的问题求解数据效果更佳。
\section*{4 高效数据合成方法的探索}
在前几节中,Result 1 已突出表明了问题求解数据的有效性。然而,由于问题求解数据相比互联网数据数量有限,因此亟需高效的数据合成方法。此外,目前尚未充分研究在预训练阶段是否可以利用同一问题求解数据进一步进行合成以提升模型性能。为了解决这一问题以及 RQ2,我们探讨了四种数据合成方法:response diversification(答案多样化)、query expansion(查询扩展)、retrospective enhancement(回顾性增强)和 tutorship amplification(导师放大)。我们的目标是验证合成数据的有效性,并找出最有效的合成方法。下面我们简要介绍本研究中所使用的数据合成方法。\
Response Diversification 旨在通过生成多样化的推理路径来提升模型能力,常用方法如拒绝采样。由于该方法不改变答案,因此不需要额外的标注,易于实现。已有多种实现方式证明了答案多样化数据合成的有效性 (Yuan et al., 2023; Yu et al., 2023; Chen et al., 2024)。我们不采用采样后去重的方式,而要求模型通过两步来提升答案多样化效率:(1) 根据问题及原始答案生成两个不同的解答;(2) 从中选择最终答案正确的方案作为一个多样化训练样本。\
Query Expansion 旨在通过扩展问题集合来提升模型能力。然而,直接生成高质量问题极具挑战。已有的方法(例如 Yu et al., 2023 和 Mitra et al., 2024)借鉴重构(reshaping)概念,即基于已有问题和答案通过改写、反转陈述等技术生成新问题。新问题的合成主要关注:(1) 新生成问题的准确性,以及 (2) 对应答案的正确性。我们综合现有方法,强调以下关键点:要求 LLM 基于输入的原始问题和解答进行四步扩充:(1) 将问题转换为陈述,(2) 基于该陈述生成新问题,(3) 为新问题提供答案,(4) 对答案进行评估并解释推理过程。我们从以下三个主要方面提升质量:首先,提供原始问题和答案;其次,步骤 (1) 和 (2) 确保生成的问题合法且可解;第三,步骤 (3) 和 (4) 通过自我评估来判断新问题答案的质量。
Retrospective Enhancement 由 Ye et al. (2024) 提出,其观点认为直接让模型纠正错误具有益处。他们采用了一种低资源构建方法,该方法将后续步骤直接插入到前面的步骤中,使模型在“懊悔”时能够重试。该方法使用特殊的 [back] token 进行标识,因此称之为回顾性增强。该方法在 GSM8K 上使用小参数模型和少量预训练得到了验证。而在我们的情景中,存在两方面的关键区别:(1) 我们使用了更为多样化的问题集合,其中部分问题与 GSM8K 中较简单的问题有显著区别;(2) 我们在已有一定数学能力的主流模型上执行 CPT。我们旨在验证这一简单方法的有效性。
Tutorship Amplification 的灵感源于现实中教师指导学生纠正错误的做法。如 OpenAI (2024) 所证明,模型可以被训练来发现错误。这与 Ye et al. (2024) 的观点相符,即模型可以检测错误,但缺乏纠正错误的机会。导师放大模拟了真实的错误纠正过程。在此过程中,一个“强”模型作为教师帮助“弱”模型(代表学生)。在学生模型对问题生成解答后,教师模型进行以下操作:检查学生答案是否正确;若答案正确,则予以肯定;否则指出错误步骤,并从该点继续求解。我们希望该过程能实现三个目标:首先,构造可能出现的真实错误;其次,使模型习得自我评估和错误识别能力;第三,促使及时纠正已识别错误。我们相信这三要素将帮助模型学会自我纠错,从而提升推理准确率。
合成数据。我们首先从原始问题求解数据中筛选一子集,依据数据完整性和推理步骤数量构造种子集。随后,对该种子集应用上述四种数据合成方法。表 1 中给出了各方法产生的合成数据数量及相应 token 数的详细说明。
实验。我们以控制组 Base2 作为对照,该组由 483 亿普通语料 token、147 亿数学语料 token和 72 亿问题求解数据 token 组成。基于 Base2 所用数据,在其基础上额外加入由四种数据合成方法产生的 token,以构建四个实验组。这些模型均从原始 Llama2 基础模型上进行继续预训练。每种数据组合训练最多 25,000 步,并选择验证集损失收敛的检查点。最终准确率基于该检查点进行评价。其他训练参数与第 3 节一致。
\begin{center}
\begin{tabular}{llllllll}
\hline
Model & Num & Tokens & GSM8K & MATH & GAOKAO & ZHONGKAO & Average \
\hline
Base2 & - & - & 47.84 & 20.12 & 22.98 & 67.05 & 39.50 \
\hline
Res-Div & 14 , 018 , 544 14,018,544 14,018,544 & 6.82 B & 52.99 & 23.22 & 23.83 & 65.15 & 41.30 \
\hline
Query-Exp & 24 , 459 , 192 24,459,192 24,459,192 & 4.78 B & 51.25 & 23.08 & 27.23 & 69.13 & 42.67 \
\hline
Retro-Enh & 14 , 707 , 792 14,707,792 14,707,792 & 5.04 B & 45.11 & 21.72 & 22.98 & 66.67 & 39.12 \
\hline
Tutor-Amp & 11 , 942 , 328 11,942,328 11,942,328 & 13.90 B & 64.44 & 35.88 & 32.77 & 69.32 & 50.60 \
\hline
\end{tabular}
\end{center}
表 1:对照组与使用不同合成数据方法的四个实验组在四个评价集上的性能对比。“Num”表示使用的问题求解题目及对应解答的数量,“Tokens”表明总 token 数。模型缩写分别代表:Res-Div(答案多样化)、Query-Exp(查询扩展)、Retro-Enh(回顾性增强)和 Tutor-Amp(导师放大)。
结果。表 1 展示了四种合成数据组合的实验结果。从中可以得出 Result 2:答案多样化、查询扩展和导师放大均为有效的数据合成技术,其中导师放大效果尤为显著。相反,回顾性增强似乎影响甚微。我们推测这可能是因为构造的错误数据并非基于实际采样,发生概率较低,从而抑制了模型错误检测及纠正能力的学习。我们还注意到查询扩展和答案多样化提升效果有限。对此我们提出一种假设:在数据生成过程中,模型的自我评估可能未能识别出自身错误,从而限制了合成数据的质量。至于导师放大的有效性,我们提出两点假设:首先,模型通过导师放大数据习得了一套自查、错误检测和纠正的推理框架;其次,该数据有助于学习如何利用知识正确解决问题,通过纠错来增强推理能力。
\section*{5 CPT 阶段与 SFT 阶段的能力习得比较}
在前两节中,我们已经证明在 CPT 阶段提供问题求解数据能高效地教会模型应用数学知识并提升推理能力。然而,在 SFT 阶段培养数学推理能力又有何不同呢?本节首先验证问题求解数据使用阶段的改变确实提升了模型最终能力,而不仅仅是数据不同导致的差异。接着,我们从数据分布和难度两个角度探讨了 CPT 和 SFT 阶段数学学习能力的差异来源。
\subsection*{5.1 能力习得比较}
本节探讨了在不同阶段使用问题求解数据(CPT 与 SFT)对模型最终能力的显著影响。我们共有 72 亿问题求解数据,可分配在 CPT 或 SFT 阶段。此外,我们另外抽取 0.72 亿问题求解数据用于 1 % 1\% 1%-SFT,以赋予模型指令跟随能力。我们设计以下实验设置以比较 CPT 与 SFT 阶段能力习得的差异:
\begin{itemize}
\item Base1:如第 3 节所述,使用 483 亿普通语料 token 和 147 亿数学语料 token 进行 CPT。
\item Base2:在 CPT 阶段使用 483 亿普通语料 token、75 亿数学语料 token和 72 亿问题求解数据 token。
\item Base1-SFT:基于 Base1 进行 SFT,使用 72 亿问题求解数据。
\item Base1-1%SFT:基于 Base1 进行 SFT,仅使用 0.72 亿问题求解数据。
\item Base2-1%SFT:基于 Base2 进行 SFT,仅使用 0.72 亿问题求解数据。
\end{itemize}
需要注意的是,我们在 Base1 与 Base2 上均使用 1% 的问题求解数据进行 SFT。该设置可以隔离指令跟随能力的提升影响,从而评估在 CPT 阶段引入问题求解数据对数学推理能力带来的真实提升。
实验细节。在 SFT 阶段,我们设置批量大小为 256,学习率采用余弦调度从 1e-5 衰减至 1e-6。训练 3 个周期,确保训练损失收敛。收敛后,我们从 10 个检查点中选择最优结果进行报告,该检查点通常出现在 2 个周期左右。更多实验设计讨论见附录 C。
\includegraphics[max width=\textwidth, center]{2025_04_15_262c644527836053857ag-07}
Figure 2:CPT 阶段与 SFT 阶段习得能力的比较
结果。四个数据集的评价结果见附录 E,其平均准确率如图 2 所示。首先,我们观察红色与蓝色阴影区域,其中少量 SFT 数据在 Base1 与 Base2 上带来了类似的提升。从评价结果来看,该提升源于模型原本不一致且重复输出的大幅减少。我们认为这是由于 SFT 的监督方法所致,这引出了一个有趣的结论:少量 SFT 数据即可有效提升模型的指令跟随能力。
接下来,我们在排除指令跟随能力影响后进行对比,此时,记作 SFT Δ \Delta Δ 与 CPT Δ 2 \Delta_{2} Δ2 分别代表在 SFT 与 CPT 阶段使用相同数据所获得的数学推理能力提升。结果显示,SFT 阶段获得的能力提升仅约为 CPT 阶段的 60% 。另外,对比 Base1-SFT 与 Base2,尽管二者使用相同数据,Base1-SFT因获得了指令跟随能力,其表现仍然逊于 Base2。因此,我们得出 Result 3:总体而言,虽然 SFT 能在一定程度上培养数学能力,但其效果明显不如 CPT。
为了更好地理解 SFT 对能力习得的影响,我们增加了三个额外实验组,分别使用 10%、20% 以及 50% 的问题求解数据进行 SFT,并与 Base1、1% SFT 及 100% SFT 进行比较,分析 SFT 数据量对推理提升效果的影响。结果如图 6 所示。我们观察到在 1 % 1\% 1% SFT 数据量处平均准确率有显著提升,之后数据量与准确率提升呈对数线性关系。这进一步验证了少量 SFT 数据能够提升模型指令跟随能力。此外,增加 SFT 数据量可能继续以对数形式提升模型的推理能力。
\subsection*{5.2 不同数据分布的影响}
在上一节中,我们观察到 SFT 阶段所习得推理能力显著弱于 CPT。在本节中,我们旨在探讨这一差异的根源。我们的直觉认为,数据分布可能在不同阶段对能力学习产生不同的影响,CPT 可能有助于提升域外(OOD)的表现。然而,我们的发现与这一假设相悖:无论是 CPT 还是 SFT,其主要培养的均为与其训练数据分布一致的能力。
实验。我们通过依据评价集对训练数据进行划分来设计实验,具体来说,我们选择一个评价集来代表域内(IND)能力,其余的数据集均视为域外(OOD)。相应地,我们仅保留与 IND 能力相匹配的训练数据部分。不过需要注意两个关键问题:首先,在去污染过程中,我们已排除了与评价集重叠的数据;其次,数学能力的涵盖范围本质上在不同领域间存在重叠。因此,很难将训练数据与特定能力完全匹配。因此,我们利用原始问题求解数据中的知识点标签,从中分离出对应于中学能力的 8.3 亿 token(对应 ZHONGKAO)和对应于高中能力的 8.9 亿 token(对应 GAOKAO)。域外能力则由与这些 IND 能力不匹配的其他评价集来表示。更多实验设计讨论见附录 C。具体的实验设计如下:
\begin{itemize}
\item Base1:与第 3 节描述一致。使用 483 亿普通语料 token 和 147 亿数学语料 token 进行 CPT。
\item Middle-school-SFT:在 Base1 上使用 8.3 亿中学数据进行 SFT。
\item Middle-school-CPT:在 Base1 数据基础上加入中学数据进行 CPT。
\item High-school-SFT:在 Base1 上使用 8.9 亿高中数据进行 SFT。
\item High-school-CPT:在 Base1 数据基础上加入高中数据进行 CPT。
\end{itemize}
\begin{center}
\begin{tabular}{llllll}
\hline
Model & GSM8K & MATH & GAOKAO & ZHONGKAO & Average \
\hline
Base1 & 28.20 & 9.48 & 8.09 & 30.68 & 19.11 \
\hline
Middle-school-SFT & 22.67 ( − 5.53 ) 22.67(-5.53) 22.67(−5.53) & 16.3 6 ( + 6.88 ) 16.36_{(+6.88)} 16.36(+6.88) & 10.2 1 ( + 2.12 ) 10.21_{(+2.12)} 10.21(+2.12) & 52.28 ( + 21.60 ) \mathbf{52.28}{ }_{(+21.60)} 52.28(+21.60) & 25.38 ( + 6.27 ) 25.38(+6.27) 25.38(+6.27) \
\hline
Middle-school-CPT & 29.4 2 ( + 1.22 ) 29.42_{(+1.22)} 29.42(+1.22) & 15.0 4 ( + 5.56 ) 15.04_{(+5.56)} 15.04(+5.56) & 8.0 9 ( 0.00 ) 8.09_{(0.00)} 8.09(0.00) & 54.71 ( + 24.03 ) \mathbf{54.71}(+\mathbf{24.03}) 54.71(+24.03) & 26.81 ( + 7.70 ) 26.81(+7.70) 26.81(+7.70) \
\hline
High-school-SFT & 19.1 1 ( − 9.09 ) 19.11_{(-9.09)} 19.11(−9.09) & 13.4 8 ( + 4.00 ) 13.48_{(+4.00)} 13.48(+4.00) & 16.60 ( + 8.51 ) \mathbf{16.60}(+8.51) 16.60(+8.51) & 36.7 8 ( + 6.10 ) 36.78_{(+6.10)} 36.78(+6.10) & 21.4 9 ( + 2.38 ) 21.49_{(+2.38)} 21.49(+2.38) \
\hline
High-school-CPT & 23.9 6 ( − 4.24 ) 23.96_{(-4.24)} 23.96(−4.24) & 13.8 2 ( + 4.34 ) 13.82_{(+4.34)} 13.82(+4.34) & 22.98 ( + 14.89 ) \mathbf{22.98}(+\mathbf{14.89}) 22.98(+14.89) & 34.1 9 ( + 3.51 ) 34.19_{(+3.51)} 34.19(+3.51) & 23.7 4 ( + 4.63 ) 23.74_{(+4.63)} 23.74(+4.63) \
\hline
\end{tabular}
\end{center}
表 2:基于不同数据分布下能力学习的分析
结果。如表 2 所示,对于由粗体显示的 IND 能力,CPT 阶段的学习提升始终明显大于 SFT 阶段。这一效果在对于更具挑战性的高中水平知识的学习中尤为明显。此外,对于 OOD 能力,SFT 阶段的学习受到的干扰明显较大。这在 GSM8K 上表现尤为明显(参见附录 B 中的数据分布与能力维度图), GSM8K 具有最大的数据分布差异。SFT 后,模型在 OOD 任务上的性能比 CPT 下受损更多。因此,我们得出 Result 4:无论是 SFT 还是 CPT,均主要培养与其训练数据分布一致的能力。但是,SFT 在 IND 学习能力上弱于 CPT;而对于 OOD 能力的学习,仅观察到 SFT 比 CPT 更容易受到数据分布扰动的影响。
\subsection*{5.3 不同难度水平的影响}
在上一节中,虽然我们阐明了无论 CPT 或 SFT 均涉及域内能力学习,但 SFT 学习表现为何弱于 CPT 仍不明确。然而,在 Result 4 中,对于高中训练数据的结论比中学更明显,这促使我们探讨在不同问题难度数据下,CPT 与 SFT 阶段能力习得的差异。
实验。我们选取问题求解数据中的 50 亿 token 子集,并根据解答推理步骤数将其分类:需要 1-3 步的归为简单,4-7 步归为中等,8 步及以上归为困难。样本分布分别占整体数据的 36.0%、38.4% 和 25.6%,而 token 数分别占 23.0%、36.0% 和 41.0%。考虑到这种分类方法的不可避免的不精确性,我们仅选取简单数据和困难数据进行 CPT 与 SFT 的对比实验。更多实验设计讨论见附录 C。实验组设计如下:
\begin{itemize}
\item Base1:如第 3 节所述,使用 483 亿普通语料 token 和 147 亿数学语料 token 进行 CPT。
\item Easy-SFT:在 Base1 上使用简单数据子集进行 SFT。
\item Easy-CPT:在 Base1 数据基础上加入简单数据子集进行 CPT。
\item Hard-SFT:在 Base1 上使用困难数据子集进行 SFT。
\item Hard-CPT:在 Base1 数据基础上加入困难数据子集进行 CPT。
\end{itemize}
\begin{center}
\begin{tabular}{llllll|lll}
\hline
Model & GSM8K & MATH & GAOKAO & ZHONGKAO & Average & Easy & Medium & Hard \
\hline
Base1 & 28.20 & 9.48 & 8.09 & 30.68 & 19.11 & 14.86 & 6.69 & 4.85 \
\hline
Easy-SFT & 31.31 & 14.46 & 14.04 & 48.30 & 27.03 & 22.5 2 ( + 7.66 ) 22.52_{(+7.66)} 22.52(+7.66) & 10.6 8 ( + 4.00 ) 10.68_{(+4.00)} 10.68(+4.00) & 6.9 4 ( + 2.09 ) 6.94_{(+2.09)} 6.94(+2.09) \
\hline
Easy-CPT & 37.98 & 15.70 & 17.02 & 52.46 & 30.79 & 27.6 1 ( + 12.75 ) 27.61_{(+12.75)} 27.61(+12.75) & 13.3 3 ( + 6.64 ) 13.33_{(+6.64)} 13.33(+6.64) & 6.2 7 ( + 1.42 ) 6.27_{(+1.42)} 6.27(+1.42) \
\hline
Hard-SFT & 31.39 & 17.40 & 15.32 & 54.55 & 29.66 & 24.3 7 ( + 9.51 ) 24.37_{(+9.51)} 24.37(+9.51) & 11.9 3 ( + 5.24 ) 11.93_{(+5.24)} 11.93(+5.24) & 6.8 4 ( + 1.99 ) 6.84_{(+1.99)} 6.84(+1.99) \
\hline
Hard-CPT & 45.79 & 23.96 & 26.38 & 69.89 & 41.51 & 35.7 8 ( + 20.92 ) 35.78_{(+20.92)} 35.78(+20.92) & 20.1 7 ( + 13.48 ) 20.17_{(+13.48)} 20.17(+13.48) & 9.3 2 ( + 4.47 ) 9.32_{(+4.47)} 9.32(+4.47) \
\hline
\end{tabular}
\end{center}
表 3:CPT 与 SFT 模型在不同难度水平下性能的比较。表中显示了平均表现以及在简单、中等和困难数据子集上的具体表现。
结果。表 3 左半部分(由垂直线分隔)显示,无论是 SFT 模型还是 CPT 模型,CPT 模型始终表现更优,其中 Hard-CPT 相较于 Easy-CPT 的相对提升更为显著,这些提升不仅局限于困难领域的准确率,且体现在所有数据集上。此外,无论 SFT 或 CPT,在同一训练阶段中使用困难数据均比使用简单数据获得更好效果。由此可见,Result 5:提供更具挑战性的问题求解数据能显著提升学习效果,并且这一优势在 CPT 中尤为明显,这可能是导致 CPT 与 SFT 学习能力差异的主要原因。因此,在计算资源有限的情况下,我们建议在 CPT 阶段准备更具挑战性的问题求解数据。\
表 3 右半部分显示,无论 SFT 或 CPT 模型在简单问题上获得的提升最高,而随着问题难度增加,提升幅度依次下降。例如,Easy-SFT 与 Easy-CPT 在简单数据上分别提升 +7.66 与 +12.75,而在困难数据上仅提升 +2.09 与 +1.42。同样,Hard-SFT 与 Hard-CPT 分别在简单数据上获得最大提升(+9.51 和 +20.92),而在困难数据上仅分别提升 +1.99 和 +4.47。这些模式表明,不论训练数据难度如何,SFT 与 CPT 均主要侧重于学习求解较简单、步骤较少的问题。
\section*{6 训练数学专用强模型}
为进一步验证我们实验结果的有效性,我们基于 Llama3-8B (Dubey et al., 2024) 训练了一款数学专用强模型,命名为 MathGPT-8B。我们遵循前述三个 RQ 得出的结论:(1)保持数学语料与问题求解数据的比例为 3:7;(2)利用 Query Expansion、Response Diversification 和 Tutorship Amplification 产生的合成数据,其中重点扩充数据采用最有效的 Tutorship Amplification 方法;(3)筛选并扩展原始数据,重点关注推理步骤多于 5 步的问题,利用这些作为种子数据生成更多合成数据。除此之外,我们还将新发布的数学语料(Han et al., 2024)纳入训练。最终,我们使用 396 亿普通语料 token、467 亿数学语料 token 以及 511 亿问题求解数据和合成数据 token 训练 MathGPT-8B 25,000 步,采用全局批量大小 1024,序列长度 8192 个 token。学习率预热至 1 e − 4 1 \mathrm{e}-4 1e−4 后,使用余弦调度衰减至 1 e − 5 1 \mathrm{e}-5 1e−5。
结果。如表 4 所示,与基础模型相比,我们显著增强了 Llama3-8B 的基础能力,甚至超越了 Llama3.1-70B 和 Qwen2-72B 这类参数超过 70 亿的更大模型。此外,我们使用 Gao et al. (2024) 提出的 MMLU (Hendrycks et al. 2020) 基准对模型进行了评价,MathGPT-8B 得分为 0.6222,而 Llama3-8B 为 0.6211,这表明它在保持普通知识能力的同时提升了数学推理能力。\
与数学专用的基础模型相比,MathGPT-8B 超越了 DeepSeekMath-Base-7B (Shao et al., 2024) 和 Qwen2-Math-7B (Yang et al. 2024a),并且其能力可与 Qwen2-Math-72B 和最近发布的 Qwen2.5-Math-7B (Yang et al. 2024b) 相媲美。与 Qwen2.5-Math-7B 相比,MathGPT-8B 仅使用了 1400 亿 token(其中数学相关 token 为 1000 亿),而 Qwen2.5-Math-7B 使用了 1 万亿 token(据报道)。此外,MathGPT-8B 起始于一个较弱的基础模型。这些结果验证了我们提出的方法在提升数学能力方面比现有范式更高效。关于相关工作的进一步讨论见附录 F。考虑到我们没有进行完整的后训练过程,因此我们发布的是模型的基础版本,供研究界在后续根据需要进行进一步后训练以增强其能力。
\begin{center}
\begin{tabular}{lccccc}
\hline
Model & GSM8K & MATH & GAOKAO & ZHONGKAO & Average \
\hline
\multicolumn{6}{c}{通用模型} \
\hline
Llama3-8B & 58.38 & 17.04 & 13.62 & 42.61 & 32.91 \
Llama3-70B & 82.34 & 38.42 & 28.09 & 64.02 & 53.21 \
Llama3.1-8B & 56.79 & 19.70 & 11.49 & 44.70 & 33.17 \
Llama3.1-70B & 81.73 & 39.66 & 31.06 & 64.77 & 54.31 \
Qwen2-7B & 80.44 & 47.82 & 27.23 & 70.45 & 56.49 \
Qwen2-72B & 86.58 & 56.88 & 45.11 & 73.67 & 65.56 \
Qwen2.5-7B & 84.61 & 53.22 & 45.53 & 80.30 & 65.92 \
Qwen2.5-72B & 90.60 & 59.38 & 56.60 & 82.95 & 72.38 \
\hline
\multicolumn{6}{c}{数学专用模型} \
\hline
LLEMMA-7B & 41.47 & 18.94 & 14.89 & 45.08 & 30.10 \
DeepSeekMath-Base-7B & 65.73 & 33.40 & 23.83 & 62.69 & 46.41 \
Qwen2-Math-7B & 80.67 & 53.02 & 42.13 & 77.08 & 63.22 \
Qwen2-Math-72B & 88.63 & 61.88 & 51.91 & 81.25 & 70.92 \
Qwen2.5-Math-7B & 85.44 & 59.10 & 53.19 & 78.79 & 69.13 \
Qwen2.5-Math-72B & 88.70 & 67.10 & 53.62 & 81.63 & 72.76 \
(MathGPT-8B) & 81.20 \mathbf{81.20} 81.20 & 60.38 \mathbf{60.38} 60.38 & 60.43 \mathbf{60.43} 60.43 & 80.49 \mathbf{80.49} 80.49 & 70.62 \mathbf{70.62} 70.62 \
\hline
\end{tabular}
\end{center}
表 4:各模型在 GSM8K、MATH、GAOKAO、ZHONGKAO 四个数据集上的性能指标 (通用模型及数学专用模型)
\section*{7 结论}
本研究探讨了在预训练阶段采用替代策略以提升 LLMs 数学推理能力的问题。我们的发现促成了 MathGPT-8B 的开发,这是一款具有竞争力的模型,不仅超越了多数 7B 模型,其能力亦能与体量远大于 7B 的模型相媲美,同时所使用的 token 数量更少。未来工作应在两个关键方向扩展:首先,需要进一步改进数据合成方法。虽然我们证明了合成数据的有效性,但目前的方法仍较为初级;其次,应探讨后训练过程中对齐过程的作用及影响。对这些问题的研究将有助于进一步提升模型的数学推理能力。
\section*{致谢}
本研究部分得到了中国国家重点研发计划(项目号 2022YFC3303600)的资助;部分得到了国家自然科学基金(项目号 62477025)的支持;部分得到了广东高校智能教育重点实验室、暨南大学(2022LSYS003)的支持;部分得到了北京市科学技术项目(项目号 Z241100001324011)的资助。
\section*{参考文献}
Zeyuan Allen-Zhu and Yuanzhi Li. Physics of language models: Part 3.1, knowledge storage and extraction. In Forty-first International Conference on Machine Learning, 2023.
Zhangir Azerbayev, Hailey Schoelkopf, Keiran Paster, Marco Dos Santos, Stephen Marcus McAleer, Albert Q Jiang, Jia Deng, Stella Biderman, and Sean Welleck. Llemma: An open language model for mathematics. In The Twelfth International Conference on Learning Representations, 2023.
Wenhu Chen, Xueguang Ma, Xinyi Wang, and William W Cohen. Program of thoughts prompting: Disentangling computation from reasoning for numerical reasoning tasks. Transactions on Machine Learning Research, 2022.
Zui Chen, Yezeng Chen, Jiaqi Han, Zhijie Huang, Ji Qi, and Yi Zhou. An empirical study of data ability boundary in llms’ math reasoning. arXiv preprint arXiv:2403.00799, 2024.
Karl Cobbe, Vineet Kosaraju, Mohammad Bavarian, Mark Chen, Heewoo Jun, Lukasz Kaiser, Matthias Plappert, Jerry Tworek, Jacob Hilton, Reiichiro Nakano, et al. Training verifiers to solve math word problems. arXiv preprint arXiv:2110.14168, 2021.
Hanze Dong, Wei Xiong, Bo Pang, Haoxiang Wang, Han Zhao, Yingbo Zhou, Nan Jiang, Doyen Sahoo, Caiming Xiong, and Tong Zhang. Rlhf workflow: From reward modeling to online rlhf. arXiv preprint arXiv:2405.07863, 2024.
Abhimanyu Dubey, Abhinav Jauhri, Abhinav Pandey, Abhishek Kadian, Ahmad Al-Dahle, Aiesha Letman, Akhil Mathur, Alan Schelten, Amy Yang, Angela Fan, et al. The llama 3 herd of models. arXiv preprint arXiv:2407.21783, 2024.
Jiayi Fu, Lei Lin, Xiaoyang Gao, Pengli Liu, Zhengzong Chen, Zhirui Yang, Shengnan Zhang, Xue Zheng, Yan Li, Yuliang Liu, et al. Kwaiyiimath: Technical report. arXiv preprint arXiv:2310.07488, 2023.
Leo Gao, Jonathan Tow, Baber Abbasi, Stella Biderman, Sid Black, Anthony DiPofi, Charles Foster, Laurence Golding, Jeffrey Hsu, Alain Le Noac’h, Haonan Li, Kyle McDonell, Niklas Muennighoff, Chris Ociepa, Jason Phang, Laria Reynolds, Hailey Schoelkopf, Aviya Skowron, Lintang Sutawika, Eric Tang, Anish Thite, Ben Wang, Kevin Wang, and Andy Zou. A framework for few-shot language model evaluation, 2024.
Zhibin Gou, Zhihong Shao, Yeyun Gong, Yujiu Yang, Minlie Huang, Nan Duan, Weizhu Chen, et al. Tora: A tool-integrated reasoning agent for mathematical problem solving. In The Twelfth International Conference on Learning Representations, 2023.
Xiaotian Han, Yiren Jian, Xuefeng Hu, Haogeng Liu, Yiqi Wang, Qihang Fan, Yuang Ai, Huaibo Huang, Ran He, Zhenheng Yang, et al. Infimm-webmath-40b: Advancing multimodal pretraining for enhanced mathematical reasoning. In The 4th Workshop on Mathematical Reasoning and AI at NeurIPS’24, 2024.
Shibo Hao, Yi Gu, Haodi Ma, Joshua Hong, Zhen Wang, Daisy Wang, and Zhiting Hu. Reasoning with language model is planning with world model. In Proceedings of the 2023 Conference on Empirical Methods in Natural Language Processing, pp. 8154-8173, 2023.
Dan Hendrycks, Collin Burns, Steven Basart, Andy Zou, Mantas Mazeika, Dawn Song, and Jacob Steinhardt. Measuring massive multitask language understanding. In The Eighth International Conference on Learning Representations, 2020.
Dan Hendrycks, Collin Burns, Saurav Kadavath, Akul Arora, Steven Basart, Eric Tang, Dawn Song, and Jacob Steinhardt. Measuring mathematical problem solving with the math dataset. In Thirty-fifth Conference on Neural Information Processing Systems Datasets and Benchmarks Track, 2021.
Shengding Hu, Yuge Tu, Xu Han, Chaoqun He, Ganqu Cui, Xiang Long, Zhi Zheng, Yewei Fang, Yuxiang Huang, Weilin Zhao, et al. Minicpm: Unveiling the potential of small language models with scalable training strategies. arXiv preprint arXiv:2404.06395, 2024.
Takeshi Kojima, Shixiang Shane Gu, Machel Reid, Yutaka Matsuo, and Yusuke Iwasawa. Large language models are zero-shot reasoners. Advances in neural information processing systems, 35:22199-22213, 2022.
Xin Lai, Zhuotao Tian, Yukang Chen, Senqiao Yang, Xiangru Peng, and Jiaya Jia. Step-dpo: Stepwise preference optimization for long-chain reasoning of llms. arXiv preprint arXiv:2406.18629, 2024.
Katherine Lee, Daphne Ippolito, Andrew Nystrom, Chiyuan Zhang, Douglas Eck, Chris CallisonBurch, and Nicholas Carlini. Deduplicating training data makes language models better. In Proceedings of the 60th Annual Meeting of the Association for Computational Linguistics, pp. 8424-8445, 2022.
Jia Li, Edward Beeching, Lewis Tunstall, Ben Lipkin, Roman Soletskyi, Shengyi Huang, Kashif Rasul, Longhui Yu, Albert Q Jiang, Ziju Shen, et al. Numinamath: The largest public dataset in ai4maths with 860 k pairs of competition math problems and solutions. Hugging Face repository, 13:9, 2024.
Raymond Li, Yangtian Zi, Niklas Muennighoff, Denis Kocetkov, Chenghao Mou, Marc Marone, Christopher Akiki, LI Jia, Jenny Chim, Qian Liu, et al. Starcoder: may the source be with you! Transactions on Machine Learning Research, 2023.
Ilya Loshchilov and Frank Hutter. Sgdr: Stochastic gradient descent with warm restarts. In International Conference on Learning Representations, 2022.
Haipeng Luo, Qingfeng Sun, Can Xu, Pu Zhao, Jianguang Lou, Chongyang Tao, Xiubo Geng, Qingwei Lin, Shifeng Chen, and Dongmei Zhang. Wizardmath: Empowering mathematical reasoning for large language models via reinforced evol-instruct. arXiv preprint arXiv:2308.09583, 2023.
Swaroop Mishra, Matthew Finlayson, Pan Lu, Leonard Tang, Sean Welleck, Chitta Baral, Tanmay Rajpurohit, Oyvind Tafjord, Ashish Sabharwal, Peter Clark, et al. Lila: A unified benchmark for mathematical reasoning. In Proceedings of the 2022 Conference on Empirical Methods in Natural Language Processing, pp. 5807-5832, 2022.
Arindam Mitra, Hamed Khanpour, Corby Rosset, and Ahmed Awadallah. Orca-math: Unlocking the potential of slms in grade school math. arXiv preprint arXiv:2402.14830, 2024.
OpenAI. Finding GPT-4’s mistakes with GPT-4, 2024. URL \href{https://openai.com/index/}{https://openai.com/index/} finding-gpt4s-mistakes-with-gpt-4/.
Keiran Paster, Marco Dos Santos, Zhangir Azerbayev, and Jimmy Ba. Openwebmath: An open dataset of high-quality mathematical web text. In The Twelfth International Conference on Learning Representations, 2023.
Fabio Petroni, Tim Rocktäschel, Sebastian Riedel, Patrick Lewis, Anton Bakhtin, Yuxiang Wu, and Alexander Miller. Language models as knowledge bases? In Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing and the 9th International Joint Conference on Natural Language Processing, pp. 2463-2473, 2019.
Adam Roberts, Colin Raffel, and Noam Shazeer. How much knowledge can you pack into the parameters of a language model? In Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing, pp. 5418-5426, 2020.
Zhihong Shao, Peiyi Wang, Qihao Zhu, Runxin Xu, Junxiao Song, Mingchuan Zhang, YK Li, Yu Wu, and Daya Guo. Deepseekmath: Pushing the limits of mathematical reasoning in open language models. arXiv preprint arXiv:2402.03300, 2024.
Hugo Touvron, Louis Martin, Kevin Stone, Peter Albert, Amjad Almahairi, Yasmine Babaei, Nikolay Bashlykov, Soumya Batra, Prajjwal Bhargava, Shruti Bhosale, et al. Llama 2: Open foundation and fine-tuned chat models. arXiv preprint arXiv:2307.09288, 2023.
Maurice Weber, Daniel Y Fu, Quentin Gregory Anthony, Yonatan Oren, Shane Adams, Anton Alexandrov, Xiaozhong Lyu, Huu Nguyen, Xiaozhe Yao, Virginia Adams, et al. Redpajama: an open dataset for training large language models. In The Thirty-eight Conference on Neural Information Processing Systems Datasets and Benchmarks Track, 2023.
Can Xu, Qingfeng Sun, Kai Zheng, Xiubo Geng, Pu Zhao, Jiazhan Feng, Chongyang Tao, and Daxin Jiang. Wizardlm: Empowering large language models to follow complex instructions. arXiv preprint arXiv:2304.12244, 2023.
An Yang, Baosong Yang, Binyuan Hui, Bo Zheng, Bowen Yu, Chang Zhou, Chengpeng Li, Chengyuan Li, Dayiheng Liu, Fei Huang, et al. Qwen2 technical report. arXiv preprint arXiv:2407.10671, 2024a.
An Yang, Beichen Zhang, Binyuan Hui, Bofei Gao, Bowen Yu, Chengpeng Li, Dayiheng Liu, Jianhong Tu, Jingren Zhou, Junyang Lin, et al. Qwen2.5-math technical report: Toward mathematical expert model via self-improvement. arXiv preprint arXiv:2409.12122, 2024b.
Tian Ye, Zicheng Xu, Yuanzhi Li, and Zeyuan Allen-Zhu. Physics of language models: Part 2.2, how to learn from mistakes on grade-school math problems. arXiv preprint arXiv:2408.16293, 2024.
Shuo Yin, Weihao You, Zhilong Ji, Guoqiang Zhong, and Jinfeng Bai. Mumath-code: Combining tool-use large language models with multi-perspective data augmentation for mathematical reasoning. arXiv preprint arXiv:2405.07551, 2024.
Huaiyuan Ying, Shuo Zhang, Linyang Li, Zhejian Zhou, Yunfan Shao, Zhaoye Fei, Yichuan Ma, Jiawei Hong, Kuikun Liu, Ziyi Wang, et al. Internlm-math: Open math large language models toward verifiable reasoning. arXiv preprint arXiv:2402.06332, 2024.
Longhui Yu, Weisen Jiang, Han Shi, YU Jincheng, Zhengying Liu, Yu Zhang, James Kwok, Zhenguo Li, Adrian Weller, and Weiyang Liu. Metamath: Bootstrap your own mathematical questions for large language models. In The Twelfth International Conference on Learning Representations, 2023.
Zheng Yuan, Hongyi Yuan, Chengpeng Li, Guanting Dong, Chuanqi Tan, and Chang Zhou. Scaling relationship on learning mathematical reasoning with large language models. arXiv preprint arXiv:2308.01825, 2023.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section*{附录}
\section*{A 详细实验准备}
\section*{A.1 训练数据详情}
本研究中使用的训练数据分为以下三大类:(1) 普通语料,包括来自 RedPajama 的 ArXiv 子集中的科学文本、来自 AlgebraicStack (Azerbayev et al., 2023) 和 StarCoder (Li et al., 2023) 的代码数据集,以及来自 RedPajama 的 C4 与 Wikipedia 子集的自然语言数据。引入普通数据有助于防止模型在进行领域专精训练时出现灾难性遗忘;同时,保持普遍知识基底确保模型在各类任务上的鲁棒性。(2) 数学语料,旨在提升模型的数学能力,主要包含从 CommonCrawl 网页中提取的数学内容。主要目标是使预训练模型具备数学相关的基础知识,包括术语、定理、证明等。为此,我们利用 OpenWebMath (Paster et al., 2023) ——一项已被证明能有效提升数学能力的资源 (Azerbayev et al., 2023)。(3) 问题求解数据。我们认为该数据能更高效地提升模型的推理能力。我们收集了 2500 万条问题求解数据,包括来自开源资源如 NuminaMath (Li et al., 2024) 和 Lila (Mishra et al., 2022) 的数据,以及内部专有数据。其中 1400 万条作为种子数据用于增强生成合成数据。整体来说,基于 Llama2 (Touvron et al., 2023) 在 RQ 实验上,我们分别使用了 483 亿普通语料 token、137 亿数学语料 token、72 亿问题求解数据 token 以及 305.4 亿合成数据 token。
\section*{A.2 基线模型选择}
基线模型的选择对我们的结论具有关键影响,因为它直接影响结论的可靠性与适用性。为确保我们关于研究问题的探索能够产生具有实践价值的见解,我们基于主流模型开展研究。由于 OpenWebMath 可能已广泛被最新 LLMs 引入,使用该数学语料可能达不到预期效果,因此我们选择 Llama2 (Touvron et al., 2023) 作为基线模型,因为其发布时间早于 OpenWebMath (Paster et al., 2023) 的发布。此举旨在增强我们结论的鲁棒性。
\section*{A.3 评价数据集}
考虑到既要降低数据污染风险,又需拓宽评价能力范围,我们扩展了评价集,新增了 GAOKAO 和 ZHONGKAO 数据集,此外还保留了 GSM8K (Cobbe et al., 2021) 和 MATH (Hendrycks et al. 2021) 数据集。GAOKAO 数据集包括 GAOKAO-2023 与 GAOKAO-2024,来源于最新的中国高考。我们将问题格式转换为数学文字题,并将问题进行翻译,经过审核后保留 235 条题目。类似地,ZHONGKAO 数据集来源于 2023 年中考,包含 658 道翻译后的数学文字题。这两个数据集均在 Llama2 (Touvron et al., 2023) 发布之后创建,从而增强了我们的结论。新增的数据集在普通知识、数学知识以及推理步骤维度上提供了不同的考察。GAOKAO 与 MATH 类似,但需要更多普通知识;ZHONGKAO 与 GSM8K 类似,但可能需要更多数学知识且推理步骤更少。详细的能力维度见附录 B。本研究相信扩展后的评价集将带来更全面的评估,并为后续改进提供有价值的参考。
\section*{A.4 去重与去污染}
我们使用 MinHash 去重框架(Lee et al., 2022)来去除训练数据中重复文本超过某一阈值的整篇文档。具体而言,我们设置去重阈值为 2048 字节以提升训练数据质量。另外,我们设置阈值为 100 字节,以移除训练集中与评价数据集(包括其子集)重叠超过 100 字节的部分。我们认为这可以解决因简单改写而引起的部分污染。(值得注意的是,对于 OpenWebMath (Paster et al., 2023) 的案例,我们剔除了 2594 篇受污染的文档,这对我们初步实验的结论产生了显著影响。)
\section*{A.5 评价指标}
评价过程包含三个阶段:模型推理、答案比较和统计打分。在模型推理阶段,我们对每个数据集分别使用零样本和少样本提示模板。对于零样本,我们采用简单的链式思考(Chain-of-Thought, CoT)提示 (Kojima et al., 2022)。对于少样本,我们在 GSM8K 与 MATH 数据集上分别采用 8-shot 与 4-shot 设置,并将相同的少样本设置应用于 ZHONGKAO 与 GAOKAO 数据集。关于答案比较,我们使用答案比较模型 2 { }^{2} 2来解决基础模型产生的输出不规则问题,例如停止准则不一致或从 CoT 输出中提取答案等问题。在统计打分阶段,我们为每个数据集选择零样本与少样本中准确率较高的一个,以确保结果的可靠性与鲁棒性,因部分模型在零样本下表现较优,部分则在少样本下表现更好。最后,我们报告四个数据集准确率的算术平均值。
\section*{B 四个评价集的能力维度}
GSM8K、MATH、ZHONGKAO 与 GAOKAO 四个评价集被引入以丰富评价维度,如表 5 所示,并给出示例题目。
为了初步理解各评价集在不同能力维度上的差异,我们尝试定义三个能力维度:普通知识、数学知识以及推理步骤。正如表 6 所示,每个能力维度均分为三个等级,要求从一级到三级逐步提高。普通知识描述了对常识(例如一天由 24 小时组成)的要求;数学知识指数学知识的复杂程度,包括算术、初等数学与高级数学;推理步骤描述了推理深度。图 3 展示了四个评价集在不同维度上的表现。总体而言,GAOKAO 与 MATH 表现相似,但 GAOKAO 在某些题目上可能需要一定的普通知识;ZHONGKAO 与 GSM8K 都要求较高的普通知识,但在数学知识与推理步骤要求上有所不同。
此外,如图 4 所示,我们通过对各评价集问题的数据分布进行 t-SNE 降维分析,并展示了数据分布图及余弦相似度情况。显然,MATH、ZHONGKAO 与 GAOKAO 之间存在一定相关性,而 GSM8K 数据分布差异最大。这可能也解释了不同评价集在 OOD 能力表现上的差异(如表 2 中讨论的情况)。
\begin{center}
\begin{tabular}{|l|l|}
\hline
数据集 & 题目示例 \
\hline
GSM8K & \begin{tabular}{l}
Josh 决定尝试买房翻修。他以 $80,000 购买一处房产,\
随后投入 $50,000 用于维修。此举使房屋价值提高了 150%。\
他的利润是多少?
\end{tabular} \
\hline
MATH & 求函数 y = 2 x 2 + x − 6 y=\frac{2}{x^{2}+x-6} y=x2+x−62 图像的垂直渐近线个数。 \
\hline
ZHONGKAO & 4 的相反数是多少? \
\hline
GAOKAO & \begin{tabular}{l}
设 M = { x ∣ x + 2 ≥ 0 } , N = { x ∣ x − 1 < 0 } M=\{x \mid x+2 \ge 0\},\, N=\{x \mid x-1 < 0\} M={x∣x+2≥0},N={x∣x−1<0},\
则 M ∩ N = ? M \cap N=? M∩N=?
\end{tabular} \
\hline
\end{tabular}
\end{center}
表 5:四个评价集示例题目
\section*{C 关于实验设置的讨论}
我们的实验设计总体上遵循对比实验原理,构成对照组以通过引入变量验证假设。下文详细介绍各实验组设计的考虑因素。
在第 3 节中,为了减小数学数据总量对实验结论的影响,如文中所述,我们在基线组与测试组中均控制了数学数据总量为 147 亿 token,其中基线组使用全部 147 亿数学语料,而测试组则使用 72 亿问题求解数据与剩余 75 亿数学语料分配,确保数学 token 总量亦为 147 亿。随后,在三个测试组中,我们调整数学数据混合比例以进一步验证问题求解数据的有效性,并确定后续实验的最优混合比例。具体来说,根据 75 亿 token:72 亿 token 的比例,我们从数学数据混合比例 5:5 开始;接着将比例调整为 3:7,此时较小的 75 亿数学语料可在 10K 步内充分利用,并在 25K 步内使用超过两次,从而确保数据得到充分利用;最后,我们补充了 7:3 的反比例实验。
在第 4 节中,为区分不同合成数据的影响,我们引入了对照组 Base2,该组在 Base1 基础上使用全部问题求解数据。实验组在此基础上额外加入合成数据,以验证合成数据带来的新价值,而不仅仅是替代原始数据。
\includegraphics[max width=\textwidth, center]{2025_04_15_262c644527836053857ag-17}
Figure 4:(a) 四个评价集问题的数据分布;(b) 基于数据分布计算的评价集相似度图。
在第 5.1 节中,我们比较了将问题求解数据引入不同阶段(CPT 与 SFT)对模型最终能力的影响。首先,参照 Base1 与 Base2 的设置,在 Base1 上进行 SFT 构成对比实验 Base1-SFT,我们假设 Base1-SFT 会因拥有指令跟随能力而受益,此为 Base2 所不具备。为验证这一点,我们划分出 1% 的数据,假设其对推理能力影响有限但对指令跟随能力有提升,随后在 Base1 与 Base2 上均进行 1% SFT。通过对比 Base1-1%SFT 与 Base1SFT,可以评估 SFT 带来的推理能力提升;而对比 Base1-1%SFT 与 Base2-1%SFT,则评估 CPT 带来的推理提升。
在第 5.2 节中,我们主要关注相同评价集在不同训练阶段下的能力差异。为此,我们复用 Base1 定义实验组能力提升,并引入两个实验组 Middle-school-SFT 与 Middle-school-CPT,分别在 SFT 与 CPT 中使用中学数据子集,以构成比较,进而评估 SFT 与 CPT 在特定评价集上的 IND 学习差异。同时,对其他评价集中 OOD 学习的变化也进行分析。随后,我们用高中数据子集替换中学数据子集,再构造两个实验组以重复实验,强化结论的鲁棒性。
在第 5.3 节中,实验设计与第 5.2 节类似,主要区别在于侧重于相同训练阶段中不同问题难度数据下的学习能力差异。因此,除了分别比较 SFT 与 CPT 下在简单和困难数据子集上的表现外,我们还在同一训练阶段中比较不同训练子集的表现。基于评价集数据分布的比较仅为补充分析。
\section*{D 问题求解数据有效性详细实验结果}
我们假设仅使用问题求解数据进行 CPT 已足够,因此增加了实验组 Test4,该组仅使用问题求解数据作为数学数据,具体为:
\begin{itemize}
\item Test4:使用 483 亿普通语料 token 和 72 亿问题求解数据 token,数据混合比例为 4:6。
\end{itemize}
结果如图 5 所示。我们发现,即使数学数据量较少,代表 Test4 的紫色曲线与代表 Test2 的绿色曲线表现一致甚至更优,这进一步佐证了 Result 1,即问题求解数据具有显著的提升效果,甚至能超越大规模新增 token 的影响。
下表(表 7)给出了 Base1、Test1、Test2、Test3 与 Test4 在四个评价集上的详细准确率。特别指出,当不使用数学语料时,Test4 在四个评价数据集上的具体指标不再与 Test1 至 Test3 保持一致,此数据分布的变化降低了 GSM8K 的提升效果,而在 MATH 与 GAOKAO 上的提升反而更明显。
\includegraphics[max width=\textwidth, center]{2025_04_15_262c644527836053857ag-18}
Figure 5:五个组随训练步数变化的平均准确率。
\begin{center}
\begin{tabular}{lllllc}
\hline
Model & GSM8K & MATH & GAOKAO & ZHONGKAO & Average \
\hline
Llama2-7b & 14.40 & 5.10 & 4.26 & 16.48 & 10.06 \
\hline
Base1 & 28.20 & 9.48 & 8.09 & 30.68 & 19.11 \
\hline
Test1 & 44.88 & 19.72 & 20.00 & 66.29 & 37.72 \
\hline
Test2 & 48.29 & 20.78 & 23.40 & 67.05 & 39.88 \
\hline
Test3 & 42.15 & 19.48 & 22.55 & 63.26 & 36.86 \
\hline
Test4 & 40.11 & 25.12 & 29.79 & 68.18 & 40.80 \
\hline
\end{tabular}
\end{center}
表 7:所有实验组在四个评价集上的准确率
\section*{E 能力习得比较的详细结果}
四个评价集的详细评价结果见表 8,而平均准确率与 SFT 数据量之间的关系如图 6 所示。
\section*{F 相关工作}
我们在此讨论有关数学 CPT 的相关工作。LLEMMA (Azerbayev et al., 2023) 首次关注继续预训练以提升数学推理能力,通过收集包括 OpenWebMath (Paster et al., 2023) 在内的开源数据并提供 Proof-Pile-2 数据集,初步尝试了数学领域的继续预训练,并分享了其经验。DeepSeekMath (Shao et al., 2024) 通过提升数据质量推动了数学继续预训练的效果,主要训练了 fastText 模型以召回更多 OpenWebMath 类数学网页,并迭代该过程,这也为数学推理之外的研究提供了有价值的经验。InternLM-Math (Ying et al., 2024) 利用开源数据集与内部数据集,并训练了评分模型以筛选高质量数据。Qwen2-Math (Yang et al., 2024a) 以及近期发布的 Qwen2.5-Math (Yang et al., 2024b) 已开始关注使用合成数据,并有效地取得了显著提升。
\begin{center}
\begin{tabular}{|l|l|l|l|l|l|}
\hline
Model & GSM8K & MATH & GAOKAO & ZHONGKAO & Average \
\hline
Base1 & 28.20 & 9.48 & 8.09 & 30.68 & 19.11 \
\hline
Base1-1%SFT & 31.08 & 12.10 & 12.34 & 39.39 & 23.73 \
\hline
Base1-10%SFT & 32.37 & 13.74 & 11.49 & 42.42 & 25.01 \
\hline
Base1-20%SFT & 34.65 & 16.26 & 13.62 & 46.40 & 27.73 \
\hline
Base1-50%SFT & 36.92 & 19.34 & 14.04 & 57.20 & 31.88 \
\hline
Base1-SFT & 42.84 & 21.88 & 18.30 & 59.47 & 35.62 \
\hline
Base2 & 47.84 & 20.12 & 22.98 & 67.05 & 39.50 \
\hline
Base2-1%SFT & 51.40 & 27.10 & 25.96 & 69.70 & 43.54 \
\hline
\end{tabular}
\end{center}
表 8:带 SFT 模型的性能指标
\includegraphics[max width=\textwidth, center]{2025_04_15_262c644527836053857ag-19}
Figure 6:平均准确率与 SFT 数据量之间的关系
\section*{G 合成数据 Prompt}
\section*{Response Diversification}
你是数学老师,请用英文完成以下任务。\
任务:对于下面的数学题,在给定的解答之外,请额外提供两种不同的解法。
如果你能提供两种不同解法,请以 < < <response > > >accept < / r e s p o n s e > </response> </response> 开头,然后依次以 ‘Solution2:’ 和 ‘Solution3:’ 展示额外的解法。\
如果你认为无法提供两种不同的解法,或提供的解法可能不准确,请以 < < <response > > >refuse < / r e s p o n s e > </response> </response> 开头。\
请确保解法是正确且彼此不同。如果你对解法的正确性有疑问,或认为该题目不允许有多解,请直接以 < < <response > > >refuse < / r e s p o n s e > </response> </response> 开头,并说明原因。
\section*{Query Expansion}
你的目标是从给定的题目及其解答中生成不同的数学文字问题及解答。请按照以下步骤进行:
\begin{enumerate}
\item 将问题转换为陈述,并在 < < <statement > > > 中填写 < < <statement > > > FILL IN HERE < / s t a t e m e n t > </statement> </statement>。
\item 基于该陈述生成一个新问题,并在 < < <question > > > 中填写 < < <question > > > FILL IN HERE < / q u e s t i o n > </question> </question>。
\item 给出新问题的解答,并在 < < <solution > > > 中填写 < < <solution > > > FILL IN HERE < / s o l u t i o n > </solution> </solution>。
\item 检查解答,并在 < < <check > > > 中回复 < < <check > > >Accept < / c h e c k > </check> </check> 或 < < <check > > >Refuse < / c h e c k > </check> </check>;然后在 < < <reason > > > 中说明理由,格式为 < < <reason > > > FILL IN HERE < / r e a s o n > </reason> </reason>。
\item 重复该过程,总计生成 2 个问题及解答。
\end{enumerate}
\section*{Tutorship Amplification}
作为数学老师,请检查下列数学题的解答。如果解答正确,请仅回复 < < <check > > >correct < / c h e c k > </check> </check>。
若解答错误,请首先回复 < < <check > > >wrong < / c h e c k > </check> </check>,然后指出错误的步骤,纠正错误并继续给出正确解答。\
请注意,你的回复必须以 < < <check > > >correct < / c h e c k > </check> </check> 或 < < <check > > >wrong < / c h e c k > </check> </check> 开头。
相关文章:
《ADVANCING MATHEMATICAL REASONING IN LAN- GUAGE MODELS》全文阅读
《ADVANCING MATHEMATICAL REASONING IN LAN- GUAGE MODELS: THE IMPACT OF PROBLEM-SOLVING DATA, DATA SYNTHESIS METHODS, AND TRAINING STAGES》全文阅读 提升语言模型中的数学推理能力:问题求解数据、数据合成方法及训练阶段的影响 \begin{abstract} 数学推…...
是德科技KEYSIGHT Agilent U2004A功率传感器
是德科技KEYSIGHT Agilent U2004A功率传感器 Keysight U2004A USB功率传感器的特性和规格包括: 频率范围为 9 kHz 至 6 GHz -60 至 20 dBm 的宽动态范围 内部调零功能消除了外部校准 测量速度高达 250 个读数/秒 在 PC 或其他 Agilent 仪器上显示功率测量值 频率…...
Kubernetes(K8S)内部功能总结
Kubernetes(K8S)是云技术的最核心的部分,也是构建是云原生的基石 K8S K8S,是Kubernetes的缩写,是Google开发的容器编排平台,现在由云原生计算基金会(CNCF)进行维护。 K8Sÿ…...
智谱最新模型GLM4是如何练成的
写在前面 这篇博客将基于《ChatGLM: A Family of Large Language Models from GLM-130B to GLM-4 All Tools》,深入剖析 GLM-4 系列在**模型架构设计、预训练、后训练(对齐)、以及关键技术创新(如长上下文处理、Agent 能力构建)**等环节的实现逻辑与设计考量,带你全面了…...
类头文件相互包含的问题
1.预编译指令: #ifndef CLASS_A_ #define CLASS_A_#include CLASS_B.h#endif 2.#pragma once 3.将类A中声明类B,并类中声明类B的指针,在类中的实现文件中包含类B的头文件。在类B中包含类A的头文件 a.h:class Bclass A {public:private:B*…...
云原生周刊:K8s 中的 GPU 共享
开源项目推荐 A2A Google 的 Agent2Agent(A2A)协议是一个开源标准,旨在促进不同框架和供应商构建的 AI 代理之间的互操作性。它允许代理通过统一的协议安全地交换信息、协同执行任务,并在多种企业平台和云环境中无缝协作。 A2A…...
(五)机器学习---决策树和随机森林
在分类问题中还有一个常用算法:就是决策树。本文将会对决策树和随机森林进行介绍。 目录 一.决策树的基本原理 (1)决策树 (2)决策树的构建过程 (3)决策树特征选择 (4࿰…...
DeepReaserch写的文献综述示例分享
目录 DeepReaserch提供的文献综述: 人工智能在医疗影像诊断中的研究进展综述(2015–2025) 引言 1 近十年研究进展回顾 1.1 深度学习崛起阶段(2015–2017年) 1.2 方法完善与临床初探(2018–2020年&…...
Token安全存储的几种方式
文章目录 1. EncryptedSharedPreferences示例代码 2. SQLCipher示例代码 3.使用 Android Keystore加密后存储示例代码1. 生成密钥对2. 使用 KeystoreManager 代码说明安全性建议加密后的几种存储方式1. 加密后采用 SharedPreferences存储2. 加密后采用SQLite数据库存储1. Token…...
阶段性使用总结-通义灵码
序言 前段时间用通义灵码,参加了下数字中国闽江流域的比赛。https://www.dcic-china.com/competitions/10173 最后成绩一般般,106名,大概有2000多人参加这题目,估计有一堆小号。 按照下面这个思路建模的,迭代了大概15…...
SpringBoot 与 Vue3 实现前后端互联全解析
在当前的互联网时代,前后端分离架构已经成为构建高效、可维护且易于扩展应用系统的主流方式。本文将详细介绍如何利用 SpringBoot 与 Vue3 构建一个前后端分离的项目,展示两者如何通过 RESTful API 实现无缝通信,让读者了解从环境搭建、代码实…...
Flutter 图标和按钮组件
引言 在 Flutter 应用开发中,图标和按钮是构建用户界面不可或缺的元素。图标能够以直观的图形方式传达信息,增强应用的视觉吸引力;而按钮则是用户与应用进行交互的重要途径。本文将详细介绍 Flutter 中图标和按钮组件的使用,涵盖…...
大模型平台Dify工作流高效调用Ragflow知识库,解决其原生知识库解析和检索能力不足的问题
Dify调用Ragflow知识库的详细步骤,安装详细部署在我之前文章 多图超详细:Docker安装知识库AI客服RAGFlow的详细步骤、使用教程及注意事项:。超详细:Dify大语言模型工作流开发平台的安装与使用,deepseek知识库客服等。…...
数据库的基本原则
数据库的核心原则 原子性与持久性:原子性(Atomicity)确保一个事务中的所有操作要么全部完成,要么完全不执行,不会出现部分完成的情况。持久性(Durability)则保证一旦事务提交成功,即…...
项目集管理汇报报告 (范本)
该文档适用于企业管理层、项目经理、项目团队成员以及对项目集管理感兴趣的人员。它对企业项目管理至关重要,通过全面分析 揭示了如目标达成率低、数据缺失严重、成本进度管控有风险等关键问题,为管理层提供决策依据,助力其了解项目整体状况&…...
阿里云 MSE Nacos 发布全新“安全防护”模块,简化安全配置,提升数据保护
作者:张文浩 阿里云在其微服务引擎(MSE)注册配置中心 Nacos 上正式推出全新“安全防护”功能模块,旨在帮助企业用户有效管理安全状态和降低开启安全相关功能的学习成本,提升微服务架构的安全性。首期推出的“安全防护…...
Pydantic v2 的使用
一、前言 Pydantic 是一个 Python 数据验证 和 设置管理 库,使用 Python 类型 注解。具有以下特点: 1.1 核心功能 数据验证:自动验证数据类型和约束条件类型转换:自动将输入数据转换为声明类型Schema 生成:自动生成…...
从零开始学A2A二 : A2A 协议的技术架构与实现
A2A 协议的技术架构与实现 学习目标 技术架构掌握 深入理解 A2A 协议的分层架构设计掌握各层次的功能和职责理解协议的工作原理和数据流 实现能力培养 能够搭建基本的 A2A 服务端掌握客户端开发方法实现智能体间的有效通信 架构设计理解 理解与 MCP 的本质区别掌握多智能体协…...
设计模式每日硬核训练 Day 12:装饰器模式(Decorator Pattern)完整讲解与实战应用
🔄 回顾 Day 11:适配器模式小结 在 Day 11 中,我们学习了适配器模式(Adapter Pattern): 用于将“不兼容”的接口适配为目标接口,解决新旧系统之间的桥接问题。强调“接口兼容、外部桥接”&…...
[CMake] CMakePresets.json简单使用
解决的问题 CMakePresets.json是为了解决在使用命令行编译使用CMake的项目时,可能会十分麻烦。如类似的参数-DCMAKE_BUILD_TYPEDebug所以有了CMakePresets.json来配置configure和build时的命令,然后在使用时 cmake --preset<configure-preset-name&…...
智能办公如何创建e10流程
智能办公如何创建e10流程 配置e10流程前,您要做的事情: 1、进入e10管理后台,创建应用,开放接口权限;2、进入e10管理后台,配置千里聆套件,配置同步人员;3、进入千里聆系统ÿ…...
Mac关闭sip方法
Mac关闭sip方法 导航 文章目录 Mac关闭sip方法导航完整操作流程图详细步骤 完整操作流程图 这东西是我在网上搬运下来的,但是我在为业务实操过程中,根据实操情况还是有新的注意点的 详细步骤 1.在「关于本机」-「系统报告」-「软件」;查看SIP是否开启…...
Flutter 播放利器:`media_kit` 的详细介绍与使用指南
在 Flutter 项目中实现音视频播放,开发者过去主要依赖如 video_player、just_audio 等第三方库,但这些库或多或少存在一些局限性,比如平台兼容性差、定制能力不足、播放格式有限等问题。 而 media_kit 是近年崛起的一款全平台音视频播放解决…...
GEO优化中的关键底座:知识图谱如何提升生成式AI的准确性与实时性?
今天,我将与大家分享如何通过GEO优化(生成式人工智能优化)和动态知识图谱,帮助企业提升智能化水平并实现高效的业务运营。首先,GEO优化利用生成式AI为企业提供内容生成、客服自动化和智能销售等服务,而知识…...
案例 - 登录认证:保障系统安全访问的实现
摘要:本文介绍了为Tlias智能学习辅助系统添加登录认证功能的过程,涵盖从需求分析、接口文档设计,到思路分析、功能开发以及最后的测试等多个关键环节,旨在实现只有通过登录认证的用户才能安全访问后台系统功能的目标。 关键词&am…...
Node.js Session 原理简单介绍 + 示例代码
目录 ✅ Session 原理简要说明 🧩 示例项目 - 使用 Node.js Express 实现简单 Session 登录 📁 文件结构 🔹 server.js (JavaScript) 🔸 index.html (HTML) ▶️ 程序运行步骤 ✅ 程序运行效果 🎯 总结 在 We…...
C# 类型、存储和变量(C#程序是一组类型声明)
本章内容 C#程序是一组类型声明 类型是一种模板 实例化类型 数据成员和函数成员 预定义类型 用户定义类型 栈和堆 值类型和引用类型 变量 静态类型和dynamic关键字 可空类型 C#程序是一组类型声明 如果广泛地描述C和C程序源代码的特征,可以说C程序是一组函数和数据…...
复变函数摘记3
复变函数摘记3 5. 留数5.1 可去奇点、极点、本性奇点5.2 零点与极点的关系5.3 在无穷远点处的情形5.4 留数 5. 留数 \quad 如果函数 f ( z ) f(z) f(z) 在 z 0 z_0 z0 及 z 0 z_0 z0 的邻域内处处可导,那么称 f ( z ) f(z) f(z) 在点 z 0 z_0 z0 处解析。…...
深入定制 QSlider——实现精准点击跳转与拖拽区分
在使用 Qt 编写界面应用时,QSlider 是一个常用的滑动控件。但你可能会注意到,默认情况下点击滑轨(groove)区域时,滑块并不会直接跳到鼠标点击的位置,而是按照内部的分页步进(page step)行为响应。此外,垂直 Slider 在点击最底部时还存在 releaseEvent(或 sliderRelea…...
Summary
一、数据结构 1.1 哈希 主要是HashMap和HashSet;其中HashSet底层是一个HashMap属性。 // 获取HashMap元素,HashSet均不支持 map.keySet (); // Set<k> map.values (; // Collection<V> map.entrySet();//Set<Map.Entry<K,V>> for (Map.E…...
MCP Server 开发实战 | 大模型无缝对接 Grafana
前言 随着大模型的飞速发展,越来越多的 AI 创新颠覆了过往很多产品的使用体验。但你是否曾想过,在向大型语言模型提问时,它能否根据你的需求精准返回系统中的对应数据?例如,当用户查询 Grafana 服务时,模型…...
【ROS2】行为树 BehaviorTree(六):各种各样的节点
1、装饰器节点 Decorators 1)否操作 Inverter 如果子项失败则返回 SUCCESS,如果子项成功则返回 FAILURE。 如果子节点返回 RUNNING,则该节点也返回 RUNNING。 2)强制成功 ForceSuccess 如果子节点返回 RUNNING,则该节点也返回 RUNNING。 否则,它总是返回 SUCCESS。 3)…...
Docker Swarm 集群使用指南概述
概述 对于简单轻量级集群管理,利用 Docker Swarm 就够用了,适合中小型应用程序的容器编排。如果是比较重的中心化集群管理方案或需要更复杂的功能,可以考虑使用 Kubernetes Helm Consul 等更强大的容器编排工具。 Docker Swarm 1. Docke…...
【行业树选择器组件:基于Vue3与Element Plus的高性能树形选择组件优化与重构】
行业树选择器组件:基于Vue3与Element Plus的高性能树形选择组件优化与重构 组件概述与背景 行业树选择器是一个基于Element Plus的ElTreeSelect封装的业务组件,主要应用于能源管理系统中,用于展示和选择国标行业分类体系的四级层级结构。该…...
PasteForm框架开发之Entity多级嵌套的表单的实现
你相信么,使用PasteForm框架开发,管理端居然不要写代码!!! 一起来看看PasteForm是否支持多级表模式(外表) 需求假设 假如有这么一个需求,就是订单表,包含了多级的信息,比如这个订单包含了哪些…...
Anaconda笔记
下载Anaconda 清华源 官方源 本文下载:Anaconda3-2024.10-1-Windows-x86_64.exe 建议不要安装到C盘,我的安装到D:Anaconda目录 设置环境变量 WinR cmd命令行输入: conda --version:可以查看到版本信息安装成功c…...
Linux——共享内存
目录 一、共享内存概念 二、共享内存的一些函数 2.1 shmget 创建共享内存 2.2 shmat 访问共享内存 2.3 shmdt 解除共享内存的映射 2.4 shnctl 删除共享内存段 三、共享内存 3.1 创建测试进程 3.2 使用循环测试 编辑 3.3 共享内存写入程序 3.4 带有信号量的共享内…...
计算机系统---烤机(性能测评)
计算机烤机 一、烤机的定义与核心目的 烤机(Burn-in Test) 是通过对计算机硬件施加持续高负载,模拟极端运行环境,以验证硬件稳定性、性能极限、散热能力及潜在缺陷的测试方法。核心目标包括: 硬件稳定性验证&#x…...
Linux命令+Git命令
Linux命令Git命令 linux查看两个操作系统cd命令的区别操作文件和文件夹vim不同模式保存和退出 Git linux Linux操作系统中,几乎所有的东西都以文件夹或文件形式存在,这些文件夹/文件有一个共同的根目录/。如果我们在某块磁盘A上(无其他分区&…...
【前端】Nuxt打包部署的几种方式
一、总结知识点 Nuxt 是基于 Vue 的服务端渲染框架,部署方式主要取决于你使用的 Nuxt 模式:Universal (SSR)、SPA 或 Static Site Generation (SSG)。不同模式下的打包部署流程略有不同。以下将分别介绍 Nuxt 应用的打包和部署方式。 二、详细说明 1. …...
DP 16bit位宽数据扰码实现和仿真
DisplayPort 1.4协议中数据需进行扰码,扰码用到了16-bit LFSR,表达式如下。 LFSR每移位8个bit后,用最高有效 8 位以相反的位顺序与一个字节数据进行异或从而实现数据加扰/解扰。 我们已利用这个框图进行8个时钟周期迭代,得到了和…...
力扣每日打卡 1534. 统计好三元组 (简单)
力扣 1534. 统计好三元组 简单 前言一、题目内容二、解题方法1. 暴力解法2.官方题解2.1 方法一:枚举2.2 方法二:枚举优化 前言 这是刷算法题的第十二天,用到的语言是JS 题目:力扣 1534. 统计好三元组 (简单) 一、题目内容 给你一…...
CExercise_13_1排序算法_1插入排序
题目: 请自己手动实现插入排序算法: // 插入排序 void insertion_sort(int arr[], int len); 然后给定一个int数组,实现将它从小到大进行排序。 关键点 分析: 在插入排序中,稳定性指的是排序算法能够保持相等元素的原始…...
图论--DFS搜索图/树
目录 一、图的存储结构 二、题目练习 846. 树的重心 - AcWing题 dfs,之前学习的回溯算法好多都是用dfs实现搜索的(把题目抽象成树形结构来搜索),其实 回溯算法就是 深搜,只不过针对某一搜索场景 我们给他一个更细分…...
blender 超逼真角色daz 纹理材质 humanpro插件
https://www.youtube.com/KhanhVo-zp9lh/featured https://superhivemarket.com/products/humanpro https://superhivemarket.com/products/humanpro HUMANPRO 插件 - BLENDER HumanPro 是一款专为帮助用户轻松快速地创建高度精细逼真的人体皮肤纹理和复杂皱纹而设计的插件…...
关于响应式编程框架ReactiveUI的感悟
1.我第一个接触的MVVM框架是Caliburn Micro,后来接触到了ReactiveUI这种响应式编程思想的框架,主要说一下本人目前学习感想(针对尽快上手使用MVVM开发WPF); 首当其冲的工具是DeepSeek,总结好问题直接提问&…...
Swift —— delegate 设计模式
一、什么是 delegate 模式 所谓 delegate 就是代理模式。简单来说,delegate 模式就是在类的函数里运行完一段代码后,你可以通过一个符合某个代理协议的属性来调代理的方法。其中,代理方法就是回调函数。 二、delegate 模式与闭包比的优势 …...
远方游子的归家记:模仿美食网页的制作与实现
前言 2023年的夏天,闲得无聊学了一个礼拜前端知识点。并根据所学知识点模仿制作了一篇网络上公开发布的关于家乡美食的文章。今天才想到有这个不错的案例可以分享出来,以供大家学习参考。 知识点简介 运用的知识点比较简单,常规的div盒子&…...
React JSX?
JSX JSX 是 JavaScript XML 的缩写,它是一种 JavaScript 的语法扩展,允许你在 JavaScript 中写 HTML 类似的代码,常用于 React 中定义 UI 组件的结构。 JSX 示例代码: import React from react;function App() {return (<di…...
【Pandas】pandas DataFrame iterrows
Pandas2.2 DataFrame Indexing, iteration 方法描述DataFrame.head([n])用于返回 DataFrame 的前几行DataFrame.at快速访问和修改 DataFrame 中单个值的方法DataFrame.iat快速访问和修改 DataFrame 中单个值的方法DataFrame.loc用于基于标签(行标签和列标签&#…...