大模型指令微调(Instruction Tuning)演进与主流方案对比
Google: Flan
论文: 2021.9 Finetuned Language Models are zero-shot learners
模型: 137B LaMDA-PT
核心观点: 抢占先机,Google 第一个提出指令微调可以解锁大模型指令理解能力。
谷歌的 Flan 是第一个提出指令微调范式的,目的和标题相同,使用指令微调来提升模型的 zero-shot 能力。论文使用的是 137B 的 LaMDA-PT,一个在 Web、代码、对话、Wiki 上预训练的单向语言模型。
指令集
在构建数据集上,谷歌比较传统。直接把 TensorFlow Dataset 上 12 个大类,总共 62 个 NLP 任务的数据集,通过模板转换成了指令数据集。

为了提高指令数据集的多样性,每个任务会设计 10 个模板,所以总共是 620 个指令,并且会有最多 3 个任务改造模板。所谓的任务改造就是把例如影评的情感分类任务,转化成一个影评生成任务,更充分的发挥已有标注数据构建更丰富的指令数据集。
为了保证数据集的多样性和均衡性,每个数据集的训练样本限制在 3 万,并且考虑模型对一个任务的适应速度取决于任务数据集大小,因此按使用数据集样本大小占比按比例采样混合训练。
效果
效果上 137B 的指令微调模型大幅超越 GPT3 few-shot,尤其是在 NLI 任务上,考虑 NLI 的句子对基本不会在预训练文本中自然作为连续上下句出现。而指令微调中设计了更自然地模板带来了大幅的效果提升。

除了以上存在明显效果提升的任务,在一些任务本身就和指令相似的任务,例如常识推理和指代消歧任务,指令微调并不能带来显著的效果提升。
作者做了更多的消融实验,验证指令微调中以下几个变量:
- 模型规模: 作者进一步论证了指令微调带来的效果提升存在明显的大模型效应,只有当模型规模在百亿左右,指令微调才会在样本外任务上带来提升。作者怀疑当模型规模较小时,在较多任务上微调可能会占用模型本就不多的参数空间,造成预训练时的通用知识遗忘,降低在新任务上的效果。

-
多任务影响: 考虑指令微调是在多任务上进行,作者希望剔除指令微调中多任务微调带来的影响。因此尝试进行多任务非指令微调(使用数据集名称代替指令),效果上指令微调显著更优,说明指令模板的设计确实存在提升模型指令理解力的效果。
-
few-shot: 除了 zero-shot,Flan 同时验证了 few-shot 的效果。整体上 few-shot 的效果优于 zero-shot。说明指令微调对 few-shot 也有效果提升。
-
结合 Prompt-tuning: 既然指令微调提升模型对指令的理解能力,作者认为应该对进一步使用 soft-prompt 也应该有提升。因此进一步使用了 prompt-tuning 对下游任务进行微调,不出意外 Flan 比预训练 LaMDA 的效果有显著的提升。














