Deepseek R1 Zero成功複現, 三階段RL,Response長度漲幅超50%,湧現語言混雜,double-check

項目代碼可見:Unakar/Logic-RL(https://github.com/Unakar/Logic-RL),歡迎關注和star!我們將開源完整的wandb曲線和訓練日誌,wandb report(https://wandb.ai/ustc_ai/GRPO_logic_KK/reports/GRPO-Zero–VmlldzoxMTIwOTYyNw?accessToken=gnbnl5mu5pwfww7gtwxymohg85w7d7vthvjvbl4w8yxg0a99vf1k22m11e61cvv8)

在大四的最後一個寒假,和@AdusTinexl @ShadeCloak 兩個小夥伴搗鼓出了點有意思的東西,非常開心,歡迎各位合作,指導!

先展示一下結果

座模型Qwen 7B在測試集上只會基礎的step by step邏輯。

無 Long CoT冷啟動蒸餾,三階段Rule Based RL後 (約400steps),模型學會了

  • 遲疑 (標記當前不確定的step等後續驗證),

  • 多路徑探索 (Les’t test both possibilities),

  • 回溯之前的分析 (Analyze .. statement again),

  • 階段性總結 (Let’s summarize, Now we have determined),

  • Answer前習慣於最後一次驗證答案(Let’s verify all statements),

  • Think時偶爾切換多語言作答 (訓練數據純英文的情況下,思考部分是中文,最後answer又切回英文)

測試集上性能也一舉超越了gpt4o 的0.3,達到了 0.41的準確率,相比自身初始0.2 acc翻了一倍

非常漂亮的回覆

demo1:遲疑,回溯,總結,verify。訓練後期模型總是傾向於在最後輸出answer前,優先全部verify一遍。這些能力是RL訓練湧現的,未加任何引導

偶爾的多語言現象

demo2: 多語言的例子,思考忽然說中文,最後為了格式獎勵用英文做最終回答,回覆是對的

demo3:訓練前模型原本的輸出作為參考, 笨笨的也很可愛,看得出來是一點verify之類的基本思考單元也沒有

Response長度增長

Demo 4, Settings: prompt mean 276 tokens, origin response mean 400 tokens據我所知,這是第一個穩定實現輸出長度大幅超越原始模型平均長度的(數據集prompt長度全部小於300 tokens,相比於基座模型原本輸出的平均長度 400 tokens, 訓練後期平均長度穩定在650 tokens,約50%的漲幅)

Reward曲線

我們設置了嚴苛的format reward和Answer Reward。

Reward只有這兩部分構成,避免任何reward hacking。

我們編寫了不少if else邏輯和正則。剛開始模型總能以匪夷所思的方式繞過我的預想,在和它一次次的鬥智鬥勇里完善了rule的編寫

我們發現模型在學習format的時候,其實是一個快速收斂–逐漸崩壞–又忽然找回format的形式,與我們三階段RL訓練設置吻合。

還有一個有趣的小發現,在中間階段,模型似乎認為格式反而阻礙了它的思考:日誌里看到不少例子,模型在 tag開始後意識到自己犯錯了,想重回進入思考模式,可惜被format reward狠狠懲罰了

Demo 5, 依次是平均reward, 全對的比例,格式錯誤比例,答案做錯的比例

基本Settings

訓練數據合成

其實只有2K不到的訓練數據集,完全由程序合成,確保對基座模型是OOD數據

其中邏輯問題類似老實人和騙子的益智題,老實人總說真話,騙子總說假話,下面N個人,各有各的表述,請判斷誰是騙子。我們以此為例講解實驗細節。

可控性也不錯,可以人為設置難度分級。測試下來gpt4o的acc在0.3左右,而3epoch的RL訓練後,我們成功讓qwen-7B達到了0.41。

gpt4o和claude sonnet在這種邏輯題上的準確率出乎意料的低。我們選了一個合適的人數來控制難度,確保它高於qwen 7B當前的能力,但又不會過難(在8個人的情況下,qwen完全不能作答,RL訓練曲線也堪比蝸牛爬。我們最後選取了5人作為基線)

模型基座選取

我們注意到deepseek官方開了一系列distill模型,測試下來感覺有點矯枉過正了,小參數量承載了超越其自身的推理能力。回覆里的wait, alternatively這種字眼頻率過高。

Deepseek distill系列選了qwen-math-7B作為基座。我們本來也是這個,後來發現這個模型有坑:

  1. 首先它指令跟隨能力比較一般,很難學會format;

  2. 其次,它說話老愛用python code解題,訓練很難克服

  3. 移除system prompt後,還是習慣用\box{}包裹answer,還是format不行

  4. Markdown味道太重,一板一眼的,Reasoning模型本應思想跳脫一些才是

我們訓了幾版RL,效果始終不好,最後決定放棄Qwen Math系列,Qwen 7B 1M就好

RL基本設置

我們初始還是PPO,訓練確實穩定,就是太慢了。Reinforce系列測試下來又快又好,顯存還低,強烈推薦。

為了和deepseek對齊,我這裏放出的所有結果都是GRPO Setting下的。

由於我只有四卡A100,跑實驗相當費勁,坐等來個大佬資助我跑實驗 ()

Train batch size只有8,Rollout先大後小 (32-64-16)

三階段RL

我的經驗是:高溫采樣+超大rollout Matters

Step1: 課程學習與格式遵循

為了訓練的平穩過渡,我們先用少量3人邏輯題做預熱,使用預設采樣設置。

此階段主要是學的格式,只要不遵守該規則,我們就施加很大的負面獎勵。模型在10step訓練里很快就能學會把format error降到0.1的佔比

偽變長:此階段觀察到極少量的response length ++,主要提升的是最短response的長度,max response長度基本沒變,是反饋到mean length上是一個變長的過程。

以及此階段確實驗證了Pure Rule Based RL有效性,Val acc一直在漲,不過不如SFT來收益來的快

Step2:高溫采樣與大量rollout

數據集過渡到正式的5人謎題,此階段訓練持續最長。也是最容易崩潰的時候。

我訓了14版超參,都是崩壞的,淚目,下面講講一些好玩的崩壞demo。

嘗試將采樣溫度設置為1.2附近。(實測1.5會崩,1.5什麼鳥語言都蹦出來了)。topp和topk也調了一下,主要目的是紊亂模型回覆格式,破壞其markdown的輸出風格,增加token多樣性

下圖是截取的模型一個很有意思的repeat現象,可以看得出來,RL極大地增加了verify token被chosen的概率,這純粹是自發形成的。數據集沒有任何verify相關的思考token。

1. 模型的囈語:它想verify, 要precise, 注意consistent執念很深

2. Retrying too late,但沒有後悔藥可以吃

模型已經到達最後需要輸出結果的answer階段了,忽然意識到自己前面犯了錯,想重回think模式,但是retry太晚了,這樣的行為會被給予嚴厲的負format懲罰

3. 忽然學會了正確地verify,以及先總結初步結論再做進一步探索,但思考過程還是比較簡陋

這裏有很多有意思的設置小細節和中間輸出的觀察,非常值得深入探索

請等後續,幾週內我們會寫好完整文章~

Step3: 漫長的退火

采樣設置里逐步回歸正規,比如溫度從1.2慢慢降到0.9。

此階段模型的輸出如demo1所示,非常的成熟,有verify,有反思,有回溯,有格式,要什麼有什麼,我很滿意的。

整體思考並不冗長,廢話也不多,比distill模型的回覆看起來正常多了。

學習率也逐級遞減到了2e-7。此階段模型收斂速度賊慢,但多等一會,會有很多驚喜。還是讓它訓著吧。

奇怪的想法

  • 語言混雜的現象非常迷人。手動查找log,似乎後期每個語言混雜的response都是對的,難道對模型來說混合語言作答是更有利於它reasoning的pattern?

  • 進一步地,誰說thinking porcess一定要是人類可讀的,只要answer看得懂就行。如果答案對,我寧可中間全是亂碼也無所謂(bushi)

  • 只要能從模型輸出里恢復出人類要的答案,answer format其實也是不必要的,只是測試驗證的難度大大增加了。看上去又回到了某種ORM的老路..

  • Response增加是合理的。此前模型只會一路走到黑,多了幾次verify和check後,自然長度增加

  • 泛化性:當前模型的思考能力實測是可以遷移到GSM8K的。由此展開或許可以跑一堆實驗…

  • 此外,本地存了一堆ckpt,坐等後續可解釋性分析哈哈哈。之前一直想做Long CoT的可解釋性,現在手頭終於有一些ckpt隨便測了,啟動!

最後扯一句,Deepseek真是越來越強了,眼睜睜看著從deepseek v2開始,成長到過年期間發現街頭巷尾都在討論它。逐漸變成了攀不上的模樣(可能最早期我bar也不夠)。欸,真想去deepseek實習看看。

春節最快樂的事情,就是看著zero模型RL曲線嘎嘎地漲!