
來源 | AINLP
作者 | ybq@知乎
r1 技術報告的釋出已經兩個多月了,開源社群的各種復現工作讓人眼花繚亂,這裡我也簡單總結一下過去兩個月的個人認知與社群認知。
考慮到 tensorboard 曲線屬於公司財產,我不太敢貼出來。所以這篇文章我就純尬聊了,都是些很基礎的東西,偏科普性質。如有錯誤,還望大佬指正!
簡單覆盤
o1 和 r1 之間間隔了四個月,在此之前,rule-based reward 並沒有被主流技術方案所認可。我們不妨做個簡單的覆盤,去思考下在那探索的四個月中,為什麼大家更青睞於 prm / mcts 路線,為什麼沿著這條路線做不出來突破?以及到底有哪些關鍵點是當時所被忽略的?
base model and data distribution are all you need
在復現 r1 的工作中,qwen 和 llama 展現出了不同的趨勢,qwen-base、qwen-instruct、qwen-math-base 也展現出了不同的趨勢。rl 本來就是一個發掘模型潛力的方法,如果模型沒有潛力,那還發掘啥呢?
同理,資料分佈也一樣,目前開源的復現 r1 工作已經很多了,但也不是說任何工作都能和它們技術報告一樣完美復現。orz 的 57K 資料,就是一個整理的比較好的資料,訓練較為穩定。正如 kimi1.5 報告中所說,我們要觀測很多統計指標:每個 prompt 的多次取樣的平均準確率、平均輸出長度、是否不經過 cot 能直接說出答案等,甚至 prompt 的 ground truth 是否易於 verifier 進行判別(或提前統計好,或在訓練過程中利用課程學習的思想動態調控)。
過去的時間內,小作坊團隊們還是過於聚焦在“廚藝”上了,對“食材”的分析反倒是有所欠缺。
scaling is all you need
“結果正確”就是比“過程正確 + 結果正確”訓出來的模型效果好,即使是現在也沒人敢打包票吧。
r1 的成功並不能宣判 prm 的死刑,它只能說明,100W 條 orm 資料 > 1W 條 prm 資料。換個角度,深度學習的一個發展正規化就是“scaling + 雕花”:先大力出奇跡,再一點點縮小成本、最佳化細節。顯然 orm 屬於 scaling,prm 屬於雕花,不是 prm 的技術路線有問題,而是對 prm 的投入應該放在 orm 已經完全吃透之後。
infra is all you need
rlhf 和 llm-reasoning 這兩個方向有什麼區別嗎?prompt 的難度和 response 的長度。
以往我們使用 rlhf 的場景主要是:安全問題、詩歌創作修復韻腳問題、簡單的程式碼數學問題等,往往都是幾百個 token 就搞定的任務。現在不一樣了,模型的一條回覆就達到了上萬個 token,這會讓視訊記憶體壓力和解碼時長陡增。作為應對,vllm 或 sglang 已經成為 rlhf 框架的標配。最初我也認為 grpo 省掉 critic_model 這一點並不關鍵,現在看來我還是隻考慮了演算法和資料的視角,並沒有充分理解到額外維護一個和 actor_model 相同規模的 critic_model,對訓練框架的穩定性有多大的挑戰。
當模型 size 和 response_len 逐漸增大,“訓練效率和預防訓練過程中莫名其妙的 OOM ”就是復現 r1 工作中最大的難點(對,就是莫名其妙,在程式斷了之前,你不會知道明明限制了最大 response_len,為啥它還會 OOM)。截止目前,大模型的強化演算法沒有什麼創新,grpo 也已經出現一年半了。如果說各公司復現 r1 的進度不太一致,那大機率是因為各公司的 rl-infra 水平參差不齊吧。
hyper-parameter is all you need
因為之前沒有堅定 rule-based reward 這個路線,所以大多數團隊不會花很多時間去調整學習率、kl 係數、回報折扣係數、n_samples、使用的強化演算法 …… 僅憑几組引數就敲定實驗結論。再加上演算法同學們通常都對訓練資料十分敏感,觀察到“過程瞎說但結果蒙對了的 response”,就會更堅定的認為當前的技術方案不行。
dpsk 也在技術報告裡提到說他們嘗試過了 prm / mcts 的路線,只不過遇到了種種瓶頸,最終選擇了 orm 的路線,然後“順利”地做出了 zero 和 r1。
沒有足夠的技術自信和訓練算力,確實不會下那麼大的決心去調參,所以 r1 註定是要由精英團隊率先做出來的。
常見誤區
我相信大家對如何復現 r1 都心裡有數,畢竟網上的開源工作和科普實在是太多了,我也就不重複了。這裡,我簡單聊聊在復現 r1 的工作中,很多新人容易陷入的誤區。
誤區1:r1 的關鍵在於對 base 模型做強化
如果熟讀 dpsk 的技術報告,應該會有印象:基於 base 模型做 rl 得到的 zero 模型,僅僅是在 r1 的訓練過程中提供了一些 long cot 的啟動資料罷了,這個冷啟動資料還要經過資料專員的大幅度修正。也就是說,r1 的訓練,是基於一個 sft model 進行的(1000 條冷啟動資料訓練)。
-
對 base model 直接做 rl,好處在於模型沒有受到任何限制, explore 的空間極大,有發揮的空間,缺點在於模型的 follow 格式能力很差; -
對 long cot model 做 rl,好處在於模型 follow 格式的能力很強,同時在 long cot sft 階段,會被灌輸很多正確的思考模式,缺點大概是模型的起始輸出長度過長; -
對 instruct model 做 rl,復現 r1 的效果應該是最差的,因為模型的思考模式已經有些固化了,explore 空間比較小。
三種 setting,孰優孰劣,我的認知也未必正確,大家自己在實驗中自己找感覺吧。也可以花時間比較一下模型在 rl 之前、rl 之後的 response 有什麼變化,統計一下最高頻的 N-gram 看看。
誤區2:r1 的復現在於看見 response_len 的穩定增長
在 response_len 這個指標上,很多人都有點倒果為因了,認為觀察到 response_len 和 reward 一起上漲就代表模型的效果在變好。
複雜的問題,往往需要更高階的思考邏輯,而高階的思考邏輯往往會具有更長的長度。換言之,在不考慮 attention 衰減的情況下,response_len 幾乎與 explore_space 呈正比關係 —— 所以我們並不是希望 response_len 上漲,而是希望模型 explore 到更有價值的或者是全新的思考邏輯。如果只是想增加 response_len,我們有一百種方法,把 eos_token 的 probability 調小一倍,開 dropout,加各種 noise 讓模型訓崩,誘導模型出現復讀機現象 …… 有意義嗎?顯然沒有。
reflection pattern 也是同理,不是說看見模型說出了 however、wait,就代表模型具有反思能力了。而是要看是否這些反思 pattern 幫助模型提高了準確率,或者說是,帶反思 token 的 response 的 accuracy 是否真的高於 response 的平均 accuracy。此外,不同的 reflection pattern 對 accuracy 的貢獻也不相同,try another approach 就是比 compute again 要高階一些,模型能不能在 reward 持續上漲的過程中,自發地提升優質 reflection pattern 的出現機率,也是我們要觀察的重點。
誤區3:打點太少,只關注 reward、loss、response_len
工欲善其事,必先利其器,打點就是做 rl 時最重要的“器”。畢竟打點又不增加訓練耗時,能多記錄資訊就多記錄,就算是把每條 response 的生成耗時都寫到 tensorboard 裡也不會讓人覺得奇怪。
比如下面這些指標,我們都可以記錄下來,萬一就能從中找到些靈感呢?
-
模型的輸出同質化指標:最常見的指標自然是 policy_model response 的 entropy。但也可以是別的,同一 prompt 下 N 條 response 的編輯距離,N-gram 重複比例等都可; -
模型的各種 response_len:答對時候的 len,答錯時候的 len,答對且有反思時候的 len,答錯且有反思時候的 len 等; -
模型的 ACC:不僅是整體的 ACC,也要有各種設定下的 ACC,比如單條 prompt 下的 ACC,出現反思 pattern 時的 ACC,高於平均 response_len 時的 ACC 等; -
模型的異常現象佔比:response 沒有 follow 格式,response 超出預設長度了,response 出現復讀機現象,或者是 repeat_score 過高,response 中英混雜等; -
演算法的異常現象佔比:ppo / grpo 都有一個 clip 操作,記錄 clip 發生的頻率,到底是上溢多還是下溢多,溢位的比例隨著實驗推進會發生什麼變化? -
……
誤區4:忘了實驗目標是什麼
在和朋友做 r1 的技術交流的時候,我發現大家都會時不時陷入到一個死衚衕裡去。具體來說,就是為了讓某個指標好看而忽略了實驗原本的目標是什麼?最典型的死衚衕莫過於:想方設法的讓 policy_model response 的熵不要低於某個值。
-
為什麼希望熵別太低呢?因為希望模型的 N 條 response 足夠有區分度,資訊量足夠大; -
那具體的做法是什麼呢?加 entropy_loss,調 temperature,調 clip 的上下界; -
有效果嗎?可能有,但更可能把模型訓崩潰; -
分析模型為什麼崩潰?可這怎麼去分析呢,熵 loss 和 語言模型 loss 本來就是相反的目標,temperature 過大則會讓各種牛鬼蛇神 token 都冒出來; -
陷入痛苦,為什麼我的“改動”讓模型訓崩潰了!
簡單來說,模型 response 趨向於同質化是一個必然現象,rlhf 的目標不就是:把模型從 decode 10 次答對一次,訓成 decode 3 次答對一次嗎?把 path@N 的收益集中在 path@1 上。
如果模型沒訓崩潰,reward 和 response_len 持續增長,那就不要糾結 response 多樣性是否過低的問題了。或者我們就直接換資料啊,response 多樣性低大機率是 prompt 太難或太簡單了,考慮用課程學習思想淘汰這條資料。這個問題上太糾結於設計 loss 很容易走火入魔。
總之,目前的 long cot 實驗重點是兩個目標:reward 穩定提高,response 探索出一些高階的思考 pattern。至於什麼 response_len 持續增長,什麼 aha moment,並不是實驗的關鍵!要知道,o1 和 r1 目前更擅長的其實是 planning,而不是無休止的“wait、but、however”。
未來展望
數學底子好的人,就應該繼續去最佳化 rl 演算法,往大了搞可以提出一個新的演算法,往小了搞就從理論上去證明 grpo / ppo 中 clip 公式、kl_loss、advantage_norm、batch_norm 等是否合理,是否有最佳化的空間。
卡多的人則可以搞排列組合,是否加 kl loss,是否直接丟棄超長的 response,是否應該給損失函式加熵,是否應該動態調 temperature,是否對 prompt 引入課程學習等等 —— 消融實驗會證明一切。
infra 能力強的人,則應該持續最佳化訓練框架的穩定性和訓練效率,解決一些很底層但都被大家選擇性忽略的問題,比如推理引擎 vllm 的結果和 model.forward() 其實還是有不少精度 diff 的。
前瞻性強的人,就該收一收手頭的 math 工作,趕緊搞 code 了。AIME2024 顯然已經走上了 GSM8K 的後塵,被大家玩的爐火純青。除此之外,如何像 dpsk 一樣把模型從 code / math 上學到的 long cot 能力,泛化到模型的通用能力上,亦是一個極具挑戰的難題,也是 o1 / r1 真正牛的地方。
(白嫖的人,可以等千問團隊釋出 qwen3 和 qwq 的詳細報告與 checkpoint 哈,感覺快來了)
希望大家都能在 qwen7b / qwen 32b 上訓出自己的 r1 模型。qwen 還是牛的,打聽了一圈,幾乎所有人的實驗都是在這兩個模型上做的。
技術交流群邀請函
△長按新增小助手
掃描二維碼新增小助手微信
請備註:姓名-學校/公司-研究方向
(如:小張-哈工大-對話系統)
即可申請加入自然語言處理/Pytorch等技術交流群
關於我們
MLNLP 社群是由國內外機器學習與自然語言處理學者聯合構建的民間學術社群,目前已經發展為國內外知名的機器學習與自然語言處理社群,旨在促進機器學習,自然語言處理學術界、產業界和廣大愛好者之間的進步。
社群可以為相關從業者的深造、就業及研究等方面提供開放交流平臺。歡迎大家關注和加入我們。

掃描二維碼新增小助手微信
關於我們
