一个只做过 next-token prediction 的预训练模型,最擅长的事情其实不是“回答问题”,而是“在给定前缀后继续往下写”。这两件事看起来很像,实际差得很大。
比如你给它一句:
请用三句话解释什么是梯度下降。
如果模型只在普通网页和书籍上做过预训练,它可能会:
- 把这句话当作文档标题,然后写一篇百科式长文;
- 模仿论坛帖子,先闲聊几句再进入主题;
- 甚至继续补全出一个完全不按要求的段落。
这不是模型“不懂中文”,而是它根本没被系统训练成“收到指令后按约束输出答案”的助手。指令微调(instruction tuning)解决的,就是把“会续写”这项通用能力,重定向成“会按指令完成任务”。
一、为什么预训练模型不天然“听话”
这件事要从预训练目标本身说起。
1.1 预训练学的是分布,不是角色
自回归预训练学的是:
\[ p(x_t \mid x_{<t}) \]
也就是“什么 token 最可能接在当前前缀后面”。这个目标让模型变成一个很强的统计续写器,但不会告诉它:
- 什么时候该简洁;
- 什么时候该按步骤回答;
- 什么时候应该拒绝;
- 什么时候要遵循用户给的格式要求。
这些行为不是“语言本身”自动蕴含出来的,而是后续对模型角色的再塑形。
1.2 prompt 只是接口,instruction tuning 才是行为校正
很多人把“会写 prompt”误解成“模型已经学会听指令了”。其实 prompt 只是接口层;如果模型本身没被训练成遵循这类指令,好的 prompt 也只能部分补救。
指令微调的核心不是发明新接口,而是让训练数据长成这种形状:
<instruction>
<optional context>
<desired response>
模型在大量这类样本上继续训练之后,才会把“看到任务描述就切换到完成任务模式”这件事学成高概率行为。
二、SFT:指令微调的基本形态其实就是监督学习
严格说,指令微调的第一步通常不是 RLHF,而是更基础的东西:监督微调(Supervised Fine-Tuning, SFT)。
2.1 它本质上还是 next-token loss
SFT 并没有发明新 loss。大多数情况下,它仍然是在做:
\[ \sum_t \log p(y_t \mid x, y_{<t}) \]
只是这里的输入 \(x\) 不再是普通文本前缀,而是“用户指令 + 上下文 + 格式模板”;输出 \(y\) 也不再是任意自然续写,而是“理想回答”。
换句话说,指令微调不是换优化器、换架构,而是换训练分布。
2.2 真正改变模型行为的是数据格式
同样一句知识,如果放在预训练语料里是百科段落;放进指令微调语料里,就会变成:
用户:请解释什么是梯度下降。
助手:梯度下降是一种通过沿损失函数的负梯度方向更新参数来最小化损失的优化方法……
模型一旦在大量这种“用户问—助手答”的模式上继续训练,就会学会:
- 遇到问句时切换到回答模式;
- 更少继续扮演原文作者;
- 更愿意遵守结构化要求(列点、步骤、摘要、翻译等)。
2.3 这其实是在重写“默认 completion 风格”
预训练模型的默认 completion 风格来自互联网文本分布;SFT 则把默认风格重新锚定到“助手回答”这种更窄但更有产品价值的分布上。
所以很多人第一次体验 instruction-tuned 模型时会有一种错觉:好像模型突然“懂人话了”。更准确的说法是:它被训练成把人类指令解释为一个优先级更高的上下文模式。
三、指令数据从哪里来
这是 instruction tuning 最现实、也最难的一部分。
3.1 最早是人工写任务、人工写答案
FLAN 和 InstructGPT 时代,一个直接做法是:
- 人工设计任务指令;
- 人工标注参考答案;
- 把很多不同任务混在一起训练。
这种方式质量高,但成本也高。因为真正难的不是写一两个 demo,而是做出大规模、多样、风格一致、边界明确的数据集。
3.2 后来开始用已有任务集重写成指令格式
很多传统 NLP 数据集本来就有输入和标签,只是格式不是“指令—回答”。于是可以重写成:
指令:判断下面句子的情感倾向。
输入:This movie is surprisingly good.
输出:正向
FLAN 的重要贡献之一,就是把大量已有任务统一改写成自然语言指令模板,再混合训练。这说明 instruction tuning 不一定要求全是人工新标注,关键在于把任务接口统一成自然语言指令。
3.3 Self-Instruct 开始大规模用模型合成数据
随着模型越来越强,社区发现可以反过来让模型帮忙造 instruction 数据:
- 先人工写少量高质量 seed tasks;
- 让一个更强模型扩写出更多任务、输入和答案;
- 经过过滤、去重和人工抽检后,用这些数据微调目标模型。
这就是 Self-Instruct 那条路线。它的意义不只是“省人力”,更重要的是打开了一条规模化通道:instruction 数据不再完全受制于人工写样本的速度。
3.4 后来又发展出“少而精”和“强教师蒸馏”两条分支
后续有两条很有代表性的分支:
- 少而精:LIMA 这类工作强调高质量样本比海量噪声样本更重要;
- 强教师蒸馏:Orca、UltraChat、ShareGPT 类路线用更强模型生成解释链、对话轨迹或多样答案,再去蒸馏较小模型。
两条路线看起来不同,本质都在回答同一问题:如何让 instruction 数据既多样,又保持足够高的行为质量。
四、instruction tuning 到底让模型学到了什么
这件事需要拆开说,否则很容易神化 SFT。
4.1 它主要学的是“交互格式”和“响应风格”
指令微调最稳定的收益包括:
- 更会按任务要求组织回答;
- 更会遵守输出格式;
- 更愿意直答问题而不是乱续写;
- 更容易切换不同任务角色(翻译、总结、分类、写代码、解释概念)。
这些都是真实能力提升,但本质上更接近行为接口的重定向。
4.2 它不会凭空创造新知识
如果基础模型没见过某个知识点,SFT 通常也不会魔法般把它教会。它更多是在已有表示空间里,把“哪种输出风格最合适”这件事重新排优先级。
这也是为什么高质量基座模型更容易被 instruction tuning 激活:它本来就有很多潜在能力,只是默认接口不对。
4.3 它会放大某些偏好,也会带来遗忘
SFT 不是纯收益。过度集中在某类指令分布上,可能导致:
- 输出过于模板化;
- 开放续写能力下降;
- 某些专业领域能力被稀释;
- 模型更“像助手”,但更不像通用语言模型。
所以 instruction tuning 永远在做一件事:用通用性换对齐性。
五、为什么 FLAN、InstructGPT、LIMA 都重要
这几条线看起来都叫“指令微调”,但各自强调的东西不同。
5.1 FLAN:任务混合与自然语言指令接口
FLAN 的关键贡献是证明:
- 把不同任务统一改写成自然语言指令;
- 用多任务 mixture 训练;
- 可以显著提升 zero-shot / few-shot 泛化。
它把 instruction tuning 从“聊天助手技巧”提升成了“一种通用接口训练方法”。
5.2 InstructGPT:把 SFT 放进完整对齐流水线
InstructGPT 的历史地位在于,它不是只做了 SFT,而是把:
- SFT;
- 偏好数据收集;
- 奖励模型;
- PPO 优化
串成了完整产品路线。SFT 在这里是第一步,但也是必要地基——没有它,后面的偏好优化无从开始。
5.3 LIMA:质量可能比规模更重要
LIMA 给社区的提醒非常重要:只要基础模型够强,少量高质量、风格统一的数据也可能激活相当不错的指令跟随能力。这个结论后来影响了很多开源社区的数据选择观。
六、模板、special tokens 和对话格式不是小事
现代 instruction tuning 里,模板设计本身就是一层协议。
6.1 模型学到的不是“抽象助手”,而是“某套聊天格式”
例如:
<system>你是一个乐于助人的助手</system>
<user>解释一下 softmax</user>
<assistant>
或者:
[INST] 解释一下 softmax [/INST]
模型在训练中看到大量这种格式后,会把 special token、role token、换行模式都当成条件的一部分。也就是说,聊天模板不是推理时临时包一层壳,而是训练分布的一部分。
6.2 模板不一致会直接伤害效果
如果训练时用一种 role 标记,推理时随手换另一种,模型就可能:
- 不识别当前角色;
- 接错说话人;
- 重复模板文本;
- 风格突然漂移。
所以聊天模型的“prompt 格式”看起来像产品细节,实际上和 tokenizer、SFT 数据是一条链上的。
七、为什么 instruction tuning 不等于对齐完成
SFT 很重要,但它解决不了所有问题。
7.1 它主要学“模仿理想回答”
如果训练数据里给出的就是单一参考答案,模型学到的是模仿这些答案分布。它不直接建模“人更偏好哪个回答”这种相对关系。
7.2 对复杂偏好和长期行为约束不够
比如:
- 两个答案都对,但一个更有帮助;
- 一个答案更安全,但更啰嗦;
- 需要多轮对话中持续保持礼貌、一致、自我约束。
这类偏好很难完全靠单轮 SFT 样本表达清楚,所以后面才会出现 RLHF、DPO 之类偏好优化方法。
八、几个常见误解
8.1 “指令微调让模型学会了新知识”
多数情况下不是。它主要学的是如何以更符合指令的方式调用已有知识。
8.2 “SFT 就是把 prompt 写得更像聊天”
不对。真正关键的是大量指令—回答样本带来的分布重定向,而不是某一句 prompt wording。
8.3 “数据越多越好”
不一定。低质量 instruction 数据会让模型变得话痨、模板化、甚至学到错误行为。质量和多样性同样重要。
8.4 “只要做了 instruction tuning,模型就自动安全”
远远不够。SFT 可以改善表面行为,但复杂偏好、安全边界、拒答策略通常还要靠更进一步的偏好优化和系统层约束。
8.5 “LIMA 证明少量数据永远优于大规模数据”
也不是。它证明的是在强基座模型上,高质量数据的边际价值非常高;不是说规模从此不重要。
九、结语
指令微调真正改变大模型产品形态的地方,在于它第一次系统地把“通用续写器”变成“任务接口统一的助手”。它没改架构,也没改核心 loss,只是换了一批更有目标感的数据,就把模型的默认行为重新定向到了“听指令、按格式、直接回答”上。
但到这里,对齐还只完成了一半。模型现在更像助手了,却还不一定总能给出人真正偏好的答案。下一篇我们继续往下走,看这件事是怎么从 SFT 推进到 RLHF、再推进到 DPO 和 GRPO 的。
十、参考文献
- Wei, J. et al. “Finetuned Language Models Are Zero-Shot Learners.” ICLR 2022. FLAN 路线的代表论文。
- Ouyang, L. et al. “Training language models to follow instructions with human feedback.” NeurIPS 2022. InstructGPT,SFT + RLHF 的代表工作。
- Wang, Y. et al. “Self-Instruct: Aligning Language Models with Self-Generated Instructions.” ACL 2023. 用模型自生成 instruction 数据的关键工作。
- Zhou, C. et al. “LIMA: Less Is More for Alignment.” NeurIPS 2023. 高质量少量指令数据的代表性实验。
- Mukherjee, S. et al. “Orca: Progressive Learning from Complex Explanation Traces of GPT-4.” arXiv:2306.02707, 2023. 强教师蒸馏指令数据的代表。
同主题继续阅读
把当前热点继续串成多页阅读,而不是停在单篇消费。
【Transformer 与注意力机制】38|GPT 系列:从 GPT-1 到 GPT-4 的路线演进
GPT 路线的关键不是某个模型名字,而是 Decoder-only Transformer、next-token prediction、规模扩展、上下文学习、指令微调和人类反馈逐步合流。本文从 GPT-1 讲到 GPT-4,只使用公开可确认信息,解释为什么自回归语言模型最终成为大语言模型时代的主线。
【Transformer 与注意力机制】39|T5:把所有 NLP 任务统一成 Text-to-Text
T5 的核心不是又发明了一种 Transformer,而是把翻译、摘要、分类、问答都改写成“输入文本到输出文本”的统一格式。本文解释 T5 为什么选择 Encoder-Decoder 架构,span corruption 和 BERT/GPT 的目标有什么差异,C4 和系统化消融实验为什么让 T5 成为迁移学习路线的重要基准。
【Transformer 与注意力机制】40|三大路线之争:为什么大模型几乎都是 Decoder-only
Transformer 不是只有一种形态。Encoder-only、Encoder-Decoder、Decoder-only 分别对应理解、条件生成和自回归生成三类信息流。本文横向比较 BERT、T5、GPT 代表的三条路线,解释为什么通用大模型时代 Decoder-only 占主流,以及为什么这不意味着另外两条路线失去价值。
【Transformer 与注意力机制】41|位置编码演进:Sinusoidal → Learned → RoPE → ALiBi
Transformer 本身没有递归和卷积,如果不注入位置信息,它只会看到一袋 token。本文从原始正弦位置编码讲到 learned embedding、相对位置、RoPE 和 ALiBi,解释位置编码为什么从“给 token 加坐标”演进到“让 attention 感知相对距离”,以及长上下文为什么让位置外推变成核心问题。