在OpenAI o1剛放出來時,它有限的技術報告里,有2個內容格外抓人眼球:
我一直是把這2者理解為兩個獨立的個體,在這個基礎上,當時我給出了一些關于o1實現思路的猜想(https://zhuanlan.zhihu.com/p/773907223):
我認為o1走的可能是上述framework3的路線,總結來說:
Inference/test-time scaling
:這一塊的主要作用是為RL過程自動化地制造高質量數據集。包括用于format模型產生思考過程的long cot數據集,以及帶preference labels的數據集。我把這一塊的系統抽象為PRM + some search methods的形式。例如討論度很高的MCTS,本質上也可理解為 fixed PRM + some search methods。RL
:這部分應該就是openAI自己慣有的一套RL流程。那么,我為什么當時會認為 inference-time scaling 和 RL 應該是2個獨立的過程呢?因為在我的認知里,我認為如果沒有顯式的引導,模型是不具備產生long cot(乃至帶反思的cot)的能力的(在模型訓練初期,這個能力是指formatting模型,讓它知道要產出這種格式的回答;在訓練過程中再來慢慢提升這種回答的質量)這個顯示引導就是指諸如sft這樣的過程。所以在這個認知里,上面的2個過程就應該是獨立的。
而我第一次發現這樣的認知可能有問題,是在我閱讀紅杉對openAI的訪談中,在這個萬字長文里,有一句話格外引起我的興趣,我當時把它劃了出來:
這句話的意思是:沒有人為的刻意為之,模型在某種訓練過程中自發出現了反思的行為。而如果這一點都是能實現的,那是否意味著沒有人為的刻意為之,模型本來也具備產生long cot的能力呢?
如果是這樣的話,那么o1可能除了數據工程 + 慣常的RL技巧外,整個系統要比想的簡單很多。可是我的水平有限,實在不知道除了顯式引導外,模型怎么可能自發產生這樣的能力呢?
而直到前幾天,又是蹭著熱點讀到了dpsk-r1的這篇技術報告,我這下才發現:原來單純的RL就可以激發模型產出帶有long cot(甚至是反思)的回復的能力!(可能在此之前已有很多研究發現了這點,是我對這一塊的follow-up太少了,確實直到跟著熱點讀了dpsk-r1,才發現了這點)。這里單純的RL是指:我并沒有顯式提供一些真正的long cot數據讓模型去背去學,我只是在sys_msg里告訴模型先思考,再回答。接著通過RL一輪又一輪的訓練,模型產出的responses越來越長,且在某個時刻出現了自我評估和反思的行為。這個實驗探索就是dpsk-r1-zero在做的事情。
如果RL有這種能力,那么inference time scaling 和 RL 就可以不是2個獨立的過程,而是在RL的過程里自發出現了inference time scaling的現象,而如果它們不再獨立,那么類o1的訓練架構也許就比我們想得要簡單很多。
原本我只是抱著追熱點的心態掃一下dpsk r1,我甚至沒打算看完它的tech report。不過開頭關于dpsk-r1-zero的實驗結論一下吸引了我,所以把核心內容簡單記錄下,我會側重訓練流,略去評估。(這邊的重點并不在于討論什么路子是對的、什么是錯的,只是對我來說發現一種可能)。
在dpsk r1的這篇報告里,提到了2個模型,分別是 DeepSeek-R1-Zero
和 DeepSeek-R1
,總結來看:
zero算是一個實驗性質的模型,在zero上不通過任何sft的方式,僅使用RL + 規則RM,就能激發模型產出帶反思的long cot。這個重要的實驗發現進一步啟發了r1的訓練。
r1是受到zero RL相關的實驗結果啟發,而新訓的最終版的模型。zero所采用的RL方法(即什么樣的RL能激發模型主動產出long cot,甚至是反思)將被 r1 參考。
下面簡單記錄下兩者的訓練細節。
dpsk家的GRPO,不是文本關注的重點,暫略。
在訓練DeepSeek-R1-Zero時,采用了基于規則的獎勵系統,主要包括兩種類型的獎勵:
(1)準確性獎勵(Accuracy Rewards)用于評估模型responses的準確性。例如數學問題的答案是否正確,代碼是否通過測試用例等。
(2)格式獎勵(Format Rewards)
(3)為什么不使用神經網絡式的RM?
為了訓練DeepSeek-R1-Zero,我們首先設計了一個簡單的模板,指導基礎模型遵循我們指定的指令:
模版如下:
和別的模型的性能比較這里略去,簡單介紹一下對于R1 zero性能重要的幾個結論:
r1 zero證明了無需sft,直接用base model做RL,已經可以取得強大的reasoning能力。
使用多數投票策略(例如對一條prompt采樣多次,取出現次數最多的那個答案)可以進一步增強模型性能。
隨著訓練steps的增加,r1 zero傾向于產出更長的response(long cot),并且還出現了反思行為。這些都是在沒有外部干預的情況下,r1 zero模型在訓練中自我進化的結果。
所以接下來探索deepseek r1,這是獨立于r1 zero的正式訓練流程了。可以說,r1 zero的訓練是一個探索性的過程,它驗證了RL本身對于激勵模型產生推理的能力。在這個探索結論上,開始正式進入r1的訓練。
r1的訓練總體訓練過程如下:
|special_token|<reasoning_process>|special_token|<summary>
這里新的sft數據集來自兩個方面,一共約80w條。
1. 當前正在訓練的模型產出的結果(reasoning data)
2. 不是當前正在訓練的模型產出的結果(no reasoning data)
再次回到base模型上,首先用這80w的新數據對它做2個epoch的sft。
接著執行2個階段的RL:
第1階段RL:旨在增強模型推理方面的能力。采取類似r1 zero的RL方法,使用基于規則的RM,對模型進行RL訓練,以提升模型在數學、代碼和邏輯方面的推理能力。(這里用的數據集應該不是那80w,是類似于zero直接構建prompt)
第2階段RL:旨在針對模型的helpfulness和 harmlessness,類似于dpsk v3的訓練pipeline
當你觀察上面對r1的兩個階段訓練時,你會發現它們依然用到了sft,表現在:
那么你看可能會有這樣的疑問:如果還用sft,那前面zero的實驗是不是白做了? 既然得到了RL本身就有激發模型做long cot和反思的能力,那要sft干嘛?這豈不是和開頭所說的RL中實現inference time scaling有矛盾嗎?
這里談一下我的理解:
使用以上80w數據,對llama和qwen系的部分dense模型做sft,然后檢測這些模型的推理能力。
結論:對于小模型,不需要依然RL,只用蒸餾就可以使得其推理能力得到顯著提升(對于大模型會是怎么樣的,這里沒有提)