SmolLM2:多阶段训练策略优化和高质量数据集,小型语言模型同样可以实现卓越的性能表现

news2025/2/26 13:03:53

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2306368.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《Effective Objective-C》阅读笔记(中)

目录 接口与API设计 用前缀避免命名空间冲突 提供“全能初始化方法” 实现description方法 尽量使用不可变对象 使用清晰而协调的命名方式 方法命名 ​编辑类与协议命名 为私有方法名加前缀 理解OC错误模型 理解NSCopying协议 协议与分类 通过委托与数据源协议进行…

Hbase客户端API——语句大全

目录 创建表: 插入数据: 删除数据: 修改数据: 查询数据:Get 查询数据:Scan 查询数据:过滤查询 创建表: 检验: 插入数据: 验证 一次多条数据插入 验证&…

MQ(Message Queue)

目录 MQ(Message Queue)基本概念 为什么要使用消息队列? 使用消息队列有什么缺点? 如何保证消息不丢失?(如何保证消息的可靠性传输?/如何处理消息丢失的问题?) 通用的MQ场景: RabbitMQ如何保证消息不丢失? 生产者丢数据…

计算机网络————(三)

前文二 前文一 Websocket协议 是一种存在TCP协议之上的协议 当客户端需要了解服务器是否更新就需要不断给客户端发送请求询问是否更新,这行会造成服务端压力很大 而Websocket相当于服务器一旦更新了就会给客户端发送消息表明自己更新了,类似客户端订阅…

【音视频】音视频录制、播放原理

一、音视频录制原理 通常,音视频录制的步骤如下图所示: 我们分别从音频和视频开始采样,通过麦克风和摄像头来接受我们的音频信息和图像信息,这通常是同时进行的,不过,通常视频的采集会比音频的采集慢&…

deepseek 导出导入模型(docker)

前言 实现导出导入deepseek 模型。deepseek 安装docker下参考 docker 导出模型 实际生产环境建议使用docker-compose.yml进行布局,然后持久化ollama模型数据到本地参考 echo "start ollama" docker start ollama#压缩容器内文件夹,然后拷贝…

基于Redis 的分布式 session 图解

Redis 分布式 Session 工作原理 1. 传统 Session 的问题 在传统单服务器环境中,HTTP Session 存储在应用服务器的内存中。这在分布式系统中会导致问题: 用户的请求可能被分发到不同服务器,导致会话不一致服务器宕机会导致会话丢失需要依赖…

DeepSeek-R1本地部署保姆级教程

一、DeepSeek-R1本地部署配置要求 (一)轻量级模型 ▌DeepSeek-R1-1.5B 内存容量:≥8GB 显卡需求:支持CPU推理(无需独立GPU) 适用场景:本地环境验证测试/Ollama集成调试 (二&a…

【deepseek】本地部署+webui访问

背景 最近deepseek很火,但是官网的老是被限流使用,还有就是自己也想着玩一玩,于是准备在自己电脑跑一个 直接附上结果地址mydeepseek 准备工作 windows和linux都可 我这里选择linux,ubuntu系统 安装ollama 看下图&#xff0…

博客系统笔记总结 2( Linux 相关)

Linux 基本使用和程序部署 基本命令 文件操作 显示当前目录下的文件 ls:显示当前目录下的文件 ll:以列表的形式展示,包括隐藏文件 进入目录 && 显示当前路径 cd:进入目录(后面跟相对路径或者绝对路径&…

Flutter - 基础Widget

Flutter 中万物皆 Widget,基础Widget 同步对应 Android View. 普通文本 Text /*** 控制文本样式统一使用 style:TextStyle, 例:fontSize(字体大小),color(颜色),shadows(阴影)等等* 控制文本布局需单独设置:* textAlign(文不对齐方式)* te…

如何在 Linux 上安装和配置 Zsh

文章目录 如何在 Linux 上安装和配置 Zsh1. 安装 Zsh1.1 在 Ubuntu/Debian 上安装1.2 在 CentOS/RHEL/Fedora 上安装1.3 在 Arch Linux 上安装1.4 验证 Zsh 安装 2. 设置 Zsh 为默认 Shell2.1 验证默认 shell 3. 配置 Zsh3.1 使用 Oh My Zsh3.1.1 安装 Oh My Zsh3.1.2 启用插件…

【System Verilog and UVM基础入门26】Verdi使用教程指南

《Verdi使用教程指南 》 下载链接: https://download.csdn.net/download/TommiWei/90429701https://download.csdn.net/download/TommiWei/90429701 朋友你好,不管你是否使用过Verdi这款EDA仿真工具。 不管你是否还在寻找免费的使用教材。 不管你是否…

3dtiles平移旋转工具制作

3dtiles平移旋转缩放原理及可视化工具实现 背景 平时工作中,通过cesium平台来搭建一个演示场景是很常见的事情。一般来说,演示场景不需要多完善的功能,但是需要一批三维模型搭建,如厂房、电力设备、园区等。在实际搭建过程中&…

【STL专题】优先级队列priority_queue的使用和模拟实现,巧妙利用仿函数解决优先级

欢迎来到 CILMY23的博客 🏆本篇主题为:优先级队列priority_queue的使用和模拟实现,巧妙利用仿函数解决优先级 🏆个人主页:CILMY23-CSDN博客 🏆系列专栏: C | C语言 | 数据结构与算法 | Linux…

数据开发面试:DQL,

DQL常见面试题 where 和 having 的区别 三个排序开窗函数的区别 left join 用where 筛选 和 用on筛选的区别 ON 子句:用于定义连接条件,不会丢失左表的行。 WHERE 子句:用于过滤连接后的结果集,可能会丢失左表中没有匹配的行 …

最长递增子序列(贪心算法)思路+源码

文章目录 题目[](https://leetcode.cn/problems/longest-increasing-subsequence/)算法原理源码总结题目 首先,要掌握动态规划加二分查找 算法原理 1.回顾dp的解法 状态表示:dp[i]表示:以i位置的元素为结尾的所有的子序列中,最长递增子序列的长度 状态转移方程:dp[i]= m…

Orange 开源项目 - 集成百度智能云-千帆大模型

1 集成百度智能云-千帆大模型 百度智能云-千帆ModelBuilder百度智能云千帆大模型服务与开发平台ModelBuilder(以下简称千帆ModelBuilder)是面向企业开发者的一站式大模型开发及服务运行平台。千帆ModelBuilder不仅提供了包括文心一言底层模型和第三方开源…

前缀和代码解析

前缀和是指数组一定范围的数的总和,常见的有两种,一维和二维,我会用两道题来分别解析 一维 DP34 【模板】前缀和 题目: 题目解析: 暴力解法 直接遍历数组,遍历到下标为 l 时,开始进行相加,直到遍历到下标为 r ,最后返回总和.这样做的时间复杂度为: O(n) public class Main …

【前端基础】Day 1 HTML

总结: 1. Web标准的构成 2. 基本标签 目录 1. Web标准的构成 2. 基本标签 2.1快捷键 2.2.1标题标签 2.2.2段落和换行标签 2.2.3文本格式化标签 2.2.4div和span标签 2.3.1 图像标签和路径 2.3.2路径 2.3.3超链接标签 2.4注释标签 2.5特殊字符 1. Web标准…