NLP重铸篇之LLM系列(gpt-2)
论文标题:Language Models are Unsupervised Multitask Learners
论文链接:https://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf
论文代码地址:https://github.com/openai/gpt-2
GPT系列主要会分享生成式模型,包括gpt1、gpt2、gpt3、codex、InstructGPT、Anthropic LLM、ChatGPT等论文或学术报告。本文主要分享gpt2的论文。
重铸系列会分享论文的解析与复现,主要是一些经典论文以及前沿论文,但知识还是原汁原味的好,支持大家多看原论文。分享内容主要来自于原论文,会有些整理与删减,以及个人理解与应用等等,其中涉及到的算法复现都会开源在:https://github.com/wellinxu/nlp_store ,更多内容关注知乎专栏(或微信公众号):NLP杂货铺。
介绍 方法 数据 model 实验 泛化还是记忆 讨论 结论 论文之外 参考
介绍
之前的一些工作已经表明,任务相关的模型结构不再是必要的,self-attention结构能够迁移到很多任务上去。本论文也进一步证明了语言模型能够处理零样本学习任务,且不需要调整任何参数和结构。
在处理零样本任务时,语言模型的容量大小是至关重要的,任务效果会随着模型容量的提升而对数线性提升,部分任务的效果随模型大小的变化如下图所示。
本论文模型参数量对比GPT1有了进一步的提升,最大的模型(GPT2)有15亿参数,在8个零样本学习任务中,7个取得了当前最优的结果。
论文作者认为,之前的系统总是在单一领域的数据集上训练单独的任务,这导致相关系统缺乏泛化性能。本论文朝着能够处理更多任务的通用系统的方向前进,最终希望不需要对每个任务标记额外的训练数据。
方法
为了能够处理不同类型的任务,以及不同的输入输出,本论文进行预估的公式形式如下:
对于各种特定的任务来说,其输入、输出都可以表示成一个序列的格式,比如都可以用自然语言表示出来,这样各种任务可以变得像自然语言一样灵活。初步的实验表明,足够大的语言模型能够以这种方式处理各种任务,但是其学习速度要比特定的监督方式慢不少。
数据
Common Crawl:数据集比现有的语言模型数据集要大几个数量级,但这个数据集的质量太差,因此GPT2没有使用该数据。
WebText:获取了Reddit中所有至少有3个karma的数据(可以类比获得了3个赞之类的含义),它包含4.5亿链接数据。论文中所有的结果都是在WebText的初始版本上获得的,这个版本不包含2017年十二月之后的链接,在经过去重和一些启发式的清洗方法之后,该版数据共包含800万文档,其大小为40GB。
model
论文的主要结构还是基于Transformer的,在GPT1的结构上做了些许调整。层标准化移动到每个transformer块的开始处【1】,并且在最后一层attention后添加了一次层标准化操作,GPT2的Transformer模块结构如下图所示。考虑到,随着模型的深度加深,残差网络会累积越来越多,所以对残差层的初始化做了调整,将其参数调整到原来的大小,N是残差的层数(笔者对此处有疑问,并没有在代码中找到这块的变动)。词表的大小拓展到50247,上下文窗口长度也重512增加到1024,batchsize也提高到512。
实验
论文训练了4种不同大小的模型,各个模型的参数量如下表所示:
将WebText中的5%数据划分为了保留数据,其他数据作为训练数据。每一个模型的学习率,都是在保留数据上进行手动调整获取的,让模型在保留数据上具有最优的困惑度。从模型在保留文本上的困惑度可以看出,给更长的训练时间,其效果还可以提升,由此可见,各个模型对WebText仍然是欠拟合的。
实验整体效果如上表,GPT2模型在8个零样本学习任务中,7个取得了当前最优的结果。论文详细解释了模型在很多任务上的效果,这里不过多展示。下面会简单列举下实验中的任务。
Children's Book Test(CBT):这个任务是衡量完形填空选词的准确性。
LAMBADA:这个任务是预测句子的最后一个词。
Winograd Schema Challenge:这是常识推理任务,主要衡量对文本歧义理解的能力。
Reading Comprehension(CoAQ):这个任务包含了7个不同领域的自然语言对话,对话内容是针对一个文本提一个问题并给一个答案。这个任务可以测试阅读理解能力,以及模型根据历史会话回答问题的能力。
Summarzation
Translation
Question Answering(SQUAD)
泛化还是记忆
很多任务的训练集和测试集有交集,这会夸大模型在测试集上的效果。为了分析GPT2模型是具有泛化性能还是只是记住了数据,论文分析了测试数据在训练数据中出现的比例。分析表明,在WebText训练数据集上和各个任务的评测数据集上的交集比较小,但也是能让任务效果更好一些。不过,在大部分数据集上,任务自身的训练数据集和测试集的交集都是更大一些的。
还有另一个判断GPT2的性能是不是因为它的记忆性的方法,就是测试其在保留数据集上的性能。如下图所示,在WebText的训练和测试集上,其性能都是随着模型的容量增加而提高的。这表明,GPT2在很多方面仍然是欠拟合WebText数据集的。
讨论
论文尝试开始来学习直接处理各种任务,而不进行有监督的适应或调整。就研究结果来说,GPT2还是有启发性的,但对实际应用来说,GPT2的零样本学习性能还远远不能使用。对于很多实际任务,GPT2的效果还不如随机猜测。只有当语言模型有足够大的容量时,它的性能才会开始好于基线效果。
结论
在大量不同的文本数据集上训练的语言模型,能够处理很多领域的任务。GPT2的零样本学习效果,在8项任务中有7项都取得了当时最好的效果。语言模型能够处理各种不同的零样本学习任务,这表明在足够多样的文本上以最大化似然函数为训练目标的大容量语言模型,已经开始学习到,如何在不需要额外监督过程来处理各种任务的能力。
论文之外
GPT2出来的时候,在媒体上那是一顿吹嘘,也带着closeai不开源的传统🤣。其效果,论文里也简单说过,对很多实际任务来说,很难使用。也许是迫于BERT当时微调强大效果的压力,又或许openAI他们自身对道路坚定的信念,GPT2没有走微调的道路,而是延续了GPT1论文最后零样本学习的思路,并在模型容量和训练数据量上进一步提高。就像论文中所说,GPT2的性能在实际任务上虽然还远远不够,但也是很有启发性的研究,一定程度上证明了大语言模型的有效性。后续的GPT3确实又在这一道路上迈出了一大步,进一步展现了大语言模型在各个任务上的优越性。
参考
【1】Identity Mappings in Deep Residual Networks