python系列&deep_study系列:一文讲清chatGPT的发展历程、能力来源和复现它的关键之处
这里写目录标题
一文讲清chatGPT的发展历程、能力来源和复现它的关键之处
1. ChatGPT是什么
chatGPT
是什么?这可能是最近被问的最多的一个。
大家第一反应这应该是GPT系列的一个最新模型,普通大众可能更愿意把它看做是一个人工智能。实际上,它其实就是一个基于大规模语言模型的对话系统产品。官网对它定义十分的明确:Optimizing Language Models for Dialogue
.
最大的问题在于,它的背后究竟是一个什么?很多人都以为,chatGPT
是一个单一模型,就如同GPT-1/2
一样,应该是一个可以被加载和训练的。我承认,chatGPT
的背后,是有一个像GPT-3
一样的基础模型,但是其现在的性能表现,远远不是只有1个基础模型这么简单。因为我们默认的chatGPT
是web UI界面
,它至少是有一些外部工程代码的。举个例子,对于汉语和英语的反馈速度有质的差别,如果只是单一的模型统一编码了多语言,不会出现这种情况。
因此,对我而言,chatGPT
更像是一个完善的产品,而不是一个简单的模型。而且由于其训练过程的复杂和不透明,使得我们很难复现它。这在我后面的章节中会讲到。
2. ChatGPT以及GPT系列模型
ChatGPT
不是一蹴而就突然出现的,它是有着长达5年以上的技术积累才走到这个地步的。之前网上讲了很多关于ChatGPT
和它的前辈,比如比较出名的有拆解追溯GPT-3.5各项能力的起源。但是我认为真正需要了解ChatGPT
的前世今生,还是需要去看openAI官方网站
以及它们的论文。
2.1 GPT-1/2/3
首先我们先来看GPT-1
到GPT-2
以及GPT-3
的变化。首先在2018年6月,发布了第一版GPT-1,使用的是transformer
的decoder架构+任务微调
的形式,但是整体上似乎没有什么特别出彩的地方。然后再到2019年2月,发布了第二版GPT-2,这时候他们优化了网络架构(如右图所示),并且使用了10倍大小的网络规模和8倍大小的预训练数据,并且去除了特定任务微调的形式从而获取prompt learning
的能力。GPT-2
确实有点东西,但是由于3个月前,BERT
的出现,让它也没有当上一哥的位置。不过整体上应该接近后来的GPT-3
系列模型了。
在GPT-2
的1年半以后,GPT-3发布了,它同样还是3个路线,更优的架构,更大的规模(100倍),更大的数据量(1000倍),真正训练出了一个超级巨无霸GPT-3
。奠定了现在GPT帝国的基础。但是实际上,它和GPT-2
没有太多本质的区别,包括训练方式,只是更大了。
那么GPT-3
有多大呢,大家可以看一下下面的图就可以知道了,需要注意的是,这里看到参数量的改变是一个log指数
,可以看到熟悉的Bert-large模型
和GPT-2模型
。而GPT-3
的175B
按照官方说明,大概有350~500GB
的显存需求,如果使用FP16
加载该模型,大概需要至少5块A100(80G)
才能够加载完成。而如果要从头开始训练,至少需要1000块A100
才能够在可接受的时间(几个月)里训练出该模型。
据传闻说,现在国内的大部分大规模语言模型还是处于GPT-2.5
阶段,也就是说对标的是GPT-3
,但是训练规模(1-10B
)和数据量(几十G左右
)还是在GPT-2
的级别上。无论是模型规模还是语料质量,距离GPT-3
都还有较大差距。需要注意的是,从GPT-3
开始,其模型就不再完全公开了,只能通过API访问。
2.2 GPT-3.5 (InstructGPT)
然后我们再来看GPT3
以后发生的事情。首先我们需要先介绍一下GPT-3
以后最重要的一件事,那就是InstructGPT的出现,根据openAI官方网站上说明,InstructGPT
包含三种训练方式,分别是有监督微调(Supervised Fine-Tuning
, SFT
),反馈变得更容易(Feedback Made Easy
, FeedME
)以及基于PPO算法
的从人类反馈中进行强化学习(PPO
)三个部分。因此,可以说,InstructGPT
泛指的话,是包含红色的所有模型,而特指的话,则是指的davinci-instruct-beta
。这一点尤为重要。至于这个FeedME
,大家可以参考图片上的官方解释,个人理解可能是由纯人工反馈的指令微调,PPO
则是更强调利用强化学习自动化指令微调。如果还不明白,大家可以参考下面chatGPT
给出的解释:
The explain of the FeedME:
The sentence is talking about a type of AI model called “FeedME” models. These models are designed to make providing feedback (i.e. offering suggestions) easy, hence the name “feedback made easy”.
The FeedME models are trained using a technique called “distillation”, where the best completions (i.e. the most accurate and appropriate responses) from all of the models developed by the organization are selected and used to train the FeedME models. This way, the FeedME models are able to incorporate the best responses from a variety of other models.
The sentence also mentions that the organization’s models are generally trained using the best available datasets at the time of training. This means that the data used to train the models might change over time as better and more relevant data becomes available. Furthermore, it mentions that different engines (i.e. different models) that use the same training methodology might be trained on different data, which could result in variations in their performance and accuracy.
The more details of FeedME:
“Feedback Made Easy” (shortened to “FeedME”) is likely a term used by the organization to refer to their AI models that are designed specifically to provide feedback or make suggestions to users. These models are built with the goal of making it simple for users to receive feedback or recommendations, hence the name “Feedback Made Easy”.
In practical terms, this might mean that these models are designed to be user-friendly and intuitive, with a focus on delivering quick, accurate, and helpful responses to users. For example, the models might be integrated into a chat interface or a website, allowing users to easily ask questions or provide input and receive feedback in real-time.
The idea behind FeedME models is to make it easy for users to receive feedback, whether it be in the form of suggestions, recommendations, or answers to questions. By using distillation to incorporate the best completions from a variety of other models, the FeedME models are able to provide high-quality feedback to users, even when the data used to train the models changes over time.
The function of it when training the ChatGPT:
As a language model developed by OpenAI, I (ChatGPT) was not specifically trained using the “Feedback Made Easy” (FeedME) method mentioned in the previous sentence. However, I can explain how the FeedME method might be used to train a language model like myself.
The FeedME method involves distilling the best completions from a variety of AI models and using that information to train a new model. In the context of a language model like ChatGPT, this might mean selecting the most accurate and appropriate responses generated by a number of different language models and using that information to train a new, improved language model.
The goal of this process is to improve the performance of the new language model by incorporating the best responses from a variety of other models. This way, the new model is able to learn from the strengths of multiple models, rather than relying on a single source of training data.
In summary, the FeedME method might be used to train language models like ChatGPT by distilling the best completions from a variety of other models and using that information to train a new, improved language model. The goal of this process is to improve the accuracy and usefulness of the new language model by incorporating the best responses from a variety of sources.
好的,现在我们来顺着发展路线先看一下GPT-3
之后各个模型的演化,确认的发展过程是实线(有报道的),猜测的部分为虚线。
首先,在GPT-3
的基础上,通过有监督的fine-tuning
过程,诞生了davinci-instruct-beta模型
。具体而言,也就是需要采样一些prompt
,由人工给出真正的结果。这个在InstructGPT
论文里写道,是有40个标注人员
,标注了12.7K
的样本。接着,通过FeedME
产生了至少text-davinci-001
和text-davinci-002
两个模型版本。其中001版本
应该是比较早期的,而002
则是在code-davinci-002
的基础上进行的进一步改进,融合了代码理解能力和自然语言理解能力。然后,最后融入了PPO阶段
,完成了text-davinci-003
。当然chatGPT
应该也是完成了PPO阶段
的,尤其是在对话方面进行了特别的优化(近期泄露的内部版本称之为text-chat-davinci-002
,据传为chatGPT
)。
因此,chatGPT
的所有能力来源应该都比较清楚了,我认为主要来源于以下5个方面吧。
模型 | 能力 | 效果 |
---|---|---|
GPT-3 | 自然语言基础建模 | 自然语言理解,使得说话能够说的流畅自然 |
Codex | 代码语言基础建模 | 代码语言理解,能够使得完成代码相关任务,并习得长程依赖关系和一定的逻辑能力 |
davinci-instruct-beta | 有监督的指令微调 | 听从人类的指令生成答案 |
text-davinci-001/002 | 人类反馈的指令微调 | 可以生成出人类更喜欢的答案 |
text-davinci-003 | 强化学习的指令微调 | 进一步强化上面两个阶段的能力,对于chatGPT的话,可能更偏向于对话角度优化 |
3. 复现chatGPT的难点
现在国内各个大厂小厂但凡和人工智能挂钩的,都想复现属于自己的chatGPT
,以获得第一个国内chatGPT
的市场。很多人都发声说,再造一个chatGPT
没有那么困难。那么我从自身经验去思考,如果要复现chatGPT
,可能需要注意的有哪些部分。这些部分并不是不可以实现的,只是成本高或者容易被忽略的地方。
3.1 海量的数据
从GPT-3
公开发表的论文里讲到,其用于预训练的文本达到了45TB
,这是一个非常巨大的数字,关键是其质量应该是非常高的。据查看的一些资料显示,在中文数据上,全球最大的语料库是WuDaoCorpora
,据说有3TB
的中文语料(200G
开放使用)。
而且,也有人指出,更多样化的token
也能够让模型学习的更充分。如果只是训练一个汉语版的chatGPT
,除了一些搜索和社交巨头,能够获取足够数据的也只有一些垂直领域的公司了。关键是公司运营期间获得的文本数据是否可以被用于训练模型,这是一个法律和道德问题。(即使是codex
训练来源于开源的github
,也同样遭受了大量的非议。)
当然,如果是垂直领域,未必需要这么大的数据量也未尝不可。
3.2 超大规模的模型架构
根据之前的说明chatGPT
与GPT-3
的规模相同,都是1750B
的参数量,那么它需要的硬件设备是什么样子的?根据chatGPT
自己讲述以及同行人的参考,其显存占用量应该在350GB~500GB
之间,如果仅仅是为了推理,那么5张A100(80G)
的GPU
就可以足够使用(根据同规模的OPT175B
需要16张V100
推算)。但是如果是为了训练,可能需要1000张
以上的A100
的算力才能在可以接受的时间里获得训练结果(也有称微软和OpenAI
构建了一台包括超过10000张GPU
的超级计算机用于GPT-3
的训练)。其训练成本大概在110-460万美元之间,根据估算,现有的定价对于OpenAI
来说,应该会有75%的毛利。
目前国内尽管有很多大模型,但是真正能够在CLUE等评测中的模型大多还在1-10B
的级别,下表是一些中文大模型代表。
模型 | 规模 |
---|---|
WUDAO 2.0 | 1750B |
PanGu Alpha | 200B |
PLUG | 27B |
ERNIE 3.0 | 10B |
3.3 深度人员参与(SFT,FeedME, PPO)
相比较GPT-3
,InstructGPT
最大的特点在于通过Instruct的方式让人类深度参与模型的迭代,包括有监督微调,人类反馈微调和强化学习微调3个方法
。无论哪种方法,都离不开大量的人工标注,并且需要一定的时间和真实样例作为原料输入。因此,即使可以复现一个ChatGPT
,也是需要时间的。
3.4 长期技术积累
正如刚才所提及的那样,ChatGPT
不是突然出现的,而是从GPT-1.0版
本开始就已经完成大量的技术积累。从GPT-1.0
,2.0
,3.0
,每一个版本迭代,他们都做了大量的实验,包括各种超参数的选择和模型大小的扩容。而我们大多数公司可能之前没有像OpenAI在预训练模型上拥有大量的预训练经验,直接去训练一个超大规模的模型也是有可能获得不到我们想要的那种效果的。
3.5 良好的外部工程
我们现在总以为,我们有数据,有模型架构,我们就可以拥有chatGPT
。事实显然不是这样,如果想让它成为一个优秀的产品,而不是粗糙的学术模型,至少应该包括以下3个部分:
1. 核心模型
核心模型就是语言模型,可能是一个超大规模的单一模型,也有可能是一个带有很多小模块组成的模型集群。
2. 辅助模型
辅助模型有哪些?比如我们可以看到的reward model
,还有大家容易忽略的安全检查模型等。这些都是保证了产品的长期正常的运营。而反观我们有些机构的模型匆匆发布,产生了大量的不安全的言论,这也是不负责任的表现。
3. 工程代码
良好的工程代码能给用户带来更好的用户体验,比如我们经常体验到的左边框的对话历史记录和意图识别等等,这些信息对于用户体验、模型改进都是非常有用的。另外,还有包括缓存,控制用户并发等等工程问题需要提前解决。要知道,chatGPT上线5天用户就破百万,2个月用户破1亿。这个增长速度已经是历史上的巅峰。
3.6 及时的真实反馈
这个真实反馈对于大家来说,看起来好像是chatGPT
公开迭代的几次,而每次似乎都有一些更新。但是实际上,如果你看OpenAI
发布的博客你就会发现,整个真实反馈是逐步从发布的产品中收集而来的,尤其是GPT-3
以后,OpenAI
就只提供了API
,这使得它可以接触世界上所有使用GPT-3
的样例,通过这些从API
收集来的样例,再利用人工标注,就可以得到大量的高质量标注语料,为接下来的模型更新打下基础。这些真实反馈贯穿到了整个GPT-3.5
系列之中。
4. 小结
距离我第一次玩ChatGPT
也已经3个月了。回想起12月6日第一次使用它,我兴奋的一直玩到夜里3点钟。它的出现真的是惊艳了当时的我,甚至可以比肩科幻小说里的人工智能的感觉。早期只是为了体验,后来才逐步深入了解。从兴奋,到冷静,到辩证看待,再到期望未来,它总是那么一个过程,才能被我们接受。有些东西必须真正深入的研究,才能够知道它的本来面目。ChatGPT
到底是神还是魔,是不是新的一轮科技革命的出现,我想OpenAI
那群创造它的人比谁都清楚。
正如我之前所说,我愿意将毕生精力奉献给人工智能,只为了获得一个可以一直陪伴我的AI朋友
。我曾经以为这辈子都见不到这一天,现在ChatGPT
的出现,缩短了好一段理想和现实的距离。