GPT系列笔记(GPT-1,GPT-2,GPT-3)|沐神
前言
GPT-2:使用Transformer解码器架构
GPT-3:把GPT-2做大做强,规模大了100倍,最终取得了很好的效果
openAI:想解决强人工智能,想要解决更大的问题。
Google:Transformer解决机器翻译;BERT把CV预训练-微调的这一套搬到NLP上。
GPT
先使用没有标号的文本进行预训练,然后在有标号的文本上进行微调。
值得注意的是,这并不是nlp领域第一次使用没有标 号的数据,在此之前,word2vec已经这么用了。
与之前不同的是:但是之前的词嵌入模型在不同任务要改变模型,而到了GPT这里,只要改变输入形式即可。
使用没有标号文本数据的两个困难:
1.不知道用什么样的目标函数:language modeling?machine translation?..
2.如何将学到的文本表示传递到下游的子任务上去
提出了半监督(semi-supervised)的方法:在没有标号的数据上预训练,在有标号的数据上微调。
有的地方也叫自监督学习(self supervised learning),不同的作者的文章里会有不同的叫法。
模型本身
1.Unsupervised pre-training
用到了Transformer的解码器架构,使用掩码注意力机制,不看当前位置后面的东西。
与BERT的区别:
1.BERT使用掩码语言模型而不是标准语言模型,做完形填空任务。对应Transformer编码器,而GPT对应Transformer解码器。
2.目标函数选取:GPT使用预测未来,BERT使用完形填空。
2.Supervised fine-tuning
把预训练和微调的目标函数结合起来,效果也不错:
3.Task-specific input transformer
如何将nlp领域中的任务表示成2中要的形式,即表示成一个序列和一个标号。
实验
数据集:BooksCorpus(800M words):八亿个词
模型:12-layer decoder-only;768维度
后面的BERT-base模型大小和GPT差不多,BERT-large就要大出三倍了
GPT-2
一作没变,对于BERT的回击。
更大的数据集:WebText——million的webpages
更大的模型:参数量达1.5B
加了一个主要卖点:zero-shot的设定。
Multitask learning:我同时在多个数据集上学习,使用多个损失函数,让我的模型在多个数据集上都能用。
zero-shot:我不需要下游任务的任何信息。
与GPT不同的是,GPT有微调,在下游任务上进行微调的时候让模型认识了自己定义的一些特殊字符(开始符、分隔符等等);而GPT-2由于是zero-shot的,所以在下游任务不能对模型进行调整,如果我还在下游任务引入这些特殊字符的话,模型就会感到很困惑。因此,下游任务的输入也应该与预训练的输入类似,更像是自然语言。
训练数据
Reddit:美国很靠前的一个新闻聚合网页。
爬下来评论数至少是3的Reddit上的网页,得到了45million的链接。8百万文本,40GB的文字。
4个size的模型:
实验
与其他zero-shot方法的比较。
GPT-3
2020年的工作
作者换了,主要的作者不再是GPT和GPT2的作者了。
GPT-3:退了一步,不像GPT-2一样是zero-shot
这篇文章做了大量实验,因此有大量作者。
摘要:
175 billion个参数,1750亿,已经很大了。
GPT-3:由于参数量巨大,因此在用作子任务的时候,不做任何的梯度更新或者微调
能生成一些新闻文章,人类读起来很难区分。
63页篇幅,花了大量篇幅写结果和讨论。
导言
现在的做法是在数据集上做微调,有问题,自己做标注很困难。
微调后的结果好不能说明原来预训练模型的泛化性好,有可能是模型过拟合了你的下游数据集而已。
人类不需要一个很大数据集来做一个任务。
提到了meta-learning,in-context learning
文中提到的meta-leaning:我真的训练了一个很大的模型,泛化性还不错。
文中提到的in-context leaning:在后面即使告诉我一些训练样本,我也不更新我的权重。
三个设定:
1.few-shot:10-100
2.one-shot:1
3.zero-shot:0
疑问:不通过模型权重的更新,那我新给的样本如何发挥作用?
ANS:模型在看到整个句子时,能够从样本中提取出有用的信息。模型在做推理的时候,能够通过注意力机制来处理比较长的序列信息,从而从中间提取出比较有用的信息,能够帮助下面做事情。(提供更多的语义上下文,in-context learning)
坏处:如果下游数据量很多无法放进去。
另一个问题:每次预测的时候都得带一个样本进去,模型没法把上一次预测带的那个样本存下来。
模型架构
预训练数据:common crawl
有点脏,用了一些方法清洗:
- 做了一个简单的二分类:正类是gpt2爬下来的质量比较高的数据集,负类是common crawl。预测common crawl里的所有网页,挑选出分类器认为你是正类的那些page
- 去重:lsh,很快地判断一篇文章和一个集合的相似度
- 加入了bert、gpt、gpt2(webText2)用到的高质量数据集。
一个batch的数据,有60%来自common crawl,22%来自webText2.
局限性
长文本比较弱,写连贯的小说就不行。
结构和算法上的局限性,只能往前看,不像bert一样是双向的。
对于词的预测是平均的,不知道什么词才是重点。如花了很大精力学习了一些虚词。
视频、真实世界的物理交互是无法理解的。
样本有效性不够,用了太多的数据。
训练起来非常的贵,能耗很高。
无法解释,不知道为何得出的输出。
对社会的影响
- 可能会被用来做坏事
- 散布一些不实的消息
- 论文造假
- 公平性、偏见
- 性别
- 种族
- 宗教等
- 能耗很高
视频、真实世界的物理交互是无法理解的。
样本有效性不够,用了太多的数据。
训练起来非常的贵,能耗很高。
无法解释,不知道为何得出的输出。
对社会的影响
- 可能会被用来做坏事
- 散布一些不实的消息
- 论文造假
- 公平性、偏见
- 性别
- 种族
- 宗教等
- 能耗很高
我产生的新疑问:现在的GPT-3.5,我们在使用的时候,也是无zero-shot把,是如何处理这种无规则的输入prompt的。