大模型学习笔记 10:预训练模型怎样变成助手?理解 SFT 与指令数据

预训练后的模型会续写文本,却不一定懂得怎样做一个让人满意的助手。用户给它的是任务和约束,而不是一段等待续写的文章。监督微调(SFT)做的事情,就是用输入-输出示例把通用语言能力塑造成更符合任务的行为。

SFT 改变的不是知识库,而是行为分布

一条指令数据通常包含任务说明、上下文和期望回答。训练时,模型学习在类似输入下生成目标输出。数据可以让模型更遵循格式、更会拒答、更擅长某个领域任务,但数据本身的错误和偏好也会被学习。

预训练:大量文本 -> 学习语言与世界的统计规律
SFT:高质量指令/回答 -> 学习如何响应用户任务

指令数据最容易被低估

数据量不是唯一指标。需要检查任务覆盖、答案正确性、表达多样性、拒答边界、格式一致性和训练/验证泄漏。自动生成指令可以扩大规模,但必须抽样审核、去重和评估,否则会把模型生成的错误循环放大。

训练一个助手时的三个问题

  1. 什么行为值得示范,而不是只写一个看似漂亮的答案?
  2. 目标输出是否包含证据、边界和不确定性?
  3. 新能力是否以旧能力退化为代价?

SFT 后的评估应该同时覆盖目标任务和通用回归集。只测训练主题,容易把“学会数据表面”误认为“学会能力”。

换个角度看,微调数据其实是在写产品说明书。每条样本都在告诉模型:遇到这类情况应该怎么说,什么时候要给证据,什么时候应该停下来承认不知道。

一条指令数据里,问题本身只是起点,回答的组织方式同样重要。比如同一个“解释代码”任务,可以只给一段结论,也可以给出思路、边界和可运行的例子。模型会把这些差异当成行为信号。如果训练集里的答案都很绝对,它就很难学会在信息不足时保留不确定性。

SFT 还有一个容易被忽略的风险:新任务学会了,旧能力却退化了。做领域微调时,我会保留一套通用回归题,包括基础问答、代码、格式遵循和安全拒答。目标任务的分数上涨,只有和这套回归集一起看,才知道是不是值得上线。

指令数据还要考虑输入的多样性。同一个意图如果总用同一种句式,模型可能学会关键词匹配,而不是理解任务。可以改变问题表达、补充缺少信息、加入无关干扰,再要求模型在信息不足时追问或拒答。这样的数据更接近真实用户,也更能检验模型是否学到了行为。

书中的 Deepspeed-Chat 实践适合用来理解训练流程,但代码版本不能直接照抄。今天做 SFT 时,数据格式、聊天模板、量化和 PEFT 工具都可能不同。重要的是弄清楚每一步输入输出是什么,再根据当前框架实现。

SFT 还有一个容易忽略的细节:不是对整段文本一视同仁地计算损失。很多对话数据只对助手回复部分训练,把用户问题和分隔符作为条件而不是目标。这样可以减少模型去背模板的倾向,但也要求聊天模板、特殊 token 和截断策略保持一致。

参考:《大规模语言模型:从理论到实践》,第 5 章 5.1、5.4-5.5 节,PDF 第 130-132、142-156 页。本文为学习整理与独立阐释。

posted @ 2026-11-05 19:30  Hazy_star  阅读(23)  评论(0)    收藏  举报