梳理GPT系列模型的技术路线
GPT系列模型的历史
GPT-1
关键研究成果
- 将transformer架构与无监督的预训练结合,相较于之前的语言模型将有非常大的提升;
- 基于预训练之后的模型针对一个小任务进行微调(fine-tune),将凸显出比较强的自然语言理解能力;
GPT-2
关键研究成果
- 新增多任务学习能力
- 比起上一代GPT-1模型更大,意味着更大的知识容量
- 针对非专一任务的迁移学习,不需要任务针对性训练
GPT-3与大规模预训练
GPT-3的三大能力介绍
语言生成(Language Generation)
根据人输入的提示词,补全、生成完整的一段话。(类似命题作文)
上下文学习(In-context Learning)
对话过程中,用户输入问题描述和几个用例,GPT-3就可以从例子中找到规律学习到如何完成问题中描述的任务,该过程不需要梯度更新迭代训练。
通用知识
包括事实(Factual Knowledge)和常识(Commonsense)。
其它能力
多任务学习(Multitask Learning)
半监督学习
突现能力(Emergent Ability):指小模型没有,只有当模型大到一定的量级之后才会出现的能力。
GPT-3的能力来源
大数据
3000亿单词的语料[1]
大模型
1750亿个参数的模型,是上一代GPT-2的100倍
逐个分析
- 语言生成能力:语言模型(什么语言模型?)的训练
- 上下文学习能力:(难以溯源?)[2]
- 通用知识能力:3000亿单词语料库中的知识被学习和存储到了1750个参数中
初代GPT-3的潜力
像之前的很多预训练模型一样,GPT-3在很多数据集上表现不错,但也在另外的一些任务上表现差于T5(是什么?)这样的小模型,与chatGPT更是形成了尖锐的对比[3]。
虽然初代的GPT-3表现并不出彩,但后续的演进表明,它所拥有的潜力后来通过代码训练、指令微调、RLHF等手段,解锁出非常强大的语言能力,包括chatGPT、Codex等。
从GPT-3到GPT-3.5
时间线梳理
- 2020.07:GPT-3论文发表,初代模型索引为
davinci
; - 2021.07:Codex论文发表,模型由
davinci
变体(拥有120亿参数)模型微调得到,索引为Code-davinci-001
,后来演进成为code-cushman-001
,作为OpenAI的API对外提供服务; - 2022.03:InstructGPT论文发表,其“有监督指令微调 (Supervised Instruction Tuning)” 的部分对应了
davinci-instruct-beta
和text-davinci-001
; - 2022.04-07:
code-davinci-002
进入Beta阶段,OpenAI称之为Codex
。这个模型可能是在自然语言方面能力最强大的GPT-3.5变体[4],并且很可能在文本和代码上都经过训练,然后进行指令微调得到; - 2022.05-06:
text-davinci-002
发布,基于code-davinci-002
通过有监督的指令微调得到;在这个模型的指令微调降低了模型的上下文学习能力,但增加了0样本学习(Zero-shot Learning)能力; - 2022.11:2个基于RLHF[5]的指令微调模型:
text-davinci-003
和chatGPT
发布;text-davinci-003
部分恢复了一部分上下文学习能力并进一步增强了0样本学习能力,另一方面,chatGPT近乎牺牲了所有的上下文学习能力,换取了建模对话历史的能力;
总的来说,从GPT-3系列模型发布的2020-2021年间,OpenAI已经投入了大量的精力,通过代码训练和指令微调来增强GPT-3。当2022年上半年code-davinci-002
测试发布时,模型已经完全具备了成为ChatGPT的各种潜力。而后续的指令微调,无论是有监督的还是RLHF,能够做到的事情有以下3点:
- 指令微调不会为模型注入新的能力,其作用是解锁已经潜在拥有的能力[6];
- 指令微调实现了对GPT-3.5模型分化出不同的技能树路线,有擅长上下文学习的
text-davinci-003
,也有更擅长对话的ChatGPT
; - 指令微调通过牺牲模型的性能来换取与人类的对齐,OpenAI在InstructGPT论文中称之为“对齐税”(Alighment Tax)。许多论文[7]都报道了
code-davinci-002
在基准测试中实现了最佳性能(但模型不一定符合人类期望)。 在code-davinci-002
上进行指令微调后,模型可以生成更加符合人类期待的反馈(或者说模型与人类对齐),例如:零样本问答、生成安全和公正的对话回复、拒绝超出模型知识范围的问题。
初代GPT-3.5
新能力
text-davinci-002
和code-davinci-002
可以作为ChatGPT3.5的初代模型,后续的模型,包括ChatGPT都是基于此进行的调整。因此我们关注这两个模型与初代GPT-3不同的重要能力:
- 能够根据人类的指令生成针对性的回答,而不是输出训练集中常见的句子;
- 拥有泛化能力,当用于调整模型的指令数量超过一定的规模时,模型在从没见过的新指令上也能生成有效的回答;
- 代码生成和代码理解能力;
- 利用思维链 (chain-of-thought?) 进行复杂推理;
能力来源
- 用代码数据训练模型是其代码生成和理解能力的来源;
- 指令微调是针对遵循人的指令生成特定回答内容能力的来源;
- 用代码训练模型可能还会让模型得到复杂推理能力,以及得到长距离依赖(Long-term Dependency);
模型细节对比
模型 | code-davinci-002 | text-davinci-002 | code-cushman-001 | text-davinci-001 |
---|---|---|---|---|
演进历史 | GPT-3.5基础模型,由GPT-3经过代码训练和指令调整得到 | 指令微调code-davinci-002 得到[8] |
由GPT-3经过代码训练得到 | 由GPT-3经过指令微调得到 |
擅长 | 有上下文示例(in-context example)的场景,兼具代码和文本能力 | 0样本任务场景,兼具代码和文本能力 | 推理、代码能力 | 文本能力 |
短板 | 0样本学习能力不够强 | 牺牲了上下文学习能力(对齐税) | 文本能力 | 推理、代码能力 |
一些猜想
code-davinci-002
的基础模型可能已经不是初代GPT-3davinci
了,而是基于没有公开的某个比初代 GPT-3davinci
更大的模型;[9]- 遵循人的指令和零样本泛化的能力都可能已经存在于基础模型中,后来的指令微调是将能力解锁;[10]
- 复杂推理能力可能是在预训练阶段通过代码数据注入的;[11]
- 代码训练和指令微调对提升模型能力的效果还需要进一步的验证。
ChatGPT
目前来看,chatGPT
和与他同代的text-davinci-003
是经过RLHF之后的产物,而上一代的text-davinci-002
是由监督学习指令微调得到的,这是它们与最显著的区别,经过RLHF后触发的能力包括:
- 更长的回复:
chatGPT
和text-davinci-003
通常比-002
更长,这是RLHF的直接产物; - 平衡的回应:涉及多个利益实体的事件能够给出平衡的回答,这也是RLHF的产物;
- 拒绝不当问题:这是内容过滤器和由 RLHF 触发的模型自身能力的结合,过滤器过滤掉一部分,然后模型再拒绝一部分。
- 拒绝知识范围外的问题:拒绝在2021 年 6 月之后发生的新事件(因为它没在这之后的数据上训练过)。这是 RLHF 最神奇的部分,因为它使模型能够隐式地区分哪些问题在其知识范围内,哪些问题不在其知识范围内。
GPT-3.5还不能做的事情
- 即时改写模型的(错误)信念;
- 形式化推理;
- 检索互联网[12];
类似的开源模型
https://github.com/THUDM/GLM-130B
https://github.com/allenai/RL4LMs
结论
-
初代GPT-3模型通过预训练获得生成能力、世界知识和上下文学习能力;
-
分成2个进化分支
- 指令微调分支获得遵循指令和泛化能力
- 代码训练获得代码理解能力,并同时获得复杂推理能力;
-
合并2个分支后得到潜力最强的GPT-3.5基础能力
-
经过有监督的指令微调和RLHF牺牲建模能力换取了与人类对齐;
训练语料的60%来自于 2016 - 2019 的 C4 + 22% 来自于 WebText2 + 16% 来自于Books + 3%来自于Wikipedia ↩︎
直觉上,这种能力可能来自于同一个任务的数据点在训练时按顺序排列在同一个 batch 中。然而,很少有人研究为什么语言模型预训练会促使上下文学习,以及为什么上下文学习的行为与微调 (fine-tuning) 如此不同。 ↩︎
OPT模型比起chatGPT弱爆了。而OPT 已经可能是初代 GPT-3 的一个足够好的开源的近似模型了(根据 OPT 论文和斯坦福大学的 HELM 评估)。 ↩︎
优于
text-davinci-002
和-003
↩︎使用人类反馈的强化学习,Reinforcement Learning from Human Feedback ↩︎
这主要是因为指令微调的数据量比预训练数据量少几个数量级,而其基础的能力是通过预训练过程中得到的 ↩︎
Suzgun et. al. 2022. Challenging BIG-Bench tasks and whether chain-of-thought can solve them
Chung et. al. 2022. Scaling Instruction-Finetuned Language Models
Fu et. al. 2022. Complexity-based Prompting for Multi-Step Reasoning
Madaan et. al. 2022. Language Models of Code are Few-Shot Commonsense Learners ↩︎text-davinci-002
在以下数据上作了微调:1. 人工标注的指令和期待的输出;2. 由人工标注者选择的模型输出。 ↩︎证据有2:1. 初代的GPT-3在数据集 C4 2016 - 2019 上训练,而
code-davinci-002
训练集则在延长到2021年才结束。因此code-davinci-002
有可能在 C4 的 2019-2021 版本上训练。2. 初代的 GPT-3 有一个大小为 2048 个词的上下文窗口。code-davinci-002 的上下文窗口则为 8192 。GPT 系列使用绝对位置嵌入 (absolute positional embedding),直接对绝对位置嵌入进行外推而不经过训练是比较难的,并且会严重损害模型的性能(参考 Press et. al. 2022.)。如果 code-davinci-002 是基于初代GPT-3,那OpenAI 是如何扩展上下文窗口的? ↩︎这主要是因为OpenAI 的论文报告的指令数据量大小只有 77K,比预训练数据少了几个数量级。 ↩︎
首先代码数据量在训练数据的占比要比指令数据量大得多,能够给模型新增能力;另外根据GPT-3到3.5的时间线梳理,
text-davinci-001
应该没有在代码数据上面微调过,而它的推理 / 思维链能力是非常差的,甚至比参数更少的code-cushman-001
还差。 ↩︎