一文讲清chatGPT的发展历程、能力来源和复现它的关键之处

news2024/9/26 1:19:31

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.01750B
PanGu Alpha200B
PLUG27B
ERNIE 3.010B

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的出现,缩短了好一段理想和现实的距离。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/340184.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端——周总结系列四

1 JS变量与常量 概述 变量:在后续编码过程中会被重新赋值,是不断变化的。常量:固定不变的数据,日常生活比如性别男,代码层面是在编码过程中不会变化的固定数据。 命名规则 变量 可以包含数字,字母&…

四家文档管理系统中披露的未修补安全漏洞

四家供应商 LogicalDOC、Mayan、ONLYOFFICE 和 OpenKM 的开源和免费增值文档管理系统 (DMS) 产品中披露了多个未修补的安全漏洞。 佛山市东联科技有限公司网络安全研究人员表示,这八个漏洞提供了一种机制,“攻击者可以通过该机制说服人类操作员在平台上…

背包问题代码合集(C/C++)

目录 1 01背包问题 2 完全背包问题 3 多重背包问题 4 分组背包问题 1 01背包问题 有N件物品和一个容量是V的背包。每件物品只能使用一次。 第 物品的体积是,价值是。 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,…

找数字(字符串思维题)

刚开始自己的思路:用dfs暴搜,没考虑时间复杂度(准确来说当时不知道该题的时间复杂度该怎么算),如果用暴搜写的话是(10的100次方) 正确的思路:最小值:定义一个长度为m的空…

(C语言)指针进阶

问:1. ( ),[ ],->,,--,. ,*的操作符优先级是怎么样的?2. Solve the problems:只有一个常量字符串与一个字符指针,该怎么打印常量字符串所有内容…

AI_Papers:第一期

2023.02.06—2023.02.12 文摘词云 Top Papers Subjects: cs.CL 1.Multimodal Chain-of-Thought Reasoning in Language Models 标题:语言模型中的多模式思维链推理 作者:Zhuosheng Zhang, Aston Zhang, Mu Li, Hai Zhao, George Karypis, Alex Sm…

生产Nginx现大量TIME-WAIT,连接耗尽,该如何处理?

背景说明: 在尼恩读者50交流群中,是不是有小伙伴问: 尼恩,生产环境 Nginx 后端服务大量 TIME-WAIT , 该怎么办? 除了Nginx进程之外,还有其他的后端服务如: 尼恩,生产环境…

【设计模式-11】责任链模式

认识设计模式(十一)---责任链模式【一】责任链模式【二】介绍(1)意图(2)主要解决(3)何时使用(4)如何解决(5)关键代码(6&am…

面对日益强大的AIGC,内容创作者们该何去何从?

面对日益强大的AIGC,内容创作者们该何去何从? 忽如一夜东风来,AIGC红全球。好似在一夜之间,AIGC就突然走红了,朋友圈、各大平台、各大社群,对于它的讨论话题也是越来越多。AIGC也成为了继NFT、元宇宙、Web…

pandas——groupby操作

Pandas——groupby操作 文章目录Pandas——groupby操作一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤一、实验目的 熟练掌握pandas中的groupby操作 二、实验原理 groupby(byNone, axis0, levelNone, as_indexTrue, sortTrue, group_keysTrue, squeezeFalse&…

STM32单片机GSM短信自动存取快递柜

实践制作DIY- GC0104-自动存取快递柜 一、功能说明: 基于STM32单片机设计-自动存取快递柜 二、功能介绍: STM32F103C系列最小系统板0.96寸OLED显示器DY-SV17F串口语音播报模块4*4矩阵键盘GSM短信模块4路舵机(模拟4个柜子) ***…

动规规划-完全背包问题

有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物品装入背包里物品价值总和最大。 首先回顾一下0-1背包问题,它和…

【寒假day4】leetcode刷题

🌈一、选择题❤1.下列哪一个是析构函数的特征( )。A: 析构函数定义只能在类体内 B: 一个类中只能定义一个析构函数 C: 析构函数名与类名相同 D: 析构函数可以有一个或多个参数答案:B答案解析:析构函数是构造函…

练 习

1.判断三个中最重的//依次输入相应的人的体重double people1, people2, people3;cout << "请输入第一个人体重" << endl;cin >> people1;cout << "请输入第二个人体重" << endl;cin >> people2;cout << "请…

开发人员与测试人员关系的理解

在软件开发中都会有开发人员&#xff08;以下简称开发&#xff09;和测试人员&#xff08;以下简称测试&#xff09;&#xff0c;在一些小型公司可能并没有测试&#xff0c;仅仅是开发兼任测试。在这里我仅针对于有专业的测试和专业的开发的项目。 每个公司应该都有考核机制&am…

solidwork中添加GB型材库以及使用

在使用solidwork设计遮光罩的时候&#xff0c;需要铝型材作为支架&#xff0c;铝型材如果自己去画设计可能浪费时间不说&#xff0c;还得去找对应型号。默认solidwork中没有国标的型材库。网上教程导入型材库路径是错误的&#xff0c;所以在复制完后打开solidwork找不见型材库 …

Ubuntu小操作

安装拼音输入法 sudo apt-get install ibus-pinyin点击加号 点击other 输入 chinese 使用 winspace 切换 可以在键盘快捷键处改变快捷键 安装ADB sudo apt-get install android-tools-adb编写规则 sudo gedit /etc/udev/rules.d/80-android.rules写入(其中红色字体部…

面试实战篇 | 快手本地生活,结合项目谈Redis实战项目场景?MySQL InnoDB存储引擎如何工作的?策略模式?

本期是【你好&#xff0c;面试官】系列文章的第21期&#xff0c;持续更新中…。 《你好&#xff0c;面试官》系列目前已经连载20篇了&#xff0c;据说看了这个系列的朋友都拿到了大厂offer~ 你好&#xff0c;面试官 | 你真的理解面向 “对象”&#xff1f;你好&#xff0c;面…

在Flask中构建API接口的相关概念

重定向行为斜杠以下两个路由的不同之处在于是否使用尾部的斜杠。第一个路由的URL尾部有一个斜杠&#xff0c;看起来就像一个文件夹&#xff0c;访问一个没有斜杠结尾的URL时&#xff0c;Flask会自动进行重定向&#xff0c;在结尾加上一个斜杠。第二个路由的URL没有尾部斜杠&…

ChatGpt-2 对话单页功能实现vue3+elementplus

接口可参照CHATGPT.NET自行实现 <script setup> import { RouterLink, RouterView } from "vue-router"; import HelloWorld from "./components/HelloWorld.vue"; import { MoreFilled ,CircleCheck} from "element-plus/icons-vue"; …