【GPT】从GPT1到GPT3
every blog every motto: Although the world is full of suffering, it is full also of the overcoming of it
0. 前言
从GPT1 到GPT3

1. GPT1
论文: https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/language-unsupervised/language_understanding_paper.pdf
时间:2018年
作者: Alec Radford Karthik Narasimhan Tim Salimans Ilya Sutskever
1.1 整理理解
在GPT-1之前(和ELMo同一年),传统的NLP模型往往使用大量的数据对有监督的模型进行任务相关的模型训练,但是这种有监督学习的任务存在两个缺点:
- 需要大量的标注数据,高质量的标注数据往往很难获得,因为在很多任务中,图像的标签并不是唯一的或者实例标签并不存在明确的边界;
- 根据一个任务训练的模型很难泛化到其它任务中,这个模型只能叫做“领域专家”而不是真正的理解了NLP。
GPT1的思想是先再无标签的数据上学习通用的语言模型,再在特定的任务上进行微调。
GPT1的思想是先再无标签的数据上学习通用的语言模型,再在特定的任务上进行微调。
GPT1的思想是先再无标签的数据上学习通用的语言模型,再在特定的任务上进行微调。
主要的原因还是现实生活中,无标签数据占大多数,而有标签数据往往很少,而且有标签数据往往需要花费大量的人力物力去标注。所以,GPT1的思想就是先在无标签数据上学习通用的语言模型,然后再在特定的任务上进行微调。
1.2 进一步
1.2.1 网络结构
下面是标准的Transformer结构,GPT1就是基于这个结构进行改进的(采用decoder,并删除其中没有mask的多头注意力(红框))。

具体来说,GPT1采用的是decoder部分,由于其是单向的,所以encoder中的多头注意力不适用(没有mask的话,预测当前词能看到其前面和后面的),所以采用了decoder部分(由于其有mask,预测当前词只能看到其前面的词)。
整体由12个decoder组成。

1.2.2 关于输入
由于GPT1下游有不同的任务,而这些任务之间的输入格式是不一样的,所以对不同的输入(分类、推理、相似、问答)进行了统一,这样后续微调是就不用再动输入形式了。如下图。

其中分词采用的是Byte Pair Encoding (BPE)。
简单来说,根据子词频率搞的进行合并。
1.2.3 无监督预训练
优化目标:

- k: 滑动窗口大小
- P: 条件概率
- Θ \Theta Θ : 模型参数
1.2.4 微调
输入是m各token x 1 , . . . , x m {x^1,...,x^m} x1,...,xm , 对应的标签是y。
首先将这些token输入到预训练好的模型中,得到最终的特征向量 h l m h_l^{m} hlm,然后再通过全连接层得到预测结果y。

优化目标:

微调阶段增加**语言模型(language model)**作为辅助,最终的由优化目标为:

1.3 能力
在有监督学习的12个任务中,GPT-1在9个任务上的表现超过了state-of-the-art的模型。在没有见过数据的zero-shot任务中,GPT-1的模型要比基于LSTM的模型稳定,且随着训练次数的增加,GPT-1的性能也逐渐提升,表明GPT-1有非常强的泛化能力,能够用到和有监督任务无关的其它NLP任务中。GPT-1证明了transformer对学习词向量的强大能力,在GPT-1得到的词向量基础上进行下游任务的学习,能够让下游任务取得更好的泛化能力。对于下游任务的训练,GPT-1往往只需要简单的微调便能取得非常好的效果。
GPT-1在未经微调的任务上虽然也有一定效果,但是其泛化能力远远低于经过微调的有监督任务,说明了GPT-1只是一个简单的领域专家,而非通用的语言学家。
1.4 结论
- 使用Transformer作为基础结构,避免了LSTM在捕获长期依赖关系上的困难。
- 使用无监督预训练,在大量无标签数据上进行预训练,提高了模型的泛化能力。
- 使用微调,在特定任务上进行微调,提高了模型的性能。
2. GPT2
2.1 整体理解
GPT2相比GPT1做的更加“极端”,直接无监督训练,抛弃的微调过程。讲究的是“大力出奇迹”。
作者猜测,单任务训练在单一领域数据集上的普遍性是当前系统缺乏泛化能力的主要原因之一。
所以作者采用在在更广泛的领域和数据集上训练模型,以获得更好的泛化能力。
模型依然采用的是Transformer结构的decoder部分,分为四个不同的版本。层数分别为12、24、36、48。其中,
- 12层为了GPT1作对比;
- 24层为了BERT作对比;
- 36层用于对比;
- 48层为真正的GPT2。
模型种类:
| 名成 | 层数 | 参数 | 输入维度 | 备注 |
|---|---|---|---|---|
| smallest | 12 | 117M | 768 | 和GPT1对比 |
| medium | 24 | 345M | 1024 | 和BERT对比 |
| large | 36 | 762M | 1280 | |
| largeest | 48 | 1542M | 1600 | GPT2 |

训练数据采集自Reddit,命令为WebText,数据量为:40G。 其中剔除了Wikipedia的文章。
2.2 模型和数据
2.2.1 模型结构
整体来说和GPT1类似,由多个decoder层组合而来,略微做了一点小改动。
- Layer Normalization移动到每个Transformer Block之前;
- self-attention之后增加了Layer Normalization;
- 修改了残差连接的权重 1 N 1 \over \sqrt{N} N1
- 词表增加到50257;
- 上下文大小从512增加到1024;‘
- bactch size 512。
左边是GPT1的block,右边是GPT2的block。

2.2.1 数据
GPT-2的文章取自于Reddit上高赞的文章,命名为WebText。数据集共有约800万篇文章,累计体积约40G。为了避免和测试集的冲突,WebText移除了涉及Wikipedia的文章。
2.3 训练目标
训练目标:

即,根据输入预测下文,可以表示为: p ( o u t p u t ∣ i n p u t ) p(output|input) p(output∣input)
2.4 能力
- 在8各语言模型任务中,在zero-shot情况下,有7个超过了SOTA
- 在文本总结表现不佳,但它的效果与由监督的模型接近。
2.5 小结
**GPT-2的最大贡献是验证了通过海量数据和大量参数训练出来的词向量模型有迁移到其它类别任务中而不需要额外的训练。**但是很多实验也表明,GPT-2的无监督学习的能力还有很大的提升空间,甚至在有些任务上的表现不比随机的好。尽管在有些zero-shot的任务上的表现不错,但是我们仍不清楚GPT-2的这种策略究竟能做成什么样子。GPT-2表明随着模型容量和数据量的增大,其潜能还有进一步开发的空间,基于这个思想,诞生了我们下面要介绍的GPT-3。
3. GPT3
之前的研究主要基于pretrain+finetune,当模型在下游任务上训练以后,往往失去了泛化能力,为此,GPT3相比GPT2更进一步,模型更大,训练数据更多。
3.1 不同方法
3.1.1 fine-tuing(微调)
主流的一种方式,对预训练任务在有标签的数据上进行监督训练。
微调的主要优点是可以在许多基准测试中表现出色。主要缺点是每个任务都需要一个新的大数据集,可能导致模型在分布外泛化能力差 [MPL19],以及可能利用训练数据中的虚假特征 [GSL+18, NK19],这可能导致与人类表现的不公平比较

3.1.2 few-shot learning(少样本学习)
少样本(Few-Shot, FS)是我们在本研究中使用的术语,指的是模型在推理时给定少量任务示例的设置,作为条件输入 [RWC+19],但不允许更新权重。
对于一个典型的数据集,一个示例具有上下文和期望结果(例如,一个英语句子及其法语翻译),少样本学习通过提供 K 个上下文和完成示例来实现,然后再给出一个上下文示例,模型需提供相应的完成。
我们通常将 K 设置在 10 到 100 之间,因为这是模型上下文窗口(nctx = 2048)能够容纳的示例数量。少样本学习的主要优点是显著减少对任务特定数据的需求,并降低从大型但狭窄的微调数据集中学习过于狭窄分布的潜在风险。
主要缺点是这种方法的结果迄今为止远不及最先进的微调模型。 此外,仍然需要少量的任务特定数据。如其名称所示,这里描述的语言模型的少样本学习与在其他机器学习上下文中使用的少样本学习相关 [HYC01, VBL+16]——两者都涉及基于广泛任务分布(在此情况下隐含于预训练数据)进行学习,然后快速适应新任务。
简单来说: 在推理阶段,给少量的样本,然后进行推理,不需要微调。
严格来说: 不是传统意义上的学习,因为没有参数的更新。

3.1.3 one-shot learning(单样本学习)
一例样本(One-Shot, 1S)与少样本学习相同,唯一的区别是只允许一个示例,并提供任务的自然语言描述,区分一例样本、少样本和零样本的原因在于,它最接近某些任务向人类传达的方式。例如,当要求人类生成一个关于人类工人服务的数据集(例如 Mechanical Turk)时,通常会给出一个任务示例。相反,如果没有示例,有时很难传达任务的内容或格式。

3.1.4 zero-shot learning(零样本学习)
零样本(Zero-Shot, 0S)与一例样本相同,但不允许提供任何示例,模型只获得描述任务的自然语言指令。 这种方法提供了最大的便利性、潜在的鲁棒性,并避免了虚假关联(除非这些关联在大规模预训练数据中非常普遍),但也是最具挑战性的设置。
在某些情况下,即使是人类在没有先前示例的情况下也可能难以理解任务的格式,因此这种设置在某些情况下是“过于困难”的。
例如,如果有人被要求“制作一张关于200米短跑的世界纪录表”,这个请求可能会模糊不清,因为可能不清楚表格的具体格式应是什么,或应包含哪些内容(即使经过仔细澄清,确切理解所需内容也可能很困难)。
尽管如此,至少在某些情况下,零样本最接近人类执行任务的方式——例如,在图 2.1 的翻译示例中,人类可能仅凭文本指令就知道该怎么做。

3.1.5 小结
这三种“shot”方法虽然在推理时给出的示例数量不同,但实际上它们在适应新任务时的机制是不同的。
- 零样本(Zero-Shot): 模型仅依赖于自然语言指令,没有示例。 这种方式要求模型充分利用其在预训练阶段所学的知识和模式,来理解和完成任务。
- 一例样本(One-Shot): 模型在推理时提供一个示例,使其能够更好地理解任务的格式和要求。 这个示例可以帮助模型更准确地进行推理。
- 少样本(Few-Shot):提供多个示例, 使模型能够捕捉到更多的任务特征和模式,从而提高性能。
虽然在这三种设置中都没有进行参数更新,但模型在处理任务时利用的上下文信息和已知示例的数量不同,导致其在理解和推理能力上的差异。因此,它们的表现通常会有所不同。少样本和一例样本方法通常能更有效地指导模型,从而提升性能。
不是传统意义上更新参数进行“学习”,而是利用上下文信息进行“学习”。
这三种方法都是在推理阶段进行的,而不是在训练阶段进行的。因此,它们不需要额外的训练数据,只需要在预训练阶段学习到的知识。
这三种方法都是在推理阶段进行的,而不是在训练阶段进行的。因此,它们不需要额外的训练数据,只需要在预训练阶段学习到的知识。
这三种方法都是在推理阶段进行的,而不是在训练阶段进行的。因此,它们不需要额外的训练数据,只需要在预训练阶段学习到的知识。
3.2 模型与数据
3.2.1 模型
GPT-3进一步将模型扩大。GPT2参数量为1.5B(15亿),GPT3参数量扩大到175B(1750亿)。整整扩大了116倍。
对比更加丰富,总共有8种不同的模型,参数量从125M到175B不等。

模型整体和GTP2类似,主要区别是将其中的attention替换为sparse attention,即稀疏注意力机制。稀疏注意力机制可以减少计算量,从而提高模型的训练速度和效率。
传统的attention是两两token进行计算,复杂度为O(n^2),而稀疏注意力机制只对部分token进行计算,复杂度为O(nlogn),从而大大减少了计算量。

3.2.2 数据
GPT-3的训练数据包括低质量的Common Crawl(对其进行了过滤),高质量的WebText2,Books1,Books2和Wikipedia。GPT-3根据数据集的不同的质量赋予了不同的权值,权值越高的在训练的时候越容易抽样到。
总数据量达到570G

训练时间:

3.3 结果
GPT3主要利用的是上下文学习(in-context learning),具体可以细分为上面提到的三种方式(zero-shot、one-shot、few-shot)。
尽管在推理阶段没有更新参数,上下文学习(in-context learning)仍被称为“学习”,是因为模型利用其预训练过程中获得的知识和模式来适应新任务。这种适应过程虽然不涉及参数调整,但模型能够根据提供的示例和指令识别并执行任务,因此仍然被视为一种学习形式。实际上,它更多地是依赖于模型的泛化能力和上下文理解,而非传统意义上的学习。
如下图所示,随着参数的增加模型更强,同时few-shot > one-shot > zero-shot。

下图,可以看到随着参数的增加,模型在各个任务上的表现都得到了提升。
- 当测试案例数量越多时,效果越好。
- 当测试案例很多时,prompt(自然语言描述)变得不那么重要,因为模型已经学会了如何处理任务。

3.4 小结
- 随着模型增大(GPT2 1.5B,GPT3 175B),数据量增大(GPT2 40G GPT3 570G),模型在各个任务上的表现都得到了提升。
- 存在一定的数据污染问题
- GPT-3在处理某些任务时可能会出现错误或不准确的结果,以及不合理或不合逻辑的结果。
4. 总结
| 时间 | 模型 | 参数量 | 层数 | 词向量长度 | 训练数据 |
|---|---|---|---|---|---|
| 2018.6 | GPT1 | 117M | 12 | 768 | 5G |
| 2019.2 | GPT2 | 1.5B(1542M) | 48 | 1600 | 40G |
| 2020.5 | GPT3 | 175B | 36 | 12288 | 570G |
关于参数,如下是GPT2-small示例:

参考
- https://zhuanlan.zhihu.com/p/620494604
- https://zhuanlan.zhihu.com/p/350017443
- https://www.cnblogs.com/Chatdanta/p/18235460
- https://blog.csdn.net/beilizhang/article/details/109282032
- https://blog.csdn.net/weixin_60734652/article/details/132470086
相关文章:
【GPT】从GPT1到GPT3
every blog every motto: Although the world is full of suffering, it is full also of the overcoming of it 0. 前言 从GPT1 到GPT3 1. GPT1 论文: https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/language-unsupervised/lan…...
openGauss 3.0 数据库在线实训课程18:学习视图管理
前提 我正在参加21天养成好习惯| 第二届openGauss每日一练活动 课程详见:openGauss 3.0.0数据库在线实训课程 学习目标 掌握openGauss视图的管理:创建视图、删除视图、查询视图的信息、修改视图的信息。 课程作业 1.创建表,创建普通视图…...
基于flask+vue的租房信息可视化系统
✔️本项目利用 python 网络爬虫抓取某租房网站的租房信息,完成数据清洗和结构化,存储到数据库中,搭建web系统对各个市区的租金、房源信息进行展示,根据各种条件对租金进行预测。 1、数据概览 将爬取到的数据进行展示ÿ…...
手写简易RPC(实践版)
首先了解rpc rpc-远程过程调用,openFeign,Dubbo都可以算作rpc,以微服务来具体说明,就是在本地不需要去发送请求,通过rpc框架,像调用本地方法一样调用其他服务的方法,本质上还是要经过网络&…...
mysql学习笔记-多版本并发控制
1、什么是ReadView 在 MVCC机制中,多个事务对同一个行记录进行更新会产生多个历史快照,这些历史快照保存在 Undo Log里。如果一个事务想要查询这个行记录,需要读取哪个版本的行记录呢?这时就需要用到 ReadView 了,它帮我们解决了…...
问题记录汇总
记录一些问题 如何分析错误帧问题-CSDN博客...
算法日记20:SC72最小生成树(prim朴素算法)
一、题目: 二、题解 2.1:朴素prim的步骤解析 O ( n 2 ) O(n^2) O(n2)(n<1e3) 0、假设,我们现在有这样一个有权图 1、我们随便找一个点,作为起点开始构建最小生成树(一般是1号),并且存入intree[]状态数组中…...
requests.exceptions.JSONDecodeError: Expecting value: line 2 column 1 (char 1)
requests.exceptions.JSONDecodeError: Expecting value: line 2 column 1 (char requests.exceptions.JSONDecodeError 是 Python 中使用 requests 库进行 HTTP 请求时,当期望返回的响应体为 JSON 格式,但实际响应体不符合 JSON 格式时出现的错误。这个…...
Redis7——基础篇(五)
前言:此篇文章系本人学习过程中记录下来的笔记,里面难免会有不少欠缺的地方,诚心期待大家多多给予指教。 基础篇: Redis(一)Redis(二)Redis(三)Redis&#x…...
spring boot知识点1
1.什么是spring boot spring boot是spring框架的子项目,主要特点是自动配置,以及内置的tomcat服务器,适合快速开发web与微服务架构 2.spring boot和spring cloud俩者之间的联系 spring boot可单独运行, spring cloud则是用于多…...
从零搭建微服务项目Base(第7章——微服务网关模块基础实现)
前言: 在前面6章的学习中已经完成了服务间的调用实现,即各微服务通过nacos或eureka服务器完成服务的注册,并从nacos中拉取配置实现热更新。当某个服务接口需要调用其他服务时,通过feign定义接口,并通过注解配置服务名…...
pdf转换成word在线 简单好用 支持批量转换 效率高 100%还原
pdf转换成word在线 简单好用 支持批量转换 效率高 100%还原 在数字化办公的浪潮中,文档格式转换常常让人头疼不已,尤其是 PDF 转 Word 的需求极为常见。PDF 格式虽然方便阅读和传输,但难以编辑,而 Word 格式却能灵活地进行内容修…...
嵌入式音视频开发(二)ffmpeg音视频同步
系列文章目录 嵌入式音视频开发(零)移植ffmpeg及推流测试 嵌入式音视频开发(一)ffmpeg框架及内核解析 嵌入式音视频开发(二)ffmpeg音视频同步 嵌入式音视频开发(三)直播协议及编码器…...
SpringBoot速成概括
视频:黑马程序员SpringBoot3Vue3全套视频教程,springbootvue企业级全栈开发从基础、实战到面试一套通关_哔哩哔哩_bilibili 图示:...
微信小程序image组件mode属性详解
今天学习微信小程序开发的image组件,mode属性的属性值不少,一开始有点整不明白。后来从网上下载了一张图片,把每个属性都试验了一番,总算明白了。现总结归纳如下: 1.使用scaleToFill。这是mode的默认值,sc…...
Matlab写入点云数据到Rosbag
最近有需要读取一个点云并做处理后,重新写回rosbag。网上有很多读取的教程,但没有写入。自己写入时也遇到了很多麻烦,踩了一堆坑进行记录。 1. rosbag中一个lidar的msg有哪些信息? 通过如下代码,先读取一个rosbag的l…...
数据分析--数据清洗
一、数据清洗的重要性:数据质量决定分析成败 1.1 真实案例警示 电商平台事故:2019年某电商大促期间,因价格数据未清洗导致错误标价,产生3000万元损失医疗数据分析:未清洗的异常血压值(如300mmHgÿ…...
iNeuOS工业互联网操作系统,民爆远程运维平台案例
iNeuOS工业互联网操作系统,民爆远程运维平台案例 目 录 1. 概述... 2 2. iNeuOS在民爆生产厂区和北京运维中心配置... 3 1.1 生产厂区配置... 3 1.2 运维中心配置... 7 1. 概述 针对本项目进行初步调研,项目的总体需求为满足新建…...
用命令模式设计一个JSBridge用于JavaScript与Android交互通信
用命令模式设计一个JSBridge用于JavaScript与Android交互通信 在开发APP的过程中,通常会遇到Android需要与H5页面互相传递数据的情况,而Android与H5交互的容器就是WebView。 因此要想设计一个高可用的 J S B r i d g e JSBridge JSBridge,不…...
Vue 3最新组件解析与实践指南:提升开发效率的利器
目录 引言 一、Vue 3核心组件特性解析 1. Composition API与组件逻辑复用 2. 内置组件与生命周期优化 3. 新一代UI组件库推荐 二、高级组件开发技巧 1. 插件化架构设计 2. 跨层级组件通信 三、性能优化实战 1. 惰性计算与缓存策略 2. 虚拟滚动与列表优化 3. Tree S…...
计算机网络(涵盖OSI,TCP/IP,交换机,路由器,局域网)
一、网络通信基础 (一)网络通信的概念 网络通信是指终端设备之间通过计算机网络进行的信息传递与交流。它类似于现实生活中的物品传递过程:数据(物品)被封装成报文(包裹),通过网络…...
JVM-Java程序的运行环境
Java Virtual Machine Java程序的运行环境 JVM组成 程序计数器 线程私有的,内部保存的字节码的行号。用于记录正在执行的字节码指令的地址。 Java堆 线程共享的区域: 主要用来保存对象实例, 数组等, 当堆中没有内存空间可分配给实例也无法再扩展时, 则抛出OutOfMe…...
什么是网关,网关的作用是什么?网络安全零基础入门到精通实战教程!
1. 什么是网关 网关又称网间连接器、协议转换器,也就是网段(局域网、广域网)关卡,不同网段中的主机不能直接通信,需要通过关卡才能进行互访,比如IP地址为192.168.31.9(子网掩码:255.255.255.0)和192.168.7.13(子网掩码…...
makefile+LSF
LSF LSF(Load Sharing Facility)是一种常用的集群作业调度系统,bsub 命令用于提交作业到 LSF 集群,而若要关闭(终止)一个正在运行的作业,需要使用 bkill 命令,下面为你详细介绍相关…...
《千恋万花》无广版手游安卓苹果免费下载直装版
自取https://pan.xunlei.com/s/VOJS77k8NDrVawqcOerQln2lA1?pwdn6k8 《千恋万花》:柚子社的和风恋爱杰作 《千恋万花》(Senren * Banka)是由日本知名美少女游戏品牌柚子社(Yuzusoft)于2016年推出的一款和风恋爱题材…...
javaEE-14.spring MVC练习
目录 1.加法计算器 需求分析: 前端页面代码: 后端代码实现功能: 调整前端页面代码: 进行测试: 2.用户登录 需求分析: 定义接口: 1.登录数据校验接口: 2.查询登录用户接口: 前端代码: 后端代码: 调整前端代码: 测试/查错因 后端: 前端: lombok工具 1.引入依赖…...
rabbitmq五种模式的实现——springboot
rabbitmq五种模式的实现——springboot 基础知识和javase的实现形式可以看我之前的博客 代码地址:https://github.com/9lucifer/rabbitmq4j-learning 一、进行集成 (一)Spring Boot 集成 RabbitMQ 概述 Spring Boot 提供了对 RabbitMQ 的自…...
23. AI-大语言模型-DeepSeek赋能开发-Spring AI集成
文章目录 前言一、Spring AI 集成 DeepSeek1. 开发AI程序2. DeepSeek 大模型3. 集成 DeepSeek 大模型1. 接入前准备2. 引入依赖3. 工程配置4. 调用示例5. 小结 4. 集成第三方平台(已集成 DeepSeek 大模型)1. 接入前准备2. POM依赖3. 工程配置4. 调用示例…...
Educational Codeforces Round 174 (Rated for Div. 2)(ABCD)
A. Was there an Array? 翻译: 对于整数数组 ,我们将其相等特征定义为数组 ,其中,如果数组 a 的第 i 个元素等于其两个相邻元素,则 ;如果数组 a 的第 i 个元素不等于其至少一个相邻元素,则 …...
如何在本机上模拟IP地址
如何在本机上模拟IP地址 前言 在某些开发或测试场景中,我们可能需要在本机上模拟一个指定的 IP 地址,并让局域网内的其他设备能够通过该 IP 访问本机提供的服务(如 Web 服务)。 本文将详细介绍如何在 Windows 和 macOS 系统上实…...
