i007.cc

i007.cc

优先队列-降维打击

05.价值资料

AI大模型前沿知识

讲讲SFT这样的研发范式

SFT全称是Supervised Fine-Tuning,也就是”监督微调”,指的是在预训练模型的基础上,用人工准备好的高质量输入输出样本,通过监督学习的方式让模型学会特定的行为模式。放在大模型研发的整体范式里看,SFT是连接”预训练”和”对齐”这两个阶段的关键一环,理解它的作用和局限,有助于理解整个训练流水线为什么要这样设计。

先说它在流水线里的位置。预训练阶段模型在海量互联网文本上学习”预测下一个词”,这个过程赋予了模型广博的知识和语言能力,但预训练的目标函数只是让模型的输出在统计上像训练语料,并不天然对应”像一个乐于助人的助手那样回答问题”。这时候如果直接跟预训练模型对话,你会发现它更像是在做文本续写而不是好好回答——比如你问一个问题,它可能会续写出更多类似的问题,而不是给出答案。SFT要解决的正是这个”知识很多但不知道怎么恰当地表达和应用”的问题。

具体做法是准备一批”提示-理想回答”的样本对,这些样本通常由人类标注者撰写,或者由人类对模型输出进行修改润色而成,涵盖各种场景:如何礼貌地回答问题、如何拒绝不合适的请求、如何给出结构清晰的解释、如何使用工具等等。然后用标准的监督学习方式——也就是让模型去最大化生成这些”标准答案”的概率——去微调预训练模型的参数。这个过程相对简单直接,计算成本远低于预训练,却能让模型的行为发生质的变化,从”续写机器”变成”能对话、听指令的助手”。这也是为什么早期InstructGPT、以及后来几乎所有对话式大模型,都会把SFT作为对齐流程里必不可少的第一步。

作为一种研发范式,SFT有几个特点值得展开讲。第一是它高度依赖数据质量而非数据数量。因为SFT样本通常需要人工撰写或精心筛选,规模远小于预训练语料(可能是几万到几十万条,而不是万亿级token),所以每一条样本的质量、多样性、覆盖面都直接决定了微调效果——这也催生了大量关于”如何构造更好的SFT数据集”的研究,包括让更强的模型生成候选回答再由人工挑选修改(这样人类只需要做判断和编辑,而不必从零写),以及后来流行的用强模型蒸馏数据给较弱模型训练的做法。

第二是SFT本质上是在”模仿”,而不是在”优化偏好”。它教会模型的是复现训练样本里那种特定风格和内容的回答,但没有一个机制让模型理解”这个回答比那个回答好在哪里”这种相对比较关系。这正是为什么SFT之后往往还需要接上RLHF或者DPO这类基于偏好对比的方法——SFT把模型从”不会好好说话”调教到”大致会好好说话”,后续的偏好优化再进一步打磨到”说得更让人满意”。可以把SFT理解成先学会写规范作文,再通过反复对比修改学会写出更精彩的作文。

第三,SFT这套范式的一个隐含风险是模型可能会学到训练数据里一些不希望被学到的表面模式,比如标注者的书写习惯、回答长度偏好、甚至无意识的偏见,如果标注数据覆盖不够多样或者存在系统性偏差,模型会原样继承这些问题——这也是为什么数据构造过程本身需要非常谨慎的质量控制和多样性设计。

第四,近年SFT这个范式本身也在演化,尤其是在推理模型兴起之后。前面聊到的DeepSeek-R1里,SFT被用作强化学习之前的”冷启动”步骤——先用少量高质量的长推理样本让模型具备基本的推理格式和自我检查习惯,再让强化学习去进一步优化正确率和推理质量。这说明SFT不再只是终点前的最后一步微调,也可以是更复杂训练流程里一个承前启后的中间阶段,具体角色和位置会随着任务目标(是做通用对话助手,还是做专精的推理模型)而调整。

总的来说,SFT作为一种研发范式的核心价值在于,它用相对少量但精心构造的监督数据,高效地把预训练模型的原始能力”塑形”成符合特定行为规范的样子,是目前几乎所有主流对话式大模型训练流程里不可或缺、但也绝非充分的一环。

讲讲Muon

Muon是近两年在大模型训练圈子里很受关注的一种新型优化器,全名是”Momentum Orthogonalized by Newton-Schulz”,最早由Keller Jordan在NanoGPT训练速度纪录(“speedrun”)的实践中提出,后来被MoonshotAI等机构验证可以扩展到真正大规模的LLM预训练上,目前被认为是Adam/AdamW之外最有希望的替代方案之一。

要理解Muon,得先说清楚它想解决什么问题。Adam和AdamW是过去几年训练大模型的事实标准优化器,核心思路是给每个参数维护一个独立的自适应学习率,根据梯度的一阶和二阶矩估计来调整更新步长。但Adam本质上是把每个参数当作独立的标量来看待和调整的,没有利用到神经网络里权重矩阵本身的结构信息——而现代神经网络的隐藏层权重恰恰大多是二维矩阵。Muon的出发点就是:如果把权重矩阵当作一个整体的几何对象来处理,而不是拆散成一堆互相独立的标量,是不是能找到更好的更新方式。

Muon的核心机制可以概括成三步。第一步和普通的带动量的SGD一样,先积累一个动量化的梯度更新量。第二步是关键创新:对这个动量更新矩阵做”正交化”处理,也就是把它替换成奇异值分解(SVD)里的UV转置部分,直观理解就是保留这个更新矩阵的”方向信息”,但把各个奇异值都拉平成相近的大小,避免更新在某些方向上过度膨胀、在另一些方向上又几乎不动。第三步是工程上的巧思:直接算SVD代价很高,所以Muon用Newton-Schulz迭代(通常五步左右)在bfloat16精度下去高效近似这个正交化过程,而不需要真的做一次昂贵的矩阵分解。这三步合起来,就是”动量”加”经Newton-Schulz近似正交化”的完整含义。

值得强调的是,Muon并不是要取代Adam来优化所有参数,而是有意做了分工:它只用来优化神经网络隐藏层里的二维权重矩阵,至于像LayerNorm的缩放参数、偏置这类标量或向量参数,以及模型的输入嵌入层和输出层,Jordan的建议是仍然交给AdamW这类标准方法处理。这种”看参数的形状决定用什么优化器”的混合策略,是Muon在实践中真正被使用的方式,而不是一个单一优化器包打天下。

从效果上看,Muon最早是在CIFAR-10训练速度纪录和NanoGPT速跑这类小规模、追求极致训练效率的场景里证明自己的——它连续刷新了多项速度纪录,报告的样本效率提升大约在1.35倍左右,而且它带来的额外计算开销非常小,在典型语言模型训练场景下低于1%,这意味着换掉Adam基本不需要付出额外的显著代价。真正让它受到广泛关注的,是MoonshotAI(月之暗面)后续发表的技术报告,验证了Muon可以扩展到真正的大模型预训练规模。他们发现要让Muon在大规模下稳定有效,需要做两个关键改动:一是给Muon加上权重衰减(weight decay),否则权重会在长时间训练中无节制增长;二是针对不同形状的权重矩阵,按√max(行数,列数)对更新幅度做归一化缩放,这样才能直接复用已经调好的AdamW超参数,不用重新调参。他们用改良后的Muon训练了一个3B/16B参数的混合专家模型Moonlight,用了5.7万亿token,报告显示相比AdamW,Muon达到同等效果大约只需要52%的训练算力,即接近两倍的计算效率提升,同时在MMLU、GSM8K等评测上也超过了同规模的对比模型。

放在更大的研发范式视角看,Muon代表的是一类”利用参数矩阵结构信息”的优化器研究方向,跟Adam这类逐参数自适应学习率的思路是不同的设计哲学。目前这个方向仍然非常活跃,包括对Newton-Schulz迭代系数的进一步调优、自适应版本(比如AdamMuon这类结合两者优点的尝试)等后续工作都在陆续出现,也已经有一些公开的大模型训练(包括月之暗面的Kimi系列)采用了Muon或其变体作为生产环境的优化器。不过需要说明的是,这个领域进展很快,目前公开的证据大多还是来自个别机构和团队的报告,业界是否会像当年Adam取代SGD那样普遍转向Muon,还需要更多独立复现和更长时间的检验。

发表回复