Zero-Rl复现的几个比较关键的问题

大模型向量数据库机器学习

        
        
            

          作者:haotian (已授权)
          
   

 
          知乎:https://zhuanlan.zhihu.com/p/28315151811 
          
   

 
        
      

现在,社区很多开源项目都在做base上rl的复现。不同的任务、不同的模版、不同的实验现象层出不穷。很多结果往往令人困惑或者相互矛盾,真体现了“炼丹”至高无上的境界以及当初被随机过程支配的恐惧:随机过程随机过。

笔者也在这个事情上花费了较多的精力,包括 更换模版(因为前期有些模版+reward-shaping就是一直跑崩)、reward-shaping(模版不一样、是否更onpolicy更新参数,都对训练行为有较大的影响)等等。直到昨天看到[1],笔者豁然开朗,很多之前遇到的问题也迎刃而解。同时,也更细致的关注框架的“微小”bug,得到相对正常的训练曲线。

文章[1] Cognitive Behaviors that Enable Self-Improving Reasoners, or, Four Habits of Highly Effective STaRs,从认知维度评估和分析了qwen25系列和llama3系列的差异点:

picture.image

第一个核心观察:同样的尺寸、rl算法和超参数配置,llama3.2-3b-base的rl效果就是远远弱于qwen25-3b-base。这个结论也会让人崩溃,毕竟base的预训练配方是每一家的核心资产,如果自己的base做不到类似的效果,大概率还是base本身的问题,但找到这个问题也不算很容易。

[1] 从当前深度推理模型的sft数据范式:包括几个典型的“思维范式”:verification/问题分解/backtracking/backwawrd-chaining,分析了qwen25-base和llama3.2-base的异同点:

picture.image

果不其然,base尽管看着很多benchmark差不多,但“思考范式”确实有较大的分布差异:qwen25-base系列的思考范式比例远高于同等尺寸的llama3.2。考虑到不同尺寸的预训练的配方可能都类似,qwen25-base的其他尺寸估计也比同等规模的llama3.2系列的思考范式比例更高。如下图所示:同一个系列模型的配方类似,更大的尺寸不会比小尺寸高出太多(仅靠规模是没办法弥补这部分的数据覆盖)。

picture.image

benchmark上来看,似乎并没有代差,但当做zero-rl的时候,performance的效果天差地别。

从sft/蒸馏数据的数据特点以及zero-rl的结果差异,自然启发我们需要做continue-pretraining弥补这部分的差距以及按照这个做的ct能否起到正向作用(验证之前的假设)。[1]主要分析了openwebmath/finemath的这几个pattern:

picture.image

finemath偏向于具有更多“educational”的数据,educational的数据直觉上具备更多的启发意义,道理上也应该有更多的思考范式。否则,直接刷题但没讲解为什么这么做,模型只能死记硬背难以举一反三。

为了验证base模型的“思考范式”对于zero-rl有重要意义,[1] 基于openwebmath/finemath做了合成数据进行ct(并没有考虑答案是否正确)。然后,在这个base上进一步zero-rl,产生了下图:

picture.image

当加了更多含这些“思考范式”的数据后,zero-rl的效果比之前有了显著的提升,且逼近qwen25-base。但有趣的是,base中的verfication/backtracing比例相对更高,而subgoal分解、backwards-chaining的出现比例更低。虽然,仅在24点上进行了验证(只需要基础的运算能力,更强调搜索、验证等思考能力),但笔者觉得意义重大:

  1. zero-rl是验证base效果的gold标准。base的问题可以被rl发现。
  2. base中的数据需要更强调 多种思考范式,结果正确性可以靠后。结果正确性可以被rl/sft 纠正回来。当然,如果思考范式丰富且答案正确,对于zero-rl/sft/sft+rl会有更好的上限。预训练模型还得接着卷。
  3. 思考范式比例过低,需要base上的pretraing/ct进一步弥补,提升这部分的比例。一个比较直观的方法是刷r1(太慢)/qwq-32b正式版(适合常规使用和批量刷数据)。

笔者去年11-12月份,也曾经和预训练的同学合作,尝试做long-cot-generation的合成数据,期待提升模型的long-cot-sft效果。但目前看来,之前偏重于更稳定的long-text-generation,而没有根据r1-lite/qwq-preview的数据分析核心pattern,导致单纯的long-text-generation的continue-pretraining并没有预期中的效果。

回到zero-rl

参考[1],base的思考范式越多,则zero-rl的效果也越容易符合预期。自然而然会带来一个新问题:选什么样的模版,才能更好的激发出base的这些思考范式。不同的模版带来的训练行为差异性可能会非常显著。

笔者尝试过以下模版:


        
        
            

          template1
          
   

 
          <|im\_start|>system\nYou are a helpful assistant. You should think step-by-step.<|im\_end|>\n<|im\_start|>user\n{query}<|im\_end|>\n<|im\_start|>assistant\n
          
   

 
          
   

 
          template2
          
   

 
          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. User: {query}\nAssistant:
          
   

 
          
   

 
          open-reasoner-orz
          
   

 
          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 is enclosed within <think> </think> and answer is enclosed within <answer> </answer> tags, respectively, i.e., <think> reasoning process here </think> <answer> answer here </answer>. User: You must put your answer inside <answer> </answer> tags, i.e., <answer> answer here </answer>. And your final answer will be extracted automatically by the \\boxed{} tag.\nThis is the problem:{query}\nAssistant: <think>
          
   

 
        
      

第一个是instruct模版,第二个是精简版的zero-r1模版。这两个模版对于长度/reward同步增长的训练现象没有想象中好。

一个核心观察:template2的训练初期,即使只做数学训练,产生的code比例异常高(接近30%),code比例高也带来更高的verification/reflection等等(比如 执行错误后,重新反思写代码等等)。由于没有加入代码执行的环境,前期生成的code的解答思路大部分都是错误,导致模型不断惩罚 code/与code相关的反思等等。最终,反思等等比例也越来越低。侧面说明,base退火阶段刷了不少的TIR数据。

最终收敛后,code比例接近等于0(没有加code执行的多步交互),模型输出也偏向于instruct模型的一板一眼。长度也很难涨上去或者涨的特别慢。

当使用open-reaonser-orz的模版后,前期产生的code比例只有1%左右。这意味着,前期不会过分惩罚含code的数据,也不会惩罚与code相关的反思等等pattern。但这个模版在笔者的环境中跑实验的时候,经常性的崩溃,笔者才不得不专向其他模版。为了解决这个问题,笔者做了离线推理/第一轮的online采样的一些观测指标:

环境:openrlhf最新版,vllm加入以下stop-token:


        
        
            

           ListConfig([           "User:"           ,            "Human:"           ,            "Assistant:"           ,            "</answer>"           ])
          
   

 
        
      

online第一次采样的格式统计量:

picture.image

而使用同样的配置(vllm的配置)离线采样统计是15%左右的格式崩溃率。

可以看到,offline的格式错误率只有14%,但online采样的格式错误率有57%。而且,后续训练,格式错误率一直没办法下降(即使加入format-reward等等)。这个反常想象过于让人费解(也是之前使用其他模版的原因)。

最后,笔者定位到问题:stop-token去掉""后,online第一轮采样的格式崩溃率就与offline的统计值一致:

picture.image

当换成这个模版后,训练曲线也更为正常(不管是7b还是32b,不管是否加入更难的数据),基本都是类似的曲线。

picture.image

而这个“诡异/抽象”的问题,也比较费解。目前还没更好的解决方案(貌似是vllm的锅,但离线跑也正常,openrlhf也能正常跑,但两个合起来就产生了诡异的现象)。

这里,也给出openrlhf的各种size对训练的影响。这些size会影响policy有多“on-policy”。update_step_of_rollout=1,则纯粹的on-policy,反之,则意味着使用旧参数采样的样本更新模型参数的次数,值越大,越off-policy,但训的更快,收敛速度则不好说。


        
        
            

          rollout\_batch\_size = 256
          
   

 
          train\_size = 4096
          
   

 
          num\_rollouts = 16
          
   

 
          world\_size = 16
          
   

 
          data\_size = 130000
          
   

 
          micro\_rollout\_batch\_size = 2
          
   

 
          bs = rollout\_batch\_size // world\_size
          
   

 
          size\_of\_prompts\_dataloader = data\_size/rollout\_batch\_size
          
   

 
          total\_rollout = bs*num\_rollouts
          
   

 
          gradient\_accumulation\_size = train\_size // world\_size
          
   

 
          update\_step\_of\_rollout = total\_rollout // gradient\_accumulation\_size
          
   

 
          bs, size\_of\_prompts\_dataloader, total\_rollout, update\_step\_of\_rollout
          
   

 
        
      

合成数据

[1]给出了提升base模型思考范式的一个方法,使得zero-rl具有较好的效果。而[2] PromptCoT: Synthesizing Olympiad-level Problems for Mathematical Reasoning in Large Language Models,则提出了提升推理模型性能的合成数据方法:

picture.image

picture.image

这里,c为提取/总结的concept,z为rationale,x为需要生成的问题。这个优化目标可以直接优化(采样大量的z或者z可枚举)或者使用variational近似(笔者的“甜点位”)。但效果着实惊人:

picture.image

picture.image

在short-cot/long-cot都有更强的效果。

结合[1],数据合成对于下一代base、zero-rl等等依然有重要的意义。提升base模型的思考范式多样性,通过蒸馏放大模型的能力。

一些初步想法

  1. 文章[1]给出了极为重要的insights以及后续base预训练的方向-->思维范式的多样性高于答案正确性。提升这部分的密度,对于推理模型的性能、zero-rl都有重要的意义。

  2. 模版对于激发模型能力一直都是一个重要课题。理想中,我们需要基于base做搜索/反向rl优化prompt,使得模型产生的思考范式比例更高。更高的比例对于模型的收敛/优化具有重要的意义。以及zero-rl的“cold-start”,提升rl效率。毕竟,跑几千个step的zero-rl,成本着实高了不少。

  3. 尽量做一些观测指标,评估offline/online第一轮采样的统计指标,如果差距过大,可能reward-shaping也救不回来。

参考文献

[1] Cognitive Behaviors that Enable Self-Improving Reasoners, or, Four Habits of Highly Effective STaRs https://arxiv.org/pdf/2503.01307

[2] PromptCoT: Synthesizing Olympiad-level Problems for Mathematical Reasoning in Large Language Models https://arxiv.org/abs/2503.02324

PS:看到这里,如果觉得不错,可以来个 点赞在看关注 。 给公众号添加【星标⭐️】不迷路!您的支持是我坚持的最大动力!

欢迎多多关注公众号「NLP工作站」, 加入交流群 ,交个朋友吧,一起学习,一起进步!

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
融合开放,新一代边缘云网络平台 | 第 11 期边缘云主题Meetup
《融合开放,新一代边缘云网络平台 》李冰|火山引擎边缘云网络产品负责人
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论