本文汇总 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/
总的来说,Llama 3 后训练方法是迭代式的,总共做了 6 轮。每轮的核心操作是:Reward Modeling (RM)、Rejection Sampling (RS)、SFT、DPO。
数据构成主要是 SFT data 和 Preference data。而 Reward Modeling 和 DPO,对 Preference data 又有不同的使用方式。
**SFT data:**每轮 Rejection Sampling 的结果 + 针对特定能力的合成数据 + 少量的人工标注数据。
**Preference data:**每一轮训练都构建一批新的 Preference data,Preference data 积累式地增长。
**Model Averaging:**每个 RM、SFT 或 DPO 阶段,使用不同的 data mix 或超参数进行实验所获得的模型进行加权平均。
1.1 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
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 使用的 margin loss,因为数据量上来之后 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。
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 的数据视为高质量数据。基于 Llama 的评分,就是基于 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 的蒸馏效果
报告基于 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 的优势函数为:
$$ A_i = rac{1}{G} rac{ ext{reward}_i - ext{mean}( ext{rewards})}{ ext{std}( ext{rewards})} $$
优化目标为最大化策略概率比与优势函数的乘积。
GRPO 详细算法可见 DeepSeek-V2 报告。GRPO 和 RLOO 做法类似,而 TRL rloo_trainer.py 实现了 RLOO 训练源码,可以参考。能理解其中一个就能理解另一个。所以也可参考相关社区讨论。
3 TÜLU 3
Paper: https://allenai.org/tulu
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 数据通常与其他数据集正交。
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 的损失进行平均。
报告用一个例子来说明这个问题。假设批次中有两个样本,分别有 $N_1$、$N_2$ 个 non-padding tokens 和 $P_1$、$P_2$ 个填充标记。如果同时将两个样本输入默认的 Transformers forward pass:
$$ Loss = rac{ ext{loss}_1 + ext{loss}_2}{N_1 + N_2 + P_1 + P_2} $$
然而,如果应用 gradient accumulation 分别输入两个样本,计算损失,然后除以 2:
$$ Loss = rac{ ext{loss}_1 + ext{loss}_2}{2} $$
第二种情况下平等地对待每个样本,而在第一种情况下平等地对待每个 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 中提及了大量实验。
优化算法实验
标准 DPO:
$$ ext{Loss}_{DPO} = - ext{log} rac{ ext{exp}(r(x, y_w))}{ ext{exp}(r(x, y_w)) + ext{exp}(r(x, y_l))} $$
TÜLU 3 在实验后最终采取了 length-normalized DPO:
$$ ext{Loss}{norm} = ext{Loss}{DPO} / ext{length} $$
顺带一提 SimPO 的优化目标(ref model free):
PPO 的优化目标:
TÜLU 3 场景中,不同 RL 算法的实验结论是,length-normalized DPO 效果最好,SimPO 甚至性能不如 SFT-base。
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。
总结与展望
通过对 Llama3.1、DeepSeek-V3、TÜLU 3 和 Qwen2.5 四大主流大模型后训练方案的对比分析,我们可以总结出以下关键技术趋势:
- 迭代式对齐流程成为主流:无论是 Llama 的 6 轮迭代还是 DeepSeek 的 SFT+GRPO,单一阶段的微调已难以满足高性能需求。多阶段、迭代式的 SFT-DPO-RL 组合拳正在成为标配。
- 数据质量优于数量:各厂商均强调数据清洗的重要性,包括语义去重、质量评分、难度分级等。特别是 Llama 3 提出的基于 RM 和 Llama 自身的双重评分机制,有效提升了训练数据的信噪比。
- 奖励建模的多样化:从传统的 Model-Based RM 到 Rule-Based Verifier,再到 Self-Rewarding 机制,奖励信号的来源更加丰富。特别是在数学和代码等可验证任务中,Rule-Based 方法显著降低了 Reward Hacking 的风险。
- 算法效率的提升:GRPO 作为 PPO 的简化版,通过移除 Value Model 降低了显存占用并简化了实现,已成为 DeepSeek 和 Qwen2.5 的首选。同时,Length-Normalized DPO 解决了传统 DPO 对长文本的惩罚问题,提升了生成质量。
- 蒸馏与专家模型的应用:利用强推理模型(如 R1)生成数据并经过 Expert Model 蒸馏,能够有效平衡推理深度与回答简洁性,是提升模型逻辑能力的重要路径。
未来,随着 RLHF 技术的进一步成熟,后训练阶段将更加注重自动化数据闭环的构建,以及如何在大模型通用能力与垂直领域专业度之间找到最佳平衡点。