DeepSeekMath与GRPO:探索开源语言模型数学推理的强化学习新范式
1. 从“数学困难户”到“解题高手”:DeepSeekMath的诞生
大家好,我是老张,在AI和智能硬件这行摸爬滚打了十几年。这些年,我亲眼看着大语言模型从能写诗聊天,到能写代码,再到今天,它们开始向数学这个“硬骨头”发起挑战。说实话,让AI做数学题,尤其是那种需要多步推理的复杂题目,一直是个老大难问题。你想想,咱们自己上学时解一道几何证明题都得绞尽脑汁,更别说让模型去理解了。
就在前不久,深度求索公司放了个大招,推出了 DeepSeekMath 7B。这个模型在权威的MATH基准测试上,干出了51.7%的准确率。你可能对这个数字没概念,我打个比方,这相当于一个7B参数的开源模型,在高中数学竞赛级别的题目上,成绩已经逼近了GPT-4和Gemini Ultra这些“闭源巨无霸”。而且,它没用任何外部工具包,也没靠“投票”这种取巧的方法,就是实打实地自己一步步推理出来的。
这背后到底发生了什么?简单说,是两件事做成了:第一,喂对了“粮食”。团队从浩如烟海的互联网数据里,精挑细选出了1200亿个高质量的数学相关“标记”(你可以理解为单词或符号),构建了一个超大规模的数学预训练语料库。第二,用对了“训练方法”。他们创新性地提出了一种叫 GRPO(组相对策略优化) 的强化学习新算法,让模型在“刷题”过程中能更聪明地自我改进,效果拔群,还省内存。
这就像培养一个学生,以前我们可能给他一堆杂书看,然后让他死记硬背题目。现在呢,我们先是给他一套精心编纂的数学百科全书和习题集(高质量数据),然后请了一位不仅看最终答案对错,还会一步步批改他解题过程、并告诉他哪里思路可以更优化的“AI教练”(GRPO算法)。这么一来,学生的进步能不快吗?
2. 基石:高质量数据是如何“炼”成的?
模型要变强,数据是根基。DeepSeekMath的厉害,首先就厉害在它的“食谱”上。他们没去用那些常见的、但可能已经“过熟”的数据集,而是把目光投向了整个互联网——Common Crawl,一个包含了海量网页的公开存档。
2.1 数据挖掘的“淘金”流水线
直接从Common Crawl里抓数学内容,无异于大海捞针,里面充斥着新闻、广告、八卦等各种无关信息。DeepSeek团队设计了一套非常聪明的迭代式数据挖掘管道,这个过程特别值得咱们做技术的人琢磨。
他们先找了个“种子选手”——OpenWebMath,这是一个已知的、质量不错的数学网页集合。用这个当正面教材,再从Common Crawl里随便选一些非数学网页当反面教材,训练了一个fastText文本分类器。这个分类器就像个初级“淘金筛”,能初步判断一个网页是不是和数学相关。
第一轮筛选后,他们得到了大约400亿个标记的数据。但这还不够,因为分类器学到的“数学特征”可能不够全面,会漏掉很多真正的数学页面。怎么办?他们玩了个更巧妙的:按域名分析。他们把Common Crawl按网站域名分组,然后看哪些域名下被分类器判定为“数学”的页面比例特别高(比如超过10%)。像 mathoverflow.net 这种网站,自然就被圈出来了。
接下来是“人工点睛”。团队会去手动检查这些高概率数学域名下的具体网页链接,确认哪些页面确实是高质量的数学内容(比如 mathoverflow.net/questions 下的问题页面)。这些新确认的高质量页面,就被加入到最初的“种子”里,用来重新训练和升级那个fastText分类器。升级后的分类器变得更聪明,能捞出更多之前漏掉的“金子”。
就这样,“筛选 -> 分析 -> 人工标注 -> 升级分类器 -> 再筛选”,循环了四轮。他们发现,到第三轮时,能新发现的数据已经很少了,说明挖得差不多了,于是收工。最终,他们从3550万个数学网页中,提炼出了1200亿个纯净的数学标记,构成了 DeepSeekMath语料库。这个规模,是之前知名数学数据集OpenWebMath的9倍左右。
我实测过,这种迭代式的、结合了自动筛选和少量人工审核的方法,在构建领域专用数据集时非常有效。它既利用了机器的效率,又引入了人类的判断力,能有效控制质量,避免垃圾数据污染模型。
2.2 为什么是代码模型打底?
这里有个特别有意思的发现,也是DeepSeekMath成功的关键决策之一:他们没有用一个通用的语言模型(比如只读过小说和新闻的模型)作为起点,而是选择了 DeepSeek-Coder-Base-v1.5 7B 这个代码模型作为基础。
这背后其实有个一直有争议的假设:写代码的训练,能提升逻辑和数学推理能力吗? DeepSeekMath用实验给出了肯定的答案。他们做了对比实验:一组模型先进行大规模的代码训练,再进行数学训练;另一组则用通用文本做前期训练。结果很明显,“代码 -> 数学”这条路径训练出来的模型,在解决数学问题时表现更好,无论是纯推理还是写程序辅助计算。
我的理解是,编程语言本身就是一种高度结构化、逻辑严密的“语言”。学习编程,本质上是在学习如何将复杂问题分解成顺序、分支、循环等基本结构,这和解决数学问题的思维过程(分析条件、推导步骤、验证结果)是高度同构的。模型在代码数据上预训练,相当于提前进行了一场严格的逻辑思维体操,之后再学数学,自然就更“上路子”。这为“代码能力是否有助于推理”这个老问题,提供了一个强有力的正面案例。
2.3 一个反直觉的发现:arXiv论文可能没那么神
另一个打破我固有认知的点是,他们发现,在预训练数据中加入大量的 arXiv学术论文(特别是数学、物理等学科的LaTeX源码),对提升模型在各类数学基准测试上的表现并没有显著帮助,有时甚至有害。
这有点反直觉,对吧?arXiv上可都是顶尖的科学论文,逻辑不是更严谨吗?团队尝试了不同的arXiv数据处理方式,比如用清洗过的MathPile数据集(85%是arXiv论文),或者直接处理原始的arXiv LaTeX文件。但在GSM8K、MATH乃至形式化证明任务上,加入这些数据并没有带来预期的提升。
我琢磨着,这可能是因为学术论文的语言风格、表述方式与中小学数学问题、竞赛题相差甚远。论文侧重于严谨的证明和抽象的表述,而基准测试题更偏向于应用和计算。模型学了太多“高深”的表述,反而可能干扰了它学习解决具体问题的“套路”。当然,论文也谨慎地指出,这个结论有局限性,可能对“定理的非形式化”等特定任务有帮助,或者对更大规模的模型才有效。但这提醒我们,数据不是越“高端”越好,匹配任务才是关键。
3. 核心创新:GRPO——让模型学会“自我进化”的强化学习新玩法
如果说高质量数据是打下了好基础,那么 GRPO 就是让DeepSeekMath实现能力飞跃的“武功秘籍”。要理解GRPO,咱们得先看看它要解决什么问题。
3.1 PPO的痛点:那个“笨重”的价值函数
在DeepSeekMath之前,想让语言模型在数学上更精进,常用的一种高级训练方法是 PPO(近端策略优化)。你可以把它想象成训练一只小狗:做对了给零食(正奖励),做错了不给或者轻微惩罚(KL散度惩罚)。但PPO有个“教练”,叫价值函数,它负责预测每个动作(对于模型,就是生成每个词)的长期价值。
问题来了。这个“价值函数教练”本身也是一个神经网络,规模和“小狗”(策略模型)差不多大。训练时,你需要同时维护和优化策略模型和价值模型这两个大家伙,内存消耗直接翻倍,计算开销巨大。更麻烦的是,在文本生成任务里,奖励往往只在生成完整答案后才给出(比如答案最终对不对),让价值函数去准确预测中间每个词的价值,非常困难,就像让教练去猜小狗跑向零食的每一步有多“正确”一样不靠谱。
3.2 GRPO的巧思:用“小组平均分”当标尺
GRPO的聪明之处在于,它直接把这个“价值函数教练”给省了!那怎么判断动作的好坏呢?它用了一个更直接、更符合人类直觉的方法:组内比较。
具体怎么操作?假设我们有一道数学题。不让模型只生成一个答案,而是让它用同样的思路(策略),独立地生成好几份(比如64份)解题过程。然后,我们用奖励模型(一个专门训练来给解题过程打分的小模型)给这64份答案一一评分。
接下来是关键:GRPO不再去估算每个词的价值,而是计算这组答案的平均分和标准差。对于其中一份答案,它的“优势”就是它自己的分数减去这组的平均分,再除以标准差。简单说,就是看这份答案在它所在的这个“小组”里,是高于平均分还是低于平均分,高出或低出多少。
这个“优势”就直接用来指导模型更新:分数远高于小组平均的答案,其生成过程中每一步(每个词)都会被强化;分数远低于平均的,就会被抑制。分数接近平均的,则调整幅度很小。
这样做的好处太明显了:
- 省内存省计算:干掉价值模型,训练时只需要跑策略模型和奖励模型,显存压力大减。这对于我们这些资源有限的开发者和小团队来说,简直是福音。
- 更稳定:奖励模型本身就是通过比较不同答案的好坏训练出来的,天生就擅长做“比较判断”。GRPO利用组内相对分数,正好契合了奖励模型的能力,训练信号更准更稳。
- 鼓励多样性中的高质量:模型为了得到高分,不仅要想办法答对,还要想办法生成** consistently **(持续稳定)的高质量答案,因为偶尔蒙对一次,在组内比较中可能也占不到便宜。
3.3 过程监督:给每一步推理都“打分”
基础的GRPO用的是结果监督,即只给最终答案一个总分。但数学推理步步为营,错一步满盘皆输。为此,团队还探索了 GRPO + 过程监督 的版本。
他们训练了一个过程奖励模型,这个模型不仅能判断最终答案对错,还能给解题过程中的每一个关键步骤打分。比如,第一步“设未知数为X”,第二步“列出方程”,第三步“解方程”……每一步都能得到一个奖励分。
在训练时,模型生成一个答案的“优势”,就不再是最终的总分了,而是从当前词开始,到答案结束的所有后续步骤的奖励分之和。这意味着,如果模型在第一步就走向了错误的方向,即使后面步骤写得再工整,从第一步开始累积的“未来奖励”也会很低,从而受到抑制。这就像老师批改作业时,不仅看最后答案,还看你的解题步骤,一步步给你打钩打叉,指导更精细。
实测下来,加入过程监督的GRPO,效果比单纯的结果监督还要好一点,让模型的推理过程更加扎实、可靠。
4. 效果实测:开源小模型的“逆袭”之路
说了这么多原理,咱们来看看DeepSeekMath到底有多能打。我结合论文里的数据和自己的一些理解,给大家盘盘道。
4.1 基础模型:7B参数,叫板540B巨兽
首先看DeepSeekMath-Base 7B,这是只经过海量数学数据预训练、还没进行指令微调和强化学习的“原始状态”模型。
在需要多步推理的GSM8K(小学数学应用题)上,它达到了64.2%的准确率。而在更具挑战性、达到竞赛难度的MATH数据集上,它拿到了36.2%。这个成绩有多夸张?它超过了Minerva 540B!Minerva是谷歌基于PaLM模型、专门用数学数据训练出来的庞然大物,参数是DeepSeekMath-Base的77倍。这说明,在高质量数据上精耕细作,小模型完全有可能在特定领域超越盲目堆参数的大模型。
更让我惊喜的是它的代码能力。因为是以代码模型为底子,它天生就会用Python。在允许使用Python编程(调用math、sympy等库)来辅助解题的设置下,它在MATH上的表现进一步提升。这意味着它不是一个只会“空想”的模型,而是一个能“动手计算”的实干家。
4.2 指令微调后:跻身第一梯队
在基础模型上进行指令微调,得到了 DeepSeekMath-Instruct 7B。这个模型学会了如何更好地理解人类提出的数学问题指令,并按照“思维链”的方式一步步输出推理过程。
此时的它,在MATH基准上已经达到了46.8%的准确率。这个成绩,已经超过了所有同规模(7B)的开源模型,并且能和许多参数大它10倍的70B级别模型掰掰手腕,比如Qwen-72B。甚至,它比一些知名的专有模型,如Inflection-2和Gemini Pro,表现还要好。对于一个开源模型来说,这已经是巨大的成功。
4.3 GRPO强化学习后:实现最终突破
最后,祭出大招 GRPO,对Instruct模型进行强化学习训练,得到 DeepSeekMath-RL 7B。
效果是立竿见影的:
- GSM8K:从82.9% 提升到 88.2%
- MATH:从46.8% 飞跃到 51.7%
51.7%,这个数字让DeepSeekMath-RL成为了第一个在竞争级MATH基准上突破50%大关的开源语言模型。它不仅仅是在刷训练过的题,在没专门训练过的中文数学基准(如CMATH)上,成绩也从84.6%提到了88.8%。这说明GRPO带来的提升是泛化性的,真正增强了模型的数学推理内核,而不是简单的过拟合。
我特别喜欢他们做的一个分析:他们检查了模型生成多个答案时,最好的那个答案的准确率(Pass@1)和通过投票选出的最佳答案的准确率(Maj@64)。发现GRPO主要提升的是 Maj@64,而Pass@1提升不明显。这意味着,GRPO并没有让模型“灵光一现”的能力突飞猛进,而是让它的输出更稳定、更可靠了。以前可能10次里只有3次能想到正确解法,现在10次里有6次都能想到,然后通过投票机制,我们就能稳定地选出这6次里的正确解。对于实际应用,这种稳定性的价值,有时比偶尔的惊艳更重要。
5. 启示与展望:开源模型的专业化之路
DeepSeekMath + GRPO这套组合拳,给我们这些AI领域的实践者带来了很多启发。
首先,它证明了 “专业化”是开源模型的一条明路。与其追求做一个什么都懂但都不精的“通才”,不如在特定领域深挖。通过构建领域专用的高质量数据集(如1200B数学标记),小模型也能爆发出惊人的专业能力。这为很多垂直行业(金融、法律、生物、医疗)提供了范本:也许我们不需要等待下一个GPT-5,而是可以基于现有的优秀基座模型,用自己行业的精标数据,训练出更实用、成本更低的专属模型。
其次, GRPO为代表的高效RL算法降低了强化学习的门槛。过去,PPO训练对算力的要求让很多团队望而却步。GRPO通过简化价值函数,大幅降低了内存消耗,使得在消费级显卡上对7B模型进行RL训练成为可能。这会让强化学习这项技术从大厂实验室更快地飞入寻常开发者手中。
当然,这条路也还有挑战。论文里也提到了,比如模型在几何和定理证明方面的能力相对还较弱;再比如,如何设计更能理解复杂推理过程的奖励模型,如何让RL训练对奖励信号中的噪声更鲁棒,都是未来需要探索的方向。
从我个人的经验来看,DeepSeekMath的工作最可贵的一点是它的 “可复现性”和“启发性”。它详细描述了数据构建的迭代流程、分享了“代码预训练有益”和“arXiv数据未必有益”这些宝贵经验、并提出了一种简洁有效的GRPO算法。这不像一些只晒成绩单的工作,它更像一份详细的“技术食谱”,告诉后来的开发者:这条路我们走通了,这些坑我们踩过了,你们可以试着跟着做,甚至做得更好。
对于想要尝试的开发者,我的建议是,不妨从理解GRPO的代码实现开始,尝试在自己的任务上应用这种组内比较的思想。数据方面,可以借鉴其“筛选-迭代-人工审核”的思路,构建自己的小型高质量数据集。数学推理的突破只是一个开始,这套“高质量数据 + 高效算法”的组合拳,很可能在更多需要严谨逻辑和推理的领域开花结果。
更多推荐
所有评论(0)