SmolLM2:多阶段训练策略优化,小型语言模型实现卓越的性能表现
SmolLM2:多阶段训练策略优化,小型语言模型实现卓越的性能表现
SmolLM2采用创新的四阶段训练策略,在仅使用1.7B参数的情况下,成功挑战了大型语言模型的性能边界:在MMLU-Pro等测试中超越Qwen2.5-1.5B近6个百分点;数学推理能力(GSM8K、MATH)优于Llama3.2-1B;在代码生成和文本重写任务中展现出色表现;支持8K tokens的长文本处理能力。这些成果得益于其精心设计的多阶段训练方法:通过在约11万亿tokens的优质数据上,逐步优化模型的通用认知、专业能力和指令遵循表现。研究团队还特别构建了Fine-Math、Stack-Edu和SmolTalk等专业数据集,进一步提升了模型在数学推理、代码生成等关键领域的性能。
预训练数据集构建与分析
基础训练数据评估方法
为了评估不同英语网络数据集的效果,并确定最优的训练数据组合,研究团队采用了统一的实验条件:使用2048的序列长度,在每个数据集上训练1.7B参数规模的模型。每个数据集的消融实验均在随机采样的350B tokens上进行。
考虑到数学和编程能力通常需要经过大量训练才能体现,在评估这两类专业数据集时,研究团队采取了以下策略:基于SmolLM2在3T tokens训练后的中期检查点进行评估,主要使用网络数据进行预训练,并采用退火训练策略。
具体而言,在数学领域,研究团队在60B tokens的评估数据集和40B tokens的预检查点混合数据上进行退火训练;在代码领域,他们在200B tokens上进行退火训练,数据均匀分布于15种主流编程语言(每种语言约14B tokens)。
英语网络语料库优化
研究团队重点优化了两个核心数据集:FineWeb-Edu和DCLM。
- FineWeb-Edu数据集包含1.3T tokens,它使用了Llama3-70B-Instruct训练的分类器进行筛选,重点保留具有教育价值的内容。
- DCLM数据集包含3.8T tokens,它采用了基于OpenHermes 2.5指令数据和r/ExplainLikeImFive subreddit高质量帖子训练的fastText分类器进行筛选,保留了多样化的对话式内容。
评估结果表明,FineWeb-Edu在教育类基准测试(MMLU、ARC、OpenBookQA)上表现优异,而DCLM在HellaSwag和CommonsenseQA等场景理解任务上具有优势。基于互补性分析,研究团队最终确定了60% FineWeb-Edu和40% DCLM的最优混合比例,总计形成了5.1T tokens的高质量英语文本语料库。
数学专业数据集优化
现有数据集分析
OpenWebMath (OWM)和InfiMM-WebMath是两个重要的基础数学数据集。OWM包含12B tokens,通过从Common Crawl中提取特定数学内容构建,采用专门的文本提取管道保留数学公式和格式。InfiMM-WebMath包含40B文本tokens,在GSM8K测试中达到14%的准确率,相比OWM的10%有所提升,但在MATH测试中略逊于OWM。
FineMath数据集构建
针对现有数据集在规模和质量上的不足,研究团队开发了FineMath数据集,总计包含54B tokens。其构建过程如下:首先,从Common Crawl WARC文件中提取文本,重点关注FineWeb数据集中的5.8B个唯一URL,并使用Llama-3.1-70B-Instruct进行三级评分(1-3分)。
在质量控制流程中,研究团队采用分类器识别高质量数学内容,使用5分制评分系统,重点关注推理过程和适龄内容,应用MinHash LSH进行去重,并使用fastText进行语言筛选,仅保留英语内容。
最终,研究团队构建了多个数据集变体,包括FineMath4+(10B tokens,6.7M文档,仅包含4-5分样本)、FineMath3+(34B tokens,21.4M文档,包含3-5分样本)、InfiWebMath4+(8.5B tokens,6.3M文档)和InfiWebMath3+(20.5B tokens,13.9M文档)。
编程代码数据集优化
Stack数据集系列分析
现有的主要代码数据集包括Stack v1(约3TB公共GitHub仓库代码)、StarCoderData(经过筛选的80种编程语言子集,250B tokens)、Stack v2(来自Software Heritage的32TB代码存档)和StarCoder2Data(包含600+种编程语言,900B tokens)。
Stack-Edu数据集构建
为了提升代码质量和教育价值,研究团队开发了Stack-Edu数据集。在基础构建阶段,他们从StarCoder2Data中选择了15种主要编程语言,初始数据规模约为450B tokens。
在质量筛选流程中,研究团队使用StarEncoder模型训练了15个语言特定分类器,基于Llama3-70B-Instruct生成的合成注释进行0-5分评分,并采用阈值3进行筛选。最终,精选后的Stack-Edu数据集包含约125B tokens,均衡覆盖15种目标编程语言。
预训练策略与实现
SmolLM2的训练过程采用了总计11T tokens的多阶段训练方法,而不是使用固定的数据混合比例。这种设计基于以下四个核心原则:性能驱动干预、高质量数据退火、战略性数据引入和控制数据重复。具体来说,研究团队持续监控关键基准指标,动态调整数据集混合以解决特定能力瓶颈;在后期阶段对高质量数学和代码数据进行上采样,以最大化其影响力;在训练中期引入中等规模数据集(如OWM、InfiMM-WebMath和Stack-Edu),避免被大型数据集稀释;并将大多数数据集保持在推荐的4-5个epoch阈值内。
第一稳定阶段(0-6T tokens)
在第一稳定阶段(0-6T tokens),研究团队使用的数据混合配置为60% FineWeb-Edu(教育类网络数据)、40% DCLM(多样化问答式网络数据)和10% StarCoder-Data(限制在约4个epoch)。由于数据规模限制,该阶段暂不包含数学数据。观察结果表明,知识和推理能力符合预期,但数学和编程能力较弱。
第二稳定阶段(6T-8T tokens)
在第二稳定阶段(6T-8T tokens),研究团队对数据混合进行了调整,将英语网络数据比例提升至75%(保持前期FineWeb-Edu/DCLM比例),StarCoder-Data比例提升至20%,并首次引入了5%的OWM数学数据。结果表明,编程能力普遍提升,MMLU准确率超过随机水平(>25%),展现出通常需要更大模型才具备的能力。进一步分析表明,适度增加DCLM比例可改善MMLU MCF性能。
第三稳定阶段(8T-10T tokens)
在第三稳定阶段(8T-10T tokens),研究团队对数据混合进行了优化,将英语网络数据FineWeb-Edu/DCLM比例调整为40/60,数学数据比例提升至约10%(OWM和InfiMM-WebMath英语部分),从StarCoderData切换到Stack-Edu,并对小语种补充StarCoder2Data,同时引入Jupyter Notebooks增强上下文示例。结果表明,多项基准测试均有改善,出现了暂时的损失峰值但随后恢复。
第四衰减阶段(10T-11T tokens)
在第四衰减阶段(10T-11T tokens),研究团队使用的最终数据混合为58%英语网络数据(维持较高DCLM比例)、24% Stack-Edu(扩展语言覆盖)、14%数学数据(InfiWebMath-3+、FineMath 4+等)和4% Cosmopedia v2(高质量合成文本)。结果表明,模型实现了全面性能提升,特别是数学和编程能力显著进步。
上下文长度扩展优化
在第四阶段末期(最后75B tokens前),研究团队基于中间检查点将上下文长度扩展至8k tokens,采用130k RoPE基数,并使用40%长文档(8k+ tokens)和60%保持原混合比例的数据进行训练。此阶段产出了最终的SmolLM2基础模型。
模型后训练优化
SmolTalk是一个综合性指令调优数据集,包含会话数据和专项任务数据两部分。
在会话数据优化方面,研究团队使用Llama-3.1-405B-Instruct-FP8生成了1M个三轮会话,并进行了多层级质量控制,包括Llama-Guard-3-8B安全过滤、ArmoRM质量评分和gte-large-en-v1.5去重。
在专项任务数据方面,SmolTalk整合了Smol-Constraint(36k约束指令集)、Smol-Summarization/Rewrite(基于PersonaHub的高质量文本生成)、数学指令(整合NuminaMath-CoT和Meta-MathQA),以及专业领域补充数据,如代码生成(Self-OSS-Starcoder2-Instruct)、系统提示(SystemChats2.0)、API调用(APIGen-Function-Calling)和长文本处理(LongAlign英语子集)。
监督微调与对齐优化
监督微调实现
研究团队在SmolTalk数据集上对基础SmolLM2进行了2个epoch的监督微调,采用8192的序列长度进行训练。
对齐优化过程
研究团队采用直接偏好优化(DPO)方法进行模型对齐,并评估了多个公共合成反馈数据集,包括UltraFeedback、UltraInteract、Capybara和ORCA。结果表明,UltraFeedback在各项基准测试中表现最优,显著提升了MT-Bench性能、MMLU-Pro得分和MATH测试结果。完成2个epoch的DPO训练后,研究团队得到了最终的SmolLM2-instruct模型。
全面性能评估
基础模型评估结果
在通用能力方面,SmolLM2在HellaSwag和ARC测试中超越了Qwen2.5基础模型,在GSM8K、MATH和HumanEval等测试中优于Llama3.2-1B,在MMLU-Pro上比Qwen2.5-1.5B高出近6个百分点。在专业领域表现方面,SmolLM2在数学和编程基准测试中展现出极具竞争力的性能,虽在个别领域略逊于Qwen2.5-1.5B,但整体表现均衡。在扩展能力验证方面,上下文长度扩展未对模型性能造成明显影响,SmolLM2在HELMET和NIAH(大海捞针)基准测试中表现优异。
指令调优模型评估
SmolLM2的核心优势在于指令遵循能力和专业任务处理能力。在指令遵循能力方面,SmolLM2在IFEval测试中显著优于Qwen2.5-1.5B-Instruct。在专业任务处理方面,SmolLM2在MT-Bench和OpenRewrite-Eval等文本重写任务中表现出色,并通过GSM8K和MATH分数验证了强大的数学推理能力。
SmolLM2小规模变体研究
模型规格与训练策略
研究团队还开发了两个小规模变体模型:SmolLM2-360M和SmolLM2-135M。SmolLM2-360M的参数规模为360M,训练规模为4T tokens;SmolLM2-135M的参数规模为135M,训练规模为2T tokens。
优化方法创新
在数据混合策略优化方面,研究团队基于目标训练长度重新进行了数据消融实验,并对DCLM数据集进行了精细筛选,删除评分为0的样本,并对评分为1和2的样本进行下采样。
在训练方法调整方面,研究团队采用了单阶段训练方法,区别于1.7B版本的多阶段策略,并从训练初期即引入高质量数据,包括Stack-Edu、InfiMM-WebMath、FineMath和Cosmopedia。
在架构特征方面,这两个小规模变体模型继承了SmolLM2-1.7B的基础架构,并引入了分组查询注意力(GQA)机制。
在后训练优化方面,研究团队使用经过筛选的SmolTalk3版本进行SFT,移除复杂指令任务(如函数调用),筛除MagPie-Ultra中的高难度样本,并采用UltraFeedback进行DPO训练,平衡指令遵循能力与模型连贯性。
总结
综上所述,SmolLM2通过创新的多阶段训练策略、高质量数据集的构建与优化,以及精细的模型后训练调优,在1.7B参数规模下实现了卓越的性能表现,并在多个基准测试中超越了同等规模甚至更大规模的语言模型。这一研究为小型语言模型的发展提供了新的思路和方法,证明了通过技术创新,小模型同样可以拥有强大的能力。同时,SmolLM2的小规模变体研究也为资源受限场景下的模型部署提供了可能,进一步拓展了其应用前景。
论文链接:https://avoid.overfit.cn/post/a209e07e74154d689dc32ce557e786cb
