本文转自微信公众号“浪说量化”,作者:浪说量化。
文章主要由微软亚洲研究院、九坤投资和其他独立人员合著。
团队是首个成功复现了DeepSeek-R1的工作(参见同名github时间),这里的成功定义为:
-
-
跨领域ood泛化(在逻辑题上训练,却在AIME AMC这种数学题上有显著提升)
-
-
-
reasoning tokens确实有提升推理性能
以下是作者在知乎上的完整技术报告解读,也可点击文章底部阅读全文跳转。
其实,复现r1的时候,我们脑海里会自然而然涌现以下七个问题:
-
GRPO未必就是最合适的RL算法?RL应该如何调参实现稳定训练?RL数据如何组织,课程学习还有用吗?
-
从Zero开始和冷启动起手,到底有多大区别?为什么不选instruct模型开始RL呢?
-
只要随着RL稳定进行,我们总能观察到输出长度的近似线性增长,那什么时候增长是个头?长得快能代表reasoning能力也在快速提高吗?
-
Reflection token在RL训练里的词频变化?越高的词频是否暗示推理能力的变强?该监控哪些词比较好呢?
-
RL有多能泛化?Logic益智题上训练,锻炼出来的思考能力能否有助于数学竞赛水平的提升?
-
接上个问题,如果RL真的learn to learn,那它和传统SFT,RFT的对比?是真的学会了抽象的推理,还是依赖于大量问题模板的死记硬背?
-
自然涌现的语言混杂现象非常迷人,但它真的有助于推理吗?
我们详细解答了以上问题,开源了完整的超参调优经验,RL算法设计,代码数据等等。
为了最佳体验,可以去看我们的论文:
论文地址:
https://arxiv.org/abs/2502.14768
Github链接:
https://github.com/Unakar/Logic-RL
我们的Logic-RL团队主要成员,从上次小打小闹的三人组升级到了五人阵容,不过大家还都是大三大四本科生。新来的两位大佬为此工作作出了巨大贡献,特此感谢。
书接上文:Deepseek R1 Zero成功复现,三阶段RL,Response长度稳定涨幅,涌现语言混杂,double-check,Verify,Let's Summarize!
https://zhuanlan.zhihu.com/p/21290410831
基本现象展示
强化学习魅力时刻:
仅在程序合成的逻辑益智题(5K)上进行Rule based RL训练。无需任何引导,7B模型自然学会了在某个节点开始,大幅增长思考时间。从初始的500长度,1.2k step后scaling到了2200 tokens,测试集acc也是几乎稳定线性增长,还没有饱和停止的趋势。非常漂亮的曲线!(红蓝双线)
强化学习非常魅力时刻:
好奇心促使我们测试了一下完全OOD的数学能力:伴随逻辑训练的进行,AIME和AMC的竞赛级数学benchmark正答率也在稳定增长!太意外了,训练数据里甚至不需要出现任何数学数据,AIME相比基线提升125%,AMC提升38%!(黄色散点)
在逻辑题上,我们7B模型性能干碎o1, 与o3 mini不相伯仲,gpt4o就不用比了...(不过,不是fair的比较,毕竟人家也没在这个数据上RL过,看个开心)
不过证明,纯RL上限极高,要靠传统SFT在逻辑题打o1几乎不可能。(下文有RFT实验)
实验设置回顾
为啥不在math上做R1复现?
math问题难度难定义,所需的背景知识混杂,不利于受控实验探究。而且不同问题,所需最短思考时间很难估计到底是多少,对研究输出长度增长实验不友好。我们主要研究rule based RL的实验现象,希望通过受控实验得出一些偏本质性的观察,与经验性的结论。
于是我们转向了完全由程序合成的逻辑益智数据集——判定多人游戏里,到底谁说真话,谁说假话,角色分配是唯一可解的。随着游戏人数增多,问题难度几乎指数级地变难,是一个非常好的难度控制。也利好后续探究课程学习顺序与配比。
此外,也很好合成OOD数据:只要训练集稍微调换一下布尔逻辑式,对换/颠倒一下两个人的表述,就能完全改变答案和推理路径。
选Base模型还是Instruct模型?
当然两个都试了。我们发现,只要合理设置prompt,base模型也能很快学会think-answer的格式,与instruct模型在RL训练里的所有指标(长度增幅,reward,acc,KL) 几乎是一模一样的,非常amazing啊。
左图base,右图instruct。实际上前期base模型学会scaling thinking time好像还快一点...(此处应有更多实验佐证)
不过instruct模型的acc总是略微高base一丢丢...
看上去 cold start 只是一个bonus,不是necessity。(实际上Qwen SFT数据里大概率也没有逻辑题,base/instruct正答率本来就差不多。Qwen2.5 Base实际上是一个很好的起点,该有的基本能力(比如极少量的反思行为)也是有的。
所以我们其他实验主要采用了Qwen2.5-1M-Instruct来展示。(指标稍微好看那么一点点~)
RL算法选择
在确保共享参数相同的情况下,多次消融,看上去reinforce++是性价比最高的。下图2是acc曲线。(经过滑动窗口平均,所以GRPO蓝线的起点也会低一些,整条曲线看上去都是次于ppo/reinforce++的)
其实follow deepseek math论文,我们也对原ppo/reinforce++做了一点实现上的修改。
修改1:首先是KL loss。
经典的RL做法是在reward里逐token算KL
嗯,我们把它换成了deepseek推荐的kl loss,把它提出来放到actor loss里面,省了点计算
这个KL约束不是特别强,我们kl coef设0.001(试了0.01,很烂),让它稍微稳定一点。
实际上,我们认为,如果有大bacth,大rollout,好的base model startpoint,应该是可以进一步衰减KL约束的,甚至不妨去掉。
修改2:KL估计。
经典做法是logp-logq, 不过这样KL估计的非负性无法保证。我们用另一个非负的无偏估计