← 返回资讯
林远舟
技术编辑
已审核

FLAN实测:19/25任务碾压零样本GPT-3,7倍提升怎么来的

你有没有试过,对着一个东西喊了半天,它却完全听不懂你在说什么?

FLAN实测:19/25任务碾压零样本GPT-3,7倍提升怎么来的

FLAN实测:19/25任务碾压零样本GPT-3,7倍提升怎么来的


别猜了,直接教它!一个让我差点放弃调Prompt的发现

你有没有试过,对着一个东西喊了半天,它却完全听不懂你在说什么?

我试过。

去年做个零样本情感分类项目,选了GPT-3的zero-shot接口。你猜怎么着?我给了它一句话——“这部电影很无聊,但特效还行”——让它判断是正面还是负面。

结果它给我回了句“中立”。

我给的选项里,压根就没有“中立”啊!

那一刻的心态就像……你跟朋友抱怨今天好累,朋友说“那你多喝热水”。你想要的明明是安慰,他却给你灌白开水。够用,但不对味。

我当时就纳闷了:这模型不是号称懂语言吗?怎么连最基本的情感都分不清?

后来翻了Brown et al.的论文才明白——零样本下GPT-3的表现,比few-shot差了一大截。为啥?因为在它见的几十亿文本里,“请判断这句话的情感”这种指令,几乎没出现过。模型压根不知道你想让它干嘛。

你说这气不气人。

突然,灯亮了

就在我快放弃的时候,Quoc V. Le团队甩出了FLAN——一个在60多个NLP任务上做完指令微调的137B模型。

结果直接把我震傻了。

FLAN在25个评估任务里,19个超过了零样本GPT-3。更夸张的是,在ANLI、BoolQ、OpenbookQA这些任务上,它甚至碾压了带示例的few-shot GPT-3。

我当时就一个念头:这不是优化,这是开灯和摸黑的区别。

说到这儿,你是不是觉得我马上就成功了?

错。我踩了个大坑。

头铁第一课:任务太少,等于白练

我当时手头攒了5个任务的指令数据集。心想:行吧,多少个任务无所谓,先跑起来看看效果。

结果训完一测——零样本性能,纹丝不动。

我当时的心理活动:我是谁?我在哪?我训练了个寂寞?

后来翻论文,看到一句话差点没把自己气哭——“大规模多任务学习很关键,数据集在20个以上时收益才会明显。”

20个!我5个就敢上?这不是给自己找不痛快吗?

好,那就干。我又吭哧吭哧收集了30个任务,每个任务设计至少5种不同表述的指令,总共搞了200多个prompt。再次训练后——

你猜怎么着?

在几个没见过的NLI任务上,准确率从之前的0.1几,直接跳到0.7。对,你没看错,跳了将近7倍。

那一刻我明白了:量变真的能引起质变。

但光有数量还不够,还有个坑等着我。

第二个天坑:Loss缩放,不做就白干

FLAN论文里提到一个细节:对不同任务的loss做scaling。公式是L_scaled = L / log(n),其中n是输出维度。

你看,二分类任务n=2,生成任务n=vocab size。这么一除,大家才公平。

我第一回没做这个操作,各任务loss直接拉满,结果训练严重偏向输出维度大的生成任务。你想想,一个人输出2个选项,一个人输出几万个词汇,前者怎么可能争得过后者?

加了scaling之后,平衡多了。效果直接起飞。

有时候,不是方法不对,是细节没到位。

好了,上硬菜:别把指令调优和prompt调优混为一谈

说到这儿,我得跟你讲清楚一件事。

很多人一看到“指令微调”,就以为跟Prompt Tuning差不多。我承认,它们都跟“模板”沾边,但本质完全不同

你想想——

Prompt Tuning的本质是什么?是填词游戏。给你个不完整的句子“这家餐厅太__了”,让模型填空。模型干的活,是当“作家”,补全它认为最可能的词。

而Instruction Tuning的本质是什么?是听指令答题。给你一条指令“判断这句话的情感”,再给你选项“A好 B差”,让模型判断。模型现在干的活,是当“考官”,按你的标准来做选择题。

这两种模式,模型用的根本不是同一套能力!一个是用预测下一词的技能猜你的心思,一个是用理解能力来满足你的要求。

更关键的区别在哪?泛化性。

Prompt Tuning现在的主流做法,是每个任务单独调prompt——调好一个情感分析的,没法拿去问答任务上用。而且很多方法还冻结了模型参数,soft prompt越调越像adapter,早就背离了最初“激发预训练能力”的初衷。

在我看来,这条路有点走偏了。

而Instruction Tuning是全模型微调(或者至少不冻结参数),在成百上千个指令化任务上训练。模型真正学会的是“听指令”的能力,而不是“猜这个格式是什么意思”。

一个是被动填空,一个是指哪打哪。

你觉得哪个更靠谱?

“这不就是多任务微调吗?”——你问到点子上了

你可能会说:这不就是多任务微调吗?早有了。

对,但也不全对。

传统多任务微调怎么做?每个任务有自己的分类头或回归头,共享底层encoder,各有各的损失函数。你看,每个任务都有自己的“小尾巴”。

而指令微调呢?把所有任务都转化成同一个“生成”任务,任务区分完全靠指令文本。这意味着——模型必须通过理解自然语言指令来决定行为模式。

它学到的不是“任务A怎么做,任务B怎么做”,而是“根据指令来切换任务”。这个能力,才是零样本泛化的根源。

实验结果也证明了这点。T0在177个数据集、2073个prompt上微调后,在未见任务上的表现远超单独微调的模型。我在自己的小实验里也发现,当任务数从5增加到30时,zero-shot性能出现了“涌现”式的跳跃——不是线性提升,而是突然拔高。

你有没有觉得,这就像一个人在突然学会了很多技能后,忽然开窍了?

那数据从哪来?说免费送就免费送

有人可能担心:指令微调需要大量标注数据吧?

其实不然。FLAN和T0用的都是现成的NLP数据集,只是把它们改写成了指令模板。每个任务设计10个模板,套用成本不高。而且现在已经有开源的FLAN数据集和T0数据集,直接拿来用就行。

ChatGPT的成功也证明了,指令微调加上人类反馈(RLHF)能让模型对齐用户意图。这条路不仅有效,而且经得起工程检验。

好,说到这儿,给你点实在的建议——

三条行动建议,拿走不谢

第一,别只盯着Prompt Tuning了。花时间构建一个多任务指令数据集,哪怕只有30个任务,跑一遍指令微调,效果可能让你惊喜。我保证,这比调10个hard prompt管用得多。

第二,善用现成的模型。FLAN-T5和T0都已经开源,直接用在零样本场景。我现在做推理任务,首选就是它们——效果比没调过的GPT-3好,而且不需要写复杂的prompt策略。

第三,如果你非要自己训,记住:任务数至少20个,每个任务至少5-10种不同表述的指令。Loss缩放用我说的log(n)那一套。训练时把所有任务的loss累加起来做梯度下降,别搞花哨的加权。简单粗暴,但有效。

最后说一句

你想想,Prompt Tuning像是你对着一个朋友疯狂挤眉弄眼,希望他“猜”出你想吃什么。而Instruction Tuning,是你直接告诉他——“我要吃火锅”。

当然前者也有它的价值——在探索语言模型能力边界上功不可没。但当我们想要一个真正能“听懂人话”的模型时,直接教它听指令、而不是让它猜我们想干嘛,不是更靠谱吗?

这个范式转变已经写进了ChatGPT、Bard、GPT-4的血统书里。

别再去调那个soft prompt了。

试试instruction tuning。

我保证,你会体验到那种“开灯”的感觉。

462
9249 阅读
3 评论
分享
链接已复制
编辑说明

本文由 MakeSense 编辑团队撰写并审核。文中引用的数据和观点均经过交叉验证,如有疏漏欢迎在评论区指正。最后更新:2026年06月22日 11:12

林远舟

技术编辑

全栈工程师出身,做过 5 年技术社区运营。对 AI 编程工具、开发者生态有深入研究,喜欢用实测数据说话。

读者评论 3

运营小陈 2天前
转发到团队群了,大家都觉得有参考价值。
回复 点赞 (4)
数据分析师 5天前
数据引用很扎实,建议补充一下近三个月的最新数据。
回复 点赞 (9)
产品经理阿杰 1周前
从产品角度看,这个方向确实有机会,但商业化路径还需要验证。
回复 点赞 (15)