本文参考的博客链接:
https://franxyao.github.io/blog.html
作者:符尧,yao.fu@ed.ac.uk,爱丁堡大学 (University of Edinburgh) 博士生,本科毕业于北京大学
https://mp.weixin.qq.com/s/60_h5biTOlBAa3Rt2tMn6A
https://mp.weixin.qq.com/s/VYv8BRgGnp9ZTuXxaSuFwg
chatGPT的出现给大家带来了很多惊喜,展示了很多语言能力:
- 文本生成的能力prompt learning
- in-context learning(上下文学习) 根据给定任务的几个样例,然后为新的测试用例生成解决方案。这个是GPT3的重点。而不是去关注语言模型 的能力
- 常识和世界知识
- chain-of-thought(思维链)的能力
这些能力一方面来源大模型的参数规模,另一方面来源于GPT3系列模型采用了除了自监督语言预训练任务外的一些开发模型思维推理能力的预训练任务。个人感觉chatGPT之所以有这么惊人的表现,是把预训练任务从关注语言转移到了思维能力上,不单单只是传统语言模型的字符补全,上下文。
一、初代GPT-3
初代GPT-3的参数规模达到了1750亿,它在在有3000亿单词的语料上进行了预训练。
初代的GPT-3展示了三种能力:
(1)语言生成:遵循提示词(prompt),然后生成补全提示词的句子,这个语言生成的能力来源于语言预训练任务中对语言的建模。
(2)世界知识:包括事实性知识 (factual knowledge) 和常识 (commonsense)。GPT3系列模型的参数规模是 1750 亿,给了模型存储庞大预训练语料中各种知识的能力。
(3)上下文学习 (in-context learning): 遵循给定任务的几个示例,然后为新的测试用例生成解决方案。GPT-3虽然是个语言模型,但它的论文几乎没有谈到“语言建模”,而作者将他们全部的写作精力都投入到了对上下文学习的愿景上,这才是 GPT-3的真正重点。
虽然GPT-3已经足够庞大,但是从其论文实验结果中看出,在一些任务上的表现还不如T5(参数量110 亿),可以说远远不及chatGPT展示出的能力。OpenAI则在GPT-3的基础之上,设计了新的训练任务,使得GPT-3一步步演化到chatGPT。
1.1数据
1.1.1 Common Crawl数据集
Common Crawl数据集提供了包含上百亿网页数据的免费数据库,包含原始网页数据、元数据提取和文本提取。常见的爬行数据存储在Amazon Web服务的公共数据集和遍布全球的多个学术云平台上,拥有PB级规模,常用于学习词嵌入。但原始的Common Crawl数据集存在着很多噪音,会印象模型的训练质量, 所以OpenAI对数据集进行过滤清洗之后才用于GPT-3的训练。使用common crawl 2016年到2019年的数据,这些数据清洗前有45TB的压缩明文,经过过滤后数据集大小为570GB,包含4000亿个字节对级别的token。(另外谷歌对于Common Crawl数据集进行清洗后得到的数据集称为“Colossal Clean Crawled Corpus”(C4)数据集,用于T5模型的训练)。Common Crawl
1.1.2 WebText2数据集
WebText2数据集是一个多样化的文本集合,它从互联网收集了的大约 800 万个网页,包括各种各样的来源,如新闻文章、网站和在线论坛。是 OpenAI 专门为训练语言模型而创建。论元链接: Language Models are Unsupervised Multitask Learners
1.1.3 Books数据集
关于Books部分数据来源没有进行描述,不过可以看到,总体来说GPT-3的训练数据来源十分多样,接触了广泛的语言风格和写作风格,能够更好的理解和模仿人类语言。
1.2 模型规模
GPT系列模型的大参数量,给了模型具有思考能力的可能性。在chain-of-thought开山论文中有张图,对于GSM8K数学应用题任务,chain-of-thought的任务模式,只有在当模型参数量到达了一定规模之后,才会对最终的任务性能有所提升。说明这种chain-of-thought的能力,只能在大模型中才能够获得,而不会在小模型中存在。从图中看出,只有当模型参数量大到一定程度之后,才具备chain-of-thought的能力,称为Emergent Ability,涌现能力
二、演化历程
GPT-3初代发布于2020.07。在GPT-3后续的训练中,主要使用了三种类型的训练,分别是:代码训练、指令微调 (instruction tuning)和基于人类反馈的强化学习 (reinforcement learning with human feedback, RLHF)。初代GPT-3分别经过代码训练和指令微调得到了初代Codex(2021年7月)和初代instructionGPT模型(2022年3月)。code-davinci-002则是经过语言训练、代码训练和指令微调得到的模型,从此GPT模型进入了GPT-3.5系列;code-davinci-002再经过有监督指令微调训练得到了text-davinci-002模型,二者的区别在于,text-davinci-002模型降低了模型的上下文学习能力,但增强的模型的零样本学习能力。最后是在2022年11月发布的text-davinci-003和 ChatGPT,是使用的RLHF训练得到的两种变体,他们牺牲了上下文学习能力换来了更好的零样本学习能力和建模对话历史的能力。
初代GPT3,在一些任务上很强,但是在另外一些任务上甚至不如T5,但是具有很大的潜力(模型参数量大)。后续通过代码训练、指令微调 (instruction tuning) 和基于人类反馈的强化学习 (reinforcement learning with human feedback, RLHF) 解锁,具备上述强大的4种语言能力。
(1) 初代GPT-3模型通过预训练获得生成能力、世界知识和in-context learning上下文学习。
(2) 然后通过instruction tuning的模型分支获得了遵循指令和能泛化到没有见过的任务的能力。
(3) 经过代码训练的分支模型则获得了代码理解的能力,作为代码训练的副产品,模型同时潜在地获得了复杂推理的能力。结合这两个分支,code-davinci-002似乎是具有所有强大能力的最强GPT-3.5模型。
(4) 接下来通过有监督的instruction tuning和 RLHF通过牺牲模型能力换取与人类对齐,即对齐税。 RLHF 使模型能够生成更翔实和公正的答案,同时拒绝其知识范围之外的问题。
三、代码训练、指令微调 (instruction tuning)
经过代码训练和指令微调后的几个模型,相比初代GPT-3,表现除了4种和初代模型不同的重要能力:
(1)准确响应人类指令:现在的模型会针对指令 / 提示词生成更合理的答案,而不是相关但无用的句子。这个能力是指令微调的直接产物。
(2)泛化到没有见过的任务:当用于模型微调的指令数量超过一定的规模时,模型就可以自动在从没见过的新指令上也能生成有效的回答。这点也能在其他大模型T0、Flan 和 FlanPaLM的论文中得到验证。
(3)代码生成和代码理解:这个能力很显然,因为模型用代码训练过。
(4)利用思维链 (chain-of-thought) 进行复杂推理:思维链是在生成答案之前,生成问题的解决思路和步骤,最后再生成答案,提升解决复杂推理问题的能力。这个能力很有可能是经过代码训练得到的,初代 GPT-3和 经过指令微调的text-davinci-001模型思维链推理的能力很弱甚至没有。而经过代码训练的Codex和PaLM(有5%的代码训练数据)具有思维链能力。从直觉上来说,面向过程的编程跟人类逐步解决任务的过程很类似,面向对象编程跟人类将复杂任务分解为多个简单任务的过程很类似,这一定程度上提升了模型的推理能力。
3.1 代码训练
codex或者称text-davinci-002,是通过GPT3在代码上训练得到的模型,同时CodeX也是Github Copilot代码补全工具背后的语言模型。
论文链接:
Evaluating Large Language Models Trained on Code
博客链接:
OpenAI CodeX
3.1.1 数据来源
数据来源是截至2020年5月以来在GitHub上公开托管的5400万个项目文件,其中包含179GB大小的1MB以下的Python文件。在最终使用过程中过滤掉了自动生成、平均代码行长度超过100或者最大行长度超过100的代码文件。最终用于训练的数据量有159GB。
评估数据集human-eval 164个用于测试手写编程问题,每个问题包括一个函数签名、文档字符串、正文和几个单元测试,平均每个问题有7.7个测试单元。
3.1.2 输入输出
在训练时,通过注释作为输入,代码作为输出进行。
3.1.3 评价指标
评价生成的代码是否正确,不能像其他文本生成任务一样通过BLEU得分,来判断和标准答案之间的文字差距,而是通过一个测试单元,判断生成代码的输出是否正确。
四、基于人类反馈的强化学习 (reinforcement learning with human feedback, RLHF)
加入基于人类反馈的强化学习,让模型的对话能力得到进一步提升,RLHF 触发的能力有:
(1)翔实的回应:text-davinci-003 的生成通常比 text-davinci-002长。ChatGPT 的回应则更加冗长,以至于用户必须明确要求“用一句话回答我”,才能得到更加简洁的回答。这是 RLHF 的直接产物。
(2)公正的回应:ChatGPT 通常对涉及多个实体利益的事件(例如政治事件)给出非常平衡的回答。这也是RLHF的产物。
(3)拒绝不当问题:这是内容过滤器和由 RLHF 触发的模型自身能力的结合,过滤器过滤掉一部分,然后模型再拒绝一部分。
(4)拒绝其知识范围之外的问题:例如,拒绝在2021 年 6 月之后发生的新事件(因为它没在这之后的数据上训练过)。这是 RLHF 最神奇的部分,因为它使模型能够隐式地区分哪些问题在其知识范围内,哪些问题不在其知识范围内。