StableReinforce 登上 Tinker:取樣與訓練不同步時,強化學習如何避免突然崩潰?
StableReinforce 是 Tinker 新增的 Alpha 強化學習損失函數,針對非同步取樣與數值差異造成的不穩定。本文以白話解釋 off-policy、來源追蹤與 KL 懲罰,整理官方內部主張、使用條件及目前尚未公開的驗證。
強化學習訓練不一定是模型越學越好。有時一輪更新就讓表現突然垮掉,研究者得回頭找取樣和訓練之間出了什麼差異,卻不容易從最後一個分數判斷原因。
Tinker 在 10 月 21 日公告 StableReinforce,目標是讓取樣模型和正在更新的模型不完全一致時,訓練仍能維持穩定。這是一個新的損失函數,也就是決定模型如何根據資料調整參數的計算方式。
取樣與訓練分開執行能提高運算利用率,但資料送回來時,模型可能已經更新過幾輪。低精度計算也可能讓兩端算出的機率稍有不同,於是「答案當時怎麼產生」就成了訓練必須知道的事。
Thinking Machines 的官方文件說,這個方法在內部後訓練中很穩定。公開頁面提供了使用契約與部分機制,但沒有完整的跨設定比較,因此這項成效仍屬官方內部結果。
對已在 Tinker 處理非同步強化學習的團隊,我認為值得做一組受控比較。只有靜態訓練檔、沒有原始取樣紀錄的人,則不能只換一個函數名稱,就期待得到同樣效果。
要知道它為什麼需要這些紀錄,先從產生答案的模型和拿答案學習的模型為什麼會不同說起。
StableReinforce 是什麼?它處理哪一種訓練不穩定
這個方法處理的是取樣策略與訓練策略不同時,更新容易偏離的問題。策略可以先理解成模型在一個情境下如何選擇下一步,包括輸出哪一個文字片段,以及各種選擇的機率。
強化學習會讓模型產生答案,再依獎勵調整它的行為。取樣就是產生這些練習答案,訓練則是拿答案和評分更新模型,兩者不一定由同一套服務、同一個時間點的參數執行。
在非同步流程裡,取樣端可以繼續生答案,訓練端同時處理前一批資料。這樣不必讓其中一端一直等待,但也代表資料回來時,它可能是舊版模型產生的,與正在學習的版本已有距離。
這類情況稱為 off-policy,意思是用來學習的經驗,不完全出自當下正在更新的策略。它不是資料一定錯誤,而是訓練計算需要處理這個差異,不能假定答案來自完全相同的機率分布。
另一個差異來源是數值計算。即使兩端載入相同模型,若推論和訓練使用不同精度或執行方式,也可能算出稍有差異的機率。因為大量更新依賴這些機率,偏差就值得注意。
穩定訓練與回答正確,是兩個不同目標
官方把這項功能定位成 REINFORCE 的變種。REINFORCE 是依獎勵調整行為機率的一類方法,分數較好的答案通常得到正向鼓勵,較差的答案則受到抑制,讓模型逐步改變產生答案的方式。
但更新過程比較穩定,不代表獎勵本身一定設得對。若評分偏愛冗長答案,穩定訓練也可能穩定地把模型帶向冗長,所以工具處理的是更新過程,任務目標仍要由研究者負責。
既然差異來自取樣與訓練兩端,接下來就要看系統如何知道答案當時是怎麼產生的。

為什麼取樣來源不能事後才補
穩定所需的額外資訊必須在取樣當下記錄,才能把訓練資料對回正確序列。這是接入這項功能的重要改變:研究者需要調整的不只訓練呼叫,也包括前面的資料產生流程。
官方要求建立取樣用戶端時開啟 record_stability_info=True。這個設定會記錄所需資訊,每個回傳序列也會帶有 sequence_id,讓後續訓練能指明自己使用哪一份取樣結果。
序列識別碼的用途類似資料的收據編號,但它指向的是一次具體的取樣內容。若同一個提示產生四份答案,就應分別保留各自的識別碼,不能因為題目相同便把來源當成同一份。
這也解釋了為什麼舊答案不能任意補標籤。只有文字檔,並不等於保有取樣時記錄的額外資訊,因此自行取一個新編號,也無法讓服務回復當時沒有記下的內容。
一天窗口是使用條件,不是資料刪除政策
官方文件說,記錄的序列屬於產生它的工作階段,也就是同一個 session。取樣後的一天內可用於訓練,每個使用該序列的訓練請求,都會重新開始這個一天窗口。
這個條件影響的是管線排程。若團隊把取樣和訓練分成不同工作,並讓資料在中間等很久,就必須檢查序列還能不能被使用;不能只確認磁碟上有答案檔案便開始更新。
它也不代表服務承諾一天後刪掉所有資料,因為文件這裡談的是可用於該功能訓練的窗口。把執行期限與資料保留政策混在一起,會讓使用者誤判產品條件。
對工程團隊而言,最直接的做法是把識別碼、取樣時間和工作階段一起保存。這些紀錄能讓失敗發生時較容易追查,究竟是序列過期、跨工作階段,還是內容位置對不上。
序列識別碼解決找到來源的問題,資料每個位置是否對得上,還需要另一層檢查。
Provenance 如何把每個訓練位置接回原始序列
來源追蹤把訓練輸入和預測目標逐段對回取樣結果,避免只附一個檔名卻對錯內容。官方稱為 provenance,白話說就是訓練資料中的這一段,來自哪個序列的哪個位置。
Tinker 的 Datum 文件把來源分成提示與生成內容。前者指出模型看到的題目,後者指出模型實際產生的文字,因為兩種內容在訓練中扮演不同角色。
這裡會用到 Token,也就是模型處理文字的單位。Token 不必等於一個完整單字或一個中文字,所以來源位置必須依實際編碼後的序列計算,不能拿畫面上的字數直接代替。
例如,假設一個教學例子有兩個提示 Token 和三個答案 Token。模型輸入可能包含提示與答案的前兩個位置,訓練目標則往後移一格,要求它在每個位置預測下一個 Token。
因為輸入和目標的起點不同,兩者需要各自的來源區段。若只把整份檔案標成來自某個答案,系統仍不知道目標的第一個位置,究竟對應提示還是生成文字。
官方因此要求每份資料都有兩組來源區段,分別完整覆蓋輸入和目標欄位。區段要連續對齊,長度加總也要符合欄位,這讓服務能檢查來源不是只在名稱上看起來合理。
這項新損失函數還有更具體的條件:目標欄位中的生成區段要覆蓋整段取樣序列,而不是任意切出一半;模型輸入中的區段則可以只涵蓋序列的一部分。
另外,帶有非零 advantage 的 Token,必須來自開啟穩定資訊記錄的取樣。Advantage 可以理解成這次答案相對基準的好壞訊號,正值鼓勵、負值抑制,因此它直接參與更新。
這些規則會限制資料怎麼裁切與拼接。若原管線習慣把答案拆成小塊、混入舊資料或跨工作階段重組,就需要先確認來源區段仍符合文件,而不是到訓練失敗才補救。
當來源與位置都能核對,才有條件討論這個方法如何限制更新偏移。
KL 懲罰在限制什麼?它不直接判斷答案好壞
官方公開的 KL 懲罰會拉近訓練模型與取樣模型的分布,作用是約束偏離。KL 是比較兩個機率分布差異的量,在這裡用來描述兩端對下一個 Token 的選擇有多不同。
可以把取樣端想成產生這批練習答案的學生,訓練端則是正準備更新的學生。當兩者已經差很多,若仍把舊答案當成完全代表現在行為,就可能讓更新的依據失真。
文件中的這項懲罰比較 sampler 和 learner,也就是取樣端與學習端。它不是在這裡另外指定一個固定的外部參考模型,因此不能直接套成「模型永遠不能偏離最初版本」的規則。
官方也說明,這個項目的梯度會提高學習端對每個已取樣 Token 的機率,不論其 advantage 是正是負。這是讓學習端貼近取樣端的一股力量,與依獎勵推動方向的力量同時存在。
調整係數,不能只看數字大小
控制這股力量的設定叫 kl_coeff,預設是 0.01,必須是有限的非負數,設為 0 便關閉這項懲罰。這是官方列出的設定範圍,不是保證所有任務都適合預設值的結論。
係數較強,代表更重視貼近取樣端,但也可能限制往新行為移動的幅度。若只以「比較不會偏離」作唯一目標,就會忽略訓練原本是希望改善任務結果,因此必須一起觀察兩者。
對使用者來說,值得記錄的不只是最後獎勵,還包括使用的係數、取樣和訓練的版本關係,以及是否發生突然崩潰。少了這些條件,即使看到較好的分數,也難以知道是哪項改變造成的。
這個公開機制能幫助理解功能怎麼用,但它不是完整演算法的獨立驗證。因此判斷是否導入,還需要把官方目前提供的證據與自己的比較分開看。
Alpha 目前公開了什麼,還不能推出什麼結論
公開文件讓團隊可以接入功能,但官方內部穩定的說法尚不足以保證所有設定有效。Alpha 表示介面仍可能變動,對正在維護訓練管線的人,版本相容性本身就是需要管理的成本。
截至 10 月 22 日,官方頁面交代了取樣需求、資料來源契約、輸入輸出,以及 KL 懲罰的部分計算。這些資訊足以判斷既有管線要改哪些地方,但還沒有完整的跨模型與跨任務成效表。
例如,要比較它是否比既有方法穩定,讀者會需要知道發生崩潰的定義、比較多少次執行、使用哪些模型,以及兩端相差多少輪更新。這些條件不同,得到的結果就可能不同。
官方文件沒有列出這組完整對照,所以正文也沒有替它填上一個成功百分比。比較合理的定位,是一項已能依文件接入、且官方報告內部效果的實驗功能,等待使用團隊累積外部證據。
它也沒有承諾降低多少費用。非同步流程有機會改善資源利用,但實際帳單仍取決於取樣數、訓練長度、重跑頻率與平台費率,不能從「穩定」兩字直接換算省下的金額。
延伸閱讀:Hugging Face 多框架強化學習:同一個 AI 模型,換工作工具為什麼就變了?
比起套用一句保證,較有用的做法是把自己的失敗條件做成對照。
誰適合試?用一組可重現對照決定是否導入
已在 Tinker 執行非同步取樣、能保存來源紀錄的團隊,最能直接檢驗這項功能。因為他們已經有需要處理的差異,也比較容易找出一組原本不穩定、而且值得改善的工作負載。
先固定模型、資料來源、獎勵與訓練預算,再比較既有損失與新功能,會比同時換模型、換任務更有解釋力。否則看到較好結果時,很難知道是不是其他改動讓訓練變得容易。
取樣版本落後多少,也應成為測試條件。可以從原本正常的設定開始,再檢查團隊實際會遇到的延遲範圍,觀察結果是否改善,而不是刻意挑一個極端案例就宣稱問題已解決。
評估時至少同時保留訓練過程和最終任務結果。若曲線很平穩,任務表現卻沒有進步,團隊得到的是比較可控的更新流程,還沒有證明模型更有用,所以這兩個收穫可以分開記錄。
接入前也可先驗證一小批資料的來源。確認序列識別碼、工作階段、輸入與目標區段都能對上,再增加規模,能把資料契約問題與演算法效果分開,減少無法解讀的重跑。
我會把這項功能優先留給已有非同步訓練需求的團隊,而不是把它當成所有模型微調的預設起點。若工作只是從教師答案建立靜態訓練集,先把資料與評測做好,通常更直接。
延伸閱讀:推理模型蒸餾怎麼學?Raschka 第 8 堂用 Qwen3 0.6B,從教師答案走到獨立評測
這組比較能回答它是否改善你的訓練,而不是只增加另一個看起來合理的設定。
StableReinforce 常見問題
StableReinforce 是新的 AI 模型嗎?
不是,它是 Tinker 提供的強化學習損失函數,控制訓練更新的計算方式,不能直接拿來聊天。
舊的答案資料可以直接使用嗎?
需要符合官方來源條件,包括取樣時的穩定資訊與同一工作階段的序列紀錄。只有文字檔並不夠。
KL 係數越大越好嗎?
不能這樣判斷。它控制貼近取樣端的力量,仍需和任務結果一起比較。
先確認資料能追溯,再測穩定效果
這項功能的意義,在於把取樣與訓練之間的差異當成明確問題處理,並要求資料保留可核對的來源。適合的使用者,是能建立對照、願意管理 Alpha 介面的訓練團隊。
先跑通一批完整可追溯的樣本,再比較實際失敗率與任務成績,會比直接搬進大型訓練更容易得到答案。想追蹤模型訓練、評測與開源工具更新,可以免費訂閱 AI 郵報。