职贝云数AI新零售门户

标题: Deepseek math V2的价值 [打印本页]

作者: A1PZT7rw    时间: 16 小时前
标题: Deepseek math V2的价值
我之前说过讲一下math V2的论文,明天来还个愿      其实为什么这论文没人注重呢?次要是两个缘由:      1- 绝大多数人厌恶数学      2- 之前出过一个prover2,大家也不知道干啥的也和数学有关,然后又来一个      厌恶数学就不说了(甚至有人厌恶香菜),次要说第二个,prove2为什么让人不知道是干啥的?      它其实是lean 生成器,你一定会问什么是lean,如今都是lean4      lean4 是 MS Research 开发的交互式定理证明器,一种函数式编程言语 + 数学验证工具,真实了解不了你就当他是python就完了,但是次要for 数学定理证明     比如:         传统数学:写证明如散文“显然由勾股定理所示,巴拉巴拉...”,人类读懂(小学就这么教的),但电脑无法“验证”每步能否严谨(它不了解)。    Lean 方式化:一切写成代码,电脑逐行编译/验证。证明 = 可执行程序,零歧义、机器查证           传统证明像“手写作文”(客观,比如你高考答最后几道大题的时分),Lean 像“Python 代码 + 测试用例”(运转即验)  
     Deepseek为什么要玩 Lean呢?

举个例子:比如我们要算一个定理,前 n 个奇数的和等于 n^2:

这个对应lean声明(formal state)就是import Mathlib.Data.Nat.Basicimport Mathlib.Algebra.BigOperators.Basic
open BigOperators
/--The sum of the first `n` odd numbers equals `n^2`:`∑_{k = 0}^{n-1} (2k+1) = n^2`.-/theorem odd_sum_square (n : ℕ) :    ∑ k in Finset.range n, (2 * k + 1) = n ^ 2 := by  -- proof to be filled  admit

然后把这个东西改成prompts发给prover2里的V3(prover2是两个模型组成的一个V3,一个7B的子处理器)V3接到一个这样的prompts[System] You are a mathematical reasoning expert and Lean 4 proof designer.Given a math problem and its Lean formal statement, you should:
1. Explain the solution in natural language (chain-of-thought).2. Decompose the proof into clear subgoals.3. Produce a Lean 4 proof skeleton which follows your plan and   contains `sorry` placeholders for subgoals.
[User]Problem (informal):Prove that the sum of the first n odd numbers equals n^2.
Formal statement (Lean 4):theorem odd_sum_square (n : ℕ) :  ∑ k in Finset.range n, (2 * k + 1) = n ^ 2 := by  ?_
处理完了,就成了一个COT的解题的视角+lean的骨架了,紧紧差一些细节的subgoal没去证明[DeepSeek-V3]
(1) Natural-language chain-of-thought (high-level plan):
We prove by induction on n.
Base case: n = 0. The sum over an empty range is 0, and 0^2 = 0.
Inductive step: assume that for some n we have  ∑_{k < n} (2k + 1) = n^2.Then  ∑_{k < n+1} (2k + 1)= (∑_{k < n} (2k + 1)) + (2n + 1)= n^2 + (2n + 1)= (n + 1)^2.Thus, by induction, the equality holds for all n.
(2) Subgoal decomposition (informal):
Subgoal 1 (base case):  Show: ∑_{k < 0} (2k+1) = 0^2.
Subgoal 2 (range decomposition):  For all n,  ∑_{k < n+1} (2k+1) = (∑_{k < n} (2k+1)) + (2n+1).
Subgoal 3 (inductive hypothesis usage):  Assume IH: ∑_{k < n} (2k+1) = n^2.  Show: ∑_{k < n+1} (2k+1) = (n+1)^2.
Subgoal 4 (algebraic identity):  Show: n^2 + (2n+1) = (n+1)^2.
(3) Lean 4 proof skeleton with `sorry`:
import Mathlib.Data.Nat.Basicimport Mathlib.Algebra.BigOperators.Basic
open BigOperators
theorem odd_sum_square (n : ℕ) :    ∑ k in Finset.range n, (2 * k + 1) = n ^ 2 := by  -- induction on n  induction' n with n ih  · -- Subgoal 1: base case n = 0    -- ∑_{k < 0} (2k+1) = 0^2    -- (use simp to evaluate the empty sum)    sorry  · -- Subgoal 2 + 3 + 4: inductive step    -- We rewrite the sum over `range n.succ`.    have h_decompose :        ∑ k in Finset.range n.succ, (2 * k + 1)          = (∑ k in Finset.range n, (2 * k + 1)) + (2 * n + 1) := by      -- Subgoal 2: range decomposition      sorry
    -- Use the induction hypothesis to replace the partial sum by n^2.    have h_using_IH :        (∑ k in Finset.range n, (2 * k + 1)) + (2 * n + 1)          = n ^ 2 + (2 * n + 1) := by      -- Subgoal 3: apply IH      sorry
    -- Now prove the algebraic identity n^2 + (2n+1) = (n+1)^2.    have h_algebra :        n ^ 2 + (2 * n + 1) = (Nat.succ n) ^ 2 := by      -- Subgoal 4: algebraic manipulation      sorry
    -- Combine the equalities to close the goal.    -- target: ∑_{k < n.succ} (2k+1) = (n.succ)^2    -- by transitivity using h_decompose, h_using_IH, h_algebra    sorry

下面open Bigoperators的就是lean4的基本骨架了,然后每一个-- 是一个subgoal,sorry留着当占位符,交给7b的小模型去证明了举一个子目的的例子:[System] You are a Lean 4 theorem prover. Your task is to fill in the proofof the given lemma, without changing its statement.
[User]Context:
import Mathlib.Data.Nat.Basicimport Mathlib.Algebra.BigOperators.Basic
open BigOperators
-- `odd_sum_square` is being proved by induction on `n`.-- In the inductive step, we have the following subgoal:
theorem range_decompose_subgoal (n : ℕ) :    ∑ k in Finset.range n.succ, (2 * k + 1) =      (∑ k in Finset.range n, (2 * k + 1)) + (2 * n + 1) := by  ?_
Please fill in the proof in Lean 4.

7B的就把这个给解了,解完之后的被带入到原来的V3的结果了,sorry被交换成这个结果[Prover-7B]
theorem range_decompose_subgoal (n : ℕ) :    ∑ k in Finset.range n.succ, (2 * k + 1) =      (∑ k in Finset.range n, (2 * k + 1)) + (2 * n + 1) := by  -- Use the standard lemma `Finset.range_succ`.  -- It tells us:  --   range (n.succ) = range n ∪ {n},  -- and the sum over `range (n.succ)` splits accordingly.  simpa [Finset.range_succ, Nat.succ_eq_add_one] using    Finset.sum_range_succ (fun k => (2 * k + 1 : ℕ)) n

每个subgoal都被解完,那么自然就出了一个残缺的lean证明,交给lean verify去验证就可以了所以prover-v2再解答数学题的时分是这个套路,大家看懂了吗?--------------没看懂没关系,反正你们也用不到-------------下面讲容易了解的math-v2mathV2 就特别的好了解,但是很天赋的设计比如标准V3也能做数学题,但是做不了证明题,由于大模型对数学题的做法和人脑思索不一样,所以之前训了prove2,拿lean来做验证大家常常能看到一个数学题给LLM,它结果正确,但是中间的think步骤都在乱写为什么这样?由于你grpo也好,ppo也好,你都确认的是最终答案的值有人说你的不对,由于R1论文里写的,grpo异样对think的中间过程check,check是check,只是check你输入的范式是不是<think></think>
(, 下载次数: 0)
那么prm是不是个好的思绪,但是prm难训啊。Deepseek math V2的做法是什么?其实可以总结为笼统PRM不同于每一步都要验证正确与否的PRM,你针对输入中间结果一致确认个好坏,这个还是可以完成的吧!所以思绪就来了首先,我要有一个小镇做题家,一个给做题家批卷子的教师,但是这个教师能够本身就不咋滴,所以我还要找个教委的来监督教师的程度。
于是就有了下面这3个模型

1. 证明生成器 ,做题家(Proof Generator) (πθ)

这是担任实践生成数学证明的言语模型。

功能: 根据给定的成绩 (X) 生成证明 (Y)。

训练目的: 运用训练好的验证器作为奖励模型 (RY) 对其停止强化学习训练,以最大化证明质量。

自我验证: 为了加强推理才能,生成器还被激励产生证明 Y 之后,紧接着停止自我分析 (Z),即自我评价和纠错。这种自我评价的准确性也遭到奖励,简单说就是你想高考获得高分,光做选择题和填空是不行的,你得做大题证明题,而且你的证明步骤得写清楚,这部分会有额外的分数。

2. 证明验证器 ,判卷教师(Proof Verifier) (πϕ)

这是担任评价证明质量的核心组件。

功能: 根据高层评价标准 (Iv),评价证明的残缺性和严谨性,并给出分数(1 分、0.5 分或 0 分)。

作用: 它作为奖励模型,为证明生成器提供反馈,指点其优化。

训练基础: 它最后是在一个经过监督微调的模型 (DeepSeek-V3.2-Exp-SFT) 的基础上,经过强化学习停止训练的。

3. 元验证器 ,教委的监督人员(Meta-Verifier) (πη)

这是一个专门用于确保验证器本身的分析结果忠实牢靠的辅助模型。

动机: 作者引入元验证是为了处理验证器能够在评分正确的状况下,“虚拟不存在的成绩” 以获得满奖励的破绽。

功能: 元验证器被训练来评价验证器输入的分析 (V) 的质量。它会检查验证器指出的成绩能否真实存在,以及这些成绩能否在逻辑上支持验证器给出的分数。就是你教师写的评语能否靠谱。

协同作用: 元验证器提供的质量分数 (Rmeta) 被整合到证明验证器的奖励函数中,从而提高了验证器在辨认成绩方面的忠实性(faithfulness)

这里其实隐藏了一个逻辑,教委凭什么能给教师的判卷评语打分,他知识才能一定比教师强吗?也就是元验证器一定比验证器凶猛吗?

   非也,由于他俩做的不是一个义务,教师给先生打分,是非常复杂的,它要确认它的确看懂了先生的对与错,成绩到底出在哪?要写出很详实的证明。

   但是,对于教师给题打的分数对应的评语,教委的逻辑是很简单的,就像让你做题你做不出来,但是让你给别人的论调里挑错,你又积极,又能找出成绩所在,一旦元验证(教委的才能)发现教师这评语都末尾乱写了,那么就到了晋级教师的时分。

如今3个role都到位了,末尾做题做题家做了一道题---> 教师不光看你做对没有,还要看你的中间过程,然后从答案的正确性,和中间过程的正确性两个维度给你做题家打分----> 答案普通是有独一的,但是中间过程未必是独一的,怎样能证明教师公平公正的给做题家打分,教委(元验证器)就来检查教师的评语来了。
那么要完成这样一个做题到打分流程,怎样训练呢?
详细过程:

1. 证明验证器 (πϕ) 的训练和加强

作为教师(PRM,虽然是all process的rm),证明验证器 (πϕ) 是整个系统的核心,由于它定义了奖励函数和证明质量标准。

初步训练

1). 基础模型: 验证器是基于 DeepSeek-V3.2-Exp-SFT 版本训练的,该版本经过监督微调(SFT)处理,拥有与数学和代码相关的推理数据基础。

2). 数据构建: 研讨人员首先从 AoPS 竞赛中抓取了 17,503 个次要需求证明的数学奥赛成绩 (Dp)。

3). 生成和标注: 光有Dp这点东西不够用啊,随后,运用DeepSeek-V3.2-Exp-Thinking (这个模型我好像没见过他们发啊)生成了候选证明,并提示该模型停止多轮迭代优化以提高片面性和严谨性。然后就当上人拉肩扛了,没办法冷启动是这样的,找一堆数学专家根据预定义的高级评价标准 (Iv) 对这些证明停止评分(1 分、0.5 分、0 分),从而构建了初始的 RL 数据集 Dv。

4). RL 目的: 验证器经过强化学习停止训练,目的是生成证明分析并给出分数。奖励函数包括有格式奖励 (Rformat): 确保输入包含辨认出的成绩总结和分数,另外分数奖励 (Rscore): 基于预测分数 (s′) 与专家标注分数 (s) 的接远程度 (1−∣s′−s∣) 来奖励模型。

搞定了教师当前,引入教委的监督元验证器 (πη) 提高忠实性

元验证器 (πη) 登场:初步训练存在一个关键破绽:当教师证明存在缺陷 (si<1) 时,验证器可以经过预测正确的低分数来获得满奖励,但同时虚拟出不存在的成绩(hallucinating non-existent issues),多少有点奖励黑客(能够叫奖励乞丐更合适),从而损害了它的可信度。为了处理一成绩,引入了元验证器 (πη)。它是一个独立的、经过 RL 训练的模型,用于评价验证器分析本身的质量,而不是评价原始证明的质量。

元验证训练: 专家根据元验证标准 (Imv) 对初始验证器产生的分析 (Vi) 停止评分 (msi∈{0,0.5,1}),生成 Dmv 数据集。元验证器经过 RL 训练,其目的是评价验证器指出的成绩能否的确存在以及这些成绩能否逻辑上支持验证器给出的分数。

加强验证器: 最终(在某个训练的checkpoint里,论文没说这块),元验证器提供的质量分数 (Rmeta) 被整合到证明验证器的奖励函数中:RV=Rformat⋅Rscore⋅Rmeta。这提升了验证器辨认成绩时的忠实性。经过加强,验证器在验证集上的平均分析质量分数从 0.85 提高到 0.96。

所以也可以了解,元验证器在训练初是存在的,在训练中它的元验证才能就被验证器给吸纳了(教师和教委合体了)

2. 做题家证明生成器 (πθ) 的训练和自我验证

初步训练

初始化: 在每个训练迭代中,证明生成器都是从验证器的检查点初始化的。比较讽刺的是,第一代先生做题家,其实是个教师。。。

RL 目的: 生成器运用训练好的验证器 (πϕ) 作为奖励模型。生成器的 RL 目的是最大化验证器对所生成证明 (Yi) 给出的分数 (RY)。

加强推理才能的自我验证

对于 IMO 和 CMO 等应战性成绩,单次尝试很难生成完美的证明。为了让生成用具有迭代改进的才能,它被赋予了自我验证的才能。

1). 自我分析要求: 训练时,生成器被要求在生成证明 (Y) 之后,立刻生成一个遵照验证器相反格式和标准 (Iv) 的自我分析 (Z)。

2). 结合奖励结构: 奖励函数结合了对证明本身的评分 (RY) 和对自我分析的元验证分数 (RZ)。

◦ RY=s(验证器给出的证明分数)  

◦ RZ=Rscore(s′,s)⋅Rmeta(Z)(s′ 是生成器预测的自我分数,s 是验证器给的实践分数,Rmeta(Z) 是验证器对自我分析忠实度的评价)。

3). 激励机制: 这种结构激励模型做到以下几点:

    ◦ 忠实地承认错误,而不是虚伪地宣称正确。

    ◦ 经过生成正确的证明并准确地看法到其严谨性来获得最高奖励。

    ◦ 生成器获得高奖励的有效策略是:在最终确定输入之前,辨认并处理本身证明中尽能够多的成绩

3. 验证与生成之间的协同循环

验证器和生成器(也带着元验证才能的)经过一个良性循环持续互相提升,这个循环中的关键是自动化标签流程,它使得系统可以在没有人工干涉的状况下扩展数据。

1. 协同效应: 验证器提高了生成器的才能,而更弱小的生成器则产生了新的、更具应战性的证明,这些证明应战了验证器当前的极限,即生成器与验证器之间的差距,说白了验证器整不好就看不太明白生成器再说啥了
(, 下载次数: 0)


2. 自动化标签流程: 但是也不能由于看不懂就再来一次人拉肩扛吧?为了持续改进验证器以顺应这些新的、难以验证的证明,deepseek开发了一个自动化标签流程,该流程取代了人工标注。

    ◦ 步骤 1: 对每个新的证明,生成 n 个独立的验证分析,为啥要这么干呢?

最大化错误发现: 经过多次采样,即便证明的缺陷非常纤细或隐蔽,其中至少一个分析报告辨认出该缺陷的能够性也会大大添加。

为元验证提供根据: 只要那些在多次分析中报告成绩的证明,才会被送入下一步的元验证评价。这确保了只要最有能够包含缺陷的证明,才会停止更深化、更高质量的审查。

确定最低分数: 最终的标签分配流程是检查那些分配最低分数的分析。假如多个独立的分析都报告了相反或相似的成绩(即低分),那么这个证据就更牢靠,随后元验证会确认其有效

    ◦ 步骤 2: 对于报告成绩的分析(分数 0 或 0.5),生成 m 个元验证评价来验证发现的成绩能否有效。

    ◦ 步骤 3: 与此同时,假如大多数元验证评价确认了成绩,则该分析被以为是有效的。

    ◦ 步骤 4: 那么,假如一切验证尝试中都没有发现合理的成绩,则证明被标记为 1 分;否则,证明被标记为有效分析中给出的最低分数。

     1分的(也能够早期会把0.5分一同)这些证明由于元验证被标识为验证你的证明是可信的,由于验证你的证明是可信的,所以你的证明过程是可信的,那么,做题家也就是生成器的证明逻辑本身就可以成为一条dataset被加入到下一轮train的datasets外面,这个就是自动标签的逻辑。

     这种全自动化流程在最后两次训练迭代中完全取代了人工标注,完成了在验证计算规模扩展下,持续为验证器创建新的训练数据,从而进一步改进验证器,由于生成器是验证器的儿子,所以生成器也越来越凶猛,生成器生成的数据被自动标签流成给送到验证器去了,验证器又强了,强了当前又是下一个迭代的更凶猛的生成器了,循环往复。

     这个比prover的影响大的缘由,prover是特定范畴机器对机器的对话(lean),本质下面太窄,但是基于自然言语验证的数学就不一样了,假如你能拿这个方法,做数学题能拿到IMO的金牌,那你玩代码一样可以用相反的方法拿到live bench的实际满分,由于如今的vibe coding的一大成绩是,思索范式比较差,只追求最后的逻辑勉强被满足,然后瞎写好多乱发散的次优代码,全体质量比较差,假如你的中间步骤都能特别的容易被证明,被元证明,那实际上你就能写出和高级程序员一样明晰又简约的代码(不memory等需求处理的长尾效应的前提下)






欢迎光临 职贝云数AI新零售门户 (https://www.taojin168.com/cloud/) Powered by Discuz! X3.5