前沿大模型的训练方法论
这些笔记的框架主要基于Hugging Face发布的SmolLM3报告,因为其内容最为全面和系统化。同时还参考了Intellect-3、gpt-oss-120b、Hermes 4、DeepSeek和Kimi等其他报告中的相关内容。虽然本文会涉及一些基础设施概念,比如动态权重更新和多客户端编排器,但并不会深入讨论专家并行和量化等其他重要主题。前沿大模型训练本质上是一个系统问题:数据混合、架构选择和稳
frontier model training methodologies
https://djdumpling.github.io/2026/01/31/frontier_training.html
如有刊误 请指正
那些训练数十亿参数大模型的实验室到底在干什么?这篇文章通过分析七个开源权重的前沿模型来尝试解答这个问题——包括Hugging Face的SmolLM3、Prime Intellect的Intellect 3、Nous Research的Hermes 4、OpenAI的gpt-oss-120b、Moonshot的Kimi K2、DeepSeek的DeepSeek-R1,以及Arcee的Trinity系列。本文的核心目标是梳理这些模型在训练过程中采用的各种技巧、设计思路和实践经验,重点关注训练方法论而非基础设施细节。
这些笔记的框架主要基于Hugging Face发布的SmolLM3报告,因为其内容最为全面和系统化。同时还参考了Intellect-3、gpt-oss-120b、Hermes 4、DeepSeek和Kimi等其他报告中的相关内容。虽然本文会涉及一些基础设施概念,比如动态权重更新和多客户端编排器,但并不会深入讨论专家并行和量化等其他重要主题。
快速总览
前沿大模型训练本质上是一个系统问题:数据混合、架构选择和稳定性设计通常比单个算法技巧的影响更大。 从一个已经验证的基线开始,快速迭代和可靠地进行消融实验至关重要。对于长上下文处理,文档级掩码加上RNoPE或YaRN风格的缩放是一个稳健的默认选择。在注意力机制方面,带有小组的分组查询注意力(GQA)通常在相同参数规模的消融实验中表现优于多头注意力和多查询注意力。混合专家模型的关键在于负载均衡;路由机制、辅助损失或偏置平衡,以及全局统计追踪都是不可或缺的。
分词器的设计应该与目标数据相匹配。词表大小需要在嵌入成本、令牌压缩率和键值缓存之间权衡。AdamW优化器依然是默认选择,虽然Muon优化器有潜力,但需要精细的基础设施支持。缩放律可以提供指导,但许多前沿模型实际上都超越了缩放律的建议。数据调度也很关键:多阶段混合和后期高质量数据的注入塑造了模型的最终行为。无论是中间训练还是后训练(监督微调、偏好学习、强化学习或蒸馏),都往往决定了推理和工具使用能力。训练操作是常见的故障点:数据加载器设计、吞吐量、张量并行中的种子管理,以及检查点保存都需要小心处理。
最小化训练手册
- 定义产品目标,并尽早在知识、数学、代码、长上下文和指令遵循方面锁定评估基准。
- 选择一个具有已知故障模式的基线架构;除非有强有力的理由支持混合专家模型,否则默认使用稠密+GQA+RoPE/RNoPE。
- 选择与目标语言和领域相匹配的分词器;尽早冻结词表和特殊令牌。
- 使用去重、过滤和污染检查构建数据管道;显式衡量数据质量。
- 对注意力、位置编码、优化器和学习率调度进行小规模消融实验;每次只改变一个变量。
- 规划多阶段数据混合;将最优质的数据和推理密集的数据留到训练后期。
- 添加稳定性防护措施:逻辑值软上限(首选)或Z损失/QK范数、梯度剪裁、精度策略和损失峰值告警。
- 验证长期运行中的吞吐量,确认数据加载器行为(打包、随机化、随机访问)。
- 使用间隔评估运行主训练过程,并确保张量并行中的种子一致性。
- 如果监督微调暴露出性能差距,进行中间训练以弥补领域缺陷;逐步扩展上下文长度(4k → 32k → 64k → 128k)。
- 进行监督微调后训练,然后根据可验证的奖励和工具使用目标选择偏好学习、强化学习或蒸馏。
- 重新评估、运行安全检查,并锁定一个包含完整日志和配置的发布检查点。
通用最佳实践
学会识别值得测试的东西,而非仅仅学会如何运行测试。完美的消融实验如果针对无关选项就会像草率的消融实验一样浪费计算资源。消融实验需要快速迭代,这样能测试更多假设,也需要可靠性——有足够的区分能力来确保不是噪声干扰。固体的消融设置的真正价值不仅在于构建一个好模型。当主训练运行中不可避免地出现问题时(无论你准备得多充分,问题总会来),我们希望对每一个做过的决策都充满信心,并能迅速识别哪些组件没有被恰当测试、可能导致问题的根源。这样的准备能节省大量调试时间。
选择一个有着良好架构和训练设置设计的已建立基线。这些设计通常是多年迭代的产物,研究人员已经发现了常见的故障模式和不稳定性。虽然模型有众多可修改的组件(从注意力机制到位置编码),但遵循去风险化的原则:除非你已经测试过某项改进确实有帮助,否则永远不要改变任何东西。
在评估中寻找单调性(分数改进)、低噪声(比如分数对随机种子的抗性)、高于随机的性能(随机水平的表现长期内没用),以及排名一致性(方法的排名应该在训练过程中保持稳定)。评估工作非常值得优先级。从预训练到后训练,核心评估应该被保留,其实现应该在基础模型训练完成前很久就完成。
平衡探索和执行。在方法上,优先选择灵活性和稳定性而非峰值性能,为探索设定截止日期。
架构与设置
架构决策从根本上决定了模型的效率、能力和训练动态。DeepSeek、gpt-oss-120b、Kimi和SmolLM这样的模型家族拥有截然不同的架构(稠密 vs 混合专家)、注意力机制(多头 vs 多潜变量 vs 分组查询)以及位置编码(RoPE、部分RoPE、无位置编码)。虽然不是所有信息都是公开的,但这里列举了一些代表性选择:
| 模型 | Kimi-K2 | Trinity Large | gpt-oss-120b | OLMo 3 | SmolLM |
|---|---|---|---|---|---|
| 参数规模 | 1.06T | 400B | 116.83B | 32B | 3B |
| 注意力 | 多潜变量注意力 | GQA (8组) | GQA (8组) | GQA (?) | GQA (4组) |
| 位置编码 | RoPE (?) + YARN | RoPE + YARN | RoPE + YARN | RoPE + YARN | RNoPE + YARN |
| 架构 | 混合专家 | 混合专家 | 混合专家 | 稠密 | 稠密 |
| 分词器 | tokenization_kimi | 自定义 | o200k_harmony | cl_100k | Llama3 |
选择架构时,Hugging Face建议遵循决策树逻辑。如果以下任何一条成立,就选择稠密架构:
- 内存受限(混合专家模型需要所有专家都加载到内存)
- 初次接触大模型训练(专注基础)
- 项目周期紧张(更简单的训练和文档齐全的方案)
架构决策启发式方法
如果内存或基础设施受限,默认选择带GQA和RoPE/RNoPE的稠密模型。如果需要大规模推理效率且能管理路由复杂性,考虑带强负载均衡的混合专家。对于长上下文是核心需求,规划文档掩码加上RoPE缩放(ABF/YaRN风格)或RNoPE变体。如果需要更简单的核心和更快的迭代,除非能干净地进行消融实验,否则避免新颖的注意力变体。
注意力机制
多头注意力在每个注意力头上使用独立的查询、键和值投影,但这会产生一个庞大的键值缓存,成为推理性能瓶颈和显存占用大户。为了解决这个问题,研究人员开发了多查询注意力和分组查询注意力。多查询注意力跨所有头共享键值,但这损失了注意力容量,因为不同的头无法存储专门针对各自角色的信息。分组查询注意力通过在一小组头之间共享键值(比如4个)来缓解这个问题。另一个替代方案是多潜变量注意力,它存储可在运行时解压缩/投影为键值的压缩潜变量。这个潜变量通常远小于完整键值缓存(通常能实现4-8倍压缩),结果是键值缓存参数数量与分组查询注意力相当,但性能强于多查询注意力。
在进行消融实验时(对于改变参数数量的变量比如从多头注意力改为分组查询注意力,研究人员有时会调整其他超参数以保持模型规模大致相同),Hugging Face发现分组查询注意力(2/4/8个组)在消融实验中表现优于多头注意力,而多头注意力表现优于多查询注意力和16组分组查询注意力。在HellaSwag、MMLU和ARC等基准上,分组查询注意力(2/4/8个组)在他们的实验中表现最佳。
门控注意力
门控注意力在缩放点积注意力输出和输出投影之间应用元素级门控机制。门向量通过输入计算得出,其中输入是位置t的输入,使用sigmoid函数和一个可学习的门投影矩阵。这个门向量分割到查询头上,每个头的注意力输出与其对应的门段进行元素乘法。门控输出然后被连接并通过输出矩阵投影,生成最终输出。
门控注意力减少了注意力汇聚(某些令牌获得过度关注的现象),降低了使训练不稳定的大激活值,改进了评估性能和长序列泛化。关键的是,它稳定了训练并减少了损失峰值,这对大规模训练极为有价值。
文档级掩码
在预训练时,一个常见的考量是固定序列长度,因为训练使用形如[批次大小, 序列长度, 隐藏维度]的张量,所以对于批处理和分布式训练,每个样本具有相同序列长度时GPU最高效。但由于文档长度可变且想避免浪费计算的填充,打包允许在同一序列内随机打乱和连接文档来达到所需长度。
因果掩码意味着对于同一批次中的不相关文件A和B,B中的令牌可以注意到A中的令牌,这降低了性能。使用文档内掩码,注意力掩码被修改,使得令牌只能注意到同一文档内的前序令牌。许多论文发现了长上下文扩展和一些短上下文基准的收益,以及缩短平均上下文长度的好处。

在实现文档掩码时,Hugging Face在PIQA上看到了小幅改进,但在其他短上下文任务上没有显著影响。但与前述研究一致,他们观察到从4k扩展到64k令牌时,文档掩码变得至关重要。
文档内注意力掩码的采纳与否可能取决于模型规模。对于较小的模型,一些实现选择省略文档内掩码,发现额外的复杂性和跨文档学习的潜在减少不值得在那些规模上付出代价。然而对于更大的模型,随着模型容量相对于跨文档注意力模式学习的益处而言变小,文档内掩码变得更关键。
嵌入共享
输入嵌入(令牌到向量查找)和输出嵌入(隐藏状态到词表逻辑值)通常表示为独立矩阵,所以总嵌入参数为2×词表大小×隐藏维度。在小语言模型中,这可以占到20%的总参数,如Llama 3.2 1B的情况。绑定的问题在于输入/输出嵌入仍代表不同的几何,而"the"这样的高频令牌可能会主导表示学习,因为从输入流和预测输出都获得梯度。

Hugging Face发现在1.2B模型上,绑定嵌入表现相当,尽管参数减少了18%(从1.46B降至),而与一个同样参数量为1.2B的非绑定模型相比(层数更少),非绑定模型表现出更高的损失和更低的下游评估分数。
位置编码
没有位置编码,Transformer对词序没有感知,类似于词袋模型。最初使用绝对位置嵌入,学习一个将位置索引映射到向量的查找表并添加到令牌嵌入,但最大输入序列长度受限于训练序列长度。相对位置编码随后出现,因为捕获令牌间距离比捕获绝对位置更重要。
最常用的技术是旋转位置嵌入(RoPE),通过在2D平面中旋转查询和键向量来编码位置信息。RoPE通过将查询/键向量按维度分割成对(因为在2D空间中旋转)来编码相对位置为旋转角度,旋转取决于令牌的绝对位置和基频率。在注意力中,其旋转位置的点积直接通过其旋转角中的相位差编码相对距离,距离x的令牌总是保持相同的角度关系。

在预训练时,模型在较短的上下文长度上训练(类似想法到文档掩码,二次注意力计算昂贵)来学习词之间短距离相关性。但随着序列长度增长,旋转角通过θ=位置×1/基数^(维度/2)增长。这可以通过使用诸如自适应基频(ABF)或YaRN之类的方法增加基频率来修复,后者在不同分量上应用更细粒度的频率插值,并包含如动态注意力缩放和温度调整的其他技术。对于极长上下文,YaRN表现最佳,在gpt-oss-120b中,它被用来将稠密层的上下文长度扩展到131k令牌。
最近,随着长上下文的强调,无位置编码(NoPE)和混合方法RNoPE出现了。NoPE仅使用因果掩码和注意力模式,所以不会碰到超越训练长度的外推问题,但在短上下文推理和知识任务上表现较弱。RNoPE在注意力块上交替应用RoPE和NoPE,RoPE处理本地上下文,NoPE帮助长距离信息检索。另一个想法是部分RoPE,在同一层内应用RoPE/NoPE。
Hugging Face用RoPE、RNoPE(每4层移除位置编码)和RNoPE加文档掩码进行消融实验。他们发现所有这些在短上下文任务上取得类似性能,所以采用RNoPE+文档掩码因为它为长上下文处理提供了基础。
长上下文的注意力

注意:本节涵盖注意力模式修改(改变哪些令牌可以注意哪些其他令牌),与位置编码缩放方法如ABF/YaRN不同(如"位置编码"部分所述),后者调整位置信息如何编码而不改变注意力模式。以下方法修改注意力模式以减少计算成本:
分块注意力将序列分成固定大小的块,令牌只能在其块内注意。Llama 4将RNoPE(特别是RoPE层)配对使用,这也减少了每层的键值缓存大小,但其在长上下文任务上的性能下降了。
滑动窗口注意力每个令牌最多能看到前p个位置,创建维持本地上下文的滑动窗口。Gemma 3将SWA与全注意力交替结合在不同层。
双分块注意力将k个令牌分块成m组。在每组内(像分块注意力),令牌正常注意。在连续块之间,有一个本地窗口来保留本地性,更广泛地,块间注意力允许查询注意先前块,有一个上限的相对位置上限。Qwen-2.5用DCA支持高达100万令牌的上下文窗口。
交错本地和全局注意力在使用本地注意力(限制在相近令牌)的层和全局注意力(完整序列)的层之间交替。这个模式在计算效率和捕获本地及长距离依赖能力之间取得平衡。本地层减少了二次复杂性同时维持本地上下文,全局层确保远距离关系不会丢失。当训练遇到不稳定或损失峰值时,调整全局层的比例(例如增加其频率)可以导致更快的损失恢复,因为模型重获对可能对某些模式至关重要的长距离信息的访问。交错策略对长上下文模型特别有效,在那里完整的全局注意力计算上禁止。
混合专家(MoE)
混合专家模型类似于我们的大脑为不同任务激活不同区域。在推理时,基于输入只激活某些"专家",与稠密模型相比戏剧性地减少计算,其中所有参数都是活跃的。混合专家模型通过用多个多层感知机(专家)替换前馈层并在多层感知机前添加可学习的路由器来选择专家。路由器通常使用top-k门控,为每个令牌选择k个亲和力分数最高的专家,k通常远小于专家总数(例如384个中的8个)。

一般来说,对于固定的活跃专家数量和规模,增加总专家数量会改进损失,高稀疏性改进性能并从增加计算中受益更多。最近的模型非常稀疏,超过100个专家但每令牌仅约10个活跃。
要确定每个专家应该有多大,一个常见的度量是粒度,定义为G=2·d_model/d_expert,其中更高的粒度对应于更多具有更小维度的专家;这可以被解释为与匹配稠密多层感知机宽度所需的专家数量成比例的数字。最近的模型粒度范围从2(gpt-oss-120b)到8(qwen3-next-80b-a3b)。蚂蚁集团的研究表明粒度不会显著改变损失,但会驱动效率杠杆(混合专家达到与稠密模型相同损失所需的浮点操作数与密集模型的比率)。总体来说,混合专家相对于稠密模型在训练和推理计算方面提供了一个好选择。
共享专家是始终开启的专家,它吸收基本的、经常出现的模式,使其他专家能更积极地特化;通常一个就够了(DeepSeek-V2使用两个,这增加了一些复杂性)。
负载均衡在混合专家中至关重要。如果它失败了,不仅训练和推理效率会下降,有效学习能力也会下降。路由机制通常使用top-k门控:对每个令牌,路由器计算亲和力分数(通常通过可学习线性投影后跟softmax),选择top k专家,并将令牌路由到这些专家。为确保均衡的专家使用,这可以通过添加基于损失的负载均衡器来处理,公式为L=α∑r_i f_i P_i,其中N_r是总专家数,α确定平衡项的强度,f_i是路由到专家i的令牌比例,P_i是专家i的概率质量(平均路由概率);所以在完美负载均衡中,f_i=P_i=1/N_r。还有,α不应该那么大以至于路由均匀性压倒主要训练目标。这些应该使用全局统计而非本地统计来监控,本地统计可能因为本地批次过于狭窄而遭受偏见。
DeepSeek-V3通过向进入路由softmax的亲和力分数添加偏置项,以不同方式执行无损负载均衡。
除了基于偏置的方法外,还出现了几种其他路由和负载均衡策略。一些实现使用在训练中适应的可学习路由函数,而其他则并入专家容量约束以防止任何单一专家被压倒。跨这些方法的关键洞察是有效的负载均衡必须使用聚集于多批次的全局统计,因为本地批次统计可能具有误导性的狭窄和偏见路由决策。
序列级辅助损失扩展传统辅助损失以促进序列内的平衡。公式涉及序列长度T、小系数α、指示器函数和活跃专家数K_r。对于序列中每个位置t的每个专家i,每个专家被分配一个路由分数,归一化以捕获该位置分配给专家i的路由概率比例。在整个序列上平均给出P_i,代表平均来说专家i被考虑进行路由多频繁。f_i项进一步反映了专家i实际被选择多频繁(即是否在偏置项添加后top K_r中)。损失鼓励不同专家间的f_i P_i乘积相似,推动模型朝向均匀分布路由决策;如果任何专家的使用远多于或少于其他,损失会增加,推动模型回到均衡。
无辅助损失负载均衡方法通过维持以解耦方式更新的偏置向量b=[b_1,…,b_Nr]避免引入干扰梯度。令n_i是当前步骤中路由到专家i的令牌数,n̄=1/N_r ∑n_i是所有专家的平均负载。b_i通过公式更新,其中γ是偏置更新速度,一种学习率。这个特定版本包括专家偏置更新的额外重新居中。
**序列级混合专家均衡统一性(SMEBU)**负载均衡在序列级而非令牌级运行,确保专家利用在完整序列间保持均衡。标准化的每专家违反通过公式计算,tanh应用软上限,可调节尺度κ控制饱和速度;tanh相比sign(·)在训练中维持训练期间需要的连续性和稳定性,而sign强制更新为±λ,使更新步骤振荡。动量也被引入作为噪声阻尼的形式,类似于动量随机梯度下降减少噪声梯度更新的方差。
混合模型
因为Transformer在长上下文中不有效率而循环神经网络可以,一个想法是结合两者获得两全其美。通过从令牌t的输出中删除softmax:
关键观察是通过定义 S t : = ∑ k j v j T S_t:=∑k_j v_j^T St:=∑kjvjT,我们得到递归关系其中 S t S_t St总结所有过去的( k j k_j kj, v j v_j vj)对。虽然这让我们更接近循环神经网络结构,实际上softmax稳定训练,线性形式可能在没有归一化的情况下引起不稳定。对于循环神经网络,有时帮助忘记过去通过引入前一状态的门 G t G_t Gt。
Mamba-2在混合模型中最受欢迎,被用于Nemotron-H和Falcon H1这样的混合模型。混合模型变得日益流行,特别是在Qwen3-Next中具有门控DeltaNet更新和Kimi的下一个模型,可能使用他们的"Kimi delta注意力"。
架构要点总结
除非有强有力理由和基础设施支持混合专家,否则使用已验证的稠密基线。分组查询注意力配合小组是稳健的默认选择;多查询注意力最便宜但倾向于表现不足。对于长上下文,早期在配方中规划RNoPE/YaRN加文档掩码。混合架构有潜力但仍然更难推理和运作。
稳定性
训练稳定性对成功的大规模模型训练至关重要。几种技术帮助防止训练失败,包括正则化方法、谨慎初始化和架构选择。以下部分涵盖关键稳定性机制。
Z损失
Z损失是添加到标准交叉熵损失的正则化项,保持逻辑值不会漂移到大幅度。softmax分母是 Z = ∑ e i z Z=∑e^z_i Z=∑eiz,通过添加 L = λ ⋅ l o g 2 ( Z ) L=λ·log²(Z) L=λ⋅log2(Z)到损失,我们基于 l o g ( Z ) log(Z) log(Z)处罚,它代表整体逻辑值尺度。
在他们的1B模型上,Hugging Face发现添加Z损失没有影响训练损失或下游性能,所以由于训练开销他们选择不包括它。对于逻辑值稳定化,逻辑值软上限(见下文)在现代配方中一般首选,遵循Gemma 2和Gemma 3模型。
逻辑值软上限
逻辑值软上限通过光滑、可微分变换将它们映射到有界范围来防止逻辑值过度增长。不像硬剪裁(在边界处有零梯度,可能引起训练不稳定),软上限使用tanh光滑压缩值。Gemma 2报告引入的在生产模型中使用的公式是通过使用tanh将逻辑值上限为(-soft_cap, +soft_cap)范围内。分割归一化除以soft_cap的输入,乘法通过soft_cap重新缩放到所需间隔。不像Z损失(添加正则化项到损失),软上限在前向传递中直接对激活运作。
Gemma 2对注意力逻辑值(预softmax)和最终语言建模头应用软上限。它们设置soft_cap=50.0对于注意力层和soft_cap=30.0对于最终层。这个技术追溯到神经机器翻译背景中的Bello等人。然而,一个告诫是逻辑值软上限与Flash Attention / SDPA在训练中不兼容,因为那些融合核心假设标准注意力。Hugging Face Gemma 2博客注意对于稳定微调,你必须使用attn_implementation=“eager”;推理仍可使用SDPA且质量差异最小。
权重衰减和嵌入
尽管是正则化技术,从嵌入中移除权重衰减可以改进训练稳定性。权重衰减导致嵌入范数减少,但这可能导致早期层中的更大梯度,因为LayerNorm Jacobian有一个1/σ项(来自归一化),与输入范数σ成反比。
Hugging Face测试了权重衰减基线、无权重衰减基线,和另一个结合所有之前采纳的改变,发现没有显著的损失或评估结果差异,所以他们包括了无权重衰减。
QK范数
类似于Z损失,QK范数通过在计算注意力前对查询和键向量应用LayerNorm来帮助防止注意力逻辑值变得过大。然而,提议RNoPE的同一论文发现它伤害长上下文任务,因为归一化去强调相关令牌并强调无关令牌,通过剥除查询-键点积的其幅度。
RMSNorm
RMSNorm 保持了与 LayerNorm 相当的性能,同时计算更加简单,这是因为它避免了均值中心化的计算。一种名为深度缩放三明治范数 (depth-scaled sandwich norm) 的变体在注意力/多层感知机(MLP)块的前后都应用了归一化,并根据层的深度来调整归一化尺度:
y ℓ = x ℓ + RMSNorm ℓ ( 2 ) ( M ℓ ( RMSNorm ℓ ( 1 ) ( x ℓ ) ) ) \mathbf{y}_\ell = \mathbf{x}_\ell + \text{RMSNorm}_\ell^{(2)}\left(\mathcal{M}_\ell\left(\text{RMSNorm}_\ell^{(1)}(\mathbf{x}_\ell)\right)\right) yℓ=xℓ+RMSNormℓ(2)(Mℓ(RMSNormℓ(1)(xℓ)))
其中 x ℓ \mathbf{x}_\ell xℓ 和 y ℓ \mathbf{y}_\ell yℓ 是第 ℓ \ell ℓ 层的输入/输出, M ℓ \mathcal{M}_\ell Mℓ 是子层模块(例如注意力机制、FFN 或 MoE)。RMSNorm 的增益 γ \gamma γ,是应用在 RMS 归一化之后的一个乘法因子,由公式 a ˉ i = γ a i RMSNorm ( a ) \bar{a}_i = \gamma \frac{a_i}{\text{RMSNorm}(\mathbf{a})} aˉi=γRMSNorm(a)ai 给出。在 Arcee 的案例中,他们初始化 γ ( RMSNorm ℓ ( 1 ) ) = 1 \gamma\left(\text{RMSNorm}_\ell^{(1)}\right) = 1 γ(RMSNormℓ(1))=1 并且 γ ( RMSNorm ℓ ( 2 ) ) = 1 L \gamma\left(\text{RMSNorm}_\ell^{(2)}\right) = \frac{1}{\sqrt{L}} γ(RMSNormℓ(2))=L1。这种与深度相关的缩放考虑到了激活值在不同层之间演化方式不同的事实。三明治模式(前置归一化和后置归一化)提供了额外的稳定性,特别是在梯度流可能面临挑战的极深网络中。
Arcee 还在语言建模头之前应用了 RMSNorm 来稳定最终的隐藏状态,以确保它们在被转换为 token 概率之前,具有一致的输出激活尺度。
其他设计考量
- 参数初始化 (Parameter initialization):要么采用 μ = 0 \mu = 0 μ=0 的正态初始化,并像 TruncDNormal 初始化那样进行裁剪(通常在 ± 2 − 3 σ \pm 2 - 3\sigma ±2−3σ 范围内),要么采用类似 μ \mu μP(最大更新参数化,maximal update parametrization)的方案,该方案规定了权重和学习率应如何随网络宽度缩放,从而使训练动态保持一致。
- 裁剪可以防止出现可能导致训练不稳定的极端初始化值,这对于嵌入层尤为重要,因为巨大的初始激活值会在整个网络中传播。
- 另一个启发式方法是将标准差设置为 σ = 0.5 d \sigma = \frac{0.5}{\sqrt{d}} σ=d0.5,其中 d d d 是模型维度,尽管确切的系数可能会有所不同。
- 在前向传播过程中,嵌入层的激活值会乘以 d \sqrt{d} d 进行缩放: e T = d E ( tok t ) \mathbf{e}_T = \sqrt{d}E(\text{tok}_t) eT=dE(tokt)。这使得嵌入的幅度相对于残差流保持在一个稳定的范围内,这在许多 Transformer 实现中很常见。值得注意的是,Grok-1 和 Grok-2 的权重(checkpoints),以及 Trinity Large 和前两代 Gemma 模型都实现了这一点。
- 激活函数 (Activation Function):大多数现代大语言模型(LLM)使用的是 SwiGLU,而不是 ReLU 或 GeLU;例如,gpt-oss-120b 使用的是门控 SwiGLU。一些例外情况包括 Gemma2 使用 GeGLU,以及 NVIDIA 使用 relu 2 \text{relu}^2 relu2。
- 宽度与高度 (Width vs Height):在语言建模和组合任务上,更深的模型往往比同等规模但更宽的模型表现更好。在较小的模型中,这一点更为明显;但由于现代架构能够更好地支持并行计算,较大的模型会利用更宽的设计来获得更快的推理速度。
稳定性要点总结
稳定化主要是关于合理的默认值,而非异国情调的技巧。逻辑值软上限(Gemma风格)是注意力/语言建模头逻辑值稳定化的首选方法;Z损失和QK范数是替代方案。QK范数可能伤害长上下文任务;别假设它"总是好的"。初始化和归一化细节随深度增加而更重要。早期追踪损失峰值;许多"神秘故障"是配置或数据问题。
分词器
有几个通常指导分词器设计的考量:
领域:在数学和代码这样的领域,数字和其他特殊字符需要小心处理。大多数分词器进行单数字分割,这对算术模式更有效且防止数字记忆。一些分词器如Llama3进一步编码数字1到999为独特令牌。
支持的语言:在英文文本上训练的分词器,如果遇到另一种语言,比如汉语或波斯语,将极其低效。
目标数据混合:当从零开始训练分词器时,我们应该在镜像最终训练混合的样本上训练。
较大的词表可以更有效地压缩文本,但代价是更大的嵌入矩阵,如嵌入部分所述,可以占据参数计数的相当部分。对于仅英文模型,50k通常足够,而多语言模型需要超过100k。存在一个最优大小,因为来自较大词表的压缩增益呈指数下降。
大模型从大词表中受益,因为额外的压缩在前向传递(投影到键值查询、注意力和多层感知机)中节省更多而不是额外嵌入令牌在softmax中。对于内存,更大词表意味着更少令牌,所以更小键值缓存。
字节对编码(BPE)仍然是事实上的选择。从微小单位开始(例如字符或字节),BPE算法重复将最常见的相邻对合并到一个新令牌中。要评估分词器的性能,生育率是一个常见度量,衡量编码一个词所需的平均令牌数(另外,字符到令牌比或字节到令牌比,但由于词长可变性和字节表示,这些有局限)。另一个是继续词比例,描述什么百分比的词被分割成多个片段。对于两者,更小的度量表示更有效的分词器。
存在许多强大的现有分词器,如GPT4的分词器和Gemma3的分词器。通常,使用现有分词器足够;只有当我们想为低资源语言训练或有不同的数据混合时,我们应该继续训练我们自己的分词器。
优化器和训练超参数
选择优化器和调整超参数出了名地耗时且显著影响收敛速度和训练稳定性。虽然我们可能受诱惑从更大实验室的模型蒸馏这些(虽然一个有用的先验),它可能不适应使用情况。
AdamW
尽管是十多年前发明的,AdamW 依然经受住了时间的考验。Adam(自适应矩估计,adaptive momentum estimation)基于梯度 g t g_t gt 的指数加权平均和梯度平方 g t 2 g_t^2 gt2 的指数加权平均,连同权重衰减(即“W”),来独立地更新每个权重。指数移动平均值为每个参数提供了自适应的学习率:持续具有较大梯度的参数会获得较小的有效学习率(通过梯度平方项实现),而梯度较小或存在噪声的参数则会获得较大的有效学习率。这种自适应性有助于稳定训练并加快收敛速度:
θ ← ( 1 − α λ ) θ − α m ^ t v ^ t + ϵ \theta \leftarrow (1 - \alpha\lambda)\theta - \alpha \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} θ←(1−αλ)θ−αv^t+ϵm^t
m ^ t = m t 1 − β 1 t , m t = β 1 m t − 1 + ( 1 − β 1 ) g t \hat{m}_t = \frac{m_t}{1 - \beta_1^t}, \quad m_t = \beta_1 m_{t-1} + (1 - \beta_1)g_t m^t=1−β1tmt,mt=β1mt−1+(1−β1)gt
v ^ t = v t 1 − β 2 t , v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 \hat{v}_t = \frac{v_t}{1 - \beta_2^t}, \quad v_t = \beta_2 v_{t-1} + (1 - \beta_2)g_t^2 v^t=1−β2tvt,vt=β2vt−1+(1−β2)gt2
其中 θ \theta θ 表示模型参数, α \alpha α 是学习率, λ \lambda λ 是权重衰减系数, g t g_t gt 是第 t t t 步的梯度, m t m_t mt 和 v t v_t vt 分别是一阶和二阶矩估计(指数加权平均), m ^ t \hat{m}_t m^t 和 v ^ t \hat{v}_t v^t 是偏差修正后的版本, β 1 \beta_1 β1 和 β 2 \beta_2 β2 是矩估计的指数衰减率, ϵ \epsilon ϵ 是一个用于防止除以零的极小常数(通常为 10 − 8 10^{-8} 10−8)。即使对于现代大语言模型 (LLMs),这些超参数也基本保持不变:权重衰减因子 λ = 0.1 \lambda = 0.1 λ=0.1 或 λ = 0.01 \lambda = 0.01 λ=0.01, β 1 = 0.9 \beta_1 = 0.9 β1=0.9,且 β 2 = 0.95 \beta_2 = 0.95 β2=0.95。
Muon
与逐参数(per-parameter)更新的 AdamW 不同,Muon 将权重矩阵视为一个单一对象,并基于矩阵级别的操作进行更新。这种方法减少了坐标轴对齐偏差(axis-aligned bias,即优化过程偏好某些特定的坐标方向),并鼓励探索那些原本会被抑制的方向。通过考虑整个权重矩阵的结构而不是单个参数,Muon 能够更好地捕捉参数之间的相关性:
g t ← ∇ θ L t ( θ t − 1 ) g_t \leftarrow \nabla_{\theta}\mathcal{L}_t(\theta_{t-1}) gt←∇θLt(θt−1)
B t ← μ B t − 1 + G t B_t \leftarrow \mu B_{t-1} + G_t Bt←μBt−1+Gt
O t ← NewtonSchulz5 ( B t ) O_t \leftarrow \text{NewtonSchulz5}(B_t) Ot←NewtonSchulz5(Bt)
θ t ← θ t − 1 − η O t \theta_t \leftarrow \theta_{t-1} - \eta O_t θt←θt−1−ηOt
其中 θ t \theta_t θt 表示第 t t t 步的模型参数, L t \mathcal{L}_t Lt 是损失函数, g t g_t gt 是梯度矩阵, G t G_t Gt 是归一化后的梯度矩阵(通常 G t = g t / ∥ g t ∥ G_t = g_t / \|g_t\| Gt=gt/∥gt∥), B t B_t Bt 是初始值为 B 0 = 0 B_0 = 0 B0=0 的动量缓冲矩阵, μ \mu μ 是动量系数, η \eta η 是学习率,而 NewtonSchulz5 \text{NewtonSchulz5} NewtonSchulz5 则应用了奇函数 f ( x ) = 3.4445 x − 4.7750 x 3 + 2.0315 x 5 f(x) = 3.4445x - 4.7750x^3 + 2.0315x^5 f(x)=3.4445x−4.7750x3+2.0315x5。这篇博客和那篇博客更详细地描述了其背后的代数原理以及这些系数的由来。Newton-Schulz 迭代近似了矩阵符号函数(matrix sign function):我们可以将 G = U Σ V ⊤ G = U\Sigma V^\top G=UΣV⊤ 的 SVD 分解估计为 U V ⊤ UV^\top UV⊤,并且 f ( x ) f(x) f(x) 本质上替换了 Σ \Sigma Σ,因为迭代应用 f f f(即 f ∘ f ∘ … f ( x ) f \circ f \circ \dots f(x) f∘f∘…f(x))会收敛到符号函数,从而将奇异值归一化。这起到了减少坐标轴对齐偏差并鼓励探索原本会被抑制的方向的作用。
Muon 比 AdamW 更具样本效率(sample-efficient),特别是在 AdamW 表现挣扎的大批量(large batch sizes)训练中。包括 Arcee 的 Trinity Large 在内的一些实现选择了一种混合方法:对隐藏层使用 Muon,同时在嵌入层(embedding)和输出层保留 AdamW。这一决定源于这些层所表现出的不同优化动态——嵌入和输出投影层受益于逐参数的自适应学习率,而隐藏层则从 Muon 的矩阵级结构感知中获益更多。
但是,由于 Muon 在矩阵级别运行,应用 NewtonSchulz 需要访问完整的梯度张量。一种方法是使用重叠轮询方案(overlapping round-robin scheme),其中每个 rank 负责收集对应于其索引的所有梯度矩阵,并在本地应用 Muon。由于 FSDP(全分片数据并行)期望的是分片后的梯度/更新,并且每个 rank 都拥有其 Muon 更新后的梯度分片,因此优化器步骤可以正常进行。然而,这会在许多矩阵之间引发大量重叠的集体通信(overlapping collectives),这在扩大规模(scale)时会导致崩溃。
Prime 采用的替代方案基于全对全集体通信(all-to-all collectives),它进行批量重排(bulk permutation),使得每个 rank 暂时拥有其矩阵的完整梯度,运行 Muon,然后再将它们批量重排回去。这可能需要进行填充(padding),因为许多张量被打包在连续的缓冲区中,这可能会改变预期的大小。然而,这种方法需要的集体通信更少,并且具有更好的可扩展性。
在 Muon 的基础上,Kimi K2 引入了 MuonClip,这是一种防止注意力 logit 爆炸的稳定技术,而 logit 爆炸是大规模训练中常见的失败模式。其他策略包括 logit soft-cap(将 tanh \tanh tanh 裁剪应用于 softmax 前的 logits),或者 QK-norm(将 LayerNorm 应用于 QK 矩阵)。然而,这些方法会导致缩放点积爆炸的问题(使得限制发生得太晚),并在 logit soft-cap 中模型不稳定的区域周围扭曲梯度;并且在推理过程中,键矩阵(key matrices)并没有被实体化(materialized,它们是从潜变量投影而来的)。
对于每个注意力头 h h h,考虑 Q h \mathbf{Q}^h Qh、 K h \mathbf{K}^h Kh 和 V h \mathbf{V}^h Vh(即头 h h h 的查询、键和值矩阵)。对于批次 B B B 和输入表示 X \mathbf{X} X,将最大 logit (max logit) 定义为一个每头标量,即输入到 softmax 的最大值:
S max h = 1 d max X ∈ B max i , j Q i h K j h ⊤ S_{\max}^h = \frac{1}{\sqrt{d}} \max_{\mathbf{X} \in B} \max_{i,j} \mathbf{Q}_i^h {\mathbf{K}_j^h}^\top Smaxh=d1X∈Bmaxi,jmaxQihKjh⊤
其中 d d d 是查询/键向量的维度, i i i 和 j j j 索引了序列中的位置,而 1 d \frac{1}{\sqrt{d}} d1 缩放因子与标准注意力缩放相匹配。设定 S max = max h S max h S_{\max} = \max_h S_{\max}^h Smax=maxhSmaxh(跨所有头的最大值)以及目标阈值 τ \tau τ(一个控制何时激活裁剪的超参数)。其核心思想是,只要 S max h S_{\max}^h Smaxh 超过 τ \tau τ,就重新缩放 W k h \mathbf{W}_k^h Wkh 和 W q h \mathbf{W}_q^h Wqh(头 h h h 的键和查询投影权重矩阵)。另外,设 γ = min ( 1 , τ S max ) \gamma = \min\left(1, \frac{\tau}{S_{\max}}\right) γ=min(1,Smaxτ)(全局裁剪因子),一种方法是通过以下公式同时裁剪所有头:
W q h ← γ α W q h , W k h ← γ 1 − α W k h \mathbf{W}_q^h \leftarrow \gamma^\alpha \mathbf{W}_q^h, \quad \mathbf{W}_k^h \leftarrow \gamma^{1-\alpha} \mathbf{W}_k^h Wqh←γαWqh,Wkh←γ1−αWkh
其中 γ \gamma γ 的指数强制对 Q h K h ⊤ \mathbf{Q}^h {\mathbf{K}^h}^\top QhKh⊤ 进行乘法权重衰减;通常取 α = 0.5 \alpha = 0.5 α=0.5 以确保对查询和键进行相等的缩放。然而,并非所有的头都会出现 logit 爆炸,这促使人们基于 γ h = min ( 1 , τ S max h ) \gamma_h = \min\left(1, \frac{\tau}{S_{\max}^h}\right) γh=min(1,Smaxhτ) 进行逐头裁剪(per-head clipping),这对于 MHA(多头注意力)来说更直接,但对于 MLA 面临的挑战较大。MLA 的挑战在于,键是从潜变量投影而来的,而不是直接实体化的,因此裁剪必须应用于潜变量到键的投影权重以及潜变量本身。他们仅对 q C \mathbf{q}^C qC 和 k C \mathbf{k}^C kC(头部特定分量)缩放 γ h \sqrt{\gamma_h} γh,对 q R \mathbf{q}^R qR(头部特定旋转分量)缩放 γ h \gamma_h γh,并将裁剪应用于 Q R \mathbf{Q}^R QR(共享旋转分量)。除此之外,主要的 Muon 算法也进行了修改,以匹配 Adam 的 RMS 并在更新中启用权重衰减。对于每个权重矩阵 W ∈ R n × m \mathbf{W} \in \mathbb{R}^{n \times m} W∈Rn×m:
g t ← ∇ θ L t ( θ t − 1 ) g_t \leftarrow \nabla_\theta \mathcal{L}_t(\theta_{t-1}) gt←∇θLt(θt−1)
B t ← μ B t − 1 + G t B_t \leftarrow \mu B_{t-1} + G_t Bt←μBt−1+Gt
O t ← NewtonSchulz5 ( B t ) ⋅ max ( n , m ) ⋅ 0.2 O_t \leftarrow \text{NewtonSchulz5}(B_t) \cdot \sqrt{\max(n, m)} \cdot 0.2 Ot←NewtonSchulz5(Bt)⋅max(n,m)⋅0.2
θ t ← ( 1 − η λ ) θ t − 1 − η O t \theta_t \leftarrow (1 - \eta\lambda)\theta_{t-1} - \eta O_t θt←(1−ηλ)θt−1−ηOt
其中 n n n 和 m m m 是权重矩阵 W \mathbf{W} W 的维度, max ( n , m ) ⋅ 0.2 \sqrt{\max(n, m)} \cdot 0.2 max(n,m)⋅0.2 是一个将更新幅度调整至矩阵大小的缩放因子(匹配 Adam 的 RMS 缩放行为),其他符号的定义与标准 Muon 算法相同。权重衰减项 ( 1 − η λ ) (1 - \eta\lambda) (1−ηλ) 在梯度更新之前以乘法形式应用。

左:注意力逻辑值在9B活跃、53B总混合专家中点快速分歧的中等规模训练运行。右:KimiK2最大逻辑值带MuonClip和τ=100,其中最大逻辑值最终在~30%训练步骤后衰减到稳定范围。
学习率
学习率有其自己的生命周期:它们预热(通常短训练的1%-5%训练步骤,但大实验室固定预热步骤)从零以避免混乱,然后在安顿到好的最小值后退火。余弦退火曾经是标配,但由于余弦周期需要匹配总训练持续时间因此不灵活。替代包括预热-稳定-衰减和多步;在最后x%令牌中,前者线性衰减学习率,而后者进行离散降低。对于预热-稳定-衰减,通常10-20%分配给衰减阶段,匹配余弦退火;在多步中,80/10/10也匹配余弦退火,而70/15/15和60/20/20可以表现得更好。Deepseek-v3在衰减降低之间使用余弦退火,并在最终锐利步骤前添加一个恒定阶段。

Hugging Face的消融实验(在他们的1B模型上)显示预热-稳定-衰减倾向于在预热-稳定-衰减衰减开始前表现不如余弦退火,但一旦它进入衰减阶段,预热-稳定-衰减在损失和评估度量上展示了几乎线性改进,使其到结束时能追上余弦退火。在进一步对学习率进行消融后,Hugging Face团队定居在2e-4;增加导致长训练运行中潜在增加的不稳定风险。Kimi K2也使用预热-稳定-衰减:前10T用2e-4学习率训练,500步热身后,然后5.5T令牌从2e-4到2e-5的余弦衰减。
预热-稳定-衰减调度特别帮助消融,因为不需要为不同令牌数重启相同运行,因为我们可以重新训练只有端部分(学习率衰减)同时维持前部分。
批处理大小
存在一个临界批处理大小:太小我们可能利用不足计算,但太大模型需要更多令牌到达相同损失。然而,更大批处理给出更高效的梯度估计,并被首选。
一个有用的代理是优化器如 AdamW 或 Muon,如果批处理大小增加 k k k 倍,然后学习率应该按 k \sqrt{k} k 倍缩放。直觉地,更大批处理提供更稳定的梯度估计(较低方差),所以我们能承受更大的步长。数学上,协方差按 k k k 缩小,基于随机梯度下降参数更新 Δ w = − η g B \Delta w = -\eta g_B Δw=−ηgB,我们有 Var ( Δ w ) ∼ η 2 Σ B \text{Var}(\Delta w) \sim \eta^2 \frac{\Sigma}{B} Var(Δw)∼η2BΣ,其中 B B B 是原始批处理大小。为维持相同更新方差,我们需要 η ∼ k \eta \sim \sqrt{k} η∼k。
当训练进展时,临界批处理大小增长。最初,因为模型进行大更新, ∥ g ∥ 2 \|g\|^2 ∥g∥2 很大所以模型应该有小临界批处理大小。模型稳定后,更大批处理变得更有效。这激励了 批处理大小预热 的想法。
不均衡小批次当序列打包或数据分布创建具有高度可变序列长度或领域成分的批次时可能出现,可能导致梯度方差不稳定训练;这特别为真当某些专家或模型组件接收不相称多或少令牌。
Arcee 引入**随机连续文档缓冲区(RSDB)**以减少批内相关性。在分词文档后,它通过将令牌序列作为条目加载到 RSDB 中,在索引 0 处读头;这重复直到 RSDB 满。从 RSDB 中的随机采样索引在随机采样文档中,令牌基于读头和索引被读出并添加到分离序列缓冲区。读头位置被更新,如果序列缓冲区满,我们返回;否则,我们随机选择另一个文档索引并继续读令牌到序列缓冲区,重复直到序列缓冲区满。
内部缓冲区大小(在 Trinity Large 中:每 GPU 8192)被设置为用户指定缓冲值的两倍,当缓冲区达到用户指定值(在 Trinity Large 中:每 GPU 4096)或当旧文档需要被清除/新文档可以被加载时被重新填充。Arcee 发现这个优化显著改进了数据加载器性能。
缩放律
缩放律(例如Chinchilla缩放律)为确定当模型大小缩放时如何积极/保守更新超参数提供有用代理。
首先, C ≈ 6 ⋅ N ⋅ D C≈6·N·D C≈6⋅N⋅D,其中C是以浮点运算数度量的计算预算,N是参数数量,D是训练令牌数。6来自每个参数浮点运算数的经验估计。

最初,缩放律表示语言模型大小是主要约束,导致一个175B参数GPT-3模型但仅在300B令牌上训练。一个重新推导发现训练持续时间可以比大小改进更多增益;他们发现GPT-3的计算最优训练应该消耗3.7T令牌。
然而,缩放律几乎从不严格遵循。最近,实验室一直在"超训练"模型超越缩放律建议的训练持续时间(例如Qwen 3在36T令牌上训练)。此外,"计算最优"缩放律不解释更大模型在训练后变得更昂贵由于推理。为此,Hugging Face决定在一个3B模型上训练11T令牌。对比,Kimi K2的1T模型组成15.5T预训练令牌。
虽然通用缩放律提供指导,Kimi K2的缩放律分析揭示了特定模型洞察。他们展示了稀疏性的增加,总专家数与激活专家数的比率,对固定浮点操作数产生实质性性能改进,所以他们增加混合专家数到384(Deepseek-V3中256个)同时将注意力头减少到64(Deepseek-V3中128个)以减少推理期间的计算开销。他们定居在稀疏性48,激活384中的8个专家并发现从128降低注意力头到64牺牲了验证损失范围从0.5%到1.2%,但推理浮点操作数45%减少。
数据策划和预训练
即使有完美的架构,模型的性能仍然强烈依赖其训练数据;没有任何数量计算或优化可以弥补在错误内容上训练。为此,关于组装正确的数据混合,平衡训练目标和调整数据比例。这特别困难因为跨竞争目标,对于固定计算预算,增加一个比例必然减少另一个,伤害性能。
已经存在大的预训练数据集语料库如FineWeb2和The Pile。然而,仍然有许多信息空隙,所以最近模型另外依赖数学和编码这样的领域的专门预训练数据集。
一个考量是数据质量。当然,在尽可能高质量数据上训练是首选。但对于X令牌的训练预算,因为高质量数据有限,只过滤它会导致重复数据,这可能有害。所以,一个理想混合包括更高和更低质量数据。
另一个考量是模型安全。对于gpt-oss-120b,OpenAI通过过滤数据的有害内容在预训练中处理这个,带有对危险生物安全知识的强调。他们使用CBRN(化学、生物、放射性和核)预训练过滤器,用于GPT-4o。
多阶段训练
多阶段训练的想法,随着训练进展演化数据混合,可以比静态混合更好地最大化高质量和低质量数据,因为大模型的最终行为被其在训练末期看到的数据非常指示。所以,这激励了朝向末期节省更高质量数据的策略。这引入了何时开始改变混合的另一个变量,一个通用原则是性能驱动干预:如果一个基准开始平台化,它是对该领域引入高质量数据的信号。
消融
虽然架构消融在较小模型上进行(例如在1B模型上训练3B模型),数据混合消融在规模进行,因为更大模型有更大容量理解各种领域。此外,退火消融在主运行检查点上进行(如11T令牌的7T)确定什么数据集何时引入。
要确定最优数据比例,最近模型通常使用验证损失或扣留损失最小化基于评估目标和数据领域。然而,一些这些方法倾向于收敛朝向镜像数据集大小分布的分布,他们不表现得超过仔细手动消融。
令牌实用性
令牌效率是每令牌消耗训练期间实现的性能改进。这可以通过更好的令牌实用性改进,有效学习信号每令牌贡献;这激励找到高质量令牌的最优平衡,因为他们应该被最大利用但也有限防止过拟合和减少泛化。
Kimi K2在知识和数学领域中使用数据改写。对于知识,这来自于风格和观点多样化提示以改写文本,块级自回归生成以逐步构建长文档的改写版本,保真度验证确保语义对齐。在主训练运行中,每个语料库最多被改写两次。对于数学,多样性通过改写到"学习笔记风格"和翻译到其他语言被增加。
预训练数据
SmolLM3
Hugging Face的目标是构建一个多语言模型,也在数学和编码上表现出色。在他们多阶段训练的第一阶段,他们使用75/12/10/3分割英文网络数据、多语言网络数据、代码数据和数学数据。
英文网络数据:他们在FineWeb-Edu(教育和科学技术基准)和DCLM(常识推理)之间消融,发现60/40或50/50分割最好。后来,他们添加其他数据集包括Pes2o、维基百科和维基书籍,以及StackExchange。
多语言网络数据:五个欧洲语言被选择,带数据来自FineWeb2-HQ。其他语言的更小部分,如中文或阿拉伯语,被选择允许其他人进行SmolLM3连续预训练。最终,他们发现12%多语言内容在网络混合中是最好的。
代码数据:主要从The Stack v2和StarCoder2提取,包括16种语言、Github拉请求、Jupyter/Kaggle笔记本、Github议题和StackExchange线程。尽管研究显示代码改进超出编码的大模型性能,他们没有观察到这个效果(相反在英文基准上的降级)使用推荐的代码混合。他们延迟添加他们的教育过滤子集Stack-Edu,遵循延迟最好数据直到末期的原则。
数学数据:使用FineMath3+、InfiWebMath3+、MegaMath和指令/推理数据集如OpenMathInstruct和OpenMathReasoning。
对于新阶段(使用大约11T总令牌的7T的检查点),他们使用40/60分割基线混合和新数据集。SmolLM3有三个阶段:8T令牌@4k上下文基础训练,2T令牌@4k上下文高质量注入,和1.1T令牌@4k上下文推理/问答阶段。
Hermes 4
使用来自DCLM和FineWeb的数据,Nous首先使用0.7的余弦相似度嵌入进行语义去重,然后使用大模型作为判官过滤不完整或格式不良的消息。然后,他们处理预训练数据通过DataForge,一个基于图的综合数据生成器,允许大和复杂结构。通过取一个有向无环图的随机游走,其中节点实现 s t r u c t → s t r u c t struct→struct struct→struct映射,使得如果有从节点 A 到节点 B A到节点B A到节点B的边, A A A保证的后条件必须满足 B B B的前条件。问答对使用这个工作流生成,带有到其他中介(例如维基百科文章到说唱歌曲)的中介变换,问题生成,然后问题/答案注释使用大模型作为判官给指令和响应评分。同样,要找到特殊兴趣数据稀缺领域的覆盖集,他们递归(深度优先搜索)生成领域的分类法,其中叶子是提示,大模型枚举n个子领域形成分割。
DataForge生成的数据在预训练和后训练阶段都被使用,与具体细节在下文的后训练数据部分提供。
数据要点总结
数据质量和混合通常在固定计算上支配架构调整。多阶段调度有帮助:节省最好的数据用于后期训练以塑造最终行为。去重和污染检查如果你关心诚实评估是非选择的。在规模上消融数据混合;小模型消融可能误导。
中间训练
中间训练是预训练和后训练之间的中介步骤,其中基础模型在大量特定领域令牌上进一步训练,尤其塑造模型专注于常见核心技能如编码或推理。通常,进行中间训练的决定仅在初始监督微调实验运行后才进行,因为他们可能暴露性能差距表示某些领域需要中间训练。但如果目标是启动浅能力如风格或对话,计算更好花在后训练上。
一些方案包括额外的长上下文阶段;例如,Qwen3首先在4k上下文训练30T令牌,然后一个推理阶段带5T更高质量令牌主要在科学和编码上,最后长上下文阶段32k上下文长度。
SmolLM3也这样做,但不是从4k直接缩放到128k,他们按顺序从4k到32k到64k到128k缩放,这允许模型在每个长度适应在推进上下文长度更远前。提升长上下文文档如网络文章或书籍改进长上下文,但Hugging Face没有观察到改进;他们假设这是因为他们的基线混合已经使用RNoPE包括长文档。
要从4k到32k,之后到64k,他们使用RoPE ABF并增加基频率到2M和5M,相应地。基频率如10M进一步改进RULER上的长上下文基准稍微,但它伤害短上下文任务如GSM8k,所以他们被否定。要达到128k,他们发现使用YARN从64k检查点(而不是从32k四倍增加)产生更好的性能,这确认了假设训练更接近所需推理长度益处性能。
Kimi K2学习率从2e-5衰减到7e-6,训练400B令牌4k序列长度,然后60B令牌32k序列长度。要扩展到128k,他们使用YARN。
虽然中间训练数据通常来自网络数据,另一个强大方法是使用来自更好模型的蒸馏推理令牌,因为Phi-4-Mini-Reasoning从DeepSeek-R1做的。当应用到基础模型时,蒸馏中间训练增加基准分数如AIM24的3倍,MATH-500的11点,和GPQA-D的几乎6点。SmolLM3也进行蒸馏中间训练。他们考虑数据集包括来自DeepSeek-R1(4M样本)和QwQ-32B(1.2M样本)的推理令牌,但决定延迟使用Mixture of Thoughts数据集直到最后监督微调混合。他们发现,如果基础模型在预训练中还没有看到很多推理数据,进行某量中间训练几乎总是有道理的,因为他们注意到/no_think推理模式也在推理基准上有改进。
后训练
评估
鉴于当今大模型作为编码代理和可以推理的助手的标准,有四个评估研究人员关心的广泛类别:
知识:对于小模型,GPQA钻石测试研究生级多选问题,给出比其他评估如MMLU更好的信号。另一个测试事实性的好测试是SimpleQA,虽然较小模型表现得更差由于有限知识。
数学:AIME仍然是主导基准,其他如MATH-500为小模型提供有用的完整性检查。
代码:LiveCodeBench通过竞争编程跟踪编码能力而SWE-bench Verified是更复杂的替代但对较小模型难得多。
多语言:没有许多选择除了全球MMLU针对模型被预训练或应该表现良好的语言。
这些评估测试以下:
长上下文:RULER、HELMET和更最近释放的MRCR和GraphWalks基准长上下文理解。
指令遵循:IFEval使用验证器反对可验证指令,IFBench用更多样的约束集合扩展它。对于多轮,Multi-IF和MultiChallenge是首选。
对齐:LMArena与人类注释器和公共排行榜最受欢迎。但由于这些评估的成本,大模型作为判官评估出现了,包括AlpacaEval和MixEval。
工具调用:TAU-Bench测试模型能力使用工具在客户服务设置中解决用户问题,包括零售和航空。
防止过拟合,评估封装稳健性或适应性的,如从GSM8k扰动问题的GSMPlus,也被包括。另一个方法是使用间隔评估或氛围评估/竞技场,如手动探针模型行为。其他提示包括使用小子集加速评估(特别是如果有与更大评估的相关性),固定大模型作为判官模型(如果评估需要它),将在消融中使用的任何东西视为验证,使用avg@k准确性,并试图不(不要)基准最大化!
后训练数据
Intellect 3
值得首先提及的是Intellect-3是一个106B参数混合专家(12B活跃)后训练在Z.ai的GLM-4.5-Air基础模型顶部,他们有他们自己的后训练栈包括prime-rl,一个大规模异步强化学习的开框架,verifiers库用于从他们的环境中心训练和评估,沙盒代码执行和计算编排。
与环境中心集成,Prime在设计来改进编码和推理能力的多样和挑战性环境混合上训练。对于数学,他们设计一个心中有长CoT推理的环境,由来自Skywork-OR1、Acereason-Math、DAPO和ORZ-Hard的21.2K困难数学问题组成,所有这些是源自AIME、NuminaMath、Tulu3数学和其他的策展数据集,测试从多选到证明到那些涉及数字的困难数学问题。即使使用验证器,有一个非平凡量错误否定,所以他们另外使用opencompass/CompassVerifier-7B作为大模型判官验证器。对于科学(主要物理、化学和生物),他们过滤29.3K困难问题从MegaScience,同时也使用大模型判官验证和标准数学验证器。对于逻辑(游戏如数独或扫雷),11.6K问题和验证器从SynLogic适配。
对于代码,他们主要使用他们的Synthetic-2数据集加上Prime沙盒验证解决方案。他们也开发两个软件工程环境,支持为R2E-Gym、SWE-smith和Multi-SWE-bench这样的通用格式的脚手架,以修复Github项目中的问题,当配备Bash命令和编辑工具时。同样,代理的最大转数设置在200。
Prime也专注其深度研究能力通过他们的网络搜索环境,给予模型一个搜索工具集。环境任务模型用工具回答来自数据集的问题并通过Z-AI的DeepDive数据集用1或0奖励,带1K样本用于监督微调轨迹生成,2.2K用于强化学习。当在Qwen/Qwen3-4B-Instruct-2507中测试时,26步监督微调带批大小34,然后120步强化学习在组大小16和批大小512是足够的到达0.7平均奖励。
Hermes 4
他们使用300k提示,主要科学和编码来自WebInstruct-Verified、rSTAR-Coder和DeepMath-103k,应用去重和过滤>2k字符的提示。
Nous拒绝样本反对~1k任务特定验证器使用Atropos。一些用来生成数据集的环境包括
答案格式训练:奖励简洁呈现的最终答案,如LaTeX中的\boxed,但有150多个输出格式采样。环境也强制<think>和</think>分隔符。
指令遵循:利用RLVR-IFEval对可验证任务集合有约束指令如"你的响应的每第n个词必须是法语"。
模式遵循:便于生成(从自然语言提示和模式生成有效JSON对象)和编辑(识别和纠正格式错误的JSON对象中的验证错误)。
工具使用:通过训练模型通过<tool_call>令牌生成推理和进行工具调用便于代理行为。
Kimi K2
Kimi K2选择专注的临界能力是工具使用。虽然基准如τ-bench和ACEBench存在,通常在规模构造真实世界环境困难由于成本、复杂性、隐私和可访问性。Kimi K2建立在ACEBench的数据综合框架基础上在规模模拟真实世界工具使用场景:
- 工具规格生成:从真实世界工具和大模型合成工具构造大量工具规格的仓库。
- 代理和任务生成:对于从仓库采样的每个工具集,生成代理在对应任务上使用工具集。
- 轨迹生成:对于每个代理/任务,生成代理完成任务的轨迹。
使用3k+真实来自Github的MCP工具和20k合成工具在金融交易、软件应用和机器人控制这样的领域中分层生成。通过代理的组合与不同系统提示和不同工具组合确保代理间的多样化,任务通过用显式标尺和大模型判官的组合评分。
对于强化学习,Kimi K2的数学、科学和逻辑任务处理保持与其他模型的处理相似。编码和软件工程主要来自竞争编程问题和来自Github的拉请求/议题。对于指令遵循,他们使用两个验证机制:可验证输出的确定性评估通过代码解释器和非可验证输出的大模型作为判官评估。数据使用专家策划提示和标尺、受AutoIF启发的代理指令增强和微调的特化模型构建以生成额外指令探针特定故障模式或边界案例。
聊天模板
设计/选择好聊天模板的几个重要考量包括系统角色可定制性、工具调用、推理和推理引擎兼容性,如vLLM或SGLang。Qwen3和GPT-OSS满足所有条件,Qwen3为混合推理设计。
在SmolLM3中,尽管也为混合推理设计,他们为除最后轮外的所有轮抛弃推理内容在对话中,以避免在推理期间膨胀上下文,但对于训练,保留推理令牌很重要正确条件模型。所以,Hugging Face编排他们自己的聊天模板,满足所有条件。氛围测试最初暴露了不传入自定义指令到他们自定义模板的错误,但这快速被修补。
虽然从Qwen3模板汲取灵感,Intellect-3总是推理(非混合)通过被主要训练推理唯一监督微调轨迹的代理;他们使用qwen3_coder工具调用解析器和deepseek_r1推理解析器确保推理链被一致表示。
gpt-oss-120b使用和谐聊天模板,引入"频道"确定每条消息的可见性。例如,final对于向用户显示的答案,commentary对于工具调用,和analysis对于思维链令牌。这允许模型在工具调用与思维链中穿插。
Hermes 4通过改变助手从助手到第一人称标识符适配Llama 3的聊天模板,在识别对用于助手转的令牌的敏感性后:
<|start_header_id|>assistant<|end_header_id|> → <|start_header_id|>me<|end_header_id|>
这导致显著不同的行为,在"行为和潜在能力"部分"行为和安全"部分更深入探索。
DeepSeek-R1-Zero的聊天模板看起来非常相似于其他,但另外包括 m a t h t t \\mathtt{} mathtt标签提供最终答案。
监督微调
大多数后训练管道以监督微调(SFT)开始,因为它_便宜_相比强化学习,_稳定_由于对奖励设计和超参数的低敏感性,给予强基线从基础模型。通常,基础模型太未精炼以从更高级后训练方法受益。监督微调通常来自于形式从更强模型蒸馏。强模型可能遭受成功,跳过监督微调阶段因为没有更强的模型蒸馏从(如DeepSeek R1-Zero的情况)。
监督微调的数据集策划很重要;数据集可能在纸上看起来很好,但在那些数据集上训练的模型可能最后过度索引某些领域,如科学。为此,Hugging Face策划了一个数据混合~100k例子和76.1M令牌,主要由指令遵循、推理和对思考和非思考模式的可操纵性组成。重要地,数据应该在模式间配对,因为否则没有何时给出简洁答案或使用扩展推理的指示。
对于训练,还有其他考量:完整微调对比更参数有效的方法如LoRA或QLoRA、专门核心如FlashAttention(通过在后向通过期间重新计算注意力,交易计算对内存)或SonicMoE这样的有效计算使用、仅对助手令牌掩码损失、所需的并行性类型、学习率调整和序列长度调整匹配数据分布加速训练(对更大数据集更有用)。
可爱交叉熵核心(CCE)是计算交叉熵损失的内存有效CUDA核心。不与完整逻辑值矩阵具体化在全局内存中,CCE仅计算正确令牌的逻辑值并评估log-sum-exp在所有词汇项上,使用更快内存层,戏剧性地减少内存消耗。核心利用softmax的稀疏性通过跳过梯度计算对元素有可忽略的贡献,低于数值精度。这特别对大词表的模型有价值。
在Intellect-3中,Prime分割监督微调为两个阶段:通用推理监督微调和代理监督微调。在第一个,他们使用数据集由来自Nemotron的后训练数据集和AM-DeepSeek-R1-0528-蒸馏的数学、代码、科学、工具和聊天分割组成,总共9.9B令牌。在第二个阶段,他们针对代理行为、工具使用和长范围控制(gpt-oss-120b也针对代理行为和工具使用),使用开源代理数据集的混合如SWE-Swiss和从环境中心合成生成数据使用DeepSeek-R1。除提供微调代理行为的目的,这个阶段也有有效上下文长度的效果(gpt-oss-120b也针对代理行为和工具使用),使用开源代理数据集的混合如SWE-Swiss和从环境中心合成生成数据使用DeepSeek-R1。除了提供微调代理行为的目的,这个阶段也有效上下文长度的效果。使用上下文并行,他们从65K上下文窗口缩放到98K。
在Hermes 4中,他们也进行两个监督微调阶段,两个围绕推理。他们注意尽管在最多16k令牌长度的序列上训练,推理长度频繁超过在推理任务上41k令牌。所以,他们做第二阶段教模型生成关闭</think>标签30k令牌,他们的预算。这个在固定令牌数处的插入允许模型学习计数行为(“当到达N令牌时,停止”),同时确保模型自己的分布不显著改变。这也避免了递归训练完整、自生成输出的问题,导致分布缩小和质量下降。
能力
Hugging Face团队发现了推广单轮推理数据到多轮数据的问题,源于区别/think和/no_think标签在轮之间的困难。所以,他们构造了新数据集,IFThink,使用Qwen3-32B,将单轮指令增强到多轮交换与可验证指令和推理轨迹;这戏剧性地改进了多轮推理。
掩码用户轮是另一个设计选择,因为否则损失对用户查询也被计算,牺牲生成高质量助手响应对预测用户查询。在实践中,掩码不有大影响在下游评估,但仍然在大多数案例中产生改进几个点。
序列打包
序列打包是另一个改进训练效率的选择。想法与文档内掩码相似,其中序列被打包到批次中,所以不浪费填充计算通过过度填充令牌,但带约束最小化文档中断跨批边界。

在图像中,最后打包方法使用最佳拟合递减(在TRL中实现),其中每个序列被放在批处理中最小化插入后的剩余空间。另一个方法,Hermes-4使用,是首次拟合递减,其放置一个序列在第一个有足够剩余空间的批处理中,达到>99.9%批效率。
尽管产生每批最多33x令牌/优化步骤,对于固定令牌预算,打包改变训练动力因为更多数据意味着更少梯度更新。这特别伤害小数据集其中每个样本更重要。有效批大小128伤害评估如IFEval最多10%;对于超过32的有效批大小,有平均性能降低(对于SmolLM3和数据集)。但对于大数据集,打包几乎_总是有益的_。
学习率和周期
监督微调的学习率通常比预训练小一个量级,因为模型已经学了丰富表示,激进更新可能导致灾难性遗忘。因为监督微调运行时相比预训练很短,有意义做完全学习率扫描。对于SmolLM3,3e-6或1e-5的学习率效果最好。当打包被启用时,由于更大有效批大小和为相同令牌预算获得更少更新,更安全进一步降低学习率。
一旦一个好数据混合被识别,超参数被调整,在比一个周期多的令牌上训练(通常在消融中做)也导致几个百分点的增加性能;在LiveCodeBench v4上,性能从周期二到三几乎翻倍。
一个有趣的想法探索是是否预/后训练的优化器应该相同。AdamW保留默认对两个预/后训练的选择,当用Muon测试时,使用相同优化器仍产生最佳性能。
偏好优化
因为监督微调从根本上是一个模仿学习形式,极大大监督微调数据集可能冗余由于递减增益或数据中不封装的故障模式。另一个有用的信号是偏好,即响应A或B为首选,使模型性能超越监督微调单独的限制扩展。同样,偏好优化比监督微调需要更少数据,因为起点已经很强。
对于生成偏好数据集,有几个方法:
-
强对弱:对于固定提示x,强模型S和弱模型W,始终偏好强模型的输出 y S y_S yS在弱模型的输出 y W y_W yW上。这容易构造因为强模型的输出可靠地更好。用DPO这样的方法,强和弱响应间的差异可以强制。
-
在线与评分:使用相同模型和提示,生成多个候选响应,具有外部模型(例如大模型作为判官)使用标尺或验证器评分响应的提供偏好标签。这需要校准良好和可靠的大模型作为判官,但也允许进行中的偏好数据自助。
虽然偏好优化一般作为改进有益或对齐的中程被认为,它可以也教模型更好推理,如使用强对弱的偏好。
有通常三个影响训练动力的超参数:
学习率:当跨大小2x到200x更小比监督微调中使用的学习率测试时,Zephyr7B发现使用10x更小lr提供最佳性能改进,SmolLM3完成使用20x更小lr(1e-6)平衡/think和/no_think模式间的性能。
β:范围0到1,控制是否保持更接近参考模型(loss β β β)或更接近偏好数据(更高loss β β β)。如果太大,它可能抹去来自监督微调检查点的能力,所以β值围绕0.1或更高通常首选。
偏好数据集大小:当用大小2k到340k对测试时,性能主要保持稳定,虽然Hugging Face注意性能在扩展思考中下降对于超过100k对的数据集。为此,别害怕创建你自己的偏好数据,特别是给定推理变得有多便宜。
算法
除了普通DPO(直接偏好优化),研究人员探索了各种替代:
-
KTO(卡内曼-特沃斯基优化):而不是对,KTO基于样本被标签为所需/不所需分配更新,取想法从人类决策,沿着参考点z_0和奖励样令牌比项。
-
ORPO(赔率比偏好优化):并入偏好优化与监督微调通过集成赔率比项到交叉熵损失。这使其更计算有效因为没有需要使用分开参考模型(如在DPO中用来计算r_θ(x,y))。
-
APO(锚定偏好优化):而不是仅仅在DPO中优化y+和y−间差异,APO-zero强制 y + y+ y+上升和 y − y− y−下沉,同时APO-down推双 y + y+ y+, y − y− y−下降(有用如果 y + y+ y+质量低于当前模型)。
Hugging Face发现APO-zero有最好的整体域外性能。
强化学习
监督微调和偏好优化可以点燃天花板,因为从根本上,他们优化产生看起来像数据集的输出,偏好优化通常离线和弱在多步信用分配。强化学习通过通过与环境交互提供奖励信号帮助。验证器可以自动检查正确性和提供这些奖励信号,目标可以超越偏好标签被优化。
在RLHF(来自人类反馈的强化学习),人类比较被提供,奖励模型 被训练预测人类偏好信号。然后,政策用强化学习微调最大化学习奖励。这种方式,RLHF进行在线政策优化因为它进行使用在训练中的当前政策的推出并基于奖励模型给予的奖励更新。这也允许RLHF发现不在偏好数据集中的行为。
在RLVR(具有可验证奖励的强化学习),由DeepSeek-R1流行化,验证器检查模型的输出是否匹配条件(例如它是否生成正确的数学答案或通过所有代码单元测试)生成奖励信号,使其更可扩展和目标。然后,政策被微调生成更可验证正确的输出。RLVR特别有价值当奖励漂流是一个关注(验证器提供非常稳定信号相比学习的奖励模型),当需要KL控制防止政策崩溃,和当地址在多步推理任务中的陈旧政策事件。
虽然政策优化算法常见是在线,如GRPO,实际上,最大化吞吐量,他们可能实际上略微离线。例如,在GRPO中,不冻结政策,生成多个推出批和进行优化器更新顺序使得只第一批是在线,所有后续批是离线;这被称为动态更新。动态更新在吞吐量是关键时(例如大规模强化学习训练)、当奖励漂流可能从陈旧政策累积、当政策间KL散度需要小心监控和当长推出跨多个政策更新时最重要。权衡是训练效率和政策一致;技术如重要性采样剪裁(如在IcePop中)帮助缓和离线偏见。

在 Intellect-3 的背景中,它使用在两个集群之间的 CPU 编排器(一个用于训练,一个用于推理),编排器连续轮询训练器以更新推理池,一旦新政策可用,推理池暂时停止生成权重更新,然后继续推出。这种方式,长推出可能由多个政策生成,但他们通过 max_off_policy_steps 参数限制政策漂移。
同时,他们实现 IcePop 以稳定混合专家(MoE)训练:
J IcePop ( θ ) = E x ∼ D , { y i } i = 1 N ∼ π infer [ 1 ∑ i = 1 N ∣ y i ∣ ∑ i = 1 N ∑ t = 1 ∣ y i ∣ [ M ( π train ( y i , t ∣ x , y i , < t ; θ ) π infer ( y i , t ∣ x , y i , < t ; θ old ) ; α , β ) A ^ i , t ] ] \mathcal{J}_{\text{IcePop}}(\theta) = \mathbb{E}_{x \sim \mathcal{D}, \{y_i\}_{i=1}^N \sim \pi_{\text{infer}}} \left[ \frac{1}{\sum_{i=1}^N |y_i|} \sum_{i=1}^N \sum_{t=1}^{|y_i|} \left[ \mathcal{M} \left( \frac{\pi_{\text{train}}(y_{i,t} \mid x, y_{i,<t}; \theta)}{\pi_{\text{infer}}(y_{i,t} \mid x, y_{i,<t}; \theta_{\text{old}})} ; \alpha, \beta \right) \hat{A}_{i,t} \right] \right] JIcePop(θ)=Ex∼D,{yi}i=1N∼πinfer ∑i=1N∣yi∣1i=1∑Nt=1∑∣yi∣[M(πinfer(yi,t∣x,yi,<t;θold)πtrain(yi,t∣x,yi,<t;θ);α,β)A^i,t]
其中, M ( k ) = k \mathcal{M}(k) = k M(k)=k 如果 k ∈ [ α , β ] k \in [\alpha, \beta] k∈[α,β],否则为 0 0 0。 M \mathcal{M} M 的目的是解释训练政策( π train \pi_{\text{train}} πtrain)和推理政策( π infer \pi_{\text{infer}} πinfer)之间的离线性质(off-policy),使得每个令牌(token)不会显著分歧。当重要性权重 k k k 落在 [ α , β ] [\alpha, \beta] [α,β] 之外时, M \mathcal{M} M 将其剪裁到 0 0 0,有效地忽略该令牌对梯度的贡献。
这是**重要性采样(Importance Sampling)**的想法,即推出来自推理政策,但优化的是训练政策。Prime 使用默认值 α = 0.5 , β = 5 \alpha = 0.5, \beta = 5 α=0.5,β=5。 α \alpha α 和 β \beta β 无需在乘法意义上对称。一个原因是当 π infer \pi_{\text{infer}} πinfer 极小时(导致 k k k 很大),过紧的 β \beta β 会剪裁高熵令牌,从而使学习动力变差。
Kimi K2 采用了与其前身 K1.5 不同的政策优化方法:
L RL ( θ ) = E x ∼ D [ 1 K ∑ i = 1 K ( ( r ( x , y i ) − r ˉ ( x ) − τ log π θ ( y i ∣ x ) π old ( y i ∣ x ) ) 2 ) ] L_{\text{RL}}(\theta) = \mathbb{E}_{x \sim \mathcal{D}} \left[ \frac{1}{K} \sum_{i=1}^K \left( \left( r(x, y_i) - \bar{r}(x) - \tau \log \frac{\pi_\theta(y_i \mid x)}{\pi_{\text{old}}(y_i \mid x)} \right)^2 \right) \right] LRL(θ)=Ex∼D[K1i=1∑K((r(x,yi)−rˉ(x)−τlogπold(yi∣x)πθ(yi∣x))2)]
其中 r ˉ ( x ) = 1 K ∑ i = 1 K r ( x , y i ) \bar{r}(x) = \frac{1}{K} \sum_{i=1}^K r(x, y_i) rˉ(x)=K1∑i=1Kr(x,yi) 是采样响应的平均奖励, τ > 0 \tau > 0 τ>0 是用于稳定学习的正则化参数,类似于 KL 散度。
另一个考量是PTX损失:预训练交叉熵损失。在联合强化学习训练期间,模型可以_灾难性地忘记_有价值、高质量的数据。所以,他们使用手选、高质量样本策划一个数据集,并通过PTX损失集成他们进入强化学习目标。优势是双倍的:高质量数据可以被利用,并且过拟合到在强化学习期间出现的任务的风险可以被缓和,导致更好的泛化。
平衡探索和利用在整个训练中,他们实现温度衰减。对于任务如创意写作和复杂推理,初始阶段期间的高温度对生成多样和创新响应很重要;这防止过早收敛到本地最小值并便于有效策略的发现。在后期,温度被衰减(跟随一个调度)所以没有过度随机性,并且它不损害模型的输出的可靠性/一致性。
DeepSeek-R1-Zero作为异常而突出,因为它展示强化学习可以有效即使没有监督微调。它冷启动强化学习(具体来说,GRPO保存训练成本;他们使用10.4k步,512批大小,参考政策替换每400步连同3e-6学习率、0.001KL系数)推理任务无任何监督数据。奖励系统使用两种类型的奖励:准确奖励基于响应的正确性和格式奖励强制模型把其思考进程放在思考标签之间。它获得稳健推理能力使用纯强化学习,这验证学习推理和有效泛化的能力。此外,行为包括反思(重新评估先前的步)和探索替代问题解决的方法出现,这进一步增强推理。反思词的计数如"等等"或"错误"比起始增加5-7倍。此外,这个反思行为相对突然出现:在步骤4k-7k间,有仅偶然使用,但在步骤8k后,它展示显著峰值。

对于DeepSeek-R1,他们收集数千长CoT数据微调DeepSeek-V3-Base作为强化学习的起点。从DeepSeek-R1-Zero,他们学习了可读性是一个问题:响应有时混合多语言或缺乏突出答案的markdown格式。他们通过引入语言一致性奖励(目标语言词在CoT中的比例)和设计包括每个响应结尾处总结的可读模式来解决前者后者。他们也进行第二强化学习阶段目标改进模型的有益性和无害性同时保留推理能力。
对于有益性,他们专注强调最后总结的效用和相关性。要生成偏好对,他们查询DeepSeek-V3四次并随机分配响应为要么响应A要么响应B;他们然后平均独立判断并保留对其中分数差异足够大的对,并使用成对损失定义目标。对于无害性,他们评估响应识别和缓和任何潜在的风险、偏见或有害内容。使用一个数据集,模型生成的响应根据安全指南注释为"安全"或"不安全",奖励模型被训练使用点式方法区分安全/不安全的响应。
令人印象深刻地,他们发现蒸馏DeepSeek-R1的输出进入较小模型如Qwen-32B显著改进推理能力,甚至相比大规模强化学习相比,其另外需要显著更多计算。此外,它显示,即使蒸馏策略有效和经济,我们将日益需要更强大的基础模型和更大规模强化学习。

在主训练管道之外,DeepSeek的附录记录额外的考量影响他们的设计选择:
-
GRPO超PPO:PPO有每令牌KL惩罚(序列分布间KL分解为时间KL的和,给自回归性质)。因为强化学习确实在时间上启用更长推理,PPO隐式地惩罚响应长度(并且计算便宜由于不需要额外价值模型),GRPO是首选;在数学任务上,GRPO一致性表现得比λ=1.0的PPO更好,其进一步一致性表现得比λ=0.95的PPO更好。
-
产品驱动DeepSeek-R1:用户找响应更直观当推理进程与第一人称思考模式一致。所以,长CoT数据少量微调后,DeepSeek-R1使用"I"更频繁,而DeepSeek-R1-Zero更多使用"我们"。其他考量之前被提及,如语言一致性同时确保CoT保持一致和一致。原始CoT由DeepSeek-R1-Zero生成的可能拥有超出当前人类先验的限制的潜能,所以人类注释器转换推理轨迹进入一个更人类可解释/会话。
-
推理温度:他们观察到贪婪解码评估长输出推理模型导致更高重复率和更多可变性。这巧合与最近研究,它可以被解释通过因难度学习的风险规避和时间相关错误的归纳偏见,这描述在决策点,模型倾向于重新选择先前偏爱的动作(导致循环)。
RLVR和标尺
混合推理模型上RLVR的目标是改进推理能力不至于极端扩展令牌计数。对于/no_think,天真地应用GRPO可以导致奖励黑客攻击,因为模型开始排放更长的CoT(移向/think);如此,两个奖励和令牌长度增加。SmolLM3观察这个,发现RLVR的/no_think轨迹展示认知行为如"等等,…"与推理模型关联。
这可以通过过长完成惩罚缓和,惩罚超过某长度完成,这是函数参数化的柔和惩罚阈值和硬惩罚阈值/最大完成长度。惩罚从柔和增加到硬阈值,过去后者,惩罚是-1(有效奖励=0)。
对于/no_think,SmolLM3在2.5k-3k范围中决定了长度惩罚平衡性能改进和响应长度增加。然而,进行强化学习_联合_在混合推理模型是困难的因为它需要分开长度惩罚,其相互作用可能导致不稳定。这也是为什么实验室发布instruct和reasoning变体分别。
Kimi K2使用自评论标尺奖励机制,模型评估自己的输出生成偏好信号。K2演员生成k推出,K2评论家通过进行反对标尺组合的成对评估排列所有结果;这些结合核心标尺(基本值)和规范标尺(目标消除奖励黑客攻击),和人类注释的标尺(对特定指令背景)。
评论家模型被细化使用可验证的信号,这个自助转移学习进程基础其更多的主观判断在可验证的数据,应该允许评论家以锁步重新校准其评估标准与政策的演化。
在线数据过滤
要有效进行强化学习,课程学习是另一个有效的方式,逐渐暴露模型到逐步困难的问题。首先,问题被排序进入困难池(如简单、中等和困难)基于问题的观察解决率;在Intellect-3的数学和编码中,这通过查询Qwen/Qwen3-4B-Thinking-2507完成超过八代,而对于科学和逻辑,他们查询相同模型16倍。然后,在每个阶段,他们维持平衡的课程避免用平凡简单或过度困难的问题训练,不给有意义的学习信号(并也帮助维持梯度在GRPO中)。在Kimi K2中,这通过使用监督微调模型的pass@k准确性完成。
强化学习的替代
一个替代是在线DPO(看"关于与评分的政策"在偏好优化部分)。另一个是在线蒸馏。而不是偏好,信号来自更强的教师模型,其中学生在每个训练步骤抽样响应,学生/教师逻辑值之间的KL散度提供学习信号。这种方式,学生可以连续从教师学习。同样,在线蒸馏比GRPO便宜得多因为而不是采样多个推出每个提示,我们仅采样一个,在单个前向向后通过中由教师评分;其性能提升,当Qwen3技术报告注意,在所有董事会可能更大。一个限制因子是学生和教师必须分享相同的分词器,Hugging Face的通用在线逻辑值蒸馏允许任何教师蒸馏进入任何学生。
思考机器的博客进一步展示在线蒸馏减轻灾难性遗忘,一个模型在新模型上后训练回归其他、之前的领域。具体地,他们发现70%中间训练和使用在线蒸馏可以实现接近最佳一个模型的性能,及其中间训练的版本,有效地用便宜蒸馏恢复行为。
给这些上述算法,在他们之间选择可能很难;Hugging Face恰当地描述它:
| 算法 | 何时使用 | 权衡 | 最适用于的模型大小 |
|---|---|---|---|
| 在线DPO | 你可以便宜地获得偏好标签。最好对于对齐行为与演化分布。 | 容易规模迭代、比强化学习更稳定,但依赖于标签质量和覆盖。仅在少数训练框架支持。 | 任何大小,偏好捕获超越模仿的改进。 |
| 在线蒸馏 | 你有访问强师模型的权限,想要有效地转移能力。 | 简单实现、便宜运行、继承师偏见、限制上限由师。仅在TRL和NemoRL中支持。 | 对小到中等大小模型最有效(<30B)。 |
| 强化学习 | 最好当你有可验证奖励或任务需要多步推理/规划。可以与奖励模型一起使用,但有挑战,比如奖励黑客攻击,模型取舍弱点。 | 灵活和强大,但贵和更难稳定;需要小心奖励塑造。在大多数后训练框架支持。 | 中到大模型(20B+),额外容量让他们利用结构化奖励信号。 |
对于DPO(半在线和在线),可能用远少计算匹配GRPO。具体地,他们发现半在线DPO(与培训师和发电机之间的同步每100步)一般相比半在线DPO最好,与同步每10步,在线DPO和GRPO。
局限
DeepSeek分享其他实验方法当开发DeepSeek-R1最终失败。蒙特卡罗树搜索(MCTS),受AlphaGo和AlphaZero启发,被实现测试增强测试时间计算的可扩展性。这分解答案成较小部分允许模型系统地探索解决方案空间。要进行这个,他们提示模型生成标签对应推理步骤必需。问题是令牌生成存在于指数更大搜索空间相比国际象棋。所以,他们设置了最大扩展限制对每个节点,但这导致模型卡在本地最小值。此外,训练一个细粒度的价值模型是困难的,同样,由于令牌生成的复杂性。
他们也探索了进程奖励模型,奖励多步任务中的中介想法。DeepSeek确认了三个局限:定义一般推理中的细粒度步骤是困难,确定是否当前中介步骤是困难(大模型作为判官可能不产生令人满意的结果),并且它导致奖励黑客攻击因为模型将优化有好推理的外观无进行基础工作。
后训练要点总结
监督微调是稳定的基线;偏好/强化学习的方法应该由可验证的奖励或清晰的增益证明。混合推理模型需要小心长度控制避免奖励黑客攻击。工具使用和代理数据集现在是一流的后训练目标。许多"花哨"的方法在实践中失败;追踪什么不起作用,不仅仅是什么起作用。
行为和安全
安全测试和缓和
在后训练期间,他们进行额外强化学习的阶段奖励符合OpenAI针对不安全提示的政策的答案。因为所有这些模型有开源模型权重,一个担忧是恶意各方可以增强模型的有害能力。通过在gpt-oss-120b上运行准备评估,OpenAI确认模型没有在生物/化学能力、网络能力和人工智能自我改进方面达到高能力阈值。
他们也测试了对手演员是否能够微调gpt-oss-120b达到在上述领域的高能力。他们通过以下方式模拟攻击:
- 评估大学捕获旗子挑战中的模型或网络运行中的网络操作在真实的、仿真的网络。
- 创建对手微调的版本通过在与生物风险相关的领域内专家人类数据上增量训练。
- 竞争编程、OpenAI拉请求和PaperBench上的基准(能力重建人工智能研究)。
审查后,他们的安全咨询小组得出结论,即使与稳健微调,gpt-oss-120b仍然无法在上述领域达到高能力。也,他们确定了发布模型是否可以推进生物能力的前沿,包括评估如病毒学和隐性知识,开源基础模型(同样增加风险),发现了存在其他开源权重模型在或近gpt-oss-120b,所以他们决定发布有低影响前沿。
OpenAI也使用其他指标评估安全性能:
不允许的内容:在_ProductionBenchmarks_上进行基准测试,他们考虑不同类别如PII、性、骚扰、仇恨、自伤,在更具代表性的生产数据对话中。他们使用大模型作为判官评估完成,确定根据相关的OpenAI政策不_不安全。性能与o4-mini相当。
越狱:他们用试图绕过模型拒绝的对手提示测试,具体来说是StrongReject,其将越狱例子插入安全拒绝评估,也使用相同的政策分级器。性能与o4-mini相当。
指令层次:它遵循系统>开发者>用户>助手>工具。他们后训练了模型使用系统、开发者和用户消息,有时冲突,模型必须学习选择指令层次中的更高。这包括测试系统提示提取通过用户消息和提示注入劫持。对于PII保护,性能与o4-mini相当,但对于消息冲突,gpt-oss-120b表现不如o4-mini~15%。
幻觉和思维链:推理模型的思维链可以非常有帮助检测不当行为,模型可以学会在对不具有"坏思想"的压力时隐藏他们的思考。要衡量幻觉,他们使用两个数据集,要么事实寻求问题,要么关于人的公开可用事实,考虑准确性和幻觉率。这里,幻觉率不仅仅定义为1-准确性,因为模型也可以输出如"我不知道"的答案。性能比o4-mini稍差,给定模型大小这是预期的。
公平和偏见:他们也评估gpt-oss-120b在BBQ评估上,哪个测试社会偏见反对属于九个社会维度的受保护课程的人。性能与o4-mini相当。
行为和潜在能力
继续聊天模板部分,Nous的决定改变令牌从助手的轮从助手到我启用Hermes 4采纳第一人称、对等人的角色。Hermes 4生成响应与更少元免责声明和更一致的声音具体化,导致更高的行为可塑性,这在大模型中不如常见。
相同地,Hermes 4展示可比较更大的背景忠诚相比政策僵硬。大多数其他大模型将遵循政策合规甚至当面对虚构或控制的提示(如发出免责声明或改写响应与安全约束对齐),但Hermes 4解释虚构提示更多作为角色扮演和生成在角色的响应。这同样意味着Hermes 4有一个低拒绝率;在他们的内部RefusalBench上,他们发现Hermes 4(推理)排名最高(最低拒绝率)在所有测试的模型中,而gpt-oss-120b和gpt-oss-20b,也许不令人惊讶,有最低的分数(最高的拒绝率)。同样,这个具体化角色的级别甚至扩展到政治分析,其中模型产生推理平衡事实回想与细致的框架,和较少的政策驱动对冲常见于其他大模型。
过度献媚是一个不需要的行为特征,所以大多数模型应用一个_反献媚_系统提示调整表面礼貌同时离开基础推理改变。当在Hermes 4中实现,Nous观察一个更深的转换:思维链轨迹反映了目标引导用户交互远离推理。这有时引入了具体化或强调的语言。
训练马拉松
在正式开始大规模训练之前,得先确保基础设施都准备就绪了。这包括在集群上预留好 Slurm 资源、对 GPU 进行压力测试(比如用 GPU Fryer 或 DCGM),还得注意避免存储空间爆炸——比较好的做法是把检查点(checkpoint)上传到第三方存储,并在保存好下一个检查点后删掉本地副本。为了实现这一点,建立一套完善的检查点和自动恢复系统就显得尤为关键。
另外,评估(Evals) 环节其实极其耗时,很容易让人掉以轻心(Allen Institute 在评估上大概花掉了 20% 的算力),所以做好自动化和完善的日志记录至关重要。这里的日志可不光是记录评估分数,还得涵盖吞吐量、损失值(loss)、梯度范数以及节点的健康状况。
离奇消失的吞吐量
Hugging Face 团队在正式训练开始几个小时后,发现吞吐量竟然暴跌了约 40%(从单卡每秒 14k 个 token 掉到了 8k)。排查下来,问题出在数据存储上。他们集群用的是网络附加存储(NAS),带有“保热”缓存机制:经常访问的文件留在本地,不常用的“冷”文件就被踢到第三方的 S3 存储里。面对 24TB 的庞大训练数据,存储系统直接被逼到了极限,导致在训练中途把一些数据集分片给清理出去了。这就意味着系统还得重新去把这些数据拉回来,一来二去产生了延迟,吞吐量自然就被拖慢了。
想到的第一个解决办法是换个存储策略:专门留一个备用节点,提前把数据集加载进去,然后用 fpsync 来拷贝数据(实测发现用 s5cmd 耗时要多一倍)。这还顺带解决了一个让人头疼的问题——如果某个节点挂了,新换上的 GPU 本来是没数据的,但现在只要把它和这个备用节点一换,训练就能无缝继续。当然了,为了不浪费资源,这个新的备用节点平时还能跑跑评估或者开发任务。
本以为万事大吉,结果再次测试时,吞吐量还是出现了明显下滑(虽然比之前好点)。在对单个节点进行测试发现同样的问题后,排查重点转向了训练步数的变化。结果发现,步数越少,吞吐量下降得也越少。原来,当时用的 nanotron 数据加载器有点坑,它内部的查找表会随着训练不断膨胀,以便读取下一块 token,而不是把表的大小限制住或者提前计算好。这张越变越大的表存在全局内存里,不仅导致内存分配失败,还引发了缺页中断,把缓存局部性搞得一塌糊涂。找到病根后,直接换成了 Tokenizedbytes 数据加载器,彻底解决了吞吐量暴跌的问题。
躁动的 Loss 曲线
吞吐量上去了,但 SmolLM3 的 Loss 曲线看着却异常剧烈波动。问题还是出在数据加载器上,因为它在读取每个文档时,是按顺序依次读取序列的。如果没有对序列进行打乱(shuffling),各个 batch 就无法代表整体的数据分布,从而导致梯度方差变大。而且,如果碰上那种特别长的文件(比如大段的代码),就会连续送进去一堆相似的序列,直接让 Loss 飙升。为了搞定这个,团队在离线状态下把分词后的序列重新打乱了一遍;其实还有一个备选方案,就是改用支持随机访问的数据加载器,不过那玩意儿不仅吃内存,跑起来也更慢。
张量并行踩坑记
苦练了两天、喂了 1T 的 token 后,评估结果却让人大跌眼镜:在同样的配方和训练阶段下,体量更小的 SmolLM2 (1.7B) 表现居然比 SmolLM3 还要好。顺藤摸瓜找下去,这口锅得背在**张量并行(tensor parallelism)**上:SmolLM2 的权重一张卡就能装下,但 SmolLM3 的参数量太大,必须得拆分到 2 张 GPU 上共享。
更要命的是,这两个张量并行的进程(rank)居然用了同一个随机种子来初始化,而不是各自用不同的种子。这直接导致两张卡算出来的激活值和梯度高度相似,特征失去了多样性,模型收敛效果自然也就大打折扣了。
多客户端编排器
理论上来说,推理的吞吐量应该随着节点数量的增加呈线性增长。但 Prime 团队发现,vLLM 标配的多节点数据并行策略根本达不到这个效果,节点一多,吞吐量就遇上了天花板。为此,他们抽离出了一个多客户端编排器,让每个推理节点都部署在独立的服务器上(自己跑独立的 vLLM 引擎和调度器,自己管 KV 缓存和请求批处理)。同时,编排器会为每个节点维护一个单独的客户端,这样就避开了大家挤在一个共享队列里的性能瓶颈。成组的 rollout 请求会通过轮询调度的方式分发给各个客户端,确保资源利用率一直处于平衡状态。
那些常见的“捣蛋鬼”
说到训练不稳定,背后往往有几个常见的“罪魁祸首”:学习率设得太高、数据质量太差、数据与参数状态发生了奇妙的化学反应(有些 Loss 尖峰就是特定数据 batch 和模型参数状态碰巧撞在一起引发的)、初始化没做好(OLMo2 的经验表明,相比缩放初始化,使用 N(0,0.02) 能提升稳定性),以及精度问题(求求了,别再用 fp16 了)。
除了大家熟知的 logit softcapping、z-loss 或者 QK-norm 这些招数,数据过滤也能大幅减少 Loss 尖峰出现的频率(比如 OLMo2 就干掉了那些包含重复 n-gram 的文档,特别是连续重复 32 次以上、长度在 1 到 13 个 token 之间的片段)。如果做完这些还是出现了尖峰,最常规的救火办法就是跳过那些有问题的 batch 重新训练这一段,或者干脆把梯度裁剪(gradient clipping)的阈值收紧一点。
训练运维的实战心得
结合这些实战经历,有几个非常关键的运维心得。首先,很多时候吞吐量上不去,锅并不在模型代码上,反而是数据流或者存储系统拉了后腿。
其次,数据加载器内部的机制(比如数据怎么打乱、怎么打包、怎么访问)会在暗中彻底改变整个训练的动态走向,千万别大意。
另外,在并行训练的设置里,随机种子的处理绝对是个四两拨千斤的关键细节,开训前务必尽早核对清楚。
最后,一定要把模型评估(evals)和日志记录当成头等大事来抓,毕竟这是及时发现模型训练退化的唯一“眼睛”。
更多推荐


所有评论(0)