Deepseek R1 Zero成功复现全过程记录

[复制链接]
查看679 | 回复0 | 2025-2-14 12:58:23 | 显示全部楼层 |阅读模式
作者丨涮月亮的谪仙人

' z2 h8 W0 q! H/ A" t
来源丨https://zhuanlan.zhihu.com/p/21290410831

+ ]$ {1 d# m  i6 }
编辑丨极市平台
/ K; Z! ]) ~; g2 x
项目代码可见:Unakar/Logic-RL(https://github.com/Unakar/Logic-RL),欢迎关注和star!
/ ?( f. _2 m3 h; s6 h9 c+ I/ Y
我们将开源完整的wandb曲线和训练日志,wandb report(https://wandb.ai/ustc_ai/GRPO_logic_KK/reports/GRPO-Zero--VmlldzoxMTIwOTYyNw?accessToken=gnbnl5mu5pwfww7gtwxymohg85w7d7vthvjvbl4w8yxg0a99vf1k22m11e61cvv8)
  E, V  n% Q* v
在大四的最后一个寒假,和@AdusTinexl @ShadeCloak 两个小伙伴捣鼓出了点有意思的东西,非常开心,欢迎各位合作,指导!
, T1 h% E, o6 C
先展示一下结果:
/ t4 _' k  M& n. G4 J: b. J6 D# v+ j# d% E. @: M
基座模型Qwen 7B在测试集上只会基础的step by step逻辑。
3 T3 n" H- j- Q6 Z/ c! x" E9 O( x
无 Long CoT冷启动蒸馏,三阶段Rule Based RL后 (约400steps),模型学会了
7 }# y1 N5 d% z+ J' o1 K0 K" a

    ; ^( J9 o9 J3 U. ~5 Y( f
  • 迟疑 (标记当前不确定的step等后续验证),
    & d/ U% N3 U7 h8 Z/ E
  • 多路径探索 (Les't test both possibilities),
    2 w( G) T+ L: p4 y
  • 回溯之前的分析 (Analyze .. statement again),
    # u% s3 {8 s% u4 r/ C& f5 T5 u
  • 阶段性总结 (Let's summarize, Now we have determined),' ]4 G1 O3 W( k1 Y6 _1 c
  • Answer前习惯于最后一次验证答案(Let's verify all statements),4 m' _' ]! W- d+ R- _9 {
  • Think时偶尔切换多语言作答 (训练数据纯英文的情况下,思考部分是中文,最后answer又切回英文)( @) \4 h" o) B* Z
测试集上性能也一举超越了gpt4o 的0.3,达到了 0.41的准确率,相比自身初始0.2 acc翻了一倍

$ c8 P! ]9 Q# e5 }7 G' O$ |; k
非常漂亮的回复
3 Q+ r$ K  Z& F" r! a

5 X0 L+ i+ p' x3 @& b% y+ O
Deepseek R1 Zero成功复现全过程记录-1.jpg

- z6 E( v! A7 |# {4 R7 z$ U9 I7 X
demo1:迟疑,回溯,总结,verify。训练后期模型总是倾向于在最后输出answer前,优先全部verify一遍。这些能力是RL训练涌现的,未加任何引导
1 N% C8 w+ T! a' T8 u! J+ P/ |
偶尔的多语言现象
* T( N' r) v$ k+ C- Z# y9 F" W# c

+ A- W# o7 U& B: D# X6 W$ }
Deepseek R1 Zero成功复现全过程记录-2.jpg
: j6 P' d# X- v; U) a  A( i1 u" S
demo2: 多语言的例子,思考忽然说中文,最后为了格式奖励用英文做最终回答,回复是对的

& k( i( A: G# h
) F" t8 m& I( f- y4 |' H6 m
Deepseek R1 Zero成功复现全过程记录-3.jpg

+ R' k. r" Q8 U2 O% n9 J+ Y
demo3:训练前模型原本的输出作为参考, 笨笨的也很可爱,看得出来是一点verify之类的基本思考单元也没有

) s4 b7 w, R; W: _
Response长度增长

8 h5 {; K3 H# s& V& |) n- v) D; Z5 ^. J
Deepseek R1 Zero成功复现全过程记录-4.jpg
8 z; a  n4 D! ]7 @4 B7 t
Demo 4, Settings: prompt mean 276 tokens, origin response mean 400 tokens

* _: o- w6 V6 a/ }& O- P) J
据我所知,这是第一个稳定实现输出长度大幅超越原始模型平均长度的(数据集prompt长度全部小于300 tokens,相比于基座模型原本输出的平均长度 400 tokens, 训练后期平均长度稳定在650 tokens,约50%的涨幅)

! `' U  m6 t, s2 ]$ E
Reward曲线

8 d: X) x; n  O' y8 U7 a
我们设置了严苛的format reward和Answer Reward。

8 @" M- U  s' ^' w1 d
Reward只有这两部分构成,避免任何reward hacking。
  Q0 Y8 \& `6 x
我们编写了不少if else逻辑和正则。刚开始模型总能以匪夷所思的方式绕过我的预想,在和它一次次的斗智斗勇里完善了rule的编写
4 A6 m- u) x" k; M+ q; v
我们发现模型在学习format的时候,其实是一个快速收敛--逐渐崩坏--又忽然找回format的形式,与我们三阶段RL训练设置吻合。

' E3 C; ^7 y8 R8 h
还有一个有趣的小发现,在中间阶段,模型似乎认为格式反而阻碍了它的思考:日志里看到不少例子,模型在tag开始后意识到自己犯错了,想重回进入思考模式,可惜被format reward狠狠惩罚了

( J3 i5 J4 l. Q  B# a  d
! k8 _/ b- A8 X" }9 ^% J
Deepseek R1 Zero成功复现全过程记录-5.jpg

/ O! u+ A! k, q6 E
Demo 5, 依次是平均reward, 全对的比例,格式错误比例,答案做错的比例
7 D  p% r( R' J: v% u
基本Settings
, T: y$ e2 ]) Q1 l0 n( |5 f$ E, Z+ N
* u. b3 v) E' v% ]. U# J- u; X- U训练数据合成/ ]: w7 s; K4 j  r
4 Q' d& t$ D5 o2 n3 K+ f
其实只有2K不到的训练数据集,完全由程序合成,确保对基座模型是OOD数据
6 z+ k* J& b* a5 ^: G
其中逻辑问题类似老实人和骗子的益智题,老实人总说真话,骗子总说假话,下面N个人,各有各的表述,请判断谁是骗子。我们以此为例讲解实验细节。
  I6 w9 y' F* a4 d+ m
可控性也不错,可以人为设置难度分级。测试下来gpt4o的acc在0.3左右,而3epoch的RL训练后,我们成功让qwen-7B达到了0.41。

7 {3 L: _+ O/ l. R0 n" y; A
gpt4o和claude sonnet在这种逻辑题上的准确率出乎意料的低。我们选了一个合适的人数来控制难度,确保它高于qwen 7B当前的能力,但又不会过难(在8个人的情况下,qwen完全不能作答,RL训练曲线也堪比蜗牛爬。我们最后选取了5人作为基线)
1 ]% F0 T) w, Y6 s
模型基座选取0 t- s( I: t2 q: o$ @) S" W& i: l
9 y- X9 p" Q1 D+ j# Y& F6 s2 t
我们注意到deepseek官方开了一系列distill模型,测试下来感觉有点矫枉过正了,小参数量承载了超越其自身的推理能力。回复里的wait, alternatively这种字眼频率过高。

& |1 F3 }# w$ \  W4 {. J
Deepseek distill系列选了qwen-math-7B作为基座。我们本来也是这个,后来发现这个模型有坑:
1 x. S9 X" ^5 d3 b
      \! F9 A1 a& W) h' E
  • 首先它指令跟随能力比较一般,很难学会format;  l, M7 ~7 v2 G
  • 其次,它说话老爱用python code解题,训练很难克服
    + G, q# i: h- d5 Z/ e/ c
  • 移除system prompt后,还是习惯用\box{}包裹answer,还是format不行
    9 B! B$ ~* P& k/ m' e' i2 `/ I1 Y
  • Markdown味道太重,一板一眼的,Reasoning模型本应思想跳脱一些才是) `. X! m1 a% ]8 Y
我们训了几版RL,效果始终不好,最后决定放弃Qwen Math系列,Qwen 7B 1M就好

) z# e/ u3 f" dRL基本设置+ \# c3 t! L* C, P. N8 H
; G, C1 J, V+ m8 Z3 y' a
我们初始还是PPO,训练确实稳定,就是太慢了。Reinforce系列测试下来又快又好,显存还低,强烈推荐。
7 r1 c; v  w: j. z: _8 o$ m
为了和deepseek对齐,我这里放出的所有结果都是GRPO Setting下的。
% [' r* C" U, y/ m
由于我只有四卡A100,跑实验相当费劲,坐等来个大佬资助我跑实验 ()
! Z! x  N+ e# |6 N
Train batch size只有8,Rollout先大后小 (32-64-16)

7 m: O6 I( R$ v8 D# A三阶段RL
$ ]3 o+ R* |0 b3 x3 f0 B; E) j$ d" _' e- f( E) c
我的经验是:高温采样+超大rollout Matters

" S( V8 Q% b; |# oStep1: 课程学习与格式遵循9 q5 p) }- d( k' G3 Y8 M' W

' N$ u) B9 e; f8 P% Y, c( N
为了训练的平稳过渡,我们先用少量3人逻辑题做预热,使用默认采样设置。

# w- e% T1 x0 g- Y
此阶段主要是学的格式,只要不遵守该规则,我们就施加很大的负面奖励。模型在10step训练里很快就能学会把format error降到0.1的占比

2 }' {2 |3 l4 M, I* o, Z& u
伪变长:此阶段观察到极少量的response length ++,主要提升的是最短response的长度,max response长度基本没变,是反馈到mean length上是一个变长的过程。
4 K; @* v! }2 x& @4 Z
以及此阶段确实验证了Pure Rule Based RL有效性,Val acc一直在涨,不过不如SFT来收益来的快
4 X: b8 C9 C. Y
Step2:高温采样与大量rollout
" N: X& p1 P* ?& w
+ h+ d/ ?: _: u' b
数据集过渡到正式的5人谜题,此阶段训练持续最长。也是最容易崩溃的时候。

- L5 C* [' Z  }! b, [$ w/ [
我训了14版超参,都是崩坏的,泪目,下面讲讲一些好玩的崩坏demo。

  C) a* c! _7 ?
尝试将采样温度设置为1.2附近。(实测1.5会崩,1.5什么鸟语言都蹦出来了)。topp和topk也调了一下,主要目的是紊乱模型回复格式,破坏其markdown的输出风格,增加token多样性

: m# p3 g  T9 s$ \' }
下图是截取的模型一个很有意思的repeat现象,可以看得出来,RL极大地增加了verify token被chosen的概率,这纯粹是自发形成的。数据集没有任何verify相关的思考token。

$ P- Y) ?% X2 k4 T* v# ?
1. 模型的呓语:它想verify, 要precise, 注意consistent执念很深
4 S/ k# z* [3 e( \9 o( J
. ]$ k- s. h+ Z, d& v( `
Deepseek R1 Zero成功复现全过程记录-6.jpg

/ s9 q. S, {0 }% v( s
2. Retrying too late,但没有后悔药可以吃
% O& k0 \6 g- r, z
模型已经到达最后需要输出结果的answer阶段了,忽然意识到自己前面犯了错,想重回think模式,但是retry太晚了,这样的行为会被给予严厉的负format惩罚
  r  U6 l% X: l4 I) o9 j7 K! u1 _
+ t8 G# \. N4 g5 N3 D% c5 _
Deepseek R1 Zero成功复现全过程记录-7.jpg
) X* M4 n& Y; M3 Y7 i
3. 忽然学会了正确地verify,以及先总结初步结论再做进一步探索,但思考过程还是比较简陋

: G: k1 P3 R  ?2 V5 A# {. @, F4 O# N( f5 Z
Deepseek R1 Zero成功复现全过程记录-8.jpg

  e- ]6 E) l& k. u0 E
这里有很多有意思的设置小细节和中间输出的观察,非常值得深入探索
- ]7 m  y7 Z5 D3 c- r. e3 S
请等后续,几周内我们会写好完整文章~

: A9 n7 P- ?1 J, g2 U" I! }Step3: 漫长的退火4 D# r# B$ _/ e+ g

3 O( r/ ?  w, [, u7 c+ F) v
采样设置里逐步回归正规,比如温度从1.2慢慢降到0.9。
/ g7 e. [8 ?! Z* K) w+ h+ y  P
此阶段模型的输出如demo1所示,非常的成熟,有verify,有反思,有回溯,有格式,要啥有啥,我很满意的。
4 T! |  p& q7 R- K) K
整体思考并不冗长,废话也不多,比distill模型的回复看起来正常多了。
+ l4 s4 [# r/ Y4 Q
学习率也逐级递减到了2e-7。此阶段模型收敛速度贼慢,但多等一会,会有很多惊喜。还是让它训着吧。

" Y. W- ^$ Z/ ]; i. g$ [, d4 E奇怪的想法
, {5 q$ M& ~0 d. C: \( F- Z0 h9 |/ I3 k2 F

    % Y6 y: d: F7 H% w4 s0 [* P5 u/ @5 [
  • 语言混杂的现象非常迷人。手动查找log,似乎后期每个语言混杂的response都是对的,难道对模型来说混合语言作答是更有利于它reasoning的pattern?
    % I2 p  D% g9 W1 A
  • 进一步地,谁说thinking porcess一定要是人类可读的,只要answer看得懂就行。如果答案对,我宁可中间全是乱码也无所谓(bushi)
    ! m& ]6 s  s( m& A* y% d9 R3 e
  • 只要能从模型输出里恢复出人类要的答案,answer format其实也是不必要的,只是测试验证的难度大大增加了。看上去又回到了某种ORM的老路... V# v( n) K% A# q( c, a# V, a8 D
  • Response增加是合理的。此前模型只会一路走到黑,多了几次verify和check后,自然长度增加: g$ Z- {% C  o
  • 泛化性:当前模型的思考能力实测是可以迁移到GSM8K的。由此展开或许可以跑一堆实验...8 [0 ]% E5 f% b# v5 j' ]# p* B! v% C
  • 此外,本地存了一堆ckpt,坐等后续可解释性分析哈哈哈。之前一直想做Long CoT的可解释性,现在手头终于有一些ckpt随便测了,启动!$ Z, ]% U( E- v! v; C/ k3 J, Z
最后扯一句,Deepseek真是越来越强了,眼睁睁看着从deepseek v2开始,成长到过年期间发现街头巷尾都在讨论它。逐渐变成了攀不上的模样(可能最早期我bar也不够)。欸,真想去deepseek实习看看。春节最快乐的事情,就是看着zero模型RL曲线嘎嘎地涨!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

326

金钱

0

收听

0

听众
性别

新手上路

金钱
326 元