Instruction Tuning 是用自然语言指令和对应回答对模型进行有监督微调,使模型学会按照用户意图执行任务。它通常是 SFT 的一个重要子集或扩展:SFT 强调有监督训练形式,Instruction Tuning 强调训练数据以 instruction 为核心,并希望模型把“理解指令并执行任务”泛化到未见过的任务。
在大模型发展史中,Instruction Tuning 是从 base language model 走向 assistant model 的关键步骤。它把预训练中隐式存在的任务能力显式化:模型不再只是续写文本,而是根据“请总结”“请翻译”“请写代码”“请比较”“请按 JSON 输出”等语言指令选择合适行为。
目标与问题
Instruction Tuning 要解决的是 task interface 问题。预训练模型可能已经见过大量问答、代码、解释、推理文本,但用户在真实交互中不会提供完整任务分布,只会写一条自然语言请求。模型必须从请求中推断:
- 任务类型是什么;
- 输入和输出分别在哪里;
- 输出应该使用什么格式;
- 是否需要推理、检索、计算、工具调用或拒答;
- 多个约束发生冲突时如何排序;
- 用户没有说清楚时是否需要追问。
这使 Instruction Tuning 不只是“多做一些 SFT”,而是在训练模型识别和执行任务 specification。
与 SFT 的关系
二者关系可以这样理解:
| 维度 | SFT | Instruction Tuning |
|---|---|---|
| 训练形式 | 有监督 token-level imitation | 通常也是有监督 token-level imitation |
| 关注重点 | 学习目标 response 分布 | 学习自然语言指令到任务行为的映射 |
| 数据形态 | 可以是对话、领域 QA、工具轨迹、拒答等 | 以 instruction / task prompt 为中心 |
| 主要目标 | 建立 assistant 行为和格式 | 提升任务泛化与 zero-shot 指令跟随 |
| 典型论文 | InstructGPT SFT stage | FLAN、T0、Self-Instruct |
因此,Instruction Tuning 可以视为 SFT 的任务泛化版本;而 SFT 可以包含 instruction tuning、chat tuning、tool tuning、安全 tuning 和领域 tuning 等多种数据。
数据格式
Instruction 数据通常至少包含三个字段:
{
"instruction": "Summarize the following article in three bullet points.",
"input": "...",
"output": "..."
}在 chat model 中,它会进一步转换成 conversation schema:
[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Summarize the following article in three bullet points.\n\n..."},
{"role": "assistant", "content": "..."}
]Instruction 数据的难点不在字段本身,而在 specification 的准确性。一个好 instruction 应该让目标任务可判定、约束清晰、输入边界明确。模糊 instruction 会迫使模型从训练集风格中猜测意图,从而降低泛化性。
任务混合
Instruction Tuning 通常依赖 task mixture。常见任务包括:
- 分类、抽取、匹配、改写、翻译、摘要;
- 开放问答、知识解释、教学式回答;
- 数学解题、代码生成、代码解释、调试;
- 信息结构化,如 JSON、YAML、表格;
- 多轮对话和上下文追踪;
- 安全拒答、价值冲突、敏感内容处理;
- 创意写作、语气转换、角色扮演;
- 工具调用和 function calling。
任务混合的核心原则是平衡覆盖面与质量。过窄的 mixture 会让模型只在少数任务上变好;过宽但质量差的 mixture 会让模型学到浅层模板。FLAN 和 T0 类工作的重要启示是:跨任务、多模板、多数据集训练可以显著提升 zero-shot task generalization,但收益依赖任务表述与答案质量。
泛化机制
Instruction Tuning 的泛化来自三个层次:
- 语义对齐:模型学会将自然语言动词、约束和输入边界映射到任务操作。
- 格式对齐:模型学会按 instruction 要求输出列表、JSON、代码、解释或短答案。
- 任务抽象:模型从许多具体任务中归纳出更抽象的“任务族”,例如 classification、generation、ranking、reasoning。
这也是为什么多模板训练有价值。同一个任务如果只用一种 prompt 表达,模型可能记住表面模式;如果用多种自然语言表达,模型更可能学习任务意图本身。
合成指令数据
Self-Instruct 一类方法使用强模型自动生成 instruction、input 和 output,再经过过滤构造 instruction tuning 数据。这条路线降低了人工标注成本,也成为很多开放模型构建指令数据的基础思想。
合成数据的优势是覆盖广、成本低、迭代快;风险是 teacher bias、重复模板、事实错误和任务难度虚高。高质量合成 instruction tuning 通常需要:
- 去重和模板多样性检查;
- 事实性和可执行性过滤;
- 难度分层;
- 与人工或高质量公开数据混合;
- 对输出格式和安全边界进行验证。
关键超参与工程点
- Learning rate:SFT / instruction tuning 通常比预训练学习率小,避免破坏 base model 能力。
- Epochs:小数据多 epoch 容易过拟合风格;大数据单 epoch 或少 epoch 更常见。
- Sequence length:长 instruction 和长 response 会改变训练成本和位置分布。
- Loss mask:通常只训练 assistant 输出,不训练 user instruction。
- Data weighting:高价值任务可以加权,但过度加权会扭曲默认行为。
- Template consistency:训练和推理的 Chat Template 必须一致。
失败模式与边界
指令表面化
模型学会“看到请解释就输出一段解释”,但没有真正遵守具体约束。例如用户要求“三句话以内”,模型仍输出长篇内容;要求“只输出 JSON”,模型附加自然语言解释。
多任务负迁移
某些任务格式会污染其他任务。例如大量 chain-of-thought 数据可能让模型在不需要解释时也输出冗长推理;大量拒答数据可能导致正常问题被过度拒答。
合成数据回音室
如果 teacher model 生成的数据缺乏多样性,student 会继承 teacher 的措辞、偏见和错误。大量合成数据并不等于大量新信息。
评测集污染
Instruction tuning 数据常来自公开 benchmark 或其变体,容易造成评测分数虚高。需要保持 held-out set 和真实用户样本。
经典论文与资料
- Finetuned Language Models Are Zero-Shot Learners
- Multitask Prompted Training Enables Zero-Shot Task Generalization
- Self-Instruct
- Training language models to follow instructions with human feedback