距离2022年底ChatGPT发布开启LLM时代才过去两年多一点时间,刚进入2025年,DeepSeek-R1就将LLM真正推向了深度思考时代。
两年多的高速发展,前所未有的按周迭代,如今想来都一阵恍惚。2023年是LLM最快速发展的一年,被称为LLM元年,新的开发范式出现
,全民AI浪潮涌现。2024年,基于LLM的应用已经开始成熟,Agent百花齐放,进入元年,各种应用层出不穷,一个人公司成为可能。
当我们以为LLM基本就这样按部就班向”应用“时,R1出现了,它发迹于OpenAI-o1,但超越了o1。关于o1,我的观点和OpenAI前首席研究官Bob的观点一致:它的目标是解决复杂问题,大多数人日常工作中并不会遇到需要o1的需求(可以参考
关于AI前沿的思考
(https://yam.gift/2024/12/20/NLP/2024-12-20-Think-About-AI-and-Related/)
)。但是R1提升了LLM的整体能力,让模型真正在推理时进行自我反思和验证,这当然适用于复杂问题,但日常工作很多场景也能受益,AI更加像人。我觉得这是R1对整个行业的贡献,其作用不亚于ChatGPT的发布。
DeepSeek-R1:LLM进入深度思考时代
首先,我们来解读R1的论文,这篇论文本身不复杂,条理很清晰。论文核心内容可以概括为三个部分:R1-Zero、R1和蒸馏。各部分都可以简单概括为一句话。
R1-Zero
=Pretrain(DeepSeek-V3-Base)+RL(GRPO),证明Pure Rule 的 RL也有效,表现出自我验证、反思、和生成长COT的能力。但有可读性差、语言混合问题。
R1
=Pretrain+Cold-Start(SFT)+RL(提升推理能力)+生成数据和SFT监督数据微调Base(SFT)+RL(对齐),先提升推理能力,搞出数据,再提升LLM整体能力。
蒸馏
=R1数据+学生模型SFT。蒸馏>RL,R1数据SFT的小模型能力得到提升,且优于强化学习+小模型。
真是再次证明了”数据决定上限,算法逼近上限“,也重新定义了什么叫”高质量数据“。
R1-Zero:RL的潜力
纯RL,基于规则,没有监督数据。
GRPO
放弃了通常与policy模型大小相同的critic模型,从群体分数来估计基线。具体来说,对每个q,GRPO从旧的policy采样一组输出,然后通过下面的目标函数优化policy。
其中,𝜀 和 𝛽 是超参,Ai是advantage,如下。
GRPO相比PPO要简单,但更重要的是它有效。
RM
基于规则,没有ORM或PRM!包括精度奖励和格式奖励(把思考过程放在
和
之间)两种规则。
这真是振奋人心的发现!我个人对强化学习(以及基于规则)的执念已经很久了(可以追溯到2018年),之前很多次提到过(见后面附录1相关文章),也做过一些尝试,但一直没有取得很好的成果。看到R1论文的第一反应是不可能吧?自己跟着复现后真的是震惊到了,太漂亮了。
数据构造
训练数据基于如下模板构造:
A conversation between User and Assistant. The user asks a question, and the Assistant solves it. The assistant first thinks about the reasoning process in the mind and then provides the user with the answer. The reasoning process and answer are enclosed within and tags, respectively, i.e., reasoning process here answer here . User: prompt. Assistant:
其中的prompt就是相应的问题。这里有意将约束限制在这种结构格式上是为了避免任何特定于内容的偏差,如强制反射性推理或促进特定的问题解决策略,确保能够准确观察到模型在强化学习过程中的自然进展。
上面的模板是Base模型,Instruct模型也是类似的。
结果
非常漂亮的曲线,非常Nice的表现!而且,实际中还可以通过多数投票进一步提升性能,如红色曲线所示。
Self-evolution
然后是过程中表现出来的自我进化,它最引人注目的方面之一是
随着推理时计算的增加,出现了复杂的行为
。诸如反思(重新审视和重新评估先前的步骤)和探索解决问题的替代方法等行为。这些行为是自发产生的,是模型与强化学习环境交互的结果,而不是明确编程的、外部调整的结果。
Aha Moment
接下来是很多人津津乐道的Aha Moment,其实就是模型自动学习重新评估、检查或验证,即自我反思和错误修正,有点类似”恍然大悟“。它显示出强化学习的神奇之处:我们并没有明确告诉模型如何解决问题,而是通过提供适当的激励,让它自主发展出高级的解决问题策略。
Aha Moment可以看作是模型在”推理时思考“的表现,其
外在表现
就是出现类似确认、重新检查、评估、验证等词,并且回复长度增加。如下图所示。
但值得注意的是:
关于这点我们后面会专门介绍另一篇研究的结论,这里不再赘述。
至于为什么R1-Zero可以有这样的效果,我觉得还是因为模型本身就有这样的能力,RL做的只是释放或引导出这种能力。后面我们会介绍通过少量SFT数据也可以做到。
R1-Zero表现出来的问题主要是两个:可读性差和语言混合现象。但我在复现时感觉第一个问题还好,第二个问题确实存在,也比较明显。不过话说回来,只要结果正确,过程人类可不可读,好像问题也不太大吧(doge)。
最后再补充一句,R1-Zero用纯规则强化学习能做出这样的效果,真的很厉害!
R1:LLM再次进化
接下来是R1,它是想改进R1-Zero自然延伸而来。R1-Zero后马上紧跟两个问题:
通过加入少量高质量数据作为冷启动,是否可以进一步提高推理性能或加速收敛?
如何训练一个用户友好的模型,该模型不仅产生清晰连贯的思维链 (CoT),而且还表现出强大的通用能力?
冷启动
R1第一步,冷启动。收集少量(Thousands)高质量CoT数据微调模型作为RL的起点(初始Actor)。
以长链推理(CoT)作为示例进行少量提示,直接提示模型生成带有反思和验证的详细答案。
以可读格式收集 R1-Zero 输出,并通过人工后处理来提炼结果。
冷启动数据相比R1-Zero的优势:
可读性:R1-Zero的内容经常不可读,冷启动的数据都是可读格式。
推理导向的RL
接下来和R1-Zero一样(大规模RL),目的是提升模型推理能力,尤其是推理密集的任务。
训练过程中,依然观察到语言混合现象,尤其是Prompt包含多语种时。
为了减轻这个问题,引入「语言一致性」奖励,计算方式为推理链中目标语言词的比例。虽然导致性能略微下降,但结果可读。
拒绝采样和SFT
上一步收敛后,主要用来收集SFT数据。就是说,前面做的工作都是为了搞数据。与主要关注推理的初始冷启动数据不同,此阶段整合了来自其他领域的数据,以增强模型在写作、角色扮演和其他通用任务方面的能力。
即用
生成数据
在DeepSeek-V3-Base上进行SFT。这个做法就是一般意义上的SFT,只是这里数据不一样。
推理数据:600k。用上一阶段的模型生成推理链数据(每个Prompt输出多个Response,选择正确的)。扩充了数据,过滤掉了结果中混合语言、长释义和代码块的推理链。
非推理数据:200k。复用了DeepSeek-V3的一部分SFT数据,对于某些非推理任务,调用DeepSeek-V3生成一个潜在的推理思维链,然后再通过提示来回答问题。对非常简单的query(比如“你好”之类),回复不用CoT。
所有场景RL
对齐阶段,提升有用性和无害性,同时保持推理能力在线。这里对齐时采用了混合方法。
推理数据(数学、代码和逻辑推理):遵循 DeepSeek-R1-Zero 中概述的方法(即规则)。
非推理数据:采用奖励模型来捕捉复杂和细微场景中的人类偏好。
对于有用性,专注最终总结,确保评估侧重于
响应对用户的实用性和相关性
,同时尽量减少对基础推理过程的干扰。
对于无害性,评估模型的整个响应,包括推理过程和总结。
经过以上4步,R1就出炉了。可以看到前两步主要是用来搞数据,具体来说就是带思考过程的数据。当然,后面两步也有改进,比如综合了两种数据训练和对齐。
这算不算是重新定义了“高质量数据”和“新的训练范式”呢?不管答案如何,我想,后面所有的LLM可能都会“R1”一下的。
蒸馏:小模型也有大能力
最后是蒸馏,也就是让小模型也拥有推理能力。具体做法是,直接用前面的800k数据微调Qwen和LLaMA,这种蒸馏方法叫黑盒蒸馏。
值得注意的是,这里没有继续RL(即使合并 RL 可以大大提高模型性能),他们将这个留给了社区。然后,就真的出现了(后面会介绍的DeepScaleR),算是补充了这里的后续。
R1相关研究探索
这一部分我们介绍与R1相关的一些比较有意思的研究。
oat-zero
首先来看oat-zero,相关内容如下。
There May Not be Aha Moment in R1-Zero-like Training — A Pilot Study
sail-sg/oat-zero: A lightweight reproduction of DeepSeek-R1-Zero with indepth analysis of self-reflection behavior.
主要有下面几个结论。
在 R1-Zero 类训练中可能没有 Aha 时刻。相反,Aha 时刻(例如自我反思模式)出现在第 0 轮,即基础模型阶段。说明Aha不需要RL也可以有。
Base模型的回答中存在
表面自我反思(SSR)
,在这种情况下,自我反思不一定导致正确的最终答案。比如四种行为中的后两种,如下所示。注意啊,这里并不是说Base模型不能自我反思,只是说
存在
表面自我反思。
响应长度的增加现象并非自我反思的出现所导致,而是强化学习优化良好设计的基于规则的奖励函数的结果。
RL是将原本表面的自我反思转化为有效的自我反思,以最大化预期奖励,从而提高推理能力。
总的来说,可以概括成两句话:Base模型也可能Aha,但不否认RL不能Aha;RL能将Base的表面自我反思转化为有效自我反思,只是并不一定长度就一定增加。我觉得这个结论是Make sense的,Base模型只是具有能力但没有被激活,RL才激活了能力。
DeepScaleR
接下来是前面「蒸馏」部分提到的DeepScaleR,相关内容如下。
DeepScaleR: Surpassing O1-Preview with a 1.5B Model by Scaling RL
agentica-project/deepscaler: Democratizing Reinforcement Learning for LLMs
它的做法是直接从
Deepseek-R1-Distilled-Qwen-1.5B
强化微调(用高质量40K Math数据)。得到的模型在AIME2024和MATH500上超过了
o1-preview
。
这里的背景是:复现R1的计算量比较大,⩾32K context,~8000 steps,即使对1.5B模型也需要70,000小时A100。为了解决这个问题,本文使用一个蒸馏模型,并引入迭代式的长度增加方案。计算资源降到3800小时A100。
本文主要证明了通过 RL开发定制的推理模型既可扩展(Scaling)又具有成本效益。
它的数据处理流程如下:
使用
gemini-1.5-pro-002
从官方Solution中抽取答案。
使用
sentence-transformers/all-MiniLM-L6-v2
作为Embedding(使用语义相似度)移除重复/相似问题。
移除不能用
sympy
评估的问题(这类问题需要使用LLM评估,这不但会影响训练速度,还可能引入噪声奖励信号)。
ORM设计:
1:如果答案通过基础的
LaTeX/Sympy
检查。
交互式的上下文长度增加方案:从短到长。
长上下文为模型提供更多思考空间,但会降低训练速度;但短上下文可能会限制模型解决需要较长上下文的更难问题的能力。
所以分两步走:8k→16k和24k。第一步在8k上实现更有效的推理和高效的训练;接下来扩展上下文长度,以便模型可以解决更复杂的问题。
为什么要分两步走?因为在训练前评估模型时,发现错误响应的长度是正确响应的3倍。这表明较长的响应通常会导致不正确的结果,直接用长上下文窗口进行训练可能效率低下,因为大多数Token实际上都被浪费了。
我们看看实际的效果,如下所示。
Step1
Step2
Step2-add
ContextLength
8k
16k
24k
ResponseLength
5500→3500
3500→5500
ClipRatio
4.2%→6.5%
2%
Reward
46%→58%
62.5%
AIME Acc
33.9%
38%
43.1%
LIMO和s1
这两篇都是用少量高质量数据SFT激活模型推理能力的研究,相关内容如下。
LIMO: Less is More for Reasoning
GAIR-NLP/LIMO: LIMO: Less is More for Reasoning
s1: Simple test-time scaling
simplescaling/s1: s1: Simple test-time scaling
LIMO提出了如下假设:如果模型拥有丰富的推理知识并获得了足够的计算空间,那么激活推理能力可能只需要
少量鼓励长时间思考的高质量
训练样本。
然后它验证了假设,复杂的数学推理能力可以通过极少的高质量数据(817条,1/100的数据量)有效地引出(绝对性能提升40.5%)。而且普遍适用于分布外问题,表明模型获得了真正的推理能力,而不是简单的模式匹配。
这一发现不仅挑战了复杂推理任务需要海量数据要求的假设,还挑战了人们的普遍看法,即监督微调主要导致记忆而不是泛化。
s1类似,1000条高质量数据超过了59k的数据。
LIMO和s1的发现标志着知识基础的革命:从获取知识变为激活知识。
这两个研究都提到了高质量数据,对LIMO来说,数据质量有两个因素决定:
问题的质量。包括问题解决方法的多样性、挑战模型能力的适当难度级别以及所涵盖知识领域的广度等因素。
答案(推理链、Response)的质量。包括教学价值、逻辑一致性和方法论严谨性等方面。
s1相对粒度粗一些,主要整体考虑质量(无格式问题)、难度和多样性。
问题一般从已有数据集中筛选,答案可以使用官方解决方案,或用模型生成不同方案然后选择最好的。
在逻辑推理上的实验
这一轮的实验主要针对R1-Zero,除了验证上面的一些观点, 还有一些自己的想法。初步结论一并汇总在这里。
R1-Zero的起点不重要
有了前面的铺垫,相信这个结论是比较清晰的,就是说无论Base还是Instruct,无论是正常模型还是Math模型,理论上应该都能实现R1-Zero的效果。既有效果,又有类似的表现,姑且可以算复现了R1-Zero。
如图所示,绿色的是
Qwen2.5-7B-Instruct
,棕色的是
Qwen2.5-7B
,两者在奖励、格式错误率、整体正确率、测试集表现几乎呈现完全一致的走向。不过Instruct版本整体表现稍微好一些。在回复长度方面,二者整体趋势一致,都是先降低后增长,但Base模型长度增加更明显,而Instruct模型下降更久一些。猜测是Instruct模型因为经过了SFT,有了固有的指令跟随能力,因此需要比较久学习到新的要求;同时Instruct的能力又强于Base,因此回复长度也相对更短一些。
另外值得注意的是,Base模型的起点几乎为0,但Instruct模型不是,它一开始就有一定的准确率,如第二行最右边图所示。
模型越新效果越好
虽然用的是在Qwen2.5发布之后的数据集,尽量保证了OOD,但我们确实无法知晓模型是否在预训练时加入过类似数据。原计划选择Qwen1做试验,不过代码改动稍微有点复杂,因此选择Qwen-1.5-7B进行对比。
如图所示,
Qwen1.5-7B
整体要明显逊色于
Qwen2.5-7B
,虽然它们整体的趋势也是一致的。我们从Qwen2.5的官方介绍也可以看到,其中加了Code和数学数据。
模型越大效果越好
这可能是句废话,但我们还想知道好多少,以及具体表现到底差在哪里。很遗憾,1.5B的Base模型并没有复现出来,虽然奖励、格式错误、整体准确率、测试集准确率都和前面表现一致,但回复长度是一路下降,直到收敛,没有观察到上升的情况。不过过程中依然还是表现出了Aha现象。最终还是选择了Math版本的1.5B模型,即
Qwen2.5-Math-1.5B
成功完成验证。
可以看到这个性能差别真是有点大,即便是Math模型,和7B之间的差距依然巨大。另外,尝试了3B模型,也能观察到效果,但回复长度上升幅度不大。
交互式长度增加有效
这里主要是验证多阶段(按难度等级)RL,类似DeepScaleR的做法。两步的趋势依然相近,但回复长度第二阶段明显更长,指标也有一定提升。