Instruction Tuning
指令微调会使用指令-响应对对预训练语言模型进行微调,使其遵循请求。内容涵盖 FLAN、InstructGPT、数据和 VLM。
指令微调是在预训练的大型语言模型(LLM)上,使用指令与期望回复组成的样本对进行微调,使模型能够遵循用日常语言书写的请求。预训练模型只会续写文本:OpenAI 要求模型“用几句话向一个 6 岁孩子解释登月”,GPT-3 却续写了有关引力和相对论的类似请求,而经过指令微调的 InstructGPT则给出了相应解释。Google 研究人员在 2021 年的 FLAN 论文中介绍了这种方法,他们使用改写成指令的 60 多个自然语言处理(NLP)数据集,对一个拥有 1,370 亿个参数的模型进行了微调;该模型在 25 项从未见过的任务中,有 20 项的表现超过了 1,750 亿参数 GPT-3 的零样本表现。在聊天模型流程中,同一阶段通常称为监督微调(SFT),这两个术语可以互换使用。
指令微调的工作原理#
每个样本都会通过模板格式化,以标记指令结束和回复开始的位置,例如当前模型使用的聊天模板,或 Stanford 的 Alpaca 使用的“### Instruction”和“### Response”标头。训练使用与预训练相同的下一个 token 损失函数,但只有回复中的token会计入损失,因此模型学到的是如何生成答案,而不是预测指令本身。以下是一个使用 OpenAI GPT-2 的训练样本示例:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("gpt2")
model = AutoModelForCausalLM.from_pretrained("gpt2")
optimizer = torch.optim.AdamW(model.parameters(), lr=5e-5)
# One instruction-response pair in the Alpaca prompt format
prompt_ids = tokenizer("### Instruction:\nName three animals that can fly.\n\n### Response:\n").input_ids
response_ids = tokenizer("Bats, eagles, and bees." + tokenizer.eos_token).input_ids
input_ids = torch.tensor([prompt_ids + response_ids])
# Label -100 drops the instruction from the loss, so the model learns only to respond
labels = torch.tensor([[-100] * len(prompt_ids) + response_ids])
for step in range(3):
loss = model(input_ids=input_ids, labels=labels).loss
loss.backward()
optimizer.step()
optimizer.zero_grad()
print(f"step {step}: loss {loss.item():.2f}")只有回复中的 10 个 token 会计入损失;在这个单一样本上更新三次后,损失从 4.45 降到了 1.49。指令微调会在数千到数百万个不同的指令-回复样本对上执行相同的更新,使模型学会普遍采用回答问题的方式,而不是只学会一个答案。
指令微调通常是后训练的第一阶段,数据可以来自多个来源:
指令数据集#
Google 的 Flan 集合在 2022 年扩展到 1,836 项任务;在该集合上进行指令微调,PaLM(5400 亿参数)的平均表现提升了 9.4%。OpenAI 的 InstructGPT 将标注人员撰写的示范与基于人类反馈的强化学习(RLHF)结合起来,人们对其 13 亿参数模型输出的偏好高于对 1,750 亿参数 GPT-3 输出的偏好。Stanford 的 Alpaca 于 2023 年 3 月发布,它使用 OpenAI 模型通过 Self-Instruct 方法生成的 52,000 个样本,以不到 600 美元的成本对 Meta 的 LLaMA 7B 进行了微调;这是将合成数据用作指令数据来源的早期示例。Meta 的 LIMA 展示了小型数据集的潜力:它只使用 1,000 个精心挑选的样本对 650 亿参数的 LLaMA 进行微调,作者得出结论,模型几乎在预训练期间就学会了全部知识,而指令微调教会模型的是答案的格式和风格。随后,直接偏好优化(DPO)等方法会利用偏好数据进一步优化微调后的模型。
视觉指令微调#
视觉语言模型(VLM)也以相同方式学习遵循有关图像的指令。2023 年 4 月发布的 LLaVA,将纯文本 GPT-4与 COCO图像的标题和边界框结合起来,让 GPT-4 围绕这些图像生成了 158,000 条对话、详细描述和复杂推理示例;随后,LLaVA 使用这些数据对一个连接 CLIP图像编码器与语言模型的模型进行微调,这种方法称为视觉指令微调。经过指令微调的 VLM 可以用自然语言回答有关照片的开放式请求;Ultralytics Platform Agents中的 LLM 模块就依赖这种能力:它会将图像、上游 YOLO26的结果和书面提示词发送给选定的视觉语言模型。
指令微调与相关术语#
提示微调会学习少量软提示向量,并保持模型冻结;提示工程只会改变输入文本,而指令微调会更新模型权重。领域微调会使模型适应医学或法律等领域,但不一定会教会模型遵循请求。指令微调也可以通过参数高效微调(PEFT)执行:QLoRA会在 4 位量化模型上训练 LoRA适配器,其作者曾在单个 48 GB GPU 上对一个 650 亿参数的模型进行指令微调。










