主要解决的问题:当模型被别人用更大的数据集参数量打败时,应该怎么做?
GPT2虽然还是在做语言模型,但是下游任务使用了一个叫做zero-shot的设定,即做下游任务时不需要下游任务的任何标注信息,也不需要训练模型——只要预训练一个大模型来预测子任务,这个预训练的大模型在任何地方都可以用。
GPT1和GPT2的区别
在GPT1时我们在构建下游任务输入时引入了起始、截断和终止符,这些模型在开始的预训练阶段时没有看到的,但是有微调的情况时,模型可以再学习到这些符号的意思。但是GPT2要做zero-shot时,在做下游任务时模型不能被调整了,再引入这些特殊字符时模型会感到很困惑,所以在构建下游任务输入时不能引入那些模型没见过的符号,而需要使下游任务的输入和之前预训练时模型看到的文本长得一样,输入形式应该更像一个自然语言。
例如:在做句子翻译任务时,训练的句子可以被写为:(translate to french, english text, french text).
其中translate to french在后文叫做prompt也叫做提示,相当于做了一个特殊的提示词。
如果要做阅读理解任务时:可以写作(answer the question, document(阅读的文本), question, answer)
answer the question相当于任务提示。
这些构建提示词的方式是前人提出的,假设为如果训练的模型足够强大就可以理解这些提示词的意思,而且这种提示词在文本中也比较常见,模型可以理解。
GPT2的数据集
没有选择Common Crawl这种具有很多冗余无用信息的项目,选用的是reddit里面已经被人工筛选出的有意义的,并且具有至少3karma值的网页进行数据处理,大概有800万个文本,40gb的文字。
主要解决的问题:
1.做下游子任务时需要大量有标号的数据集。
2.样本没有出现在数据分布里面,大模型的泛化性不见得比小模型更好。微调效果好不能说明预训练模型泛化性好,因为可能是过拟合预训练的训练数据,这些训练数据与微调使用的数据刚好有一定的重合性。
3.人类不需要一个很大的数据集做任务。
为了解决上面几个问题,GPT-3的训练使用了情境学习(In-context Learning),它是元学习(Meta-learning)的一种,元学习的核心思想在于通过少量的数据寻找一个合适的初始化范围,使得模型能够在有限的数据集上快速拟合,并获得不错的效果。
GPT3的数据集
使用了之前GPT2中弃用的Common Crawl的数据,构建数据步骤:
1、使用之前的reddit的数据作为正例,Common Crawl作为负例训练二分类器,预测Common Crawl的网页,过滤掉不好的
2、使用lsh算法(常用技术)去重
3、增加已知高质量数据,把之前的BERT、GPT1、GPT2数据集拿过来
4、因为Common Crawl数据集还是很脏,所以在真实采样时赋予了一定权重进行采样:
主要解决的问题:预训练模型具有偏见性。
预训练模型就像一个黑盒子,没有人能够保证预训练模型不会生成一些包含种族歧视,性别歧视等危险内容,因为它的几十GB甚至几十TB的训练数据里几乎肯定包含类似的训练样本。InstructGPT/ChatGPT都是采用了GPT-3的网络结构,通过指示学习构建训练样本来训练一个反应预测内容效果的奖励模型(RM),最后通过这个奖励模型的打分来指导强化学习模型的训练。
什么是指示学习?
指示学习是谷歌Deepmind的Quoc V.Le团队在2021年的一篇名为《Finetuned Language Models Are Zero-Shot Learners》文章中提出的思想。指示学习(Instruct)和提示学习(Prompt)的目的都是去挖掘语言模型本身具备的知识。不同的是Prompt是激发语言模型的补全能力,例如根据上半句生成下半句,或是完形填空等。Instruct是激发语言模型的理解能力,它通过给出更明显的指令,让模型去做出正确的行动。指示学习的优点是它经过多任务的微调后,也能够在其他任务上做zero-shot,而提示学习都是针对一个任务的。泛化能力不如指示学习。
我们可以通过下面的例子来理解这两个不同的学习方式:
1.提示学习:给女朋友买了这个项链,她很喜欢,这个项链太____了。
2.指示学习:判断这句话的情感:给女朋友买了这个项链,她很喜欢。选项:A=好;B=一般;C=差。
怎么消除偏见的?
人工反馈的强化学习(Reinforcement Learning from Human Feedback,RLHF),将人工反馈作为强化学习的奖励,将模型的输出内容和人类喜欢的输出内容的对齐。人类喜欢的不止包括生成内容的流畅性和语法的正确性,还包括生成内容的有用性、真实性和无害性。
ChatGPT和InstructGPT的训练方式相同,不同点仅仅是它们采集数据上有所不同,但是并没有更多的资料来讲数据采集上有哪些细节上的不同。考虑到ChatGPT仅仅被用在对话领域,猜测ChatGPT在数据采集上有两个不同:1. 提高了对话类任务的占比;2. 将提示的方式转换Q&A的方式。