微信扫码
添加专属顾问
我要投稿
深入解读DeepSeek系列论文,探索代码智能的前沿进展。 核心内容: 1. DeepSeek Coder的发展历程与功能特性 2. 代码智能领域的最新突破:DeepSeek Coder-V2 3. 稠密模型与继续预训练技术(continue pretrain)的深入解析
最早Deepseek开始reasoning就是DeepSeek Coder,它相当于是一个专有的代码模型,这在业界也很常见,像 Llama其实也有code版本,包括像千问其实也有。基本上,做大模型的团队都会有code版本。因为code模型可以帮助大家写代码,本身是一个很有用的专业模式,而coding也是reasoning的一部分。
然后DeepSeek Coder本身没有太多需要说的,因为它就是一个比较普通的版本。比如说第一版,它是一个稠密模型,基本上跟DeepSeek第一版的大模型一模一样,和Llama 2差不多。只不过它的训练数据是代码数据,并不是纯文本,基本上都是代码。尺寸从1.3B到33B,全部都是开源的,他们就做出了这样一个code模型,即Deepseek Coder第一版。后来他们还有一个Deepseek Coder v1.5。v1.5的区别可以简单说一下,就是“continue pretrain”。这里解释一下什么是“continue pretrain”:他们称之为“additional pretrain”。比方说,他们原本有一个Deepseek LLM 7B这样的通用基座模型,然后在这个基础上继续训练2T的tokens,比如说继续训练code。这就是“continue pretrain”。而普通的pretraining就是从头来训练一个coding模型,这两种方式的区别在此。然后他们对第一版的模型继续用2T的code进行训练,而那2T的数据并不是全部都是code,70%是code,还有一些其他数据。这样做出来的版本就叫v1.5。这两个版本都开源了。但DeepSeek Coder对DeepSeek整体的知名度起到了很大作用,因为在早期,特别在国外,Deepseek Code确实有一定知名度,他们的code模型做得很好,所以在国外开发者当中反而比较出名。然后DeepSeek MoE,比如说V2,规模就非常大。V2一开始就是200B,V3又是600B。虽然我们看论文知道它的激活参数和部署成本都比较低,但200B的模型一般人也部署不动,因为需要很强的基础设施。如果开发者想要自己训练并使用200B的模型,难度很高。所以,很多人还是倾向于用7B或10B左右的模型。然而Deepseek从第一版之后就没有再出过7B或10B这样的模型,也没有类似的可扩展中小规模版本。所以后来的Deepseek V2虽然很好,但因为模型太大,实际用的人并不多。但是DeepSeek Coder从1点多B到30B都有,覆盖小到中等规模的范围,并且效果也不错。所以DeepSeek Coder包括后续版本一直被广泛使用。我之前一直感觉,国外对DeepSeekk的印象主要是“DeepSeek在coding上很强”,代码模型做得很好,而其他方面知道的人相对少。Coding对开发者确实非常有帮助。它跟Math不太一样。比方说Math模型只能帮助少数人做题,但Coding可以帮助很多程序员、开发者写代码。Coding是大模型较早能真正提升生产力的典型应用。就像现在很多程序员写代码已经离不开大模型辅助了。那时的聊天模型更多是在聊天等场景,实际对工作效率的提升还不明显。而且当时DeepSeek Coder有一个理论:如果我们专注于代码模型,那么对通用模型在reasoning等方面也会有帮助。
DeepSeek Coder V2就开始使用MoE了,很正常,因为它基于DeepSeek V2的MoE大模型(我们前面也讲过了)。他们在论文里提到,Deepseek Coder V2 is further retrained,也就是说从Deepseek v2那个通用的MoE模型checkpoint继续训练了6T的tokens来做coder。所以可以认为DeepSeek Coder V2就是用DeepSeek V2当基座。
不过这里我想重点提一下的是它的reward model。等会儿讲到R1,包括各种reward和规则的reward。现在先说,DeepSeek V2在做coding和reward model时依然要用reward model。比如说他们在论文里强调reward model的重要性。他们依然会说“We still decide to train a reward model”。尽管后来我们知道他们开始放弃了这个路线。因为当时整个社区都是这么做coding reward的。他们也做了对照实验,发现确实效果更好。奖励模型有什么好处呢?有了奖励模型去判断对错,你就可以从中选择。其实我部署时,一次不生成一个,而是生成64个,假设我这个奖励模型可以判断哪个最对,我把最对的给用户,错的就不要了。这样一来,准确率可能会更高。但这里有一个问题,就是肯定成本变高了。因为原本你只需要生成一个,现在需要生成64个,还要让奖励模型去选。这样一来,生成成本肯定增加,最终也就变得更昂贵。对比其他方法,比如多数投票法(没有奖励模型,自己生成64个结果用投票选一个。比如说64个答案中,有32个答案是1,有20个答案是2,我就认为最终答案是1)、ORM(结果监督的奖励模型),大家可以看到让这三种方法做对比,最后发现过程监督奖励的最好。不过这种做法没在大规模上做过更深入的验证。因为当规模上去以后,reward model本身就会出现各种问题;而rule-based reward其实更robust。如果你有大量数据,rule-based依然准确稳定,但一个额外训练的模型就可能出很多状况。不过在那篇论文里,他们和当时的社区主流想法一致,都还是在用reward model。这算是比较早的reasoning尝试。
然后接下来我要讲到Math相关研究,这是一篇很重要的paper,但是并不太常被大家提到。我觉得就是因为这个paper它很像一个学术的小paper,它不像刚刚说的那些paper,一来就搞一个大模型,然后开源,那些paper可能就很有名。因为这个paper是当时公开的第一篇follow OpenAI那篇paper,OpenAI当时发了paper叫《Let's Verify Step by Step》,就是那篇paper我觉得引导大家走上了reward model这条路。从OpenAI发的那篇之后开始,基于过程监督(process supervision)的reward model就变得很火,然后很多人做。而DeepSeek-Math就是公开的第一篇复现OpenAI那套流程的工作——相当于不用人类标注,自动化复现的流程。当时OpenAI发完《Let's Verify Step by Step》后有个结论,说要用过程监督的reward model,对decoding有帮助,大家就很信这个。这里解释下过程监督(process supervision)奖励模型:比如数学题有多步推理过程,传统结果监督(outcome supervision)只监督最终结果对不对,而过程监督要判断每一步对不对。OpenAI的做法是花大价钱找数学专业人士标注了80万条数据(PRM800K数据集),用这些数据训练模型预测每一步的正确性。而DeepSeek做了个创新——他们不要人工标注,而是自动构建步骤正确性的label来训练reward model。具体实现逻辑是:假设模型生成到第二步时,固定第二步内容让模型继续生成多个后续解。如果这些后续解最终正确率高,就认为第二步是对的;反之则判断第二步错误。通过这种"让模型自我验证后续结果"的方式,DeepSeek实现了完全无需人工标注的过程监督。他们实验发现这种自动标注的效果接近人类标注,但成本大幅降低。这个工作(Math)和OpenAI的核心区别在于标注方式,但最终效果接近。
这篇paper在学界地位还不错,因为在这个方向上其实还是一个milestone。因为在那个时候,这是唯一一个公开的基于过程监督的数学奖励模型。OpenAI虽然也做了,但OpenAI没有开源。然后大家很多时候也没有这个成本去让人标注数据,其实都是在用DeepSeek类似的方法,就是用这篇paper类似的方法。
这篇文章非常重要,因为著名的那个GRPO方法就是这篇文提出来的。这个东西做的很简单,因为它就是一个7B的模型。 其实在这里大家看到它在DeepSeek Coder V1.5 7B上继续训练,得到了DeepSeek Math 7B ,很长一段时间这个7B都是最好的开源的数学模型。然后会有一个很重要的事情,为什么非常值得拿出来讲呢?是他们发明的这个东西,就是GRPO。这篇paper其实很值得看的一个地方是他们讲强化学习的这部分。因为我们知道到今天,其实从这篇paper开始,后面所有的DeepSeek的后处理做强化学习的DeepSeek V2到V3到R1其实全是用的GRPO。当时大家用的比较多的是PPO(Proximal Policy Optimization,近端策略优化),本来PPO本身并没有什么问题,PPO是OpenAI最早弄的,作为一个经典的强化学习方法本身并没有什么问题。它唯一的问题就是DeepSeek觉得它成本太高,然后觉得它跑起来可能占的资源比较多。PPO里面有四个model,这一个是policy model,一个是奖励模型reward model,还有一个reference model,然后另一个就是value model,而且PPO中每一个model都很大。这些东西都是要放到你的那个机器上,然后整个东西占的资源就很大。所以说PPO的成本就比一般的SFT要昂贵不少。他们觉得这个东西太昂贵,这里又体现了DeepSeek非常想要把成本压下去的一个地方。就是他们又开始做一些降本增效的事情,他们就搞了一个新的东西叫GRPO,GRPO它就没有这个value model了。把value模型拿走了之后,这个GRPO相当于它存的时候就少了一个模型,而且这个模型可能很大。比如说这个模型可能是一个100B的模型,然后相当于他在训练的时候,他就空出来的这些内存就可以用来做其他的事情,他整个训练的效率就会更高。这就是GRPO,GRPO一直被他们沿用,包括到后面R1其实都在用这个,包括到今天GRPO其实也被广泛地实现在了各种开源的框架下。
这篇论文是我自己很喜欢的一篇论文,因为我很早就开始关注强化学习,我觉得这篇论文在Math里做强化学习方面非常有洞见。因为在那个时候做这种在线强化学习,社区里并没有广泛地这么做,大多数人还是做蒸馏,做SFT这些。强化学习不是一种蒸馏,强化学习更像一种自我提升。然后那个时候并没有形成广泛的做强化学习的趋势。包括DeepSeek Math出来之后,强化学习依然没有成为主流,至少在开源的社区里或者学界里没有成为主流。因为一个是训练代价还是有点大,需要的卡稍微有点多,然后大家做SFT效果也不错,所以一直好几个月这个领域并没有成为主流,这篇论文应该是24年中旬就有了,但直到好几个月后,强化学习才开始成为主流。当然它这个强化学习还是reward model,这就是可以看出来DeepSeek在这个时候他还是没有采用最新的那个基于规则的reward,他做Math following什么?Following的还是刚刚讲的那篇,相当于他们用同样的方式搞了那个训练数据集,然后训练基于过程监督的奖励模型,然后用这个奖励模型来做他们这个GRPO。
可以看出来,在很长一段时间,大家的思路都是要做奖励模型,但DeepSeek做了一些很有意思的实验。Reasoning这个领域做的事情就是Rejection strategy(拒绝策略),其实包括Llama 3的paper里也提到了这一点,Llama 3他们的后训练做数学和编码,做推理基本上都在做Rejection strategy。什么意思呢?就是说,我的模型自己生成了很多数据,然后我去看它的答案对不对,错了就丢掉,正确的留下来,再用这些正确的数据继续训练模型做SFT。但这里面有一个问题,就是有一个在线(online)和离线(offline)的问题,这个问题显得很重要。在很长一段时间,整个社区做reasoning都是做离线的。做在线时,模型的数据会随着模型的训练而变化。例如,我现在模型生成的数据出来后,模型就变了,变了之后需要生成新的数据继续训练。这个过程是持续的,并且频率非常高。但离线是什么意思呢?就是我用当前的模型生成一个很大的数据集,然后拿回来训练一次,然后就结束了,数据没有随着模型的更新而变化。社区里很多时候,大家都在做离线训练,或者做一些所谓的迭代式(iterative)训练。迭代式训练介于在线和离线之间,就是我做一个大的数学问题,训练一次,但为了更新数据,我可以继续训练,做一代,再训练一代。新的模型基于新的数据集进行训练,再回去更新模型,可能会变得更好,继续做几代。但一般大家做三代、五代,做不下去或收敛了。这并不完全是在线训练,像最早的PPO在线训练,它需要做很多代的训练。例如R1或者类似的训练,需要做一百代以上。现在大家要么做一代,要么做三代、五代,没人做十几二十代的训练,更别说做一两百代了。所以做在线强化学习的人很少。在reasoning领域,大家还是在做SFT,做RFT,包括Llama 3主要也是在做RFT。尽管DeepSeek这篇论文很早就指出了在线训练的价值,但大家还是回到了做什么?做DPO。DPO当然也可以做在线,但DPO更多时候是离线做的,做拒绝采样。我认为某种程度上是因为它不太稳定,难以调优,并且成本较高。因为做在线训练时,无论是PPO还是GRPO,你需要更多的计算资源,资产资源更大,而且它相对不稳定,特别是你加入了奖励模型后,调参变得更加困难。而做常规的SFT或RFT,你随便训练一下效果就不错。我认为这些原因加上社区开源生态尚不成熟,导致了这一方法没有成为主流。所以说我觉得种种原因,导致在公开层面的问题,尽管这个DeepSeek数学论文出来很早,并且也有一些工作做过类似的尝试,但这些并没有成为主流。在好几个月的时间里,它都没有成为主流。我们实际上在刚刚最开始提到,我们在半年之前,就尝试过在线(online)的PPO结合过程监督奖励模型做强化学习的在线训练。但我们发现很难做到理想效果,最终失败了。我觉得很多其他团队也做过类似尝试,但可能也没有成功,这也导致了它没有成为主流。这里就是背景原因。
然后这篇DeepSeek Math还有一个非常有趣的章节,就是最后的5.2.2。他们讨论了为什么强化学习(RL)有效,以及如何实现更有效的强化学习,我觉得这和后来的R1模型的开发直接相关。这说明DeepSeek团队很早就开始思考这个问题了,事实上,这已经是超过半年前的事情了。为什么呢?因为当时有这个图表,大家引用最多的是"Pass K"。Pass K是什么意思呢?就是我进行K次采样,8个或16个回应,这些回应中有多少是正确的?例如对于我这个查询,如果K达到90%,就意味着我对所有的查询样本,假设16个回应,其中90%的回应都包含了正确答案,这个指标为什么重要呢?因为它衡量模型是否有能力采样出正确答案。因为做强化学习时,模型可能需要自己探索。这个能力本质上标志着模型是否具备探索正确答案的能力。如果模型没有这个能力,那么做强化学习的效果可能就会大打折扣。而这个论文实际上给了一个负面信号,告诉大家,可能强化学习并不像我们想象的那样有效。大家可以看到,当K=1时,蓝线高于绿色线,看起来表现很好。但当K增大时,尤其在GSN8K这个简单的数学集上,绿色线反而超过了蓝线,这意味着模型的探索能力在增加K后变差了,这种情况在其他模型中也类似,最终两条线会重合。这与大家的预期不同,大家本来想的是,当强化学习能够规模化、自我迭代时,模型应该可以持续提升并不断改进。然而,这个图给出的负面信号表明,效果并没有预期的那么好。包括他们自己也说,他们发现这种改进其实只是把正确答案排序到了更前面,而不是通过强化学习根本性地提高了模型的能力。这是一个非常有趣的观察,因为当时几乎没有人做这种观察。而且DeepSeek写得非常诚实。因为尽管他们自己做的实验结果要好很多,他们反而给自己泼了盆冷水,在论文中也坦诚地讨论了这些问题。他们没有急于宣传说自己的方法很好,而是反过来研究这是否真的是有效的。他们对现象的观察非常严谨,反而将问题呈现给大家,告诉大家这种方法可能并没有如预期那样工作。接着,他们探讨了第二个问题:如果看起来这个方法没有达到预期的效果,我们该如何实现真正有效的强化学习?如何实现更有效的强化学习?他们没有做这些实验,但开始提出假设,例如数据要更好,推理(inference)怎么提升等方面。这里提到一个很有意思的东西,就是奖励函数(reward function),因为他们这里还是用奖励模型(reward model)。他们提到的第一个要点就是如何提高奖励模型的泛化能力,这对于让模型实现有效性和提高它的能力至关重要。今天来看,我们可以得出一个结论。当然,这两个是分开的:你当然可以关注如何更好地设计奖励模型,提升它的能力,让它更有效;但从今天的角度来看,另一种方式是完全不用奖励模型。你只用规则,结果就会变得最稳健。比如说在数学上,你认为最终答案是正确的,那你就认为这个解法是对的。这样的规则是普遍适用的。无论你是小学、高中、初中、大学,最终都有一个标准答案。如果标准答案做对了,我就认为这个解法是对的,或者至少问题不大,尽管不总是这样,比如你可能偶尔答对了,但过程错了。但这个规则是简单直接的,它不会考虑你是小学生、大学生、研究生或博士生,规则就是这样简单有效。但奖励模型就不一样了。奖励模型,假设你在小学和初中数据上训练的奖励模型,能够很精准地判断数学题做得对不对,但如果突然给你大学水平的数学题,你的判断可能就不准确了。这就是所谓的泛化能力。奖励模型总是很敏感,而规则则很稳健(robust)。
再一个有趣的工作,就是DeepSeek还做了一些定理证明(theorem proving),DeepSeek Prover。这个DeepSeek Prover还有两个版本,一个是DeepSeek Prover v1,另一个是DeepSeek Prover v1.5。这个非常有意思。那这个"prove"是什么意思呢?我觉得这与后面他们做的每个reasoning工作都相关。因为做定理证明(prove)本质上就是使用规则。我来说一下"prove"这个概念,这是指数学定理证明的任务。定理证明任务与一般的数学问题不同,它有一个额外的引擎,叫做定理证明的引擎。打个比方,假设你有一套形式化的数学语言,你将这些声明输入,就像给Python程序提供执行指令一样,它会告诉你是否正确。它给出的反馈非常标准,类似于数学中的形式化语言验证。DeepSeek Prover做的事情是将非形式化的、比如自然语言(natural language)或者非正式的数学问题转化成形式化语言,进行验证。他的任务就是将非形式化的语言转换为形式化的语言。这个做法有一个非常独特的地方,就是一旦转换成形式化语言,外部工具就可以帮助验证其正确性,并且这个工具并不依赖于奖励模型。这就涉及到刚才讨论的那个问题,定理证明的过程就像是规则化的。就像之前说的规则是人为定义的,比如说"最终答案是否正确?"或者"在coding问题中是否通过了?"。而DeepSeek的规则化并非人为定义,而是来源于定理证明引擎的定义。这里没有使用在线(online)训练,而是使用了迭代式训练。我之前提到的迭代式自我更新,即生成数据,使用工具验证结果是否正确,错误的就丢掉,正确的就留下来,再生成新的数据,继续这个过程。这是一个迭代过程。正如我们在DeepSeek Math中提到的那样,已发现在线训练比迭代训练更有效。
DeepSeek Prover v1.5则是在强化学习中应用了新的方法。与之前的迭代式自我更新不同,虽然他们仍然使用GRPO,但也有一些变化,重点讨论奖励模型(reward model)。他们认为,通常情况下,奖励模型会使得强化学习变得更有效,但在这种定理证明中,奖励信号是稀疏的,因此并没有继续使用奖励模型,而是选择去除那些难以判断的部分。这相当于他们绕回了弯路。虽然他们逐渐放弃了奖励模型的做法,但在后期,reward model的影响力依然存在。这个模型一完成便开始部署,也尝试了一些当时在reasoning领域很火的技术,比如MCTS。这是一种通过多步展开生成决策树的方式。通过这种方法,他们在报结果时,实际上开发了一个MCTS的变体。这也非常有趣。曾经在OpenAI的发布后,大家讨论过MCTS是否是OpenAI用来实现其技术的一种重要方法。因为MCTS需要在生成时构建决策树,过程较为复杂。到今天我们看到的R1模型实际上更简化了,做法没有那么复杂。虽然这两个工作是比较小众的,专门做定理证明的,但它们非常独特,因为它们专注于规则可验证的场景。
大家可以看到,DeepSeek R1 就是大道至简。无论之前走了什么弯路,或者进行的探索,最终都汇集到了这一条pipeline上。那么它的reward是什么呢?它的reward就只有两个:
1.比较输出对不对
2.检查模型的输出是否符合预期格式
这样做的原因是因为强化学习(RL)并没有显式地定义规则。如果模型没有按照预定格式输出,它可能会偏离正确的轨道。至少,我们希望模型能按照预定格式生成。例如,首先思考(think),然后输出“think token”,最后输出答案。这些都是规则化的过程,而不依赖奖励模型。大家可以看到,与之前的DeepSeek Coder 相比,DeepSeek Math 仍在使用奖励模型,而DeepSeek Prover开始尝试不使用奖励模型,到DeepSeek R1时,奖励模型彻底被摒弃。这是一个非常简单的规则,只是直接看最终结果是否正确,是否符合预期。
而DeepSeek R1的“zero”模型值得大家注意,它之所以叫“zero”,是因为没有前期的SFT(监督微调),它的base model直接用于强化学习(RL)。这与传统的做法不同,传统方法如Llama和其他工作都是先进行SFT再开始做RL。这是一个创新点,或者说,尽管这个做法看起来很简单,但之前可能没有很多人尝试过。很多人天然认为不需要这样做,或者认为做SFT会更好,这样二次训练会更简单。因此,尽管大家可能没有尝试过,但DeepSeek团队却从这里开始,并且这个时候有了“long COT”(长思维链)的概念,也有了OpenAI的成果作为背景,大家开始监控生成的思维链长度。DeepSeek R1尽管只是使用了“zero”模型(没有做SFT),但它在解决难度较大的数学问题(如AME)时,效果却持续提升。没有使用蒸馏(distillation)技术,也没有外部奖励模型,它完全依赖自己在数据集上的强化学习,效果依然显著提升,从0.2、0.3一路涨到0.7、0.8。这个过程也让人印象深刻,因为OpenAI的技术人员后来也承认,DeepSeek可能用的技术与他们类似。尽管很多人尝试通过蒸馏、MCTS等复杂方式复现OpenAI的成果,但没有人采用这种简化的方法。DeepSeek通过简单的规则和生成长思维链的方式就实现了效果,这一做法与之前的复杂解码方法形成鲜明对比。这让我觉得,很多人对R1的理解并不完全,实际上它的思路比以往任何时候都简单和高效。他们并没有依赖复杂的工具或模型,而是通过简单的规则进行生成,并利用强化学习让模型自己优化。
我认为,DeepSeek R1 代表了AI模型设计的一个重要转折点,它将复杂的流程简化到极致,强调基于规则的强大能力,同时摆脱了依赖奖励模型的传统方法。即使它是“零”模型,它也能取得卓越的成果。其创新的思想和简洁的实现让整个AI领域感到非常震撼。
回顾一下:R1基于V3作为基座,而V3本身就是他们之前已经开发出来的。V3本身并不简单,它引入了很多复杂的技术,包括从V2到V3的转变中,包含了MLA,还有许多MoE和共享专家等技术。这些技术在之前的论文中已有详细描述,因此R1便基于V3进行开发。接下来做了什么呢?做了GRPO。GRPO是DeepSeek Math论文中提出的,也是他们自己开发的,不需要再多次解释。这个论文早在六个月前就已经发布,他们也摒弃了之前使用的复杂技术,如MCTS和奖励模型,转而使用更简单的规则化方法,最终效果非常好。他们通过这种方法成功地实现了规模化,结果也非常出色,迅速引起了广泛关注。但我觉得,这篇论文是今天讲的所有论文中最简单的一篇。因为它并没有太多技术细节需要讨论,然而效果却非常好,结果也让人印象深刻。
前面的工作非常关键,尤其是V3这样的进展,GRPO等技术的使用,虽然走过了一些弯路,但最终效果非常明显。所以我觉得,这篇论文的成果让我感到非常惊讶,因为“zero”的训练模式,我之前并未想到能取得这么好的效果。然而,今天讲到的这些工作也表明,它并非凭空出现。它集成了他们之前,无论是成功的还是失败的经验,最终得出了如此优秀的成果。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-03-09
LLM运行框架对比:ollama与vllm浅析
2025-03-09
真·企业级方案!MindSQL开源:四种训练方式+私有数据+RAG+生产高并发
2025-03-09
智能体的互联网时代来临,相当于http协议的MCP协议让智能体与数据源无缝连接
2025-03-09
Manus背后的核心技术:如何通过MCP简化AI集成
2025-03-08
5 个人、3 小时,开源复刻 Manus?
2025-03-08
AI 技术应用落地与投资机遇|线性观点
2025-03-08
解锁Dify:开源智能体的魔法棒,开启AI应用新旅程
2025-03-07
数字人的 DeepSeek 时代来了
2025-01-01
2024-07-25
2024-05-06
2025-01-21
2024-09-20
2024-07-20
2024-06-12
2024-08-13
2024-07-11
2024-12-26
2025-03-08
2025-03-03
2025-03-02
2025-03-01
2025-02-26
2025-02-23
2025-02-18
2025-02-15