大力出奇迹——GPT系列论文学习(GPT,GPT2,GPT3,InstructGPT)

news2025/2/25 21:37:02

目录

  • 说在前面
  • 1.GPT
    • 1.1 引言
    • 1.2 训练范式
      • 1.2.1 无监督预训练
      • 1.2.2 有监督微调
      • 1.3 实验
  • 2. GPT2
    • 2.1 引言
    • 2.2 模型结构
    • 2.3 训练范式
    • 2.4 实验
  • 3.GPT3
    • 3.1引言
    • 3.2 模型结构
    • 3.3 训练范式
    • 3.4 实验
      • 3.4.1数据集
      • 3.5 局限性
  • 4. InstructGPT
    • 4.1 引言
    • 4.2 方法
      • 4.2.1 数据收集
      • 4.2.2 各部分模型
    • 4.3 总结

说在前面

最近以GPT系列为代表的大语言模型LLM掀起了一阵热潮,许多人惊叹LLM的震撼能力,因此紧跟时代潮流,学习GPT系列论文,加深自己对LLM的理解。总的来说,GPT整体的模型架构都是以Transformer的解码器为模块进行堆叠而成。主要的新意点集中在模型训练策略,还有就是讲究一个大力出奇迹。以下内容是跟着沐神B站视频以及自己搜寻的一些资料学习并加以总结提炼得来。如有错误,欢迎指正。
B站视频:GPT,GPT-2,GPT-3 论文精读【论文精读】——李沐

1.GPT

论文:“Improving Language Understanding by Generative Pre-Training”,2018.6.

1.1 引言

在自然语言处理领域,有很多各式各样的的任务,如问答,文本分类等。然而,现有的无标签文本非常多,而有标签的文本很少,这使得在这些有标签文本训练一个好的分辨模型很难,因为数据集太少。因此GPT第一个版本主要就是为了解决这个问题而提出的一套针对语言模型的预训练方法,使得大量的无标签数据能够被使用,并且对预训练好的模型加以微调使其适用于许多的下游任务。

1.2 训练范式

无监督预训练+有监督微调

1.2.1 无监督预训练

论文中的描述是下面这段话,简单来说就是根据上文的k个单词,预测下一个最大概率的单词。
在这里插入图片描述

1.2.2 有监督微调

在得到预训练模型后,就使用有标签的数据进行微调。具体来说每一次我给你一个长为m的一个词的序列,然后告诉你这个序列它对应的标号是y,也就是每次给定一个序列预测他这个y。微调优化目标是最小化分类目标函数。
在这里插入图片描述
然后总的损失除了考虑微调损失,还考虑了预训练部分的损失,并用λ加权。
在这里插入图片描述

在这里插入图片描述

1.3 实验

实验主要关注两点。第一点是GPT在一个叫做BooksCorpus 的一个数据集上训练出来的,这个地方有7,000篇没有被发表的书。第二个是GPT整体模型,用了12层的一个Transformer 的解码器,每一层的维度是768。

2. GPT2

论文:Language Models are Unsupervised Multitask Learners,2019

2.1 引言

自从GPT提出后,Google紧随其后提出了BERT预训练模型,采用更大的模型和更大的数据,在各方面效果都要优于GPT。作为竞争对手,GPT当然是要反击的,那怎么做呢?如果单纯加大模型于增加数据量,或许能击败BERT,但是却少了些新意,因此GPT2从另外一个角度,除了加大模型和数据量,还引入了zero-shot设定,就是在做下游任务是,不需要下游任务的任何标签信息,也不需要重新训练一个模型,即在更难的一个设定上体现他的一个新意度。

2.2 模型结构

GPT2也是基于Transformer解码器的架构,作者设计了4种大小的模型,参数结构如下:
在这里插入图片描述
可以看到,最大模型的参数量已经去到了15个亿。还有一个细节就是GPT2调整了transformer解码器结构:将layer normalization放到每个sub-block之前,并在最后一个Self-attention后再增加一个layer normalization。

2.3 训练范式

采用预训练+zero-shot的训练范式。为实现zero-shot,GPT2在做下游任务时,输入就不能像GPT那样在构造输入时加入开始、中间和结束的特殊字符,因为这些特殊字符是模型在预训练时没有见过的。正确的输入应该和预训练模型看到的文本一样,更像一个自然语言。比如在做机器翻译时,直接可以输入“请将下面一段英文翻译成法语,英文文本”,由于在训练时可能已经存在很多这样的翻译文本样例,因此模型就可以实现输出一段法语。

2.4 实验

数据集:Webtext,包含4500w个链接的文本信息,总计800w的文本和40GB的文字。

训练:GPT-2去掉了fine-tuning训练,只保留无监督的预训练阶段,不再针对不同任务分别进行微调建模,而是不定义这个模型应该做什么任务,模型会自动识别出来需要做什么任务。

3.GPT3

论文:Language Models are Few-Shot Learners,2020

3.1引言

GPT2实验采用了zero-shot设定,在新意度上很高,但是有效性却比较低。而GPT3则是尝试解决GPT2的有效性,因此回到了GPT提到的few-shot设置,即模型在做下游任务时,可以看到一些任务的样例,而不是像GPT2那样啥样例都不给。此外,GPT3还是只采用无监督预训练方式,那么传统的二阶段训练方式(预训练+微调)有什么问题?二阶段训练方式在预训练好一个模型后,还需要一个与任务相关的数据集,以及跟任务相关的微调方式。这样的问题一是微调需要一个较大的有标签数据,对于一些如问答型任务,做标签是很困难的;其次就是当一个样本没有出现在数据分布里是,微调模型的泛化能力不一定好,即尽管微调效果好,也不一定说明预训练的模型泛化能力好,因为极有可能微调是过拟合了预训练的训练数据,或者说预训练训练数据和下游任务数据有一定重合性,所以效果会好一点;最后就是以人类角度来阐述为什么不用微调,就是说人类做任务不需要一个很大的数据集进行微调,比如一个人有一定的语言功底,让你去做一个别的事情,可能就是告诉你怎么做并提供几个样例就可以了,GPT3就是采用一样的思想。总的来说,GPT3就是一个参数特别大,效果也很好的一个模型。

3.2 模型结构

GPT3模型架构和GPT2是一致的,只是把transformer换成了Sparse Transformer中的结构,并提出了八种模型结构:
在这里插入图片描述
之所以用大批次是因为这样计算性能好,这样能充分利用机器的并行性,因为批次一大,每台机器的并行度就越高。对于小模型,不采用太大批次是因为小模型更容易过拟合,这样在比较小的一个批次采样数据的噪音会比较多

3.3 训练范式

采用预训练+few-shot的训练范式。复习一下GPT3提到的几个shot:zero-shot,one-shot,few-shot:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
几种训练方式简单概括如下:
1.fine-tuning:预训练 + 微调计算loss更新梯度,然后预测。会更新模型参数
2.zero-shot:预训练 + task description + prompt,直接预测。不更新模型参数
3.one-shot:预训练 + task description + example + prompt,预测。不更新模型参数
4.few-shot:预训练 + task description + examples + prompt,预测。不更新模型参数

3.4 实验

3.4.1数据集

基于common Crawl,做了数据清洗:首先是将common Crawl数据当作负例,将GPT2的数据当作正例,然后在这上面做了个很简单的逻辑回归进行分类,来判定common Crawl哪些数据是好的,如果预测到common Crawl的样例是正例,说明这条数据质量是比较高的;二是做了去重处理,采用lsh算法,可以很快判定两个集合(包含不同文档的单词)的相似性;最后是额外增加已知的一些高质量数据,就是BERT,GPT,GPT2采用的数据集都加进来。
在这里插入图片描述

3.5 局限性

1.生成长文本依旧困难,比如写小说,可能还是会重复;
2.语言模型只能看到前面的信息;
3.语言模型只是根据前面的词均匀预测下一个词,而不知道前面哪个词权重大;
4.只有文本信息,缺乏多模态;
5.样本有效性不够;
6.模型是从头开始学习到了知识,还是只是记住了一些相似任务,这一点不明确;
7.可解释性弱,模型是怎么决策的,其中哪些权重起到决定作用都不好解释
8.负面影响:可能会生成假新闻;可能有一定的性别、地区及种族歧视。

4. InstructGPT

论文:Training language models to follow instructions with human feedback,2022

4.1 引言

把自然语言模型做大并以代表他们可以更好按照用户意图来做事,大语言模型很可能会生成一些不真实的,有毒的或没有帮助的答案,显然GPT3还是没做好的。在工程中安全性,有效性是很重要的,因此提出InstructGPT,使得大语言模型的输出更符合人类意图,主要采用的方法是在人类反馈上做微调。InstructGPT总结来说就是干了两件事:一是雇佣了一批标注工人,去标注一个数据集,然后训练出来了一个模型。二是又做了一个排序的数据集,用强化学习训练了一个模型。惊喜的发现,1.3B的InstructGPT模型要优于175B的GPT3模型。

大语言模型LLM可以通过提示(prompt)的方法把任务作为输入,但是模型仍然会有一些不想要的输出,如捏造事实,生成偏见等。作者的主要观点是LLM的目标函数不是那么准确,就是真正训练的目标函数和根据人类指令安全地和有帮助的生成答案是有区别的。所以InstructGPT的出发点就是想让LLM更有帮助性和安全性。

4.2 方法

在这里插入图片描述
主要分三步走,首先是在GPT3使用人类标注数据进行微调,得到一个模型,叫做SFT,supervised fine-turning(事实上这个模型是可以用的,只不过人类标注的答案有限,不可能把各式各样或者各种任务的答案都考虑,因此有了第二步)。第二步是给定问题,让之前训练好的模型SFT生成多个答案(采用束搜索或者随机采样),然后对答案进行人工排序,得到标注后的排序序列,以此训练一个RM,即reward model奖励模型。第三步就是根据RM结果继续微调第一步的SFT,使得生成的答案得分尽可能高。以此不断强化学习

4.2.1 数据收集

1.让标注人员写一些问题和答案,包含三方面的prompt:
在这里插入图片描述
以这些数据训练了第一个InstructGPT
2. 将第一个InstructGPT发布在一个试玩平台,让用户在上面体验,以此获取用户提出的prompt。然后按用户,每个用户最多筛选200个prompt,以此获取更多的数据。
3.总共构建出三个数据集:一是标注工直接对prompt写答案获得的有标注数据集;二是一个排序的数据集,也就是上面提到的让标注工对SFT输出答案进行排序标注构建的数据;最后一个是ppo数据集供强化学习使用的,这个就无需标签。
在这里插入图片描述

4.2.2 各部分模型

  1. Supervised fine-turning(SFT)
    这部分模型简单来说就是用上述的人工标注数据在GPT3做微调得到的一个模型。作者微调设置了16个epoch,发现会有第一个epoch就过拟合了。但是优于这个模型不是直接拿去用的,二是用于初始化模型,发现过拟合也没什么问题
  2. Reward Model(RM)
    这里主要关心的是奖励怎么算。正常来说,GPT3在最后的输出层会输入softmax输出概率,但是在RM这里就不用softmax层了,而是额外加一个线性层,将输出映射到一个值上面,这个值就是reward。RM模型损失如下,采用的是逻辑回归损失:
    在这里插入图片描述这里的x相当于是prompt,而yw和yl就是模型输出的其中一对答案。其实整个目标就是尽可能使得yw的得分比yl要大,这里就是前面说的答案的一个排序的问题。K论文取9,就是生成九个答案,然后两两计算损失
  3. Reinforcement Learning(RL)
    作者这里采用的是强化学习里的PPO模型,整体的一个目标就是:最大化奖励+预训练目标函数的整体结果:
    在这里插入图片描述
    在这里插入图片描述

4.3 总结

整体来说InstructGPT就干了三件事,分别就对应上面的三个步骤。那么其实InstructGPT还是有一定的限制,比如在构建数据集上,语种的考虑不太全,模型也不是完全的安全的,还是会产生各种问题。文章主要还是提升模型的一个帮助性方面的问题,安全性还是没有太多的解决。

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

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

相关文章

【轻NAS】Windows搭建可道云私有云盘,并内网穿透公网访问

文章目录1.前言2. Kodcloud网站搭建2.1. Kodcloud下载和安装2.2 Kodcloud网页测试3. cpolar内网穿透的安装和注册4. 本地网页发布4.1 Cpolar云端设置4.2 Cpolar本地设置5. 公网访问测试6.结语1.前言 云存储作为近些年兴起的概念,成功吸引了各大互联网厂商下场&…

thingsboard ARM网关

G5501边缘计算网关 G5501是采用中高端的通用型 SOC,一款4 核 arm 架构 A55 处理器的 网关设备。标配处理器为 Cortex-A55 四核,最高主频 2GHz 的处理器, 内置 4GB DDR4 内存,32GB eMMC 存储。 集成Mali G52 2EE 图形处理器GPU&am…

matplotlib设置中文字体为微软雅黑

matplotlib无法设置任何中文字体怎么办? 如何在linux系统下让matplotlib显示中文? 下载微软雅黑字体,把它放在某个目录下。 链接: https://pan.baidu.com/s/1SCLYpH_MzY7vn0HA0wxxAw?pwdft2j 提取码:ft2j 在代码中加…

Learning C++ No.18【STL No.8】

引言: 北京时间:2023/3/18/21:47,周末,不摆烂,但是欠钱终于还是遭报应了,导致坐牢7小时(上午3.5,下午3.5),难受,充分意识到行哥是那么的和蔼可亲…

DLRover: 云上自动扩缩容 DeepRec 分布式训练作业

背景 如今,深度学习已广泛应用在搜索、广告、推荐等业务中,这类业务场景普遍有两个特点: 1)训练样本量大,需要分布式训练提升训练速度; 2)模型稀疏,即模型结构中离散特征计算逻辑占…

强训之【走方格的方案数和另类加法】

目录1.走方格的方案数1.1题目1.2思路讲解1.3代码展示2.另类加法2.1题目2.2思路讲解2.3代码展示3.选择题1.走方格的方案数 1.1题目 链接: link 描述 请计算n*m的棋盘格子(n为横向的格子数,m为竖向的格子数)从棋盘左上角出发沿着边缘线从左上…

第⑦讲:Ceph集群RGW对象存储核心概念及部署使用

文章目录1.RadosGW对象存储核心概念1.1.什么是RadosGW对象存储1.2.RGW对象存储架构1.3.RGW对象存储的特点1.4.对象存储中Bucket的特性1.4.不同接口类型的对象存储访问对比2.在集群中部署RadosGW对象存储组件2.1.部署RGW组件2.2.集群中部署完RGW组件后观察集群的信息状态2.3.修改…

【2023】Kubernetes之Pod与容器状态关系

目录简单创建一个podPod运行阶段:容器运行阶段简单创建一个pod apiVersion: v1 kind: pod metadata: name: nginx-pod spec:containers:- name: nginximages: nginx:1.20以上代码表示创建一个名为nginx-pod的pod资源对象。 Pod运行阶段: Pod创建后&am…

搜索引擎测试报告

文章目录一、项目背景二、项目功能三、测试目的四、测试环境五、测试计划1、功能测试2、自动化测试六、测试结果一、项目背景 java官方文档是我们在学习java语言中不可或缺的权威资料。相比于各种网站的Java资料,官方文档无论是语言表达还是组织方式都要更加全面和…

ThingsBoard开源物联网平台智慧农业实例快速部署教程(Ubuntu、CentOS适用)

ThingsBoard部署教程文档 文章目录ThingsBoard部署教程文档1. JDK环境安装2. 安装thingsBoard2.1 ThingsBoard软件包安装2.2 PostgreSQL安装2.3 PostgreSQL初始化配置3. 修改ThingsBord的配置4. 运行安装脚本测试5. 访问测试6. 导入一个仪表盘库6.1 导出仪表盘并导入自己的项目…

Spring —— Spring Boot 配置文件

JavaEE传送门JavaEE Spring —— Bean 作用域和生命周期 Spring —— Spring Boot 创建和使用 目录Spring Boot 配置文件Spring Boot 配置文件格式properties配置文件properties 基本语法properties 缺点yml 配置文件yml 基本语法yml 配置不同类型数据及 nullyml 配置对象yml…

【SQL Server】数据库开发指南(一)数据库设计

文章目录一、数据库设计的必要性二、什么是数据库设计三、数据库设计的重要性五、数据模型5.1 实体-关系(E-R)数据模型5.2 实体(Entity)5.3 属性(Attribute)5.5 关系(Relationship)六…

windows搭建ftp及原理(小白向)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录环境一、实验步骤1.1安装ftp二、ftp实验引发的思考1.简单阐述ftp的原理2.ftp建立的流程总结环境 windwos任意环境不需要server windows10 提示:以下是本…

〖Python网络爬虫实战⑤〗- Session和Cookie介绍

订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000python项目实战 Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付费…

Linux的诞生过程

个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。座右铭:海不辞水,故能成其大;山不辞石,故能成其高。个人主页:小李会科技的…

走近阿里Apsara Clouder云计算的蓝图

文章目录一:"什么是Apsara Clouder 云计算"二:"Apsara Clouder 云计算"厉害在哪里?三:"Apsara Clouder 云计算"认证一:“什么是Apsara Clouder 云计算” 💖💖 A…

【云原生Docker】09-Docker网络详解

【云原生|Docker】09-Docker网络详解 文章目录【云原生|Docker】09-Docker网络详解前言网络详解bridge网络基于bridge网络的容器访问外部网络外部网络访问基于bridge网络的容器host网络none网络container网络自定义网络自定义bridge网络容器的互通两个相同的bridge网络容器互通…

多层多输入的CNN-LSTM时间序列回归预测(卷积神经网络-长短期记忆网络)——附代码

目录 摘要: 卷积神经网络(CNN)的介绍: 长短期记忆网络(LSTM)的介绍: CNN-LSTM: Matlab代码运行结果: 本文Matlab代码数据分享: 摘要: 本文使用CNN-LSTM混合神经网…

spring快速连接mybatis

spring快速连接mybatisspring整合mybatis1.maven依赖配置2.数据库sql设计3.数据库连接配置4.实体类设计5.Dao层开发6.SqlMapConfig.xml7.运行程序进行crudspring整合mybatis 1.maven依赖配置 配置pom.xml如下 <?xml version"1.0" encoding"UTF-8"?…

【机器学习】P6 逻辑回归的 损失函数 以及 梯度下降

逻辑回归的损失函数 以及 梯度下降逻辑回归的损失函数逻辑回归的 Loss逻辑回归的 Cost逻辑回归的梯度下降总公式推导公式梯度下降动画效果展示Reference逻辑回归的损失函数 逻辑回归的 Loss 逻辑回归是一种用于二分类问题的监督学习算法&#xff0c;其损失函数采用交叉熵&…