1. 项目背景与核心问题
数学推理能力一直是衡量大语言模型(LLM)智能水平的重要标尺。在2023年之前,大多数开源模型在GSM8K等数学基准测试上的表现往往徘徊在30-50%的正确率,与人类中学生水平存在明显差距。PRISM研究正是针对这一痛点展开,它系统性地探索了"中训练"(Mid-training)这一特殊训练策略对提升LLM数学能力的实际效果。
所谓中训练,是指在模型预训练(Pre-training)和指令微调(Instruction Tuning)之间插入的一个专门训练阶段。与完全从零开始的预训练不同,中训练是在已有预训练模型的基础上,使用特定领域数据(此处为数学相关文本)进行中等规模的继续训练。这种方法既避免了从头训练的巨大成本,又能针对性地强化模型在目标领域的能力表现。
2. 技术方案设计思路
2.1 数据构建策略
研究团队构建了一个包含300万条数学相关文本的专用数据集MathCorpus,其内容分布如下表所示:
| 数据类型 | 占比 | 示例 | 处理方式 |
|---|---|---|---|
| 教科书解题步骤 | 35% | "证明勾股定理:首先构造正方形..." | 保留完整推导链条 |
| 学术论文数学章节 | 25% | "根据Lemma 3.1可得..." | 提取数学密集段落 |
| 编程解题代码 | 20% | python def solve_quadratic(a,b,c): | 代码与注释配对 |
| 数学竞赛题解 | 15% | "IMO 2020 Problem 2解法..." | 保留多种解法 |
| 数学百科条目 | 5% | "黎曼猜想表述为..." | 结构化整理 |
特别值得注意的是,所有数据都经过严格的格式统一和符号标准化处理。例如将所有数学公式转换为LaTeX格式,确保模型学习到统一的数学表达规范。
2.2 模型架构调整
在基础模型选择上,研究采用了开源的LLaMA-7B作为基座模型,并进行了以下关键调整:
注意力机制优化:在Transformer层中引入滑动窗口注意力(Sliding Window Attention),特别加强数值相邻token之间的注意力权重。实测显示这使模型对长数学推导链条的理解能力提升约17%。
数值编码改进:将原始tokenizer中的数字处理方式从纯字符级改为混合编码:
- 0-999的整数:保留为独立token
- 大数/小数:拆分为科学计数法形式(如3.14→"3.14"→[3, ., 1, 4])
- 数学常数:π、e等作为特殊token
损失函数调整:在标准交叉熵损失基础上,增加以下两项:
- 公式一致性损失:检测生成内容中的数学公式自洽性
- 推导步骤奖励:对符合数学推导逻辑的连续token给予额外奖励
3. 训练流程关键技术
3.1 三阶段训练策略
研究采用渐进式的训练方案,具体流程如下:
预热阶段(1,000步)
- 学习率:5e-6
- 仅训练嵌入层和最后5个Transformer层
- 目标:让模型初步适应数学文本分布
主体训练阶段(50,000步)
- 学习率:1e-5(余弦衰减)
- 全参数训练
- 每5,000步进行一次课程学习调整:
- 逐步增加题目难度
- 逐步减少解题步骤提示
精调阶段(10,000步)
- 学习率:5e-6
- 重点训练注意力相关参数
- 引入对抗训练样本(故意包含错误步骤的题目)
关键技巧:在主体训练阶段采用梯度累积(batch_size=32累积4次),在8张A100上训练耗时约72小时。实际资源消耗比完整预训练减少约85%。
3.2 关键超参数配置
下表列出了区别于常规训练的关键参数设置:
| 参数 | 常规值 | PRISM设定 | 理论依据 |
|---|---|---|---|
| 序列长度 | 2048 | 1024 | 数学推导通常需要更精炼的上下文 |
| Dropout率 | 0.1 | 0.05 | 数学关系需要更确定的参数传递 |
| 梯度裁剪 | 1.0 | 0.5 | 防止数值敏感参数剧烈波动 |
| 热身步数 | 2000 | 500 | 数学模式相对基础语言模式更易学习 |
| 权重衰减 | 0.01 | 0.005 | 保留更多预训练获得的一般知识 |
4. 效果验证与案例分析
4.1 基准测试表现
在GSM8K(小学数学题)、MATH(高中数学竞赛题)和MMLU-STEM(大学STEM学科题)三个测试集上的表现对比如下:
| 模型 \ 测试集 | GSM8K | MATH | MMLA-STEM |
|---|---|---|---|
| LLaMA-7B原始 | 41.2% | 6.7% | 32.1% |
| +标准微调 | 53.8% | 12.4% | 38.5% |
| +PRISM中训练 | 68.3% | 24.7% | 49.2% |
| 人类大学生 | ~80% | ~60% | ~75% |
特别值得注意的是,模型在需要多步推理的题目上进步最明显。例如在GSM8K中"小明买苹果"这类典型应用题上的正确率从45%提升至72%。
4.2 典型解题过程解析
以下展示模型处理"鸡兔同笼"问题的完整推理链条:
问题:笼中有鸡和兔共15只,脚共40只,问鸡兔各多少?
模型输出:
1. 设鸡有x只,兔有y只 2. 根据题意得方程组: - x + y = 15 (总数量) - 2x + 4y = 40 (总腿数) 3. 将第一式解为x=15-y 4. 代入第二式:2(15-y)+4y=40 5. 展开:30-2y+4y=40 → 30+2y=40 6. 解得:2y=10 → y=5 7. 代回x=15-5=10 8. 最终答案:鸡10只,兔5只错误案例分析: 当故意将题目改为无解情况(如总腿数设为奇数),早期版本会强行给出错误解,而改进后的模型能识别:
检测到矛盾:每只动物至少2条腿,15只至少30条腿... 总腿数40-30=10需由兔子的额外腿贡献... 但10无法被2整除(每兔多2腿),题目条件可能有误5. 实践经验与改进方向
5.1 关键成功因素
数据质量重于数量:经过严格验证的100万条高质量数学题解,比300万条含噪声数据训练效果更好
符号一致性处理:确保训练数据中所有数学符号(如变量x、运算符∈等)的编码方式完全统一
渐进式难度设计:从一步计算题逐步过渡到多步证明题,避免模型过早遇到挫折样本
5.2 典型问题与解决方案
问题1:模型有时会"跳步"
- 现象:在代数运算中突然省略关键步骤
- 解决:在损失函数中增加相邻token差异惩罚项
问题2:单位处理混乱
- 现象:将"5米"和"5千克"直接相加
- 改进:在数据标注时显式标记物理量纲
问题3:数值稳定性不足
- 现象:大数运算时出现1e-5级别的浮动误差
- 方案:在推理时对数值结果进行范围校验
5.3 未来优化方向
混合精度训练改进:当前fp16训练可能导致某些小数精度丢失,测试bf16格式
解题过程可解释性:探索生成中间验证节点,类似人类的"验算"步骤
跨语言迁移:验证中文数学术语与英文符号系统的对应关系
在实际部署中发现,将模型与符号计算库(如SymPy)结合使用效果更佳——让LLM负责问题理解和步骤规划,具体计算交给专业数学引擎。这种混合架构在工程数学问题上准确率可再提升15-20%。