精读笔记 · FLAN:指令微调让语言模型获得零样本泛化能力


论文基本信息

项目 内容
论文标题 Finetuned Language Models Are Zero-Shot Learners
arXiv 编号 2109.01652
作者机构 Google Research
发表会议 ICLR 2022
核心人物 Jason Wei, Maarten Bosma, Vincent Zhao, Kelvin Guu, Adams Wei Yu, Brian Lester, Nan Du, Andrew Dai, Quoc Le
提出模型 FLAN(Finetuned LANguage model)
基础模型 LaMDA-PT,137B 参数,decoder-only Transformer

阅读地图

本文结构如下,精读将按此顺序展开:

Abstract          ← 一句话:指令微调 → 零样本能力大幅提升
Introduction      ← 为什么现有方法不够好?FLAN 的思路是什么?
Section 2: 方法   ← ★★★ 精读重点:指令微调怎么做?任务聚类?留出评测?
Section 3: 实验   ← FLAN vs GPT-3 的关键数字对比
Section 4-5: 消融 ← 任务数量 & 模型规模的影响(两个关键发现)
Section 6: 相关工作 ← 一句话带过
附录              ← 一句话带过

核心直觉(先读这里,后面全都有底气)

类比:刷题备考 vs. 临场应付

想象一个学生:
- GPT-3 的方式:学了大量文本知识,考试时临时看几道例题(few-shot)才能做新题型;如果不给例题(zero-shot),表现大幅下滑。
- FLAN 的方式:不仅学了知识,还专门练习了"读懂题目要求、按指令作答"这个能力——练了翻译、问答、摘要、情感分析、逻辑推理……数十种题型,每种都用自然语言写出题目要求(指令)来做训练。练完之后,遇到从没见过的新题型,因为已经学会了"理解并执行指令"这个通用技能,不需要看例题也能直接作答。

这就是指令微调(instruction tuning)的核心:训练模型听懂并执行自然语言指令,从而获得零样本泛化能力。


Abstract · 摘要精译

原文核心句

"We explore a simple method to improve the zero-shot learning abilities of language models. We show that instruction tuning—finetuning language models on a collection of datasets described via instructions—substantially improves zero-shot performance on unseen tasks."

"FLAN...surpasses zero-shot 175B GPT-3 on 20 of 25 datasets we evaluate, and even outperforms few-shot GPT-3 by a significant margin on several datasets including ANLI, RTE, BoolQ, AI2-ARC, OpenbookQA, and StoryCloze."

翻译

我们探索了一种提升语言模型零样本学习能力的简单方法。我们证明:指令微调(instruction tuning)——即在一系列用自然语言指令描述的数据集上对语言模型进行微调——可以显著提升模型在未见任务上的零样本性能。

实验中,我们的模型 FLAN(基于 137B 参数的 LaMDA-PT 模型)在我们评测的 25 个数据集中的 20 个上超越了零样本的 175B GPT-3,甚至在包括 ANLI、RTE、BoolQ、AI2-ARC、OpenbookQA 和 StoryCloze 在内的多个数据集上,以显著优势超过了少样本(few-shot)的 GPT-3。

新手讲解

术语解释:

这两句话的意思是:我们证明了一件事——如果训练时把几十种任务都改写成"指令格式"来微调,模型就能在没见过的新任务上直接按指令完成,而且比 GPT-3(比 FLAN 还大、参数量 175B vs 137B)的零样本表现更好,有时甚至超过给了例题的 GPT-3。


Introduction · 引言精译

第一段:问题背景

原文核心句:

"Language models at scale, such as GPT-3, have been shown to perform few-shot learning remarkably well. They are less successful at zero-shot learning, however, where no examples are provided."

翻译:
大规模语言模型(如 GPT-3)在少样本学习上表现极为出色。然而,在零样本学习场景下——即不提供任何示例的情况下——这些模型的表现要差得多。

新手讲解:
GPT-3 厉害在哪里?它能"看几个例题就举一反三"(few-shot)。但如果你不给它任何例子(zero-shot),它的表现会明显下降。为什么?因为不同任务的提示格式和预训练时见过的文本格式不一样,模型不确定"你让我干什么"。FLAN 要解决的正是这个问题。


第二段:核心洞察

原文核心句:

"Our key insight is that NLP tasks can be described via natural language instructions, such as 'Is this movie review positive or negative?' or 'Translate this sentence into French.' Using supervision to teach an LM to perform tasks described via instructions, we hypothesize that the LM will learn to follow instructions and do so even for unseen tasks."

翻译:
我们的核心洞察是:NLP 任务可以通过自然语言指令来描述,比如"这条电影评论是正面的还是负面的?"或者"把这句话翻译成法语。"通过监督学习来训练语言模型执行指令描述的任务,我们假设模型将学会遵循指令——即使面对训练时从未见过的任务也是如此。

新手讲解:
这是整篇论文最关键的那一句话。作者的逻辑链如下:

观察:NLP 任务可以统一写成"自然语言指令"的形式
      ↓
假设:如果让模型对几十种这样的指令进行监督学习
      ↓
预测:模型会学到"理解并执行指令"这个通用能力
      ↓
结论:遇到训练时没见过的新任务,只要能写成指令,模型也能做

类比:一个学生练了"阅读理解、数学应用题、英语翻译、作文……"等几十种题型,每种都先读题目要求再作答。经过这种训练,遇到新题型时,他已经养成了"仔细读题目要求、按要求完成"的习惯,不需要老师示范就能上手。


第三段:区别于以往工作

原文核心句:

"The key difference between instruction tuning and multi-task learning is that the goal is to achieve good performance on held-out tasks rather than on the training tasks themselves."

翻译:
指令微调与多任务学习的关键区别在于:指令微调的目标是在留出任务(held-out tasks,即训练时没见过的任务)上取得良好表现,而不是在训练任务本身上表现好。

新手讲解:

方法 训练目标 测试目标
普通微调(fine-tune) 单一任务(如情感分析) 同一任务
多任务学习(multi-task learning) 多个任务的组合 这些任务本身
指令微调(instruction tuning) 多个任务(写成指令形式) 从未见过的新任务

指令微调的雄心比多任务学习更大:它不满足于在训练过的任务上表现好,它要求模型在完全陌生的任务上直接跟着指令走。


Section 2 · 方法精译(FLAN 的完整技术细节)

这一章节是论文最核心的部分,将逐段全部精读。

2.1 整体思路概述

原文核心句:

"FLAN is instruction tuning on 62 text datasets expressed via natural language instructions. These datasets are grouped into twelve task clusters. To evaluate FLAN's zero-shot performance on unseen task types, we held out task clusters during finetuning."

翻译:
FLAN 是在 62 个以自然语言指令形式表达的文本数据集上进行的指令微调。这些数据集被划分为 12 个任务集群(task clusters)。为了评测 FLAN 在未见任务类型上的零样本性能,我们在微调阶段留出某些任务集群不参与训练。

新手讲解:


2.2 任务与指令模板(Tasks and Templates)

原文核心句:

"For each dataset, we manually compose ten unique templates that use natural language instructions to describe the task. To increase diversity, we also include up to three templates that 'turned the task around' (e.g., for sentiment classification, we include templates asking to generate a movie review given a sentiment label)."

翻译:
对于每个数据集,我们手工编写了 10 个独特的模板,用自然语言指令来描述任务。为了增加多样性,每个数据集我们还额外加入最多 3 个"反转任务"的模板(例如,对于情感分类任务,我们加入了"给定情感标签,生成一条电影评论"这样的模板)。

新手讲解:

为什么要 10 个模板?

同一个任务可以用很多种不同的方式问出来。以情感分类为例:

模板 1: "这段影评表达的是正面还是负面情感?{review}"
模板 2: "判断以下评论的情绪倾向:{review}  A. 积极  B. 消极"
模板 3: "Read the following review and determine if the sentiment is positive or negative: {review}"
模板 4: "{review}  这条评论是好评还是差评?"
... 共 10 种

这样做的目的:让模型见过各种"问法",更不容易对特定措辞过拟合,泛化能力更强。

什么是"反转任务(turned around)"?

原始任务(分类):输入"这部电影太棒了!" → 输出"正面"
反转任务(生成):输入"请生成一条正面的电影评论" → 输出"这部电影太棒了!"

反转任务的意义:两个方向都练习,让模型对任务本质理解更深,也让训练数据更多样。


2.3 十二个任务集群(The 12 Task Clusters)

原文内容综合:
62 个数据集被组织成以下 12 个任务集群:

# 集群名称(英文) 中文说明 示例任务类型
1 Natural Language Inference (NLI) 自然语言推理 判断"假设"是否能由"前提"推出
2 Reading Comprehension 阅读理解 根据文章回答问题(BoolQ, MultiRC)
3 Closed-Book QA 闭卷问答 不提供文章,直接回答知识性问题(TriviaQA, ARC)
4 Translation 翻译 英↔法、英↔德、英↔罗马尼亚语
5 Commonsense Reasoning 常识推理 需要日常常识的推理(HellaSwag, PiQA)
6 Coreference Resolution 共指消解 判断两个名词短语是否指同一实体
7 Paraphrase Detection 释义检测 判断两个句子是否意思相同
8 Sentiment Analysis 情感分析 判断文本情感倾向(如影评正负面)
9 Struct-to-Text 结构化数据转文本 把表格/图谱数据转换成自然语言描述
10-12 其他集群 包含其他语言理解任务 见论文附录 G

新手讲解:
12 个集群,覆盖了 NLP 领域最主流的任务类型。这就像一个"全科学霸"备考计划:语文(翻译、摘要)、数学(逻辑推理、NLI)、语法(共指消解、释义)……全都练到。这么多种不同的任务类型,正是 FLAN 泛化能力强的基础。


2.4 留出任务集群的评测设计(Held-Out Evaluation)

原文核心句:

"We only consider dataset D unseen at evaluation time if no datasets from any task clusters that D belongs to were seen during instruction tuning."

"For each evaluation, we instruction tune a separate model where we hold out the cluster containing the evaluation dataset."

翻译:
我们只在以下情况下认为数据集 D 是"评测时未见过的":在指令微调阶段,D 所属的所有任务集群中没有任何数据集被包含在训练中。

对于每次评测,我们单独训练一个模型——该模型在训练时去掉了包含目标评测数据集的那个集群。

新手讲解:

这个设计的严谨之处特别值得关注:

错误的做法(会导致数据泄露):

训练集:62 个数据集中的 60 个(去掉 RTE 和 MNLI 两个数据集)
测试:在 NLI 任务上测试
问题:训练时还包含了其他 NLI 数据集!模型已经见过 NLI 类型的任务。

FLAN 的正确做法:

想测 NLI 能力?
→ 训练时把整个 NLI 集群全部去掉(包括 RTE, MNLI, ANLI, CB, SNLI 全部)
→ 只用剩下 11 个集群训练
→ 测试时才拿 NLI 任务出来

这样才是真正的零样本测试——模型在训练时完全没见过这类任务的任何一个数据集。

一个比喻: 就像高考不能练高考题,必须练了语文、数学、英语、物理等各科,然后去考一套全新组合的综合题,考的是真实的迁移能力。


2.5 训练细节(Training Details)

原文核心句:

"We use LaMDA-PT, a dense left-to-right, decoder-only transformer language model of 137B parameters, pretrained on 2.49T BPE tokens from a dataset that includes web documents, dialog data, and Wikipedia."

"We finetune for 30k gradient steps with a batch size of 8,192 tokens using the Adafactor Optimizer with a learning rate of 3e-5."

翻译:
我们使用 LaMDA-PT 作为基础模型——一个有 137B 参数的稠密、从左到右、仅解码器(decoder-only)的 Transformer 语言模型,在包含网页文档、对话数据和 Wikipedia 的 2.49T BPE token 数据集上进行过预训练。

我们用 Adafactor 优化器微调了 30,000 个梯度步,批量大小为 8,192 个 token,学习率为 3e-5。

新手讲解:

要素 意义
基础模型 LaMDA-PT 137B Google 内部的大型语言模型(注意:不是 T5,是更大的模型)
模型架构 Decoder-only Transformer 和 GPT-3 同类架构,自回归生成
微调步数 30,000 步 相比预训练(数十亿步),微调成本极低
数据混合 按比例采样,每个数据集最多 30K 条 防止某个大数据集主导训练

重要点: FLAN 用的是 137B 参数的模型,而 GPT-3 是 175B 参数。FLAN 参数更少,但因为有了指令微调,零样本性能更强——说明指令微调本身的价值,而不仅仅是靠规模取胜。


2.6 指令微调 vs. 普通微调:关键区别总结

新手讲解(重点):

对比维度 普通微调(Standard Fine-tuning) 指令微调(Instruction Tuning)
训练数据格式 原始输入-输出对(input, output) (指令 + 输入, 输出)
训练任务数量 通常 1 个任务 62 个数据集,12 种任务类型
训练目标 在该任务上表现好 从未见过的新任务上也能用指令完成
测试时是否给例子 不需要(任务固定) 不给(zero-shot,只靠指令)
核心能力 单任务专精 理解并执行自然语言指令

关键在于:格式的统一(全部改写成指令形式)和目标的转变(从"在训练任务表现好"转为"在新任务也能泛化")。


Section 3 · 主要实验结果精译

3.1 FLAN vs GPT-3 零样本性能对比

原文核心句:

"FLAN surpasses zero-shot 175B GPT-3 on 20 of 25 datasets we evaluate, and even outperforms few-shot GPT-3 by a large margin on ANLI, RTE, BoolQ, AI2-ARC, OpenbookQA, and StoryCloze."

翻译:
在我们评测的 25 个数据集中,FLAN 在 20 个上超过了零样本的 175B GPT-3;在 ANLI、RTE、BoolQ、AI2-ARC、OpenbookQA、StoryCloze 等数据集上,FLAN 甚至以较大优势超过了少样本的 GPT-3

关键数字(部分):

数据集 任务类型 FLAN(137B) GPT-3 Zero-Shot(175B)
ANLI R1 NLI 47.7% 36.8%
ANLI R3 NLI 47.4% 36.3%
RTE NLI 78.3% 79.9%
BoolQ 阅读理解 80.2% 60.5%(GPT-3 few-shot 77.5%,FLAN 超过)
MultiRC 阅读理解 74.5% 69.2%
HellaSwag 常识推理 56.4% 59.4%
NQ 闭卷问答 18.6% 27.2%

新手讲解:

20/25 超过 GPT-3 zero-shot 是非常强的结果,因为:
1. FLAN(137B)比 GPT-3(175B)参数更少
2. GPT-3 是当时最强的少样本学习模型,FLAN 在零样本下就赢了它
3. 在部分任务(NLI、BoolQ 等)上,FLAN 甚至超过了给了例题的 GPT-3(few-shot)

FLAN 哪里输了?
在 5 个数据集上 FLAN 不如 GPT-3 zero-shot,主要是常识推理(HellaSwag, PiQA)和开放式问答(NQ, DROP)。这些任务的特点是:可以自然地用语言模型完形填空的方式来做(例如 HellaSwag 直接比较哪个结局的语言概率更高),不太需要明确的指令。这恰好说明指令微调对"需要理解指令才能完成"的任务最有效。


3.2 FLAN 超过 GPT-3 少样本的任务

原文核心句:

"FLAN even outperforms few-shot GPT-3 by a large margin on several datasets including ANLI, RTE, BoolQ, AI2-ARC, OpenbookQA, and StoryCloze."

翻译:
FLAN 在 ANLI、RTE、BoolQ、AI2-ARC、OpenbookQA 和 StoryCloze 等数据集上,甚至以较大优势超过了少样本的 GPT-3。

新手讲解:
这是最令人惊讶的结果。Few-shot GPT-3 可以在提示词中给 32 个示例来"现学现用",而 FLAN 完全不给例子——只给一条指令。在这些任务上 FLAN zero-shot > GPT-3 few-shot,说明指令微调带来的泛化能力比临时给例子更有效(至少在这些任务上)。


Section 4 · 消融实验:任务数量的影响

4.1 更多任务种类 = 更好的泛化

原文核心句:

"We see that performance does not appear to saturate as more clusters are added, suggesting that adding additional task clusters could potentially further improve performance."

翻译:
我们观察到:随着加入更多任务集群,性能不断提升,没有出现饱和迹象,这表明增加更多任务集群有可能进一步提升性能。

实验设计:
保持模型不变(137B),逐步增加训练时使用的任务集群数量(从 1 个到 7 个),测试在留出集群上的零样本性能。

新手讲解:

这个消融实验的结论非常直观:

训练用 1 个集群 → 泛化性能最低
训练用 2 个集群 → 性能提升
训练用 3 个集群 → 继续提升
...
训练用 7 个集群 → 性能最高,且还没饱和

这验证了一个关键推论:模型不是在死记硬背训练过的任务,而是真的在学习一种通用的"理解并执行指令"能力——任务种类越多,这种能力就越强。

类比:刷了语文、数学、英语、物理、化学……刷的科目越多,综合应试能力越强,不是因为题目重合,而是越来越锻炼了"审题+解题"的通用思维。


Section 5 · 消融实验:模型规模的影响

5.1 大模型才能从指令微调中受益

原文核心句:

"Instruction tuning actually hurts performance for 422M, 2B, and 8B models. Only for models 68B and 137B does instruction tuning help."

翻译:
对于 422M、2B 和 8B 参数的模型,指令微调实际上损害了性能。只有对于 68B 和 137B 参数的模型,指令微调才有帮助。

实验设计:
在相同的指令微调流程(相同数据、相同设置)下,测试 5 种不同规模的 LaMDA-PT 模型:
- 422M → 变差
- 2B → 变差
- 8B → 变差
- 68B → 变好
- 137B → 最好

新手讲解:

这是论文最反直觉、也最重要的发现之一。为什么小模型反而变差?

作者的假设(从论文推断):

小模型(<8B):
  模型容量有限
  → 多任务微调时,把所有容量都用来"记忆"训练任务的格式
  → 没有剩余容量来学习"泛化到新任务"的能力
  → 遇到新任务时反而更差了

大模型(≥68B):
  模型容量充足
  → 学完各种任务后,还有余力形成对"遵循指令"的抽象理解
  → 遇到新任务,能用这个抽象能力直接作答

实际意义: 这个发现有重要的实践含义——指令微调不是万能药,必须配合足够大的基础模型。把指令微调用在太小的模型上,可能适得其反。(后来的 InstructGPT 等工作也验证了规模的重要性。)

类比:一个词汇量只有 500 个词的初学者,你让他"用不同方式回答 60 种语言题型",他反而更混乱,因为容量不够;而词汇量丰富、语言基础扎实的人,练了多种题型后,才能真正培养出"举一反三"的能力。


与 InstructGPT 的关系

两者的联系与区别:

对比维度 FLAN(本文) InstructGPT(OpenAI, 2022)
核心思想 都强调"让模型听懂并执行指令" 都强调"让模型听懂并执行指令"
训练方式 纯监督学习:用指令格式的数据微调 监督微调 + RLHF:先 SFT,再用人类偏好做强化学习
对齐目标 主要关注任务泛化能力(能做新任务) 更关注安全性和有帮助性(无害、诚实、有用)
发表时间 2021 年 9 月(arXiv) 2022 年 3 月(arXiv)
影响 证明指令微调可以大幅提升零样本泛化 成为 ChatGPT 的直接技术前身

简单总结:
- FLAN 证明了"指令微调"这个方向的价值:只用监督学习,不用强化学习,就能大幅提升模型的零样本泛化能力
- InstructGPT 在 FLAN 的基础上更进一步:加入了 RLHF(Reinforcement Learning from Human Feedback),让模型不仅能执行指令,而且能给出更符合人类期望的回答(更有帮助、更安全)。
- 两者都是"对齐(alignment)"研究的重要里程碑——让模型的行为更符合人类意图。FLAN 是偏纯技术路线(监督),InstructGPT 是偏价值对齐路线(RLHF)。


Section 6 · 相关工作(一句话带过)

论文将 FLAN 与多任务学习、T5/FLAN-T5 前身(Sanh et al. 2021 的 T0 工作)、Zero-Shot 提示方法(如 GPT 系列)、指令生成方法等进行了对比,论证 FLAN 的主要贡献在于系统性地验证了"在更大规模语言模型上应用指令微调带来质的提升"这一发现。


附录(一句话带过)

附录包含:各数据集的完整指令模板示例(附录 A-F)、12 个任务集群的完整列表(附录 G)、所有基准测试的完整数字结果(附录 H),是复现实验的参考材料,不影响对核心方法的理解。


核心贡献总结

三个关键发现(必背)

发现 1:指令微调显著提升零样本能力

137B 的 FLAN 在 25 个任务中的 20 个上超越了 175B 的 GPT-3 zero-shot,在部分任务上甚至超越 GPT-3 few-shot。

发现 2:任务种类越多,泛化越好

随着训练时加入的任务集群数量增加,在留出任务上的零样本性能单调提升,且没有出现饱和迹象。

发现 3:模型必须足够大才能受益

8B 及以下参数的模型在指令微调后性能反而下降;68B 及以上才能从中受益。

FLAN 的历史地位

FLAN 是 NLP 发展史上的一个重要节点:
- 它系统性地验证了"用自然语言指令统一所有 NLP 任务"的可行性
- 它确立了"指令微调"作为一种独立的、重要的训练范式
- 它为后续的 InstructGPT、ChatGPT、Claude 等以"遵循指令"为核心能力的大模型奠定了概念基础
- FLAN-T5 等后续工作将这一方法推广到更多场景,成为实践中广泛使用的基础模型

一句话记住 FLAN

把几十种 NLP 任务都改写成"自然语言指令"的形式,拿这些训练大模型——模型学会了"听懂并执行指令"这个通用能力,遇到训练时没见过的新任务也能直接按指令完成(零样本)。


精读覆盖范围:Abstract(全部)、Introduction(核心段落)、Section 2 方法(全部段落)、Section 3 主要实验(关键结果)、Section 4-5 消融实验(任务数量与模型规模)、相关工作与附录(各一句话带过)。