2.1、GPT-2的核心思想
GPT-2的学习目标是使用无监督的预训练模型做有监督的任务。
语言模型也能够学习某些监督学习的任务,并且不需要明确具体的监督符号。而监督学习由于数据量的关系通常只是无监督学习的一个子集,所以无监督学习的全局最小也必定是监督学习的全局最小,所以目前的问题变为了无监督学习是否能收敛。
作者通过初步论证指出,足够大的语言模型是能够进行多任务学习的,只是学习速度要比监督学习慢得多。
GPT-2(1.5B parameter Transformer),即使这样,模型仍然没有过拟合WebText,意味着模型的参数可以更多,迁移任务的性能可以进一步提升
比之BERT,GPT有的问题,GPT-2都会继承。比如无监督的通病:收敛速度较慢。
2.2、GPT-2训练技巧
为了防止推荐单词陷入循环(一直点击以第一个单词有可能陷入循环),GPT-2 会从概率最大的 top-k 单词中选取下一个单词。 其实GPT 2.0在做下游无监督任务的时候,给定输入(对于不同类型的输入,加入一些引导字符,引导GPT正确地预测目标,比如如果做摘要,在输入时候加入“TL:DR”引导字符串),它的输出跟语言模型的输出是一样的,就是蹦出一个单词。那么问题来了:对于比如摘要任务,我们期待的输出结果是一句话或者几句话,你给我一个单词,有点太小气,那该怎么办?很简单,继续一个字一个字往出蹦,按照这些字从系统里蹦出来的时间顺序连起来,就是你想要的摘要结果,这种所有任务采取相同的往出蹦字的输出模式也是有点意思的。就是说,GPT2.0给出了一种新颖的生成式任务的做法,就是一个字一个字往出蹦,然后拼接出输出内容作为翻译结果或者摘要结果。传统的NLP网络的输出模式一般需要有个序列的产生结构的,而GPT 2.0完全是语言模型的产生结果方式:一个字一个字往外蹦,没有输出的序列结构
2.3、多任务学习
GPT2中使用了多任务学习,把多个相关的任务放在一起学习,同时学习多个任务。
图4:多任务学习
通过多个相关任务同时并行学习,梯度同时反向传播,多个任务通过底层的共享表示、互相补充学习到的领域相关的信息,互相帮助学习任务,从而提升泛化效果。
训练方法: 交替训练:在迭代训练中你来我往地交替进行各自的loss学习。当不同任务有各自的训练数据时(选择此方法),就可以对不同的任务输入各自的数据,而无需去构造一份专门的数据。如果不同任务的数据集数量差距太大时,此时模型会偏向于数据量大的任务。 联合训练:当你有一份数据带有不同的标签时,就可以对多任务同时进行训练了,怎么做到呢,很简单,只需要把不同任务的loss做一个加权和即可。
为什么多任务学习能提高模型的效果:
1.把多个任务放在一起学习,有相关的部分,也有不相关的部分,当学习一个任务的时候,和这个任务不想关的信息就是噪声,引入噪声就可以调高泛化效果。 2.逃离局部最优解 单任务学习时,梯度的传播容易陷入局部极小值,但是多任务学习中不同任务的局部极小值处于不同的位置,通过相互作用,可以帮助逃离局部极小值。 3.权值更新 改变了权值更新的动态特性,比如多任务并行学习,提升了浅层学习层的共享效率。 4.提升泛化能力 可能削弱了网络的能力,降低了网络的过拟合,提升了泛化效果。
2.4、zero-shot learning(零次学习)
Zero-shot的概念:以往比较常规的思路是在一个很小的语料库训练一个语言模型然后再接上特定的任务进行微调。而零次学习指的是用很大的语料训练一个模型,在训练的时候就直接接上很多的下游任务。然后在做具体的任务时,并不需要进行训练,直接放入我们的模型,其效果还能超过其他模型在小数据上的效果。
2.5、GPT-2的性能
仅仅通过zero-shot学习,GPT-2就超过数个NLP任务的state-of-the-art的方法:
1、在“Children's Book Test”数据集上的命名实体识别任务中,GPT-2超过了state-of-the-art的方法约7%;
2、“LAMBADA”是测试模型捕捉长期依赖的能力的数据集,GPT-2将困惑度从99.8降到了8.6;
3、在阅读理解数据中,GPT-2超过了4个baseline模型中的三个;
4、在法译英任务中,GPT-2在zero-shot学习的基础上,超过了大多数的无监督方法,但是比有监督的state-of-the-art模型要差;
5、在法译英的任务中超过了大多数无监督学习方法,但比有监督学习模型效果差。
6、在文本总结的任务中,表现不佳,但是它的效果也和有监督的模型非常接近。
2.6、文章的结论
传统的经验认为性能提升来自:大规模的数据集+大容量的模型+监督学习。而这篇文章则用实验证明了在NLP领域中,性能提升可以来自:大规模的数据集+大容量的模型+无监督学习(语言模型)。对于NLP而言,无标注的数据量非常大,因此挖掘出无监督学习的能力则成为了一个重要命题。传统解决NLP问题的方式是针对一个任务,构造一个数据集,训练一个模型。而GPT-2的出现,证明一个数据集,一个模型,可以很好地解决多个任务。 GPT-2通过加大数据量和参数,验证了泛化能力在这个结构下是有上升空间的。 所以在后面又诞生了GPT-3。 GPT-3的数据量达到了45TB, 上千亿的参数。名副其实地就是炫富。不过好在最后出来的结果也是非常惊艳的。