第 04 章 / 第 11 课

指令微调:把样本变成学习目标

用一条指令样本说明格式化、目标对齐和损失掩码,设计微调前后的公平比较。

中文讲解 · 约 3 分钟两道自测 · 可重复作答第 11 / 15 课
这一课,你会学到
  • 理解指令、输入与回答的关系
  • 明确哪些 token 参与损失
  • 建立与训练内容分开的评估样本
术语速查与实践准备
预训练
从语料中的训练目标学习模型参数。
SFT
利用监督样本进行微调的一类训练目标。
LoRA
用低秩矩阵表示权重更新的方法,参数效率不等于显存同比下降。
留出集
与训练内容分开、用于评估的一组固定样本。

浏览器概念实验可以直接做。运行文中的 PyTorch 代码前,按官方安装说明准备独立环境;完整模型训练的时间与内存按实际数据、模型和硬件测量。

预训练让模型接触大量文本,指令微调则把某种任务的输入和期望回答组织成样本。它仍可使用 next-token 目标,但你要明确哪些 token 是条件,哪些 token 是要学习输出的内容。

一条指令样本包含什么

例如任务是提取活动信息。指令是“提取时间与地点”,输入是“周六下午三点在社区图书馆见”,回答是一个约定字段的结构。样本需要固定模板、角色边界和结束标记,并与模型采用的格式兼容。

训练前先检查样本是否自相矛盾、答案是否能从输入中得到、字段是否一致。标签质量往往比增加几条随意生成的样本更重要。

明确损失的范围

一种常见策略只对回答部分计算损失,把提示部分标签设为忽略值。也有训练方案对整个序列计算目标。你需要明确选择,而不是把所有公开代码都当成同一种处理。

# 位置对齐示意:真正构造 x/y 时仍要做 next-token 移位。
prompt = [11, 12, 13]
response = [21, 22, 23]
tokens = prompt + response
labels = [-100] * len(prompt) + response

这个示例只说明“忽略提示”的边界。实现时还要处理下一位置预测、padding、截断、样本拼接和 special tokens,不能直接把这里的 labels 与未移位 logits 配对。

留出集要测同一个任务

训练与评估应分离。如果任务有固定字段,可以检查字段完整性和格式正确率;若答案有客观事实,可以按任务定义检查正确性。对开放式回答,事先给出评价标准,避免看到结果后临时改规则。

比较微调前后时,使用同一组留出输入、同一种提示模板与推理设置。把不符合格式、漏字段和错误事实分别记录,比只给一句“效果更好”更可检查。

数据目标和更新方法不是一回事

SFT 描述的是有监督微调的目标与数据流程。它既可以更新较多模型参数,也可以配合参数高效方法。下一课的 LoRA 改变的是哪些参数被训练、怎样表示权重增量,不会自动替你选择训练数据或评估指标。

本课先交付一份数据样例、损失策略说明和评估清单。实际扩大训练前,再验证模板与训练/推理分词是否匹配。

读完之后,给理解一次反馈。

写五条同一任务的指令样本,说明 prompt 与 response 的边界,再在固定留出样本上设计前后对照。

本课参考资料

文章、例子与练习为本站原创讲解;官方视频与延伸资料保留作者来源。

核对日期 2026-10-14
核对实验结果,再留下完成记录。

完成记录与自测结果分别保存,不自动推断掌握程度。