大语言模型 (LLM) 展现出了惊人的能力: 编写代码、创作文章、回答复杂问题。这些成功很大程度上依赖于少样本学习 (few-shot learning) ——在提示中给模型展示几个例子,让它进行泛化。但少样本提示有其缺点: 你需要准备示例,而且常常必须精心设计提示。
如果我们能简单地用自然语言告诉模型我们想让它做什么,并且它能无需任何示例就做得很好,那会怎么样?这正是《Finetuned Language Models Are Zero-Shot Learners》 (Google Research) 这篇论文提出的核心问题。该论文表明,一个出人意料的简单技巧——指令精调 (instruction tuning) ——能够将大型预训练模型转变为强大的零样本学习者。经过指令精调的模型 FLAN (Finetuned Language Net) ,在众多任务上提升了零样本性能,甚至在大多数评估数据集上以零样本方式击败了 GPT-3 (175B) 。
在这篇文章中,我将详细介绍这个想法、作者如何构建 FLAN、指令精调有效的证据,以及你可以从中汲取的关键经验。
适配语言模型的三种范式
将预训练语言模型应用于下游任务,通常有三种方法。理解它们的区别对于明白指令精调的定位至关重要。
图 1: 适配语言模型的三种主要范式比较。指令精调结合了精调和提示的优点。
- 预训练 → 精调: 获取一个预训练模型,并在一个带标签的任务上进行精调 (如 BERT、T5) 。这种方法对特定任务非常有效,但每个任务都需要一个单独的精调模型和大量的标注数据。
- 提示 (Prompting) : 保持模型权重固定,通过文本提示来引导其行为 (如 GPT-3) 。零样本提示用语言描述任务;少样本提示则额外提供少量示例。少样本通常比零样本效果好得多,但需要精心的提示设计。
- 指令精调 (FLAN) : 在一个模型上,对许多以自然语言指令形式表达的任务进行精调。目标是教会模型遵循指令的技能,使其能泛化到新的、未见过的任务,而无需任何示例。
指令精调本质上是一种混合方法: 它使用标签监督 (像精调) ,但目标格式是自然语言指令 (像提示) 。论文中的实验旨在验证这种混合方法是否能提升零样本泛化能力。
FLAN 的配方——简单而实用
从宏观上看,FLAN 的构建过程包括: (1) 将大量现有数据集转换为指令风格的提示;(2) 在这个混合数据集上精调一个大型的仅解码器 Transformer;(3) 在留出的任务簇上进行评估,以确保测试任务在指令精调期间是真正未见过的。
关键构建模块:
1) 多样化的任务混合
作者整合了 62 个公开的 NLP 数据集,涵盖 12 个任务簇 (自然语言推断、阅读理解、翻译、情感分析、常识推理、结构到文本等) 。多样性至关重要: 接触多种任务类型能教会模型更广泛的指令遵循技能。
图 2: 用于训练 FLAN 的 60 多个数据集的多样化集合,分为 12 个任务簇。蓝色表示语言理解任务;青色表示语言生成任务。
2) 自然语言指令模板
团队为每个数据集编写了多达 10 种不同的指令模板,用自然语言描述任务 (而不仅仅是一个数据集标签) 。例如,同一个自然语言推断 (NLI) 的例子可以用多种方式表述: “前提是否蕴含假设?”;“我们能从 Y 推断出 X 吗?”等等。这种多样性有助于防止模型对单一措辞过拟合,并训练它能响应不同的指令风格。
图 3: 用多种指令模板表达的同一个 NLI 实例。这些模板引入了措辞的多样性,鼓励模型稳健地遵循指令。
3) 大型预训练基础模型和务实的精调
FLAN 是 LaMDA-PT (一个仅解码器 Transformer) 的指令精调版本。作者在一个混合指令数据集上对这个 1370 亿参数的模型进行精调,使用 token-packed 序列、Adafactor 优化器,并进行了仔细的混合以确保没有哪个数据集占主导地位。他们限制了每个数据集的样本数量,并训练了数万步 (相对于预训练而言,这是一次适度的精调) 。
4) 严格的“留出一整个任务簇”评估
为了测试零样本泛化能力,他们在指令精调期间留出了整个任务簇。例如,为了评估 NLI 的零样本性能,他们训练了一个在指令精调过程中从未见过任何 NLI 数据集的 FLAN 检查点。这种保守的划分方式测试了指令精调是否教会了通用的指令遵循能力,而不仅仅是数据集的记忆。
你可以在下面的图 4 中看到整个流程——在许多指令格式化的任务上进行训练,然后在未见过的任务簇上进行评估。
图 4: 指令精调概览: 在多样化的指令格式混合数据上进行精调,然后在完全留出的任务簇上进行评估。条形图突显了在多种未见任务类型上的性能提升。
指令精调有效吗?——核心结果
答案是肯定的。经过指令精调的 FLAN 模型,其零样本性能相比未精调的基础模型有显著提升,并在大多数评估基准上以零样本方式优于 GPT-3 (175B) 。
论文报告了许多任务的结果,但最引人注目的比较体现在以下几类任务上:
- 自然语言推断 (NLI) : 相对于未精调模型和 GPT-3 零样本,有巨大提升。
- 阅读理解与闭卷问答: FLAN 在没有示例的情况下,提升了零样本问答和阅读理解的能力。
- 翻译: 在许多语言对任务上 (特别是翻译成英语) ,FLAN 的零样本性能优于 GPT-3。
下面的散点图总结了在几个代表性数据集上的零样本性能差异。
图 5: 零样本性能比较。FLAN (蓝色星形) 相比未精调的基础模型 (蓝色圆形) 有显著提升,并且在零样本评估中经常击败 GPT-3 (黄色) 。
关于评估,有两点值得注意:
- 对每个数据集,FLAN 报告了基于多达十个指令模板的平均准确率,以减少对提示措辞的敏感性。
- 他们还报告了在开发集上表现最佳的模板性能,作为性能上限 (模拟某些先前工作在小型开发集上调试提示的做法) 。
是什么驱动了性能提升?消融实验与深度分析
作者进行了仔细的消融实验,以揭示指令精调为何有效。其中三个发现尤为重要。
1) 任务多样性至关重要: 任务簇越多 → 零样本性能越好
当他们逐步将更多任务簇加入指令精调的混合数据中时,留出任务簇的性能呈单调上升趋势 (对大多数留出簇如此) 。在精调期间接触更多任务类型,能教会模型更加通用的指令遵循能力,而不是学习少量任务的特有行为。
图 6: 随着指令精调涵盖更多样化的任务簇,在留出任务簇上的零样本性能得到提升。训练任务的多样性是关键因素。
2) 规模至关重要: 指令精调仅在大模型上有效
一个令人惊讶且重要的发现是,指令精调并非在所有模型规模下都有帮助。作者测试了从约 4 亿到 1370 亿参数的模型:
- 小型模型 (≤ 8B) : 在许多指令上进行精调往往会损害留出任务上的性能。推测是小型模型用其有限的容量去记忆精调任务,而无法学到可泛化的指令遵循技能。
- 大型模型 (68B 和 137B) : 指令精调在未见任务上带来了巨大且稳定的性能提升。
图 7: 指令精调的益处随着模型规模的扩大而显现。小模型可能因过载的精调任务而丧失泛化能力;而非常大的模型则可同时吸收任务细节并学习可迁移的指令遵循技能。
这一结果强调了实践要点: 指令精调在应用于足够大的模型时最为有效,这类模型既能学习任务特定模式,又能掌握更高层次的指令遵循行为。
3) 核心在于自然语言指令——而不仅是多任务精调
有人可能怀疑性能提升仅来自多任务精调 (学习做很多任务) ,而非使用文本指令进行训练。作者测试了两种消融设置:
- 无模板精调: 只提供输入-输出对 (没有指令文本) 。
- 数据集名称精调: 在输入前加上简短的数据集/任务标签 (如“[翻译: WMT’14]”) 。
这两种消融设置的性能都显著低于完整的指令精调,后者使用自然语言指令描述精调样本。换句话说,学习从英语指令到期望行为的映射,对于泛化至关重要。
图 8: 使用明确的自然语言指令进行精调至关重要。没有指令或仅有数据集标签的多任务精调,其零样本性能较差。
指令精调与其他方法相辅相成
指令精调不是少样本提示或提示精调的竞争者——而是它们的补充。
少样本 + FLAN
当在推理阶段,用 FLAN 的指令格式添加少样本示例时,各任务簇的性能会进一步提升。在输出格式或空间复杂的情况下 (如结构化生成、翻译) ,少样本示例尤其有帮助。
图 9: 在 FLAN 的指令格式基础上添加少量上下文示例可以提升性能,说明指令精调与少样本提示是互补的。
在 FLAN 基础上进行提示精调
提示精调 (Prompt tuning) 是一种参数高效的方法,在冻结主模型权重的情况下,仅优化一个小的连续“软提示”。FLAN 为提示精调提供了更强的基础: 以 FLAN 作为基础模型,提示精调的性能显著高于在未精调预训练模型上的表现——尤其是在低数据量的情况下。
图 10: 指令精调模型更适合提示精调。当只精调一个小的连续提示时,FLAN 的表现明显优于未精调的基础模型,尤其是在样本很少时。
这表明,指令精调生成的检查点更易于通过文本提示或训练软提示进行引导。
实践要点
以下是论文为从业者和研究人员提供的简要经验:
- 自然语言指令是一种强大的接口。训练 (精调) 模型去响应指令,比无指令的多任务精调更能改善零样本表现。
- 精调任务的多样化有帮助。模型见过的指令格式任务越多样,它对未见任务的泛化能力就越强。
- 规模很重要。指令精调的益处在大规模下才会出现: 大模型既能吸收任务细节,又能学习通用的指令遵循技能。
- 指令精调是少样本提示和提示精调的补充。它打造的基础模型不仅在零样本任务上更好,也更容易通过少量示例或软提示进行适配。
- 指令精调并非万能。与预训练目标高度相似的任务 (如句子续写形式的下一词预测任务) 可能不会受益,因为指令信息相比纯语言建模几乎没有提供额外帮助。
局限性与开放问题
尽管论文方法严谨,也有一些注意事项:
- 精调后的模型 (FLAN 137B) 非常庞大,推理成本高;指令精调最适用于大型共享检查点。
- 评估采用“留出整个任务簇”的方式,虽保守,但仍可能存在与预训练数据的重叠。作者通过数据污染分析减轻此问题。
- 模板创建目前是人工完成的。未来能否高质量、规模化地自动生成多样化的指令模板值得探索。
- 论文中的指令多为简短的单句提示。未来可以研究更长的、多步骤或层次化的指令,类似人类编写的指令。
- 这种能力依赖于规模。理解指令遵循能力如何随模型规模涌现是一个开放的研究方向。
结语
《Finetuned Language Models Are Zero-Shot Learners》展示了一个简单而有效的思想: 通过在大量以指令形式表述的任务上精调,教会模型遵循自然语言指令。对于超大型模型,这可以显著提升零样本性能,使其更易于后续任务定制 (如少样本提示、提示精调) 。
对于工程师和研究人员来说,如果你想要一个可以“用英语告诉它做什么”的通用模型,指令精调是非常有效的方法——前提是模型容量足够大。随着 LLM 规模继续扩展,以及收集到更多样化的指令监督数据,指令精调有望成为构建实用、通用语言系统的基础工具。
如果你想深入研究,该论文提供了大量实验细节、数据集模板和消融结果,这些都是复现和扩展工作的有用起点。