613. AI Mathematical Olympiad - Progress Prize 1 | ai-mathematical-olympiad-prize
感谢 AIMO 和 Kaggle 举办这次非常有趣的竞赛——我们学到了很多关于开源大语言模型 (LLM) 的数学能力,以及在有限计算资源下运行它们所面临的挑战。我们也感谢我们的竞争对手们在竞赛期间分享的各种见解——特别是 Abdur Rafae,他的 公开笔记本 为我们围绕模型训练和推理的许多决策提供了依据。
我们的解决方案由三个主要部分组成:
您可以在 Hugging Face Hub 上找到模型、演示和验证集的集合——我们将很快发布训练数据和代码!
我们使用了多种开源库来训练模型, notably TRL, PyTorch, vLLM, 和 DeepSpeed。在一个拥有 8 x H100 GPU 的节点上,我们的模型训练耗时 10 小时。
链接:
我们的微调方案主要基于 MuMath-Code 论文,涉及两个阶段的模型训练:
在这两个阶段,我们都进行了“全量微调”,即在反向传播期间更新模型的所有权重。换句话说,我们没有使用像 LoRA 或 DoRA 这样的参数高效技术,因为我们不确定它们能否在不进行大量实验的情况下匹配全量微调的性能。为了加速训练,我们使用了 TRL 的 SFTTrainer 中的"packing"功能,将多个样本连接成一个 2048 token 的块。所有模型都使用梯度检查点训练,并使用 DeepSpeed ZeRO-3 协议进行分片,以确保权重、梯度和优化器状态能够适应可用的显存 (VRAM)。以下是我们在每个阶段使用的主要超参数:
| 阶段 1 | 阶段 2 | |
|---|---|---|
| 学习率 (Learning Rate) | 2.00E-05 | 2.00E-05 |
| 总批量大小 (Total Batch Size) | 32 | 32 |
| 块大小 (Block Size) | 2048 | 1024 |
| 轮次 (Num Epochs) | 3 | 4 |
| 学习率调度器 (LR Scheduler) | cosine | cosine |
| 预热比例 (Warmup Ratio) | 0.1 | 0.1 |
我们最初的提交仅使用了在阶段 1 上微调的 DeepSeek 7B 模型,但我们发现性能相当有限,使用 maj@32 在公共排行榜上的最佳得分为 8/50。是 Abdur Rafae 的公开笔记本促使我们考虑将代码执行集成到训练方案中,最初,我们专注于 Mix of Minimal Optimal Sets (MMOS) 数据集,因为笔记本标题中描述了这一点。我们发现使用 MMOS 提高了性能,但在公共排行榜上使用 maj@32 仍然 capped 在 16/50,这可能是因为 MMOS 仅由单轮解决方案组成(即模型只生成一个 Python 程序,这对于难题来说是不够的)。我们后来意识到 MMOS 是一个误称,Kaggle 笔记本实际上运行的是能够进行多步推理和代码执行的 DeepSeekMath 7B RL 模型。
就在这时,我们将精力集中在生成类似于 DeepSeekMath Instruct / RL 模型所使用的数据集上,这与 MuMath-Code 方案一起带来了显著的改进。
我们还尝试了在阶段 2 上仅微调整数解决方案,但发现当在所有解决方案类型上进行训练时,模型略微更稳健(可能是因为过滤后留下的样本数量有限)。
正如其他竞争对手所指出的,这次竞赛在模型提交和评估方面提出了几个挑战:
最初,我们使用 Abdur Rafae 的公开笔记本进行提交,但发现高方差是个问题。为了解决这个问题,我们采取了一种不同的方法,基于扩展带有工具集成推理的自我一致性解码 (SC-TIR):
对于我们获胜的提交,我们生成了 N=48 个候选项,深度为 M=4。增加任一参数并未提高性能,我们采取了一种保守的方法以保持在时间限制内。实际上,该算法介于带有 CoT 的自我一致性和思维树 (Tree of Thoughts) 之间(如下所示),但不包括回溯或向前看来规划解码的下一步。
我们发现 SC-TIR 提高了整体性能,并在我们的内部评估和公共排行榜上产生了显著较小的方差。
值得一提的一个技术细节是,我们发现在 8 位精度下量化模型很有帮助。原因有二:
我们使用 AutoGPTQ 以及训练数据集进行校准来量化模型。实际上,这导致准确率略有下降,但主要通过能够在推理期间生成许多候选项来弥补。
链接:
https://huggingface.co/datasets/AI-MO/aimo-validation-aime
https://huggingface.co/datasets/AI-MO/aimo-validation-amc
https://huggingface.co/datasets/AI-MO/aimo-validation-math-level-4
https://huggingface.co/datasets/AI-MO/aimo-validation-math-level-5
为了指导模型选择,我们使用了四个内部验证集来衡量模型在不同难度数学问题上的性能:
通过使用这四个验证集,我们能够挑选不同训练阶段最有希望的模型,并缩小超参数的选择范围。我们发现,在这次竞赛中,将小型但具有代表性的验证集与大型验证集结合起来非常有用,因为每次提交都受到采样随机性的影响。
如上所述,我们尝试了一些方法,但最终为了支持 MuMath-Code 方案而放弃了:
我们尝试的另一种技术是将 卡尼曼 - 特沃斯基优化 (KTO) 应用于从 SFT 模型采样的新完成项。这里的方法类似于 OrcaMath,即:
我们发现这种形式的 on-policy KTO 产生的模型比 SFT 模型更好(在我们的内部评估上提高了几个百分点),并在公共排行榜上得分为 27/50。KTO 的一个 nice 功能是你可以跟踪训练期间的隐式奖励,这真的有助于调试运行——例如,这是我们来自 Weights and Biases 的成功训练日志之一,可以看到所选(即正确)的奖励在训练期间增加,而被拒绝的奖励被抑制。
不幸的是,我们没时间将此方法应用于最终的 SFT 模型,所以我们可能本可以多解决 1-2 个问题!
我们还尝试将我们的 SFT 方案应用于更大的模型,如 InternLM-20B、CodeLama-33B 和 Mixtral-8x7B,但发现 (a) DeepSeek 7B 模型由于其在数学上的持续预训练而很难被击败,(b) 推理非常慢,并且我们遇到了一些无法追踪根本原因的神秘超时。
另一个失败的实验包括尝试使用强化学习(具体来说是 REINFORCE-leave-one-out (RLOO) 算法)配合代码执行反馈和正确/错误解决方案的离散奖励。我们将此应用于 DeepSeekMath 7B RL 模型,但没有看到性能的任何显著增益。鉴于像 RLOO 这样的在线方法受到文本生成的瓶颈限制且迭代缓慢,我们放弃了强化学习而 favor KTO。
在推理方面,我们还尝试了:
我们非常享受参加这次竞赛并从中学到了很多。对于未来的进步奖,我们认为通过启用以下功能,可以进一步提高开源 LLM 的性能: