一千七百五十亿参数GPT-3,不微调只靠上下文完成新任务

Language Models are Few-Shot Learners

Tom B. Brown, Benjamin Mann, Nick Ryder, Melanie Subbiah, Jared Kaplan, Prafulla Dhariwal, Arvind Neelakantan, Pranav Shyam, Girish Sastry, Amanda Askell, Sandhini Agarwal, Ariel Herbert-Voss, Gretchen Krueger, Tom Henighan, Rewon Child, Aditya Ramesh, Daniel M. Ziegler, Jeffrey Wu, Clemens Winter, Christopher Hesse, Mark Chen, Eric Sigler, Mateusz Litwin, Scott Gray, Benjamin Chess, Jack Clark, Christopher Berner, Sam McCandlish, Alec Radford, Ilya Sutskever, Dario Amodei

cs.CL

2020-05-29

OpenAI把自回归语言模型扩到一千七百五十亿参数,新任务只写进提示、不更新权重。few-shot在SuperGLUE上拿到71.8,超过微调BERT-Large的69.0。

这篇在解决什么

2018 到 2020 年,NLP 的主流路径是预训练再微调。BERT、T5 已经把架构做成任务无关,但每个新任务仍要几千到几十万条标注。收集贵,微调还容易拟合窄分布里的虚假相关。人学一项语言任务通常只要一句指令,或看几个例子。

GPT-2 试过 in-context learning:把说明和示范写进上下文、不更新权重。Natural Questions 只有 4%,离能用还很远。这篇把同一套自回归 Transformer 扩到 1750 亿参数,系统比较 zero-shot、one-shot、few-shot,问规模本身能不能把「看几个例子就上手」做成稳定能力。

方法

骨架沿用 GPT-2:pre-norm、可逆 BPE、上下文 2048 token。改动是层间交替使用稠密注意力和局部带状稀疏注意力,接近 Sparse Transformer,用来把宽度和深度都铺开。一共训 8 档,从 1.25 亿到 1750 亿。最大一档 96 层、隐藏维 12288、96 个注意力头,batch 约 320 万 token。所有档都吃 3000 亿 token。

数据以过滤后的 Common Crawl 为主,约 4100 亿 token,训练混合里占 60%。其余是 WebText2、两套书籍和英文维基。高质量来源被故意多采样:维基大约看 3.4 遍,Common Crawl 不到一遍。做了文档级模糊去重,也试图抠掉下游测试集,过滤有 bug,部分重叠没清干净。

评测时权重完全冻结。zero-shot 只给自然语言指令;one-shot 加 1 条示范;few-shot 塞满上下文,通常 10 到 100 条。多选题比较各选项的条件似然。

结果

模型一大,in-context learning 曲线明显变陡,few-shot 相对 zero-shot 的优势随参数量拉开。

任务设定GPT-3对照
SuperGLUE 均分few-shot,K=3271.8微调 BERT-Large 69.0;微调 SOTA 89.0
LAMBADA 准确率few-shot86.4%此前 SOTA 68.0%
TriviaQAfew-shot71.2%开卷微调 RAG 68.0%
CoQA F1few-shot85.0微调 SOTA 90.7
两位数加法few-shot100%130 亿模型大约一半

闭卷 TriviaQA 的 few-shot 超过了带检索的 RAG。翻译偏科:译入英语强于译出,En→Ro 比当时无监督 NMT 差超过 10 BLEU。阅读理解里 CoQA 接近人类,RACE 高中卷只有 46.8%,QuAC 比早期 ELMo 基线还低 13 F1。

合成任务把规模门槛写得很死。1750 亿模型两位数加法 100%、减法 98.9%,三位数加法 80.4%;130 亿模型两位数加减大约一半,其余运算大多低于 10%。两位数乘法 29.2%。人在约 200 词新闻上分辨真假的准确率,从对照模型的 86% 掉到 GPT-3 的 52%,接近抛硬币。

ANLI 上小于 1750 亿的模型 few-shot 仍在 33% 随机线附近。WiC 49.4%,等于瞎猜。比较两个句子是否同义、是否蕴含,是这条路线当时过不去的坎。

为什么重要

它把「prompt 即任务」从 GPT-2 的演示做成可复现的规模现象。后面 instruction following、工具调用、agent 产品线,都站在这个观察上:不必为每个任务存一份微调权重,把说明和例子写进上下文就有一条能用的路。

对使用者更具体的是两句话。few-shot SuperGLUE 刚超过 BERT-Large,离 89.0 的微调 SOTA 还有大段空档,不能读成微调过时。算术和字谜在 130 亿到 1750 亿之间出现陡峭跳跃,当时那种能力不是每个规模都平滑长出来的。

局限与存疑

论文第 5 节自己列得很全。生成仍会语义重复、长文失连贯、自相矛盾。常识物理弱,典型例子是「奶酪放进冰箱会不会化」。结构上只用单向自回归,填空、回看比较、先读长文再给短答案会吃亏,这能部分解释 WiC 和 ANLI。

更硬的限制也写了:下一个 token 等权预测没有「什么更重要」;任务必须被拧成预测问题;没有视觉或身体交互的 grounding。数据污染过滤失败,LAMBADA 等集合有重叠,作者声称影响可忽略,无法独立复核。上下文 2048 把 few-shot 示例数卡死。按 2020 年的算力,1750 亿这档几乎不能复现。

术语

原文与代码

社区讨论

相关论文

全部论文解读