人人都会AI编程

5.1 监督微调(SFT):指令遵循能力的形成原理

更新时间:2026-07-09

经过第 4 章所述的预训练阶段后,我们得到的只是一个基座模型(Base Model)。它精通语法、储备了海量知识、能流畅地续写任何文本,但它本质上仍是一个“自说自话的概率接龙机”——如果你直接问它“请用三句话总结这段文字”,它可能不会老实总结,而是把你的提问当成故事开头,继续编造情节;如果你让它“用 Python 写个快速排序”,它也可能先给你解释一通算法思想,就是不写代码。

监督微调(Supervised Fine-Tuning, SFT) 就是对齐流程的第一把钥匙。它通过少量但高质量的人工构造数据,让基座模型完成从“会接龙”到“听得懂人话、按指令办事”的蜕变。


一、SFT 的核心定位:对齐阶段的“冷启动”

在大模型全生命周期中,SFT 处于后训练(Post-training)阶段,紧接预训练之后,通常是 RLHF 或 DPO 的前置步骤。

如果把预训练比作“通识教育”——让模型博览群书、建立语言本能——那么 SFT 就是“岗前培训”:告诉它用户会以什么格式提问,以及什么样的回答才是“合格的”。没有 SFT,后续强化学习(5.2 节)连一个稳定的初始策略都找不到,训练极易发散。


二、指令遵循能力是怎么“练”出来的?

SFT 并没有改变模型的底层物理机制。它仍然沿用预训练时的因果语言建模(CLM,见 4.1 节)目标:给定前文,预测下一个最可能的 Token。改变的是训练数据的分布和结构

1. 数据格式:从“纯文本”到“指令-回答对”

SFT 数据集由大量高质量的指令-回答对(Instruction-Response Pairs)构成,通常包装成统一的对话模板。一条标准样本长这样:

System: 你是一个 helpful 的 AI 助手,回答要简洁、安全。
User: 请解释什么是梯度爆炸,并给出一个比喻。
Assistant: 梯度爆炸是指反向传播时梯度逐层相乘变得极大,导致参数更新失控……
    就像多米诺骨牌,第一块倒下时只倾斜了一点,但后面每一块都放大这个倾斜,最后整排牌飞了出去。

在训练时,System + User 的部分作为输入上下文(Context),模型需要自回归地生成 Assistant 的每一个 Token。损失函数依然是交叉熵损失(4.3 节),但通常只计算 Assistant 输出部分的 Loss,User 提问部分的 Loss 被 Mask 掉(或权重极低),避免模型浪费算力去“学习”用户会问什么。

2. 形成原理:激活与格式化预存知识

SFT 之所以有效,依赖一个关键前提:预训练已经把世界知识和语言规律压缩进了参数里。SFT 并不是从零往模型里“灌输”新知识(虽然少量新知识确实可以进入),而是做两件事:

  • 建立指令映射通路:让模型学会识别“User:”后面的内容是任务需求,“Assistant:”后面需要进入任务解决模式。Decoder-only 的自注意力机制(3.3 节)在此过程中学会把更多注意力权重分配给指令中的关键词(如“解释”、“比喻”、“Python”),从而激活参数中对应的知识区域。
  • 重塑输出分布:基座模型的输出分布是“互联网平均文风”——可能啰嗦、可能跑题、可能包含不安全内容。SFT 通过在高 quality 回答上强制降低 Loss,把概率质量从“差的续写”推向“符合人类期望的续写”。

换句话说,SFT 是在告诉模型:“你脑子里其实已经有答案了,现在我教你用一种对人类有用的方式把它掏出来。”


三、数据质量:SFT 的绝对天花板

在 SFT 阶段,数据质量远重于数据数量。业界共识是:数万条经过专业标注、审核、去重的指令数据,效果可以碾压百万条爬取来的粗糙语料。

高质量 SFT 数据的四个特征

| 特征 | 说明 | 反面教材 |
|------|------|----------|
| 多样性 | 覆盖问答、摘要、代码、推理、头脑风暴、安全拒绝等多类任务 | 全是简单问答,导致模型遇到复杂指令就懵 |
| 准确性 | 回答事实正确、逻辑自洽、无幻觉 | 包含错误代码或错误历史日期,模型学会一本正经胡说 |
| 格式统一 | 使用一致的对话模板(如 ChatML、ShareGPT、Alpaca) | 格式混乱会让模型输出时混淆“该说人话还是该写 JSON” |
| 边界清晰 | 明确标注哪些请求应该被拒绝(如犯罪、医疗、隐私) | 未设置拒绝样本,导致模型百依百顺,安全隐患极大 |

实用陷阱:很多企业误以为 SFT 是“给模型灌入企业知识库”的最佳时机。实际上,SFT 更适合格式化已有知识;如果要在模型中注入大量新事实,更可靠的做法是配合 RAG(检索增强生成)或在预训练阶段就加入领域语料,而非仅靠 SFT 硬背。


四、训练细节:与预训练的关键差异

虽然目标函数都是 CLM,SFT 的工程实现与预训练(第 4 章)有明显区别:

  • 学习率更低:预训练学习率可能在 1e-4 量级,SFT 通常降至 1e-5 甚至 2e-5。因为预训练后的参数已处于较优 basin,微调时只需轻推,避免把基座能力冲垮。
  • 训练步数极短:通常只跑 1–3 个 Epoch。SFT 数据量小(百万级 Token vs. 预训练的万亿级),训练太久会过拟合,导致模型死记硬背训练样本,丧失泛化性。
  • 优化器与策略:仍使用 AdamW(4.4 节),但 Warmup 比例很短甚至省略;通常会配合验证集早停(Early Stopping),一旦验证 Loss 不再下降立即停止。
  • 计算范围控制:如前所述,只在 Assistant 输出上计算 Loss。若在整个序列上算 Loss,模型会花大力气优化“模仿用户提问”,这是无效的。

五、SFT 的能力边界与局限

SFT 解决了“会不会听话”的问题,但它存在天然上限:

  1. 难以区分“好”与“更好”:SFT 的优化目标是“让黄金回答的概率最高”,但它无法有效利用“回答 A 比回答 B 更好”这种比较信号。对于开放式创作、对话风格、多轮共情等微妙维度,SFT 很容易触及天花板。
  2. 幻觉可能被“包浆”:如果 SFT 数据本身包含幻觉,模型不仅继承了它,还会因为 SFT 赋予了“自信、肯定的语气”,让幻觉输出得更笃定。
  3. 对齐税(Alignment Tax):为了让模型安全、 helpful,SFT 有时会在某些客观基准(如知识问答准确率)上造成轻微下降——模型变得谨慎,宁愿不答也不愿错答。
  4. 分布外脆弱性:训练时没见过的指令模式(如某种非常规语言陷阱或跨语种混合指令),模型可能退化回基座模型的行为。

六、小结与下节预告

监督微调(SFT)是指令遵循能力的奠基工程。它不改变 Transformer 的数学本质,而是通过高质量指令数据 + 低学习率短周期训练,在预训练获得的通用能力之上,雕刻出“人机对话接口”。

经过 SFT 后,模型已经是一个可用的 ChatBot,但它对“好回答”的理解仍停留在“像训练数据”的层面。如何让它超越静态模仿,真正理解人类偏好的微妙排序——比如“回答 A 比回答 B 更诚实、更简洁、更有帮助”?这就需要引入人类反馈强化学习(RLHF)或直接偏好优化(DPO)。在 5.2 节中,我们将剖析奖励模型与 PPO 算法,看它们如何把“偏好”转化为可优化的数学信号。