大模型微调、强化数据合成开源代表项目解析及DeepSeek-R1发布100天后的复刻总结

今天是2025年5月5日,星期一,北京,晴。

我们来看两个问题,一个是对DeepSeek-R1进行总结,DeepSeek-R1发布100天后,我们学到了什么?看看有哪些数据集,微调或者强化学习方式是怎么做的?又有哪些启发可以关注?抛开效果不讲,从技术经验角度上,我们应该关注什么

第二个,我们来看看数据合成的工作,目前大模型微调数据、强化学习数据都可以进行合成,来回顾具有代表性的三个开源合成工具,并看看实现逻辑,懂原理才能做优化。

抓住根本问题,做根因,专题化,体系化,会有更多深度思考。大家一起加油。

一、DeepSeek-R1发布100天后的几点总结

DeepseekR1总结,最近有个工作可以看看,题目是在DeepSeek-R1发布100天后,我们学到了什么?,《100 Days After DeepSeek-R1: A Survey on Replication Studies and More Directions for Reasoning Language Models》,(https://arxiv.org/pdf/2505.00551),综述了自DeepSeek-R1发布以来,推理语言模型(RLMs)的研究进展,特别是通过监督微调(SFT)和基于可验证奖励的强化学习(RLVR) 来复制和增强这些模型的能力。

1、监督微调(SFT)方式进行推理模型增强

监督微调这块,最关键的是微调数据,所以,先看看目前都有哪些数据集,如下表所示:

我们来看每个数据集的大致情况:

DeepSeek-R1。包含80万份训练样本的蒸馏数据集,其中包括60万份推理示例和20万份非推理示例,如写作、角色扮演和其他通用任务。根据现有报告,部分非推理数据似乎是从DeepSeek-V3的SFT数据集中重用的。为了创建蒸馏数据集,DeepSeek-R1自身被用来生成蒸馏轨迹。然而,这一解释是基于提供的有限细节,因为确切的方法论尚未完全披露。值得注意的是,该数据集并未公开可用。

OpenThoughts。OpenThoughts1策划了一个合成推理数据集,其中包含来自多个来源的11.4万份示例。它涵盖多个领域,包括数学、科学、编程和谜题。CoT由DeepSeek-R1生成并通过验证。特别是,使用大型语言模型作为裁判来验证数学和谜题问题的真实答案,并依赖代码执行和单位测试来验证编程问题。地址在:https://huggingface.co/datasets/open-thoughts/OpenThoughts-114k

Open-R1。OpenR1-Math-220k2(是一个用于数学推理任务的大规模数据集。从NuminaMath 1.5(收集了22万份数学问题,并使用DeepSeek-R1为每道问题生成了2到4个CoT。为确保每个问题至少包含一个正确答案,大多数CoT由Math Verify(进行验证,使用Llama-3.3-70B-Instruct作为评委,对12%的样本进行评判。在22万个问题中,有9.4万个被认为是高质量的问题。根据Face(2025年)的研究,这9.4万个子集在SFT(标准化测试)中表现更好,因为扩展的13.1万个问题可能包含了较简单的问题。地址在:https://huggingface.co/datasets/open-r1/OpenR1-Math-220k

LightR1。构建了一个高质量的标准推理测试数据集3,该数据集包含从DeepSeek-R1提炼出的7.9万个样本。首先从不同来源收集了100万个数学问题,并使用DeepScaleR-1.5B预览版(罗等人,2025b年)生成初始响应。只有通过率低(低于某个阈值a)的问题被选中,用DeepSeek-R1进行进一步处理,从而产生大约7.6万个例子。从这个集合中,只保留正确的长格式CoT(认知测试)响应,每个问题选择一个,以创建一个超过7万个例子的SFT数据集,过滤了难度和多样性。虽然仅在这个数据集上进行训练在复现蒸馏模型方面是有效的,但引入了第二阶段,通过利用DeepSeek-R1-Distill-Qwen-32B进一步提升质量。这一阶段只保留了那些DeepSeek-R1-Distill-Qwen-32B的通过率低于阈值a且DeepSeek-R1的响应不一致正确或错误的问题。结果是精炼的第二阶段SFT数据集,其中包含约3000个例子。地址在:https://huggingface.co/datasets/qihoo360/Light-R1-SFTData

Bespoke Stratos,包含从DeepSeek-R1提炼出的1.7万个例子,涵盖编程、数学、科学和谜题等领域。应用拒绝采样来消除解决方案错误的推理轨迹。特别是,使用GPT-4o-mini作为评判器来过滤掉数学问题答案错误的痕迹,与基于规则的方法相比,将保留样本的比例从25%提高到了73%。地址在:https://huggingface.co/datasets/bespokelabs/Bespoke-Stratos-17k

AM,包含来自各个领域的140万个样本。策划主要包括三个阶段:(i)原始数据收集,从多个数据源收集原始数据。(ii)全面的数据过滤,即通过基于嵌入的相似性进行去重,使用大型语言模型对难题进行过采样。(iii)CoT蒸馏。对于缺乏推理痕迹或其实验事实验证失败的样本,使用DeepSeek-R1生成新的CoT。为确保答案的正确性,应用了一系列验证器,包括Math Verify和Qwen2.5-7B-Instruct。此外,通过执行还验证了与测试用例相关的编程问题。地址在:https://huggingface.co/datasets/a-m-team/AM-DeepSeek-R1-Distilled-1.4M

Synthetic-1,从DeepSeek-R1提炼出的89.4k样本推理数据集,涵盖了数学、编程和STEM等领域。验证是特定于领域的:使用Math Verify来处理数学问题,对编程问题进行基于执行的验证,由大型语言模型评判剩余类型的问题。地址在:https://huggingface.co/datasets/PrimeIntellect/SYNTHETIC-1-SFT-Data

S1k-1.1,通过从16个多样化来源收集5.9万个问题,策划了一个大规模推理数据集。每个问题与一个推理轨迹和由DeepSeek-R1生成的解决方案配对,形成问题-轨迹-解决方案三元组。在净化和去重之后,一个三级过滤过程生成了一个高质量、多样且具有挑战性的1000个样本子集,专为资源最少的训练设计。地址在:https://huggingface.co/datasets/simplescaling/s1K-1.1

LIMO,首先从各种已建立的数据集中构建数千万个问题,例如NuminaMath。然后使用Qwen2.5-Math-7B-Instruct的基线难度过滤器,移除那些可以在几次尝试内解决的问题。接下来,收集人类专家和包括DeepSeek-R1、DeepSeek-R1-Distill-Qwen-32B和Qwen2.5-32B-Instruct在内的最先进模型的推理轨迹,并进行彻底分析,以识别高质量推理链的关键特征,。最后,使用一种结合基于规则过滤与LLM辅助策划的混合方法,为每个问题选择高质量解决方案。由此产生的包含817个问题的数据集在用于微调基础模型时表现出强大的性能。地址在:https://huggingface.co/datasets/GAIR/LIMO

但,总结起来,数据大致要经历的几个关键步骤如下:

一个是数据收集,从多个领域(如数学、科学、编程和谜题)收集问题,可能来自现有的基准或网络爬虫;

一个是过滤,进行多轮过滤以提高数据质量,包括去重、拒绝采样和真实性验证。例如,Light-R1使用模型正确性阈值来形成具有挑战性的子集;

一个是验证,依赖已验证的链式思维(CoT)或解决方案来确保数据的真实性。不同领域的验证方法有所不同,例如数学问题通常由Math Verify验证,编程问题通过执行或单元测试验证;

一个是复杂性控制,在数据选择过程中强调难度和多样性,常使用启发式或模型通过率来优先处理较难的问题

此外,对于这类微调数据的统计分析也很有趣,如下图:

如上图所示,在长度分布上,尽管所有这些数据集的长CoT都源自同一教师模型,即DeepSeek-R1,但它们的分布表现出可观察的差异。例如,数据集如AM和Synthetic-1偏向较短的序列,而Light-R1和Open-R1显示出更广泛的分布,尾部更长,这表明复杂问题的比例更高,通常会产生更长的CoT

此外,这些数据集并非孤立创建,即经常从现有的数据集中收集或派生数据,通常包含重叠或重复使用的例子。所以,可以看看这个数据引用的关系图。

基于这类数据进行微调,除了数据之外,核心就是基座的选择,如下图所示:

2、强化学习方式增强推理大模型性能

DeepSeek-R1-Zero通过独立的RLVR过程在推理和知识任务上取得了优异表现。在其RLVR过程中使用的精选高质量数据集对其成功至关重要。

所以,依旧可以看看对应的数据集,包括DeepScaleR-Preview、Skywork-OR1、Open-Reasoner-Zero、Big-Math、DeepMath-103K以及一些通用的数据集General Domain Datasets。

除了数据集之外,就是RL的设计,关键点如下:

在RL算法上,大致可以分为:

PPO(Proximal Policy Optimization),由于其稳定性和鲁棒性,PPO是广泛使用的RL算法之一。它通过引入价值估计器(Value Function)来减少梯度估计的方差;

GRPO(Group Relative Policy Optimization),通过归一化组内奖励并引入KL散度惩罚来提高效率,适用于大规模模型;

REINFORCE++ ,通过在奖励函数中加入token-wise KL散度惩罚来稳定策略梯度更新。

DPO(Direct Preference Optimization) ,不需要在线RL训练的方法,通过构建选择和拒绝对来直接训练模型,减少了计算资源的消耗。

VC-PPO(Value-Calibrated PPO) ,通过价值预训练和解耦的GAE(广义优势估计)来解决PPO在长链推理中的值初始化偏差和奖励信号衰减问题。

VAPO (Value-based Augmented Proximal Policy Optimization) ,结合了基于价值的RL框架,通过价值预训练和解耦的GAE来增强长链推理能力。

CPPO (Completions Pruning Policy Optimization) ,通过过滤掉低影响的完成样本来加速训练过程,减少了对低优势完成的前向传递和梯度反向传播的需求。

Dr.GRPO (Decoupled Clip and Dynamic Sampling Policy Optimization) ,通过消除响应长度和问题难度偏差来改进GRPO,提高了token效率和推理性能。

奖励函数的设计上,大致可以分为:

准确性奖励Accuracy Rewards,最简单的奖励类型,评估响应的正确性,通常得分1表示正确,0或1表示错误;

格式奖励Format Rewards,鼓励响应遵循预定义的结构或格式;

长度奖励Length Rewards,影响模型的输出长度,一些方法奖励期望长度的响应,而另一些方法则鼓励简洁的响应;

3、无论是微调,还是强化学习,哪些因素影响着效果?

一个是数量和多样性,训练数据需要大量的样本以覆盖多种任务和领域。研究表明,使用来自不同领域的广泛数据进行训练可以显著提高模型的泛化能力。例如,Skywork-OR1、Seed-Thinking-v1.5、MiMo和Qwen3系列都利用了大量来自不同领域的数据进行训练。

一个是数据集难度,数据集应包含具有挑战性的样本,以促进模型在复杂任务上的表现。通过筛选出中等难度的样本,可以避免模型在过于简单或过于困难的任务上训练。例如Light-R1和Skywork-OR1通过离线数据选择,保留了中等通过率的样本,过滤掉了过于简单或困难的样本。

一个是数据清洗,清洗数据以去除不可解的问题和不验证的答案是关键步骤。这有助于减少噪声,提高训练的有效性。例如, BigMath和Open-Reasoner-Zero通过严格的数据清洗过程,移除了不适合验证的问题,如多选题和证明题。

一个是去重和去污染,在从多个来源收集数据时,去重和去污染是确保公平评估的重要步骤。例如, Light-R1、DeepScaleR和Skywork-OR1进行了详细的数据去重处理,以确保训练数据的独特性和质量。

一个是课程学习,基于数据难度的课程学习方法可以提高训练效率。通过逐步增加任务难度,模型可以在最具挑战性的问题上获得更好的表现。例如,Open-Reasoner-Zero采用了一种两阶段的课程学习方法,先在完整数据集上训练,然后选择最具挑战性的子集进行微调。

一个是数据合成和自蒸馏,一些研究通过数据合成和自蒸馏来扩展训练数据集,从而提高模型的推理能力。例如,Open-Reasoner-Zero利用数据合成和自蒸馏技术来生成额外的训练样本。

此外,不同的初始检查点和模型架构会影响模型的学习效率和最终性能。学习率、批量大小和最大上下文长度等超参数的选择对模型的训练稳定性和收敛速度有显著影响

二、再看大模型微调、强化数据合成工具实现方式;

关于大模型微调的数据合成工具越来越对,我们已经讲过多个。

例如,在文章《大模型微调数据生成工具Easy Dataset及KBLaM知识注入框架评析》(https://mp.weixin.qq.com/s/0PUMbuiyXPUIXunMuH-otw)中介绍的Easy Dataset项目,飞书wiki: https://github.com/ConardLi/easy-dataset,https://rncg5jvpme.feishu.cn/docx/IRuad1eUIo8qLoxxwAGcZvqJnDb?302from=wiki,具体问题看:https://github.com/ConardLi/easy-dataset/issues/,还很初步,纯Js写的,不好二次开发,视频教程在:https://www.bilibili.com/video/BV1y8QpYGE57/,一个知识库只能导入一个文件。不然,需要删除该文件,再导入,弄QA对。整体大面的功能不错,后面支持多文件,并发,就比较适合使用。

又如,在文章《Llama4模型四点核心总结及大模型推理数据合成工具Project Loong》(https://mp.weixin.qq.com/s/JX9ztoOMOw-GVIn12d0cOg)中介绍的Project Loong项目,通过验证器(verifiers) 扩大规模化合成数据生成,以提升大模型(LLMs)在多个领域的推理能力。https://github.com/camel-ai/loong,一个多智能体系统,从种子数据集生成合成问题及其答案,并使用领域特定的验证器检查智能体的回答是否与合成答案语义等价。

主要分成三个部分。一个是种子数据集(SeedDataset),手动收集特定领域的数据集,包含问题和真实答案。种子数据集用于启动合成数据生成过程。一个是合成数据生成器(SyntheticDataGenerator),基于种子数据集生成任意数量的合成问题和答案。目前包含3,551个问题,涵盖8个领域,包括高级数学、高级物理、计算生物学、金融等。生成器可以使用多种算法,目前支持少样本提示和多智能体系统。一个是验证器(Verifier),通过两种独立方法验证合成答案的正确性:直接通过代码执行生成解决方案或者通过自然语言的推理链(Chain-of-Thought,CoT)生成解决方案。如果两种方法的结果一致,则认为答案正确。验证器还会语义比较LLM的回答与合成答案,确保它们等价。

现在来看第三个具有代表性的数据合成工具,Synthetic Data Kit(https://github.com/meta-llama/synthetic-data-kit),用于生成微调合成数据,支持多种文件格式,包括PDF、HTML、YouTube视频。项目构成如下:

首先,在文档处理阶段,docx,html,pdf,pptx,txt,youtube的解析在:https://github.com/meta-llama/synthetic-data-kit/tree/main/synthetic_data_kit/parsers,不同的数据类型有不同的处理函数,主要是用于提取文本内容。

特别的,对于youtube的数据,处理逻辑是先进行文本转写,流程如下:

其次,数据合成阶段包括qa对、cot数据、summary数据,在https://github.com/meta-llama/synthetic-data-kit/tree/main/synthetic_data_kit/generators;

1、qa对及summary生成

其中先看生成qa对的,主流程如下:对文档生成summary,然后在送入generate_qa_pairs进行数据生成,但是这个summary并没有用于qa对申城,而是可以单独作为一个技能数据进行生成。

生成summary模块如下:

其中用到的summary prompt如下:

生成qa对的模块如下,执行逻辑是先chunk切分,然后直接提示llm进行生成。

其中用到的qa对生成的prompt如下:

但是,由于这种方式生成的qa对可能有噪声,因此,可以进一步地进行评分,从而过滤掉得分偏低的样本,这块依旧使用llm直接进行评分。

qa对的评分prompt如下:

2、cot数据合成

cot数据除了生成qa对之外,还补充其中的推理过程,合成包括普通cot数据和增强型cot数据两种,实现主流程如下,逻辑是,先生成summary摘要(Summarize this document in 2-3 sentences.),然后Generate CoT examples(Let me think through this step by step:\n\n{example['reasoning']}\n\nSo the answer is: {example['answer']}")。

对应的生成模块如下:

这一步,对应的cot的prompt如下:

当然,除了这种一步到位的cot数据合成之外,还可以在上面生成qa对的基础之上进行生成,但是,需要先将qa对数据转换为conversation数据,如下:

然后进行增强,其实,就是补充推理过程

其中,用到的增强的prompt如下

所以,我们可以看出,这个工作,核心就是在于使用llm进行处理,所以需要对合成的数据进行解析,这块的逻辑在在https://github.com/meta-llama/synthetic-data-kit/tree/main/synthetic_data_kit/utils;中可以找到。

进一步的,整个工具的使用,都是可以执行一些特定参数的,对应的配置,包括prompt等在https://github.com/meta-llama/synthetic-data-kit/blob/main/configs/config.yaml;

最后,为了验证这个工具的有效性,可以看看使用cot进行增强后的模型效果变化,在https://github.com/meta-llama/synthetic-data-kit/tree/main/use-cases/adding_reasoning_to_llama_3中可以找到,

上面就是对其实现的一些原理拆解,具体如何使用,可以看https://github.com/meta-llama/synthetic-data-kit/tree/main/use-cases/getting-started;

一顿拆解之后,我们发现,整个流程并不复杂,核心还是在于设计

参考文献

1、https://arxiv.org/pdf/2505.00551

2、https://github.com/meta-llama/synthetic-data-kit

(文:老刘说NLP)

发表评论

×

下载每时AI手机APP

 

和大家一起交流AI最新资讯!

立即前往