
來源 | 知乎
作者 | 林正
前言
投完ICML之後火急火燎的入門RL,花了一些時間把RLHF學了。後來在知乎上看到了很多優秀的開源R1復現專案,於是手癢癢啃了下比較火的兩個開源專案準備自己實踐一下,一個是Huggingface的Open-R1,一個是Logic-RL。由於Logic-RL基於Verl,模型推理和訓練過程都是shard到不同顯示卡上的,Huggingface的GRPOTrainer是單獨用一張顯示卡做vllm推理,所以我在淺嘗Open-R1做數學題的訓練之後轉移到了Logic-RL上面。
因為是民科,手上只有四張降了功率的3090,我就拿0.5B的千問做的實驗,中間遇到了不少問題。
探索0.5B模型在KK資料集上的強化學習訓練
我使用了qwen-0.5B的instruct模型實驗,我看logic-rl論文中instruct模型也可以復現出思維鏈增長。但這裡選用instruct模型主要還是因為base模型很難訓練。
1. 多餘的reward會讓模型變懶
我首先是使用了Logic-RL中原來配置的reward規則,在原版規則中,模型學會格式後會得到一定獎勵,但很快模型的輸出就變得很短
<think>The reasoning process here involves understanding the characteristics of knights and knaves, analyzing the statements made by each person, and determining who is a knight and who is a knave.</think>
<answer>Ethan is a knight, David is a knave, Samuel is a knight.</answer><|im_end|>
然後模型幾乎不care回答是否正確,輸出長度急劇下降到只有幾十個的長度。於是我嘗試更改規則,
僅當模型格式正確且回答正確的時候才有reward,其餘情況都是最低分。
但令人沒想到的模型依然只是水一下思考內容,然後在answer tag裡輸出答案,似乎只要遵循<think></think>的格式就會讓模型放棄思考過程。我後來將格式reward中有關<think></think>的要求去掉了,在訓練過程中就能順利保留下來模型的思考過程。
2. 模型很難直接學習3ppl以上的問題
0.5B模型可能是太小了,直接混合3ppl-7ppl的資料集訓練會導致reward一直在最低分附近震盪,然後一會就開始輸出胡言亂語。訓練開始沒多久我就看到輸出長度爆炸增長,我以為是長思維鏈的出現,但其實是模型錯誤預測token導致輸出大段胡言亂語。
於是,我轉換了2ppl的資料集,讓模型在2ppl資料集上先進行10個step的學習,然後在3ppl資料集上進行20個step的學習,再換到4ppl上進行10個step,5ppl上訓練10step,最後換到6ppl上進行長的RL訓練。這類似於課程學習,但在訓練結束後我是儲存了模型之後在新的訓練中載入儲存的模型,所以相當於reference model被更新了。
這個過程中確實觀察到了一些有意思的現象,例如
錯誤檢查
2.Avery's statement: If Jacob is a knight, then Avery must be a knave, regrettably (vice versa). Since Jacob is not a knight, there's a contradiction here, indicating a mistake in our reasoning. Alternatively, if Jacob is a knight, Avery must be a knave, meaning Jacob cannot be the perfect knight according to her statements.
Recheck
So, the contradiction here comes from Scarlett being a knight. This means the first term is misleading. Let's recheck the clues.
雖然感覺推理過程好像不是很對。。。
還有一些輸出我沒有儲存,例如語言混雜,使用數學來解邏輯問題,以及使用什麼蘊含樹?來解決問題的過程也是有的。
3. 模型總是會收斂到一個極短的推理過程
這也是為什麼說復現是失敗的,雖然透過前面的修改模型能順利學到6ppl的問題上,但是模型的推理過程總是會變得極為簡單,我分別多次嘗試了在預熱訓練(前面提到的課程學習)後在5ppl和6ppl的資料集,或者混合的資料集上訓練,都會出現思維鏈隨著準確度越來越高下降的過程

5ppl上長訓練,思維鏈長度下降

6ppl上長訓練,思維鏈長度下降
觀察模型的輸出,它最後都會收斂到一個固定的,甚至是錯誤的推理模式
To determine the identities of each character, we will analyze each statement step by step.
1)Avery's statement: "Zoey is a knight if and only if Aiden is a knave." Therefore, Zoey is a knave if Aiden is a knight.
2)Zoey's statement: "Aria is not a knave." Hence, Aria is a knight.
3)Lily's statement: "Zoey is a knight and Aiden is a knight." Therefore, Zoey is a knight.
4)Evelyn's statement: "Aria is a knave or Lily is a knight." Since Aria is a knight, Evelyn must be a knight.
5)Aria's statement: "Evelyn is a knight or Avery is a knave." Since Avery is a knight, Aria's statement is true, so Aryan is a knight.
6)Aiden's statement: "Avery is a knave." Therefore, Aiden is a knave.
So, the identities of the characters are:
-Avery is a knave,
-Zoey is a knight,
-Lily is a knight,
-Evelyn is a knight,
-Aria is a knight,
-Aiden is a knight.
The final answer is:
<answer> (1) Avery is a knave, (2) Zoey is a knight, (3) Lily is a knight, (4) Evelyn is a knight, (5) Aria is a knight, (6) Aiden is a knight. </answer><|im_end|>
模型的回答固定為(1)總起,一步一步推理。(2)先重複每個人的話,在後面緊接著做推理。(3)給出答案。(4)在<answer> tag裡給出答案。
但是,當我們仔細檢查推理過程的時候,發現這個推理是錯的,但答案是對的。例如第四條,Since Aria is a knight, Evelyn must be a knight,第五條Aryan名字都沒出現過。當然最明顯的,推理過程得到的結論,例如第六條Aiden is a Knave和答案Aiden is a knight根本也對不上。
雖然Logic-RL論文中Instruct模型也是經歷了輸出長度下降之後上升

圖源Logic-RL: Unleashing LLM Reasoning with Rule-Based Reinforcement Learning
但是我這裡並不能在下降後上升,因為在32次rollout中,模型的輸出幾乎都一模一樣了,模型的最短回答和最長回答幾乎都收斂了,即模型不再探索新的可能性,熵已經收斂了。
可能原因的討論
我對於rule based reward+RL訓練的理解是,這個過程類似於抽籤+篩選。如果抽到了正確的回答,那模型就知道這一次它是做對了的,會繼續往這個方向靠,如果回答錯誤就被懲罰,拋棄這個action,被篩選掉。我們不斷抽籤過程中,模型的某些行為會被我們保留下來並強化,某些行為會被我們拋棄。
那麼首先是篩選過程可能不準確,例如某次回答中模型不思考或胡亂思考,直接猜答案,但是答案猜對了,得到了reward,另一次回答進行了詳盡且前後consistent的推理,但不幸答案是錯的,那麼這個行為會被篩掉。
對於簡單的問題,小模型可透過簡短的推理,或者直接給出答案的方式做對題,那麼這些行為都會被保留下來。但對於難的問題,小模型一開始會嘗試使用長思維鏈解決這個問題,但因為能力不足,它總是答不對,那麼長思考的行為就會被我們篩選掉。
總的來說,我感覺是我們抽不出來小模型使用長思維鏈做對題的籤,所以導致思維鏈收斂到很短。而因為直接給答案做對題機率可能更大,模型對於思考過程幾乎不完善,而直接去學從prompt到答案的對映。隨著訓練進行,模型在val set上的準確度是越來越高的,在我的訓練步數內,5ppl上能達到33%,6ppl上能達到22%,且還沒有飽和,所以它是有能力做對題,但肯定不是靠思維鏈做對題。
而大的模型本身應該就有抽出長思維鏈+正確答案的潛力,所以這個行為能被我們保留並強化,在訓練後期,簡單題(例如僅靠一次前向推理就能確定所有人的身份)被學完,而後,當rollout出模型依靠更長思維鏈解決難題的樣本後模型自然就會往長思維鏈解決難題上靠。
總結
總的來說,這次做的幾次實驗都沒成功,模型太小肯定是個問題。換個大一點的模型試試吧,不知道我的四張3090還能不能撐得住。
由於剛入坑RL,很多東西都是速成的,可能理解上有誤,還請見諒。
技術交流群邀請函
△長按新增小助手
掃描二維碼新增小助手微信
請備註:姓名-學校/公司-研究方向
(如:小張-哈工大-對話系統)
即可申請加入自然語言處理/Pytorch等技術交流群
關於我們
MLNLP 社群是由國內外機器學習與自然語言處理學者聯合構建的民間學術社群,目前已經發展為國內外知名的機器學習與自然語言處理社群,旨在促進機器學習,自然語言處理學術界、產業界和廣大愛好者之間的進步。
社群可以為相關從業者的深造、就業及研究等方面提供開放交流平臺。歡迎大家關注和加入我們。

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