DeepSeek-R1 技术解析
DeepSeek-R1 技术解析(一):纯强化学习如何让模型自己学会推理
为什么推理能力这么难搞
大模型发展到今天,写邮件、翻代码、聊天解闷都不在话下。但一到需要"动脑子"的任务——数学证明、算法竞赛题、复杂逻辑推理——大多数模型的表现就直接掉下来了。
区别在哪?
日常对话和文本生成本质上是模式匹配。你见过几千封邮件,大概就知道邮件该怎么写。但推理不一样——它要求模型在给出最终答案之前,先走一段比较长的思考链:分析条件、尝试思路、发现错误、推翻重来。这段"中间过程"的质量,直接决定了最终答案能不能对。
业界解决这个问题的标准方案不复杂:收集大量人类写的推理过程,让模型照着学。这个步骤叫监督微调(SFT,Supervised Fine-Tuning)。打个比方——找一批数学老师,让他们把解题时的每一步思路都写下来,“看到题目先想什么、怎么列方程、中间怎么验证、最后怎么得出答案”,然后把几万条这样的数据喂给模型。
效果是有的,但两个问题绕不开。
一个是成本。能写出高质量推理过程的人不多,标注费用高。另一个更根本——人类的推理方式本身就有天花板。人会走思维定式,会有盲区,有时候习惯性跳步,有时候绕大弯。让模型模仿人类,等于把人的局限性也一并复制了。
DeepSeek 团队换了个思路:能不能不给模型看任何人类示范,只告诉它"对了有奖励,错了没有",让它自己在无数次试错中摸索出推理的方法?
这个思路的产物之一,就是 DeepSeek-R1-Zero。
R1-Zero:扔掉 SFT 这根拐杖
传统的大模型训练路径三步走:预训练 → SFT → RL(强化学习)。SFT 的角色有点像学骑车时的辅助轮——先扶着走一段,让模型学会基本的对话格式和推理模式,再用 RL 做精细调整。市面上几乎所有大模型都是这么训出来的。
R1-Zero 做了一件比较激进的事:把 SFT 这一步直接跳过了。
从预训练好的 DeepSeek-V3 基座模型出发,直接用强化学习往上训。奖励信号极度简洁——最终答案正确就得分,不正确就没分。至于中间你怎么想的、用了什么方法、写了多少废话,一概不管。
听起来很酷,但落地要做两个选择:用什么 RL 算法,以及怎么判定答案对不对。
算法选型:为什么不直接用 PPO
训练大模型常用的 RL 算法是 PPO(Proximal Policy Optimization)。PPO 的问题在于,除了策略模型(也就是你在训的那个模型)之外,还得额外维护一个价值模型(Value Model),用来估算每一步的期望收益。这个价值模型的规模通常跟策略模型差不多大。
对于 DeepSeek-V3 这种 671B 参数的模型来说,光策略模型就已经吃满了显存,再加一个同规模的价值模型,开销几乎是不可接受的。
而且价值模型在长推理场景下本身也不准。你想,模型写推理过程的时候,经常写到一半发现自己之前写错了,又返回去改。这种情况下,想从半截的输出来预测最终得分,本身就是一件很不靠谱的事。
DeepSeek 用的算法叫 GRPO(Group Relative Policy Optimization)。名字看着唬人,核心思路其实很朴素:
对于每道题,让模型同时生成一组答案(比如 16 个),然后把这组答案的得分互相比较。比组内平均分高的答案,模型就往那个方向学;比平均分低的,就往反方向推。不需要额外的价值模型来估算好坏,直接用组内排名就能算出每个答案的"相对优势"。
这样一个改动,省掉了一个跟策略模型差不多大的价值模型,显存和计算量都砍了一大截。
奖励设计:只靠规则,不用模型打分
RL 需要奖励信号来告诉模型"你做得好不好"。DeepSeek 的做法是全部用规则奖励(Rule-based Reward),不引入另一个神经网络来打分。
具体来说,奖励分两类:
准确性奖励:数学题答案是数字或表达式,直接用规则比对待;编程题丢给编译器跑测试用例,过不过一目了然;逻辑题大多是选择题,对错分明。
格式奖励:要求模型把推理过程放在 <think> 和 </think> 标签里,把最终答案放在 <answer> 和 </answer> 标签里。遵守格式就给分,不遵守就扣分。
两者的权重是一比一,加起来就是总的奖励信号。
为什么坚持不用神经网络来做奖励模型?论文里给的理由很实在:神经网络奖励模型在大规模 RL 训练中容易被模型钻空子。模型会逐渐学会"讨好"奖励模型——输出一些奖励模型觉得不错、但实际上对人类没什么用的内容。这个问题在论文后面关于 DeepSeek-R1 的训练中确实出现了,后面会细讲。
用确定性规则来打分,好处是信号绝对可靠,不存在被钻空子的可能。代价是——只有那些"答案可以明确判定对错"的任务才能用。这就是为什么 R1-Zero 的训练数据主要集中在数学、代码和逻辑题上。
训练细节速览
这里列几个关键的训练参数,有助于理解训练规模:
- 基座模型:DeepSeek-V3-Base(671B 参数,MoE 架构,每次激活 37B)
- 学习率:3e-6
- 每题采样数:16 个输出
- 每步题目数:32 道,所以每步批大小为 512
- 总训练步数:约 10,400 步(约 1.6 个 epoch)
- 最大输出长度:前 8,200 步为 32,768 个 token,之后提升到 65,536 个 token
- 参考模型更新频率:每 400 步用最新的策略模型替换一次
- 硬件:64 卡 × 8 节点 H800 GPU,训了约 198 小时
有一个细节值得注意:第 8,200 步的时候,把最大输出长度从 32K 提到了 65K。这个操作直接导致模型的表现和回答长度都出现了一次明显跳跃。说白了,模型有了更多"思考空间"之后,能力也跟着上去了。
训练过程中发生了什么
训练曲线放出来之后,有两个现象特别值得关注。
回答越来越长——而且是模型自发的
随着训练进行,R1-Zero 的每条回答的平均长度从最初的几千个 token,一路涨到了接近两万个 token。这不是研究人员调了参数让它写长——这是模型自己的选择。它在训练中发现,多写一些中间步骤、把思路展开得更清楚,更容易拿到正确答案。
这说明 RL 的压力下,模型自己学会了"花更多时间思考"。
“等等,让我重新想想”
大概训练到几千步之后,研究团队在模型的一次输出里看到了这样一句话:
Wait, wait. Wait. That’s an aha moment I can flag here. Let’s reevaluate this step-by-step…
翻译过来大概是:“等等,等一下,我发现了一个值得注意的地方。我们重新一步步审视……”
模型在解题过程中,自己意识到前面的推导可能有问题,然后主动停下来,回头重新检查。
没人教过它要反思。 训练信号只有"最后答案对不对"。但模型自己演化出了反思策略——因为会反思的模型,拿到正确答案的概率更高。
研究人员统计了训练过程中一些"反思类词汇"(wait、however、but、retry、error、verify、check、mistake、wrong、evaluate)的出现频率。从训练开始到结束,这些词的使用量涨了五到七倍。
这个现象说明了一件事:只要提供足够强的奖励信号,模型可以自己发现高效的思维策略。 这些策略不是人类设计的,是在真实的解题压力下自然选择出来的。
数值上的表现
在 AIME 2024(美国数学邀请赛)上,R1-Zero 的 pass@1 准确率从初始的 15.6% 一路涨到了 77.9%。如果配合多数投票(让模型对同一道题生成 64 个答案,取最常见的),准确率达到 86.7%,超过了人类选手的平均分。
在编码竞赛和研究生级别的物理、化学、生物题上,也有类似的提升趋势。
R1-Zero 的问题,催生了 R1
R1-Zero 的推理能力虽然强,但有几个很现实的问题,让它没法直接作为产品放出来。
语言混杂。基座模型 DeepSeek-V3 本身是用中英文混合数据训练的。在做推理的时候,模型经常一段话里前面还是英文推导,后面突然变成中文。看的人很难受。
可读性差。思考过程没有经过任何"人类能看懂"的约束,格式混乱,逻辑跳跃。它能解对题,但你看不太懂它是怎么解的。
能力范围窄。R1-Zero 的 RL 训练只针对数学、代码、逻辑这类"答案可验证"的任务。换成开放式问答、创意写作、闲聊这些没有标准答案的场景,表现就不行了。
为了解决这些问题,DeepSeek 团队设计了一个更复杂的四阶段训练流程,最终产出的就是大家现在能用到的那一版 DeepSeek-R1。这个流程的具体设计和每一步的原理,会在后面的文章里展开。
小结
R1-Zero 验证了一个核心想法:让模型在明确的对错信号下自己探索推理策略,这条路是走得通的。 不需要人类手把手教,模型可以在纯 RL 的过程中自发形成反思、验证、回溯这些高级推理行为。
当然,从实验室到产品,中间还有不少工程问题要解决——可读性、语言一致性、通用能力的覆盖。这些是靠后面的多阶段训练流程来补的。
下一篇会详细拆解 GRPO 算法的原理,以及 R1-Zero 训练过程中的更多细节——包括不同难度题目的学习曲线、反思行为是怎么一步步演化出来的。
更多推荐


所有评论(0)