長文 | 大模型Post-Training總結
今天給大家帶來一篇知乎好友@hadiii的一篇文章,匯總Llama3.1、DeepSeek-V3、TüLU 3和Qwen2.5的后訓練Post-Training技術。
知乎:https://zhuanlan.zhihu.com/p/12862210431
本文匯總Llama3.1,DeepSeek-V3,TüLU 3,Qwen2.5報告的后訓練部分,摘錄其中核心的細節。大多涉及到數據,SFT,RL(各種RM訓練,DPO,GRPO,RLVR等等)。
1.Llama3.1
paper: https://ai.meta.com/research/publications/the-llama-3-herd-of-models/
Illustration of the overall post-training approach for Llama 3.
總的來說,Llama 3后訓練方法是迭代式的,總共做了6輪。每輪的核心操作是:Reward Modeling,Rejection Sampling,SFT,DPO。
數據構成主要是SFT data和Preference data。而Reward Modeling和DPO,對Preference data又有不同的使用方式。
- SFT data:每輪Rejection Sampling的結果 + 針對特定能力的合成數據 + 少量的人工標注數據。
- Preference data:每一輪訓練都構建一批新的Preference data,Preference data積累式地增長。詳細過程見1.2 Preference data部分。
Model Averaging:每個RM、SFT或DPO階段,使用不同的data mix或超參數進行實驗所獲得的模型進行加權平均。
1.1 SFT
SFT數據構成
Rejection Sampling:
采樣模型多次,讓RM選出最好的回復,作為SFT data的一部分。部分細節如下:
- 采樣什么模型?兩種情況。迭代中表現Avg score最好的模型,或者在某個particular capability上表現最好的模型。
- 采樣多少次?K=10~30,即一般采樣10-30次。
- prompt哪來?人工標注的prompts。并在后訓練迭代后期引入特殊的system prompts。
SFT訓練細節:
- 405B模型使用學習率1e-5。
- 訓練步數在8.5K到9K步之間。
- 高質量數據源進行多輪重復訓練(epochs multiple times)。例如一個特別優質的coding示例可能被訓練3-4次。
- 普通質量數據進行降采樣(downsamples)。質量一般的數據可能只用1次或被隨機抽樣部分使用。
Our final data mix epochs multiple times on some high quality sources and downsamples others.
1.2 Preference data
Preference data數據構成
We deploy multiple models for annotation after each round and sample two responses from two different models for each user prompt. These models can be trained with different data mixes and alignment recipes, allowing for different capability strength and increased data diversity.
- 采樣什么模型?部署多個不同數據配比和對齊方法訓練的模型,針對每個prompt選取兩個不同的模型進行采樣。原因:不同模型能夠在不同的能力維度上表現出差異,數據質量和多樣性更好。
- 偏好等級?四個等級:顯著更好(significantly better),更好(better),稍微更好(slightly better),略微更好(marginally better)。
- 允許修改:標注同學可以進一步優化chosen response,最后edited > chosen > rejected。
- 迭代式難度:最后隨著模型改進逐步提高prompt復雜度。
1.3 RM & DPO
Reward Modeling:We train a reward model (RM) covering different capabilities on top of the pre-trained checkpoint.
DPO:For training, we primarily use the most recent batches of preference data collected using the best performing models from the previous alignment rounds.
Preference Data:In each round of post-training, we use all the preference data that is available at the time for reward modeling, while only using the latest batches from various capabilities for DPO training.
RM迭代細節:
RM也參與后訓練迭代。每一輪迭代都會重頭訓練RM。原文提到,每次訓練都會使用所有的Preference data,且都是從Pre-trained checkpoint開始訓練的,而不是在t+1輪迭代使用第t輪訓練的RM做增量訓練。
Llama2 RM ranking loss
- 移除llama2使用的margin loss,即上圖的m(r),因為數據量上來之后margin意義不大,不如“complexity management”回歸原始ranking loss:
- RM和DPO都只使用偏好等級為significantly better or better的pair,并且都過濾了similar response。
DPO迭代細節:
DPO每次都在SFT之后進行。此處的一個細節是,DPO訓練所用的Preference data并全不是在本輪的SFT model上采樣和標注的,而主要是從前面所有迭代輪次中表現最好的模型中采樣得到的。同時,每次迭代只取最新的一批Preference data,還要剔除General English部分數據,和RM不一樣。loss:
- 同時從chosen和rejected response里面mask掉special formatting tokens的loss,比如header token & termination token,因為會引入沖突的學習目標,即loss同時往增加和減少這些token的概率上優化。
- 同時優化chosen response的SFT loss。
- 學習率取1e-5,beta取0.1,SFT loss取0.2。
- RM和DPO都只使用偏好等級為significantly better or better的pair,并且都過濾了similar response。
DPO discussion
DPO團隊觀察到,只要SFT模型在Long context任務中表現出色,DPO中僅使用短上下文訓練數據,并不會對長上下文性能產生負面影響。
1.4 數據清洗
Llama 3給出的數據清洗方法都很務實。
首先是對一些不想要的回復模式需要去重,例如過度使用表情符號或感嘆號的問題。非常經典的AI語風也需要注意,例如“過于喜歡滑跪”的語氣問題,遇事不決就“對不起”或“我道歉”。
其他各種方法還有:
1、主題分類(Topic classification):首先訓練一個Topic classifier,例如用一大堆文本分類的任務數據去SFT一下Llama 3 8B。然后對所有訓練數據進行兩個層級的分類,粗粒度類別(如“數學推理”)和細粒度類別(如“幾何和三角學”)。
2、質量評分(Quality scoring):使用Reward model和基于Llama為每個樣本的質量打分。對于基于RM的評分,將得分前1/4的數據視為高質量數據?;贚lama的評分,就是基于Llama 3設計了一些打分的prompt,General English數據使用三個維度的評分(準確性、指令遵循性和語氣/表達),coding數據則使用兩個維度的評分(錯誤識別和用戶意圖),最后將獲得最高分的樣本視為高質量數據。RM評分和Llama評分的分歧率較高,但結合這兩種機制能在meta內部測試集中取得最佳的召回率。
3、難度評分(Difficulty scoring):Instag和基于Llama的評分。對于Instag,提示Llama 3 70B對SFT提示進行意圖標注,意圖越多,復雜性越高。基于Llama的思路和Quality scoring相似,給了Llama 3一些prompt,基于三個維度去打分。
4、語義去重(Semantic deduplication):最后進行語義去重。首先使用RoBERTa對完整對話進行聚類,然后在每個聚類內按(質量分數 × 難度分數)對其進行排序。接著,遍歷所有排序的樣本進行貪婪選擇,僅保留與當前聚類中已見樣本的余弦相似度小于閾值的樣本。
Instag用于標注SFT數據的意圖和語義標簽。詳見:https://arxiv.org/pdf/2308.07074
2 DeepSeek-V3
paper: https://github.com/deepseek-ai/DeepSeek-V3/blob/main/DeepSeek_V3.pdf
DeepSeek-V3的后訓練路徑是SFT->GRPO。后訓練部分同時提到了一些從DeepSeek-R1蒸餾的探索,Self-Rewarding的嘗試,以及Multi-Token Prediction的效果。全文精彩內容主要在前邊 pretrain ,但目前只想先整理后訓練部分。
2.1 SFT
DeepSeek-V3構建了一個1.5M(V2也是大概1.5M)的指令微調數據集,并且構建數據時按照ReasoningData和Non-Reasoning Data做了區分。
推理相關數據
對于推理相關的數據集(Math,Coding,邏輯推理),通過 DeepSeek-R1 生成數據。盡管 R1 生成的數據表現出較高的準確性,但同時也存在諸如過度思考、格式不佳以及回答冗長等問題。所以目標是結合 R1 生成數據的高準確性與常規格式化推理數據的清晰性與簡潔性。
具體來說,首先針對特定領域訓練多個expert model。隨后,expert model被用作最終SFT data的generator。Expert model訓練過程中,需要為每條數據實例生成兩種不同類型的 SFT 樣本:
- 將問題與其原始回答配對,格式為 <問題, 原始回答>;
- 在問題和 R1 回答的基礎上加入系統提示,格式為 <系統提示, 問題, R1 回答>。
System prompt引導模型生成具有反思與驗證機制的回答。在RL階段,模型通過high-temperature sampling生成回答,從而整合R1生成數據和原始數據的模式,即便在沒有明確system prompt的情況下也能體現。經過數百步的強化學習后,Expert model模型學會了融合 R1 的模式。
Expert model的RL訓練完成后,使用拒絕采樣(RS)以篩選高質量的 SFT 數據,用于最終模型的訓練。此時由于是expert model作為generator,所以保留了 DeepSeek-R1 的各種優勢,也能同時生成簡潔高效的回答。
非推理數據
對于非推理數據(例如創意寫作、角色扮演和簡單問答),采用 DeepSeek-V2.5 生成回答,并由人工標注人員核實數據的準確性與正確性。
SFT 細節
- 訓練兩個epoch,learning rate采用cosine decay ,起始學習率為 5×1e-6,逐步衰減至 1e-6。
- 訓練期間,每個sequence由多個樣本數據打包組成(即SFT packing)。但不同樣本間需要額外的attention mask,確保這些樣本彼此獨立且不可見。但值得一提的是,V3在 pretrain 時,沒有應用cross-sample attention mask。
Discussion:DeepSeek-R1 的蒸餾效果
The contribution of distillation from DeepSeek-R1
報告基于DeepSeek-V2.5研究了從DeepSeek-R1蒸餾的貢獻。DeepSeek-R1 Distill在LiveCodeBench和MATH-500基準測試中取得了顯著提升。
基于MATH-500,可以發現一個有趣的trade off是:蒸餾可以帶來更好的性能(74.6->83.2),但同時也顯著增加了平均回答長度(76.9->83.2)。
報告認為從推理模型進行知識蒸餾為post training提供了一個有前景的方向。
2.2 RM
DeepSeek-V3 RL過程訓練了兩種RM:rule-based and model-based。
Rule-Based RM
對于可以通過特定規則驗證的問題,基于規則來確定獎勵。例如對于某些數學問題,這類問題具有確定性的答案,要求模型以指定的格式(例如,用一個框框標出最終答案)提供最終答案,從而能夠通過規則驗證其正確性。同樣地,對于 LeetCode 問題,可以利用編譯器通過測試用例生成反饋。也是非常經典的做法,能夠確保reward非??尚?。TüLU 3同樣也做了RLVR。
Model-Based RM
對于具有自由形式的標準答案的問題,依賴RM來判斷回答是否與預期的標準答案相匹配即可。但對于沒有明確標準答案的問題(例如涉及創意寫作的問題),RM需要根據問題和對應的回答提供反饋。Model-Based RM基于 DeepSeek-V3 的 SFT checkpoint進行訓練。為了提高其可靠性,還構建了包含偏好數據的訓練集,該數據不僅提供最終的reward,還包含通向reward的推理鏈。該方法減少了在特定任務中出現的reward hacking。
Discussion:Self-Rewarding
即constitutional AI的做法,通過一系列文本描述的規則指導模型。將DeepSeek-V3 本身的投票評估結果也作為一種feedback,顯著提升了 DeepSeek-V3 在主觀評價中的性能表現。
聯想:DeepSeekMath
DeepSeekMath報告提到過使用了Process Supervision RL,但DeepSeek-V3報告中未提及。
2.3 GRPO
GRPO是PPO的簡化版本,最核心的改動是砍掉Value Model,依靠多次采樣的Reward,得出baseline分數來計算advantage。DeepSeek-V3未在GRPO一節提供較多細節。GRPO的優勢函數為:
優化目標為:
GRPO 圖示 from DeepSeek-V2
GRPO詳細算法可見DeepSeek-V2報告。GRPO和RLOO做法類似,而TRL rloo_trainer.py實現了RLOO訓練源碼,可以參考。能理解其中一個就能理解另一個。所以也可參考:https://zhuanlan.zhihu.com/p/1073444997
3 TüLU 3
paper: https://allenai.org/tulu
An overview of the TüLU 3 recipe.
TüLU 3的后訓練路徑是SFT->DPO->RLVR。TüLU 3報告寫的還是非常有誠意的,RL部分提供了蠻多細節供學習。也是印象中少有的花了比較大篇幅講RLVR的一篇報告。
3.1 SFT
數據構成
WildChat,OpenAssistant,NoRobots,,FLAN v2等各種質量還不錯的開源數據。人工標注或者好的閉源模型的response保留,沒有response的蒸餾4o。
數據實驗
- 多樣化對話數據(WildChat),對大多數技能有積極影響,特別提升Alpaca Eval性能。
- 安全性 SFT 數據通常與其他數據集正交。
- ...(還有一些其他數據實驗,如chat template...詳見原文)
Recipe
超參
batch size 128,Max Length 4096,Linear LR。對于8B模型,學習率:5e-6。對于70B模型,學習率:2e-6。訓2個epoch。
Trick:Batch Aggregation
TüLU 3注意到Open-Instruct框架訓練的SFT模型與在其他環境(如TPU)上訓練的模型之間存在性能差距。這個問題主要是由于Transformers中loss aggregation的一個問題:在不考慮梯度累積或分布式訓練設置的情況下對padding tokens的損失進行平均。
第二種情況下平等地對待每個樣本,,而在第一種情況下平等地對待每個token。因此改變梯度累積可能會由于有效地改變樣本權重而對性能產生重大影響。由于跨設備平均,分布式訓練中也會出現類似的問題。
所以TüLU 3在訓練時普遍選擇使用求和損失(sum loss)而不是平均損失(mean loss)。即通過簡單地移除上述方程中的分母,同時調整學習率。這使得所有token被賦予相同的權重。TüLU 3通過使用各種學習率、訓練輪數和損失類型在TüLU 2 SFT混合數據集上微調Llama 3.0來驗證各種設置的性能。最終發現使用lr = 5e-6的sum loss效果最好。TüLU 3還發現更長時間的訓練并沒有帶來進一步的改進,因此確定使用2個訓練epoch。
3.2 Preference Finetuning
TüLU 3在Preference Finetuning中提及了大量實驗。
優化算法實驗
優化算法實驗
preference dataset
In summary, our preference mixes come from different prompt sources, such as SFT data, WildChat and Persona IF. It includes prompts seen during SFT training but also new, unseen prompts. And lastly, it contains a mix of on and off-policy completions.
TüLU 3的preference data既有off-policy的pair,也有on-policy的pair。既有SFT階段見過的prompt,也有新的prompt。人工 + 4o as Judge。報告針對不同data mix做了很多實驗,獲得了一些符合直覺的結論,列舉部分:
Scaling the Number of Unique Prompts Improve Downstream DPO Performance. 增加prompt多樣性能夠提升DPO效果符合直覺。不過TüLU 3做了一個清晰的實驗是:驗證復制一些prompt(但使用不同的response pair)做數據增廣是否可行。可惜,結果是Performance退化了。
Unused Prompts Lead to Higher Performance vs. Reusing Prompts From SFT Mix. 即DPO階段的prompt還是應該盡量SFT階段沒見過的。
On-policy Data Improves Downstream DPO Performance. 即On-policy Data(模型采樣出來的pair)效果更好。
Recipe
3.3 RLVR(RL with verifiable rewards)
RLVR
其實就是基于Rule-Based RM做RL的另一種說法。不同于DeepSeek-V3和Qwen2.5采取的GRPO,RLVR的算法采取了PPO。PPO需要value model,但reward model目前是一個verifier,所以TüLU 3使用General RM來初始化value model。
Do Not Use the Scores from RM. TüLU 3在RLVR過程中,發現如果同時使用verifiable reward和RM的reward,會引入額外的噪聲,導致表現下降。
4 Qwen2.5
paper: https://arxiv.org/abs/2412.15115
Qwen2.5的后訓練路徑是SFT + Two-stage Reinforcement Learning,即SFT- >DPO->GRPO。報告總體細節不多。
4.1 SFT
Math
Qwen2.5-Math 的 CoT 數據 + RS。
Coding
Qwen2.5-Coder 的指令微調數據。
...(不再列舉,細節不多)
Recipe
最終,SFT構建了包含1M的大規模數據集,訓練使用32K的序列長度,訓練2個epoch,lr從7×10??衰減到7×10??、weight decay開0.1,gradient norms裁剪到最大值1。
4.2 DPO
Rule-based data
依靠strategies like execution feedback and answer matching,利用SFT對一批新的prompt采樣,通過Rule檢測的,作為chosen,否則作為rejected,當然也需要人工審核。
數據量
150,000 training pairs。
訓練recipe
標準DPO(未提及使用了length-normalized DPO或者SimPO等變種),Online Merging Optimizer,lr = 7e-7,訓練1個epoch。
Online Merging Optimizer:https://arxiv.org/abs/2405.17931
4.3 GRPO
相關原理見deepseek-V3一節中的GRPO。
RM的訓練數據
采樣什么模型?部署多個不同數據配比和對齊方法訓練的模型,針對每個prompt選取不同的模型進行采樣,溫度也開得比較高。原因:不同模型能夠在不同的能力維度上表現出差異,數據質量和多樣性更好。
GRPO數據
GRPO的prompts和RM訓練的Prompts相同。
Trick
訓練期間處理prompt data的順序由RM評估的reward score方差決定。方差較高的prompt會被優先處理,以確保更有效的學習。
超參設置
每個query采樣8次。2048 global batch size and 2048 samples in each episode。
本文轉載自??NLP工作站??,作者: hadiii ????
