监督微调在教模型什么:从文本续写到任务示范

成长演进

具备清晰骨架、初步数学推导或工程验证,持续补充论据与实测。

ℹ数字花园

🌿 什么是数字花园与思想演进?

遵循 Maggie Appleton 与 Andy Matuschak 的常青笔记理念:这里不是按时间沉底的流水账,而是持续修剪打磨的知识生态。文章按成熟度经历:

  • 🌱 萌芽 (Seedling): 发散灵感、读书摘录、开放猜想
  • 🌿 演进 (Budding): 结构渐明、初步代码推导、积极修正
  • 🌳 常青 (Evergreen): 逻辑闭环、持久经得起检验的基石
  • 🔬 实验待证 (Speculative): 结合沙盒与仿真探针的理论探索
浏览全站数字花园与笔记全景 →

假设我们已经有一个能写通顺中文的模型。现在交给它一段实验记录,希望返回三个字段:模型名、学习率和训练步数。

它可能认真写出一段解释,也可能补上“通常建议训练一万步”。看起来像在帮忙,实际却没有完成提取任务。

原因未必是模型完全不懂这段文字。它需要知道这次应该怎样使用已有能力:只提取材料中的信息,按指定格式返回,缺失就留空,不补写实验建议。

监督微调,也就是 SFT,是用输入与示范输出继续训练模型,让它更倾向于产生我们需要的回答。 它仍然可以使用第二卷讲过的下一个 token 预测,但训练数据与计分位置发生了变化。

本卷围绕一个有限任务展开:从中文实验记录中提取结构化信息。所有名为 Cedar 的模型和记录都是自写教学样例,不是实际训练结果。

先看我们到底需要哪一种回答#

输入材料如下:

本次使用 Cedar-30M,学习率为 2e-4。记录未说明训练步数。

任务要求是返回一个 JSON 对象:model 为字符串或 null,learning_rate 为数值或 null,steps 为整数或 null。没有明确记录的字段填 null,不要额外解释。

符合要求的示范可以是:

{"model":"Cedar-30M","learning_rate":0.0002,"steps":null}

下面几种输出,都与它有区别:

输出表现具体问题
“这段记录使用了 Cedar-30M……”可能理解了内容,但格式不符合约定
JSON 正确,steps 却填了 10000格式通过,补写了材料没有的信息
把学习率写成 0.002数值转换错误
所有字段都填 null过度保守,遗漏已有信息

这四类错误需要不同证据和修复方式。只用一句“模型不听话”描述它们,会让数据改进失去方向。

从续写到示范,数学任务并没有突然换一种#

第二卷的自回归目标是根据前缀预测后续 token。SFT 可以把任务要求和材料作为前缀,把示范回答作为要学习的后续。

设输入为 xx,示范回答为 y=(y1,…,ym)y=(y_1,\ldots,y_m)。模型给整个回答的条件概率可以拆为:

pθ(y∣x)=∏t=1mpθ(yt∣x,y<t)p_\theta(y\mid x)=\prod_{t=1}^{m}p_\theta(y_t\mid x,y_{<t})

只监督回答时,单条记录的负对数目标是:

ℓ(x,y)=−∑t=1mlog⁡pθ(yt∣x,y<t)\ell(x,y)=-\sum_{t=1}^{m}\log p_\theta(y_t\mid x,y_{<t})

意思是:在给定要求和已有正确回答前缀的情况下,提高示范中的下一个 token 的概率。这里的 xx 包含实际序列化后的提示和必要控制标记,不只是我们看到的自然语言材料。

多条样本合起来时,还要决定按 token 平均还是按样本平均。本篇只写单条求和形式,第三篇会专门处理监督范围与权重。

模型并不是先生成整份 JSON,再拿一个“正确/错误”分数更新。这种基本 SFT 使用的是示范回答中的逐 token 监督。JSON 是否能被解析,是我们额外设计的任务检查,不是交叉熵自动理解的业务规则。

示范数据同时教了内容和行为#

对上面的样例,模型可能同时学到几件事:

  • 字段提取:从材料中找出对应信息。
  • 格式遵循:使用指定键名、括号和数值类型。
  • 缺失处理:没有证据时输出 null。
  • 输出边界:回答结束,不继续写说明或新问题。

这些信号并不完全可分。如果每条样本都包含很长的固定开场白,大量监督就会用于学习开场白;如果缺失值总与短输入绑定,模型也可能把“文字很短”误当成缺失判断的捷径。

所以示范不是把正确答案装进文件就结束。它定义了模型应该模仿什么,也可能包含我们没打算教的规律。

SFT 可以让模型学到新信息和新模式,不能简单说它“只改变格式”。但若目标是可靠利用输入材料,就不应把记住训练样本中的数值当作任务完成。新记录换了模型名和学习率,仍能根据材料正确提取,才更接近我们想要的行为。

为什么论文里的 SFT 结果不能随意移植#

InstructGPT 的方法包含不同阶段:先用示范做 SFT,再训练奖励模型,之后通过 PPO 优化。论文分别讨论了这些模型和比较。不能看到完整流程的最终结果,就说“单独 SFT 已经带来同样收益”。InstructGPT,第 3 节

另一条研究线索是把多种任务写成自然语言指令再微调。FLAN 研究了这种训练对未见任务的迁移表现。这提示我们,指令数据的任务分布值得设计;它没有证明任意任务混合都能改善任意目标。Finetuned Language Models Are Zero-Shot Learners

回到我们的提取任务,最值得借用的是研究问题和对照方式:示范覆盖了哪些行为?评价是否包含未见模板和未见材料?模型获得的是更稳定的格式,还是内容准确率也提高?

没必要先复制论文中所有数据规模和训练轮数,才有资格回答一个小而明确的问题。

在训练之前,先判断是不是需要训练#

如果输入格式固定,字段总在相同位置,规则解析可能已经足够。即使决定使用模型,也应先看原有模型加清晰提示能做到什么。

一个合理起点是三组方案:

方案改变什么主要回答的问题
原模型+明确要求不改参数模型现有能力是否已经够用
原模型+少量示范提示在上下文中增加例子只是缺少任务说明,还是仍不稳定
SFT 模型+固定提示用训练样本更新参数参数更新能否在预算内稳定改善任务

这三组不天然是严格的一次单变量实验。加入示范提示会改变上下文长度,SFT 又增加训练成本。报告时应明确是在比较可部署方案,还是隔离参数更新的作用。

若要单独研究 SFT 的影响,至少保留原模型与 SFT 模型使用同一份提示、同一模板和同一生成设置的对照。示范提示方案可以作为额外基线,不要把所有差别都归功于微调。

任务定义模糊时,多加样本会放大分歧#

“学习率”也可能存在歧义。材料写“峰值学习率为 2e-4,当前已衰减到 1e-5”,到底提取哪个?

这不是模型必须自行猜出的常识,而是任务规范尚未写清。若一半标注者选择峰值,另一半选择当前值,训练会接收到冲突示范。

可以选择只提取明确称为“本次配置学习率”的数值,或把字段拆成峰值与当前值。但必须先决定,再同步修改说明、示范和评价。不能训练时接受两种答案,评测时却只认可其中一种。

本卷的简单版本约定:每条材料只描述一项实验;若出现多个候选却无法按规则确定目标,单独归入歧义集,不强塞进正常样本。这样是为了让起步实验边界清楚,后面再扩展更复杂任务。

SFT 损失下降,不等于字段就正确#

交叉熵会奖励示范序列的概率,但字段错误与 token 错误不是一一对应关系。

把 0.0002 写成 0.002,可能只差很少 token,却是重要的数值错误。另一方面,JSON 键顺序变化可能造成字符串不同,却不改变结构化内容。

因此,需要至少分开看三项:

  1. 可解析率:输出是否是合法 JSON。
  2. 结构符合率:键、类型和额外文本是否符合任务规范。
  3. 字段正确率:值是否由材料支持,缺失是否处理正确。

假设一百条样例里九十八条可解析,但只有七十条所有字段都对,不能用 98% 作为整个任务的成功率。这里是假设的计数示例,不是本站模型得分。

对于提取任务,验证损失有助于观察拟合,任务指标才更直接回答使用价值。两者不同步时,应保存输出检查错误类型,而不是任意挑一个更好看的指标。

怎样设计第一轮 SFT 比较#

先准备一小批人工核对过的样本,覆盖正常数值、科学计数法、缺失字段和格式变化。按来源记录分组划分,不能把同一材料改写的几个版本分别放进训练和测试。

固定模型与分词器版本,保留原模型结果,再训练一个配置明确的 SFT 基线。先不同时比较多个 LoRA 秩、数据生成器和学习率策略,否则很难定位收益来源。

提前写下预测:例如 SFT 可能减少额外解释并改善 null 使用,但数值换算是否提升需要检查。对应地,分别统计格式错误、遗漏、补写和转换错误。

如果只在训练模板上变好,换一种表述就退化,下一步应补任务覆盖与划分检查,而不是马上增加训练轮数。若原模型的提示基线已经足够稳定,微调也可能没有值得承担的维护收益。

这是一份可执行的比较设计,本篇不宣称已经完成正式训练。后续几篇将把样本格式、监督位置和训练方法逐步补齐。

两个检查理解的问题#

第一,模型输出了合法 JSON,却把未记录的步数填成一万。增加更多“格式正确”的样本,一定能修复吗?还需要怎样的示范和评价?

第二,SFT 模型比原模型表现好,但两者使用了不同聊天模板和不同提示示范。你能把提升全部归因于参数更新吗?怎样补一个更清楚的对照?

下一篇讨论一条指令样本应该包含什么。任务意图必须变成具体消息与 token 序列,才能进入训练。

文章概念网络

从章节进入正文概念。实线表示所属层级,虚线连接跨章节重复出现的概念,不代表因果关系。

56 / 56 个节点 · 正文标记术语与关键词概念

监督微调在教模型什么:从文本续写到任务示范同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept监督微调在教模型什么:从文本续写到任务示范监督微调在教模型什么:从文本续写到任务示范先看我们到底需要哪一种回答先看我们到底需要哪一种回答modelmodelnullnulllearningratelearningratestepssteps从续写到示范,数学任务并没有突然换一种从续写到示范,数学任务并没有突然换一种自回归目标自回归目标示范数据同时教了内容和行为示范数据同时教了内容和行为字段提取字段提取格式遵循格式遵循缺失处理缺失处理nullnull输出边界输出边界为什么论文里的 SFT 结果不能随意移植为什么论文里的 SFT 结果不能随意移植InstructGPT,第 3 节InstructGPT,第 3 节在训练之前,先判断是不是需要训练在训练之前,先判断是不是需要训练任务定义模糊时,多加样本会放大分歧任务定义模糊时,多加样本会放大分歧SFT 损失下降,不等于字段就正确SFT 损失下降,不等于字段就正确0.00020.00020.0020.002可解析率可解析率结构符合率结构符合率字段正确率字段正确率怎样设计第一轮 SFT 比较怎样设计第一轮 SFT 比较nullnull两个检查理解的问题两个检查理解的问题一条指令样本应该包含什么一条指令样本应该包含什么实验实验tokentokenSFTSFT微调微调tokentokenSFTSFT条件概率条件概率SFTSFT利用利用SFTSFTPPOPPO微调微调奖励奖励优化优化SFTSFT微调微调实验实验选择选择实验实验tokentoken奖励奖励SFTSFTLoRALoRA微调微调分词分词策略策略tokentokenSFTSFT
监督微调在教模型什么:从文本续写到任务示范

监督微调在教模型什么:从文本续写到任务示范

回到原文 ↗
BIBTEX

引用本文

@article{2026-10-20-llm-training-sft-01-demonstrations,
  author  = {枫语},
  title   = {监督微调在教模型什么:从文本续写到任务示范},
  journal = {枫语},
  year    = {2026},
  month   = {oct},
  url     = {https://meiluosi.github.io/posts/2026-10-20-llm-training-sft-01-demonstrations/}
}
🌐

本篇知识星丛与滑动侧栈

监督微调在教模型什么:从文本续写到任务示范 当前主轴

搜索

正在载入索引…