指令微调
指令微调是一种后训练过程,它在数千个 (指令, 期望响应) 配对上对基础 LLM 进行微调,使其学会遵循自然语言指令,而不仅仅是续写文本。正是这一步,把一个擅长预测下一个词的原始语言模型,变成了能够理解“总结这段内容”“翻译成韩语”或“写一条 SQL 查询”的助手。
指令微调是一种后训练过程,它在数千个 (指令, 期望响应) 配对上对基础 LLM 进行微调,使其学会遵循自然语言指令,而不仅仅是续写文本。正是这一步,把一个擅长预测下一个词的原始语言模型,变成了能够理解“总结这段内容”“翻译成韩语”或“写一条 SQL 查询”的助手。
为什么重要
仅用下一个 token 预测训练出来的基础模型,用起来出乎意料地困难。如果你问原始的 GPT-3 基础模型“法国的首都是什么?”,它可能会回答“意大利的首都是什么?西班牙的首都是什么?”,也就是延续相似问题的模式,而不是作答。指令微调改变了这一点。Google 的 FLAN(2021)、OpenAI 的 InstructGPT(2022)和 Anthropic 的 Claude 都用指令微调打造出真正会作答的模型。每一个现代的面向对话的 LLM,无论是 GPT-4、Claude、Gemini、Llama Instruct 还是 Mistral Instruct,都经过了指令微调。理解这一步,就能解释为什么两个基础能力相近的模型,用起来感受却天差地别。
工作原理
1. 收集指令数据:人工撰写(或筛选)数千个跨越多样化任务的指令-响应配对,涵盖摘要、问答、编程、翻译、数学、创意写作和推理。
2. 统一格式:每个样本都遵循类似的结构:
### Instruction:
Summarize the following article in 3 bullets.
### Input:
[article text]
### Response:
- point 1
- point 2
- point 3
3. 有监督微调(SFT):在这些格式化的配对上,用标准的下一个 token 预测损失训练基础模型。模型学到:在看到“### Instruction: ... ### Response:”之后,它应当生成期望的响应。
4. 可选的多任务混合:FLAN、T0 和 Dolly 等数据集组合了数百种任务类型,使模型能够泛化到未见过的指令。
5. 在留出指令上评估:衡量模型是否能遵循它在微调期间从未见过的新指令。
指令微调 vs 微调 vs RLHF
| 维度 | 微调 | 指令微调 | RLHF |
|---|---|---|---|
| 数据 | 任务特定的样本 | 多样化的(指令, 响应)配对 | 人类偏好比较 |
| 损失 | 下一个 token 预测 | 下一个 token 预测 | 奖励模型 + PPO |
| 目标 | 专精于单一任务 | 通用的指令遵循 | 与人类偏好对齐 |
| 示例 | 仅在法律合同上微调的模型 | FLAN、Alpaca、Dolly | ChatGPT、Claude |
| 难度 | 容易 | 中等 | 困难 |
在实践中,现代对话模型会经历全部三个阶段:基础预训练 → 指令微调(SFT)→ RLHF(或 DPO/constitutional AI)。指令微调是中间层,是模型变得可用、但尚未在有用性、安全性和诚实性等偏好上对齐的那个节点。
著名的指令微调模型
FLAN-T5(Google,2022):最早的开源指令微调模型之一。它证明了一个经过指令微调的 3B 模型可以击败一个未经指令微调的 175B 模型。
Alpaca(Stanford,2023):在 GPT-3.5 生成的 5.2 万个指令样本上对 Llama 7B 进行微调。它表明即便对小模型,指令微调也既廉价又有效。
Dolly(Databricks,2023):在 1.5 万个人工撰写的指令上微调。它证明了高质量数据胜过数量。
Llama Instruct / Mistral Instruct:与其基础模型一同发布的开放权重指令微调版本。
Open-Instruct 和 Tulu(AI2):以研究为导向、强调透明度的指令微调模型。
权衡取舍
数据质量 > 数量:1.5 万个精心撰写的样本可以击败 50 万个自动生成的样本。Alpaca 与 Dolly 的对比说明了这一点。
窄覆盖 vs 宽覆盖:覆盖更多任务类型能提升泛化能力,但可能损害在任一单项任务上的表现。
格式敏感性:指令微调模型期望特定的提示格式。用错格式会明显降低表现。
幻觉风险:如果指令数据中包含无来源依据的答案,模型就会学会自信地编造。
成本:小模型需要几百到几千美元的 GPU 时间;前沿规模则要多得多。
常见错误
与 RLHF 混淆:它们是不同的步骤。模型可以只做指令微调而不做 RLHF(许多开源模型正是如此),但会缺失偏好对齐。
把原始基础模型当对话模型用:基础模型无法可靠地遵循指令。处理助手类任务时,请始终使用指令微调版或对话版。
在不同模型间混用提示格式:每个指令微调模型都有自己期望的格式。Llama 的不同于 Mistral 的,也不同于 OpenAI 的。
在自有领域上训练而丢失通用能力:在指令微调模型之上做窄域微调,可能抹掉指令遵循能力。请使用 LoRA 并进行广泛评估。
忘记评估:在留出提示上做人工评判或 LLM-as-a-Judge,是验证指令微调是否真正奏效的唯一办法。
Sources: