土法炼钢兴趣小组的算法知识备份

【Transformer 与注意力机制】32|指令微调:把“会续写”变成“会听话”

文章导航

分类入口
transformer
标签入口
#transformer#instruction-tuning#sft#flan#instructgpt

目录

一个只做过 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 时代,一个直接做法是:

  1. 人工设计任务指令;
  2. 人工标注参考答案;
  3. 把很多不同任务混在一起训练。

这种方式质量高,但成本也高。因为真正难的不是写一两个 demo,而是做出大规模、多样、风格一致、边界明确的数据集。

3.2 后来开始用已有任务集重写成指令格式

很多传统 NLP 数据集本来就有输入和标签,只是格式不是“指令—回答”。于是可以重写成:

指令:判断下面句子的情感倾向。
输入:This movie is surprisingly good.
输出:正向

FLAN 的重要贡献之一,就是把大量已有任务统一改写成自然语言指令模板,再混合训练。这说明 instruction tuning 不一定要求全是人工新标注,关键在于把任务接口统一成自然语言指令

3.3 Self-Instruct 开始大规模用模型合成数据

随着模型越来越强,社区发现可以反过来让模型帮忙造 instruction 数据:

  1. 先人工写少量高质量 seed tasks;
  2. 让一个更强模型扩写出更多任务、输入和答案;
  3. 经过过滤、去重和人工抽检后,用这些数据微调目标模型。

这就是 Self-Instruct 那条路线。它的意义不只是“省人力”,更重要的是打开了一条规模化通道:instruction 数据不再完全受制于人工写样本的速度。

3.4 后来又发展出“少而精”和“强教师蒸馏”两条分支

后续有两条很有代表性的分支:

  1. 少而精:LIMA 这类工作强调高质量样本比海量噪声样本更重要;
  2. 强教师蒸馏: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 的关键贡献是证明:

它把 instruction tuning 从“聊天助手技巧”提升成了“一种通用接口训练方法”。

5.2 InstructGPT:把 SFT 放进完整对齐流水线

InstructGPT 的历史地位在于,它不是只做了 SFT,而是把:

  1. SFT;
  2. 偏好数据收集;
  3. 奖励模型;
  4. 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 的。


十、参考文献

  1. Wei, J. et al. “Finetuned Language Models Are Zero-Shot Learners.” ICLR 2022. FLAN 路线的代表论文。
  2. Ouyang, L. et al. “Training language models to follow instructions with human feedback.” NeurIPS 2022. InstructGPT,SFT + RLHF 的代表工作。
  3. Wang, Y. et al. “Self-Instruct: Aligning Language Models with Self-Generated Instructions.” ACL 2023. 用模型自生成 instruction 数据的关键工作。
  4. Zhou, C. et al. “LIMA: Less Is More for Alignment.” NeurIPS 2023. 高质量少量指令数据的代表性实验。
  5. Mukherjee, S. et al. “Orca: Progressive Learning from Complex Explanation Traces of GPT-4.” arXiv:2306.02707, 2023. 强教师蒸馏指令数据的代表。

← 上一篇:31|微调演进 | 下一篇:33|RLHF

同主题继续阅读

把当前热点继续串成多页阅读,而不是停在单篇消费。

2026-04-15 · transformer

【Transformer 与注意力机制】39|T5:把所有 NLP 任务统一成 Text-to-Text

T5 的核心不是又发明了一种 Transformer,而是把翻译、摘要、分类、问答都改写成“输入文本到输出文本”的统一格式。本文解释 T5 为什么选择 Encoder-Decoder 架构,span corruption 和 BERT/GPT 的目标有什么差异,C4 和系统化消融实验为什么让 T5 成为迁移学习路线的重要基准。


By .