gpt系列概述——从gpt1到chatgpt

news2025/1/12 4:55:33

 GPT建模实战:GPT建模与预测实战-CSDN博客      

         OpenAI的GPT(Generative Pre-trained Transformer)系列模型是自然语言处理领域的重要里程碑。从2018年至2020年,该公司相继推出了GPT-1、GPT-2和GPT-3,这些模型在文本生成和理解方面表现出了强大的能力。

        GPT-1发布于2018年6月,它是基于约5GB的文本数据进行训练的,模型参数量为1.17亿。尽管参数量相对较少,但GPT-1已经展示出了强大的自然语言生成和理解能力。

        仅仅几个月后,OpenAI在2019年2月推出了GPT-2。与GPT-1相比,GPT-2的训练数据量大幅增加,达到了约40GB,并且模型参数量也增加到了15亿。这使得GPT-2在自然语言处理任务中的性能得到了显著提升。

        到了2020年5月,OpenAI进一步推出了GPT-3,这是一个划时代的模型。GPT-3的训练数据量达到了惊人的45TB,并且模型参数量也激增到了1750亿。这使得GPT-3在文本生成、语言理解、对话系统等多个方面都取得了前所未有的突破。

1.GPT-1

        GPT,全称为“Generative Pre-Training”,代表生成式的预训练模型,是自然语言处理领域的重要技术之一。2018年,NLP领域竞争激烈,BERT和GPT是其中的佼佼者。尽管两者都很强大,但GPT因其需要预测未来的词,训练难度相对更大。BERT擅长通过完型填空理解上下文,适合文本分类和实体识别;值得一提的是,GPT作为自回归模型,专注于通过预测未来的词来生成文本,适合文本生成等任务。

        那么什么叫做自回归模型呢?        

例子

英文原句:The weather is beautiful today.

当我们把这句英文输入到自回归的翻译模型中时,模型会按照以下步骤进行翻译:

  1. 开始符号:模型首先处理一个特殊的开始符号(比如<BOS>,表示Beginning Of Sentence),这告诉模型它要开始生成一个句子了。

  2. 逐个词生成:模型首先会预测第一个词。根据英文原句和模型之前学习到的语言模式,它可能会预测出“今天”作为中文翻译的第一个词。

  3. 迭代预测:接下来,模型会将“今天”作为上下文,并预测下一个词。继续这个过程,模型可能会预测出“天气”作为第二个词。

  4. 继续生成:模型继续以之前生成的词为上下文,预测下一个词,直到生成完整的中文句子。在这个例子中,完整的翻译可能是“今天天气很好”。

  5. 结束符号:模型在生成完整个句子后,会预测一个特殊的结束符号(比如<EOS>,表示End Of Sentence),标志着翻译的完成。

        在这个过程中,自回归模型利用了之前生成的词作为上下文来预测下一个词,逐步构建出完整的翻译结果。这种逐个词生成的方式是自回归模型的核心特点,使得模型能够处理变长的文本序列,并生成自然流畅的翻译。

(1)网络结构

        Bert与GPT整体的网络结构都是采用Transformer,但是由于Bert有上下文,其网络结构类似于Transformer的编码器,而GPT需要根据前文进行预测,其网络结构相当于Transformer的解码器。其损失函数就是预测下一个词的损失。

(2)GPT-1的缺陷

        GPT-1的缺陷在于,所有下游任务都需要微调,这会带来巨大的成本,且模型的应用场景也有限。

2.GPT-2

        GPT-2 是一个强大的生成式预训练模型,而 “zero-shot” 指的是模型在没有针对特定任务进行训练或微调的情况下,仅通过给定的提示或上下文来执行任务的能力。这种方法利用了模型在预训练阶段学习到的广泛知识和推理能力

        在传统的机器学习方法中,通常需要为每个下游任务收集标注数据并进行训练或微调。然而,GPT-2 等大型预训练模型的出现改变了这一范式。这些模型在海量无标注数据上进行预训练,学习到了丰富的语言知识和推理能力,使得它们能够在不经过额外训练的情况下处理多种下游任务。

        当面对一个新的下游任务时,我们可以通过为模型提供适当的提示或上下文来“暗示”它需要完成的任务。例如,如果我们想让 GPT-2 完成一个文本分类任务,我们可以在输入文本后添加一个描述分类目标的提示,如“请判断这段文本的情感倾向是正面还是负面”。由于 GPT-2 在预训练阶段已经学习到了大量的语言知识和推理模式,它能够根据这些提示理解任务需求,并生成相应的输出。

        这种方法的优势在于无需为每个下游任务收集标注数据和进行训练,大大降低了任务的成本和复杂度。同时,由于模型在预训练阶段已经学习到了丰富的知识,它在处理下游任务时能够表现出色。

(1)采样策略

        自回归模型在文本生成时,有时可能会陷入重复的模式,如连续输出相同的词汇或短语,导致生成的文本缺乏多样性。如:成语接龙:一一得一,一一得一,一一得一,一一得一,一一得一。为了避免这种情况,需要采取一些采样策略来增加生成的多样性和减少重复。

        一种常见的策略是温度采样,通过调整概率分布来增加低概率词的选择机会,从而提高输出的多样性。此外,还有Top-K采样和Top-p(Nucleus)采样等方法,它们通过选择概率较高的词汇集合,并从中随机采样,以在保持文本质量的同时增加多样性。

温度采样

        温度就是说对预测结果进行概率重新设计,默认温度为1就相当于直接使用softmax,温度越高相当于多样性越丰富(雨露均沾),温度越低相当于越希望得到最准的那个。

        其实现方式相当于向量在进入softmax之前,同时除以一个温度

Top-K和Top-P

        Top-K和Top-P是两种常用的采样策略,用于在文本生成等任务中控制模型的输出,确保生成的结果既合理又具有多样性。

Top-K采样

  • 在Top-K采样中,模型会预测下一个可能的词的概率分布,然后选择概率最高的K个词作为候选词。例如,如果设定K为10,那么模型就只会从概率最高的10个词中进行选择。

Top-P(Nucleus)采样

  • Top-P采样则是一种更为灵活的采样方式。它不是选择固定数量的最高概率词,而是选择一个概率阈值P(比如0.9或0.95),然后累加概率直到达到或超过这个阈值。

        Top-K和Top-P采样都是为了剔除那些特别离谱的结果,确保模型生成的文本既合理又具有多样性。在实际应用中,可以根据具体需求和场景来选择适合的采样策略。

 3.GPT-3

        由于GPT-3庞大的规模和在大量文本数据上的预训练,GPT-3 能够在不进行特定任务微调的情况下,通过提供适当的提示(prompts)来执行多种自然语言处理任务。这种能力被称为“零样本学习”或“少样本学习”,它使得 GPT-3 在很多应用中都非常灵活和强大。

        有3种核心的下游任务方式:

  • zero shot,完全不提供示例
  • one shot,提供1个示例
  • few shot,提供少量示例

当然,给的示例越多,效果越好 

        

(1)准备数据

        在准备用于训练或微调GPT3模型的数据集时,同样需要关注数据的规模和质量。GPT3作为一个大规模预训练语言模型,对数据的要求更为严格,以确保其能够充分理解和学习语言的复杂模式和上下文关系。

        首先,数据集需要足够大,因为GPT3模型具有庞大的参数数量,需要大量的数据来充分训练和优化。通过收集大量的文本数据,可以帮助模型更好地学习和生成自然、连贯的语言。

        其次,数据的清洁和质量判断也是关键步骤。由于GPT3对文本的理解和生成能力非常强大,因此任何错误或低质量的文本都可能对模型产生负面影响。在准备数据时,需要对爬取的网页或其他文本来源进行质量评估和清洗,以确保数据的准确性和可靠性。

        针对网页数据的准备,可能需要利用自然语言处理和机器学习技术对网页进行分类和筛选。通过构建分类器来判断网页的质量和内容相关性,从而剔除重要性低或质量差的网页。这一步骤对于提高GPT3模型的性能至关重要。

        此外,如果之前有过类似的训练数据或前几代版本的GPT模型数据,可以将这些数据与新收集的数据进行整合。通过结合历史数据,可以帮助GPT3模型更好地学习和理解语言的演变和变化。

        最后,在数据准备完成后,就可以开始进行GPT3模型的训练或微调了。通过充分利用高质量、大规模的数据集,可以训练出更加准确、流畅的语言模型,为用户提供更好的语言生成和理解体验。

(2)evaluating Large Language Models Trained on Code

        使用GPT-3在github的代码上信息重新训练,将GPT-3应用于代码生成领域。

OpenAI Codex

4.chat gpt

(1)GPT系列的问题

        GPT前三代版本的文本生成模型遇到的问题是,文本生成的内容可能无法满足人的需求。同时也面临一个困境,即GPT如何不仅仅是文本生成模型,具备人的逻辑?

(2)有监督学习

        这时候,我们就需要有监督学习了,即使用有监督数据对具备强大特征表示的预训练模型进行微调。需要说明的是,有监督学习优先是学习敏感的话题的回答。

        

(3)强化模型

        在有监督模型中,预测对就是对,错就是错,但是对于生成的文本来说,我们真的能够轻易的判断对错吗?

        而强化学习只是对生成的文本进行评判,即评判生成文本的满意程度。

奖励模型

        首先,使用人工标注得到的各种预测结果,然后使用标注数据进行训练。

                 

        此时,损失约束的是让得分预测高的和得分预测低的差异足够大。 

         需要说明的是,这里使用的gpt是经过蒸馏的6亿参数版本的GPT。

强化学习更新参数

        首先,使用强化模型PPO更新模型参数,此时既要更新GPT的参数,又要更新奖励模型的参数。即使二者互相提升,互相促进。

损失函数如下:损失函数不仅考虑了预测结果,还考虑的模型的泛化能力

整体思想与一篇论文很相似:Learning to summarize from human feedback 

 多个维度效果都有提升

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

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

相关文章

是时候将 DevOps 可见性扩展到网络边缘了

尽管部署前运行了大量测试&#xff0c;但在部署应用程序后&#xff0c;性能问题经常让 DevOps 团队感到困惑。经过进一步调查&#xff0c;最常被忽视的问题是应用程序本身的分布式特性。从多个位置访问应用程序的最终用户永远不会拥有相同水平的互联网服务&#xff0c;因此在纽…

python使用ffmpeg分割视频为Hls分片文件/使用OpenSSL加密m3u8和TS文件

FFmpeg和OpenSSL是一个开源免费的软件&#xff0c;在官网上就能下载&#xff0c; FFmpage网址&#xff08;建议选择文件名full结尾的文件&#xff09;&#xff1a;Builds - CODEX FFMPEG gyan.dev OpenSSL网址&#xff08;建议选择win64的MSI文件&#xff09;&#xff1a;Win3…

OpenAI现已普遍提供带有视觉应用程序接口的GPT-4 Turbo

OpenAI宣布&#xff0c;其功能强大的GPT-4 Turbo with Vision模型现已通过公司的API全面推出&#xff0c;为企业和开发人员将高级语言和视觉功能集成到其应用程序中开辟了新的机会。 PS&#xff1a;使用Wildcard享受不受网络限制的API调用&#xff0c;详情查看教程 继去年 9 月…

LinkedHashMap部分底层源码解析

JDK版本为1.8.0_271&#xff0c;LinkedHashMap继承了HashMap&#xff0c;LinkedHashMap在HashMap的基础上维护了一个双向链表&#xff0c;实现了可以根据插入顺序/访问顺序&#xff08;accessOrderfalse/true&#xff09;访问Map集合。 关于HashMap的原理可以参考HashMap部分底…

IOPaint部署,实现去水印效果

下载源代码 https://github.com/Sanster/IOPaint https://github.com/advimman/lama 创建虚拟环境 conda create --prefixD:\CondaEnvs\iopaint python3.10 conda activate D:\CondaEnvs\iopaint安装依赖包 pytorch最低2.0.0 # 查看cuda版本安装对应的pytorch nvcc -V # …

Prototype 原型

意图 用原型实例指定创建对象的种类&#xff0c;并且通过复制这些原型创建新的对象。 结构 Prototype声明一个复制自身的接口。ConcretePrototype实现一个复制自身的操作。Client让一个原型复制自身从而创建一个新的对象。 适用性 当一个系统应该独立于他的产品创建、构成和…

HashMap的常见问题

Entry中的hash属性为什么不直接使用key的hashCode()返回值呢&#xff1f; 不管是JDK1.7还是JDK1.8中&#xff0c;都不是直接用key的hashCode值直接与table.length-1计算求下标的&#xff0c;而是先对key的hashCode值进行了一个运算&#xff0c;JDK1.7和JDK1.8关于hash()的实现…

如何卸载干净 IDEA(图文讲解)

更新时间 2022-12-20 11:一则或许对你有用的小广告 星球 内第一个项目&#xff1a;全栈前后端分离博客项目&#xff0c;演示地址&#xff1a;Weblog 前后端分离博客, 1.0 版本已经更新完毕&#xff0c;正在更新 2.0 版本。采用技术栈 Spring Boot Mybatis Plus Vue 3.x Vit…

lanqiao.602 迷宫

题目&#xff1a; 代码&#xff1a; #include<iostream> #include<cstring> #include<algorithm> #include<queue> using namespace std; char mp[31][51]; //稍微开大一点 char k[4]{D,L,R,U}; //按字典序记录路径 int dirx[]{1,0,0,-1},d…

给picgo上传的图片加个水印

之前给大家介绍了picgo和免费的图床神器。我们本可以开开心心的进行markdown写作了。 但是总是会有那么一些爬虫网站过来爬你的文章&#xff0c;还把你的文章标明是他们的原著。咋办呢&#xff1f;这里有一个好的办法就是把markdown中上传的图片加上自己的水印不就行了。 说干…

【复现】CVE-2024-29269 某国外路由器RCE漏洞_72

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一&#xff1a; 四.修复建议&#xff1a; 五. 搜索语法&#xff1a; 六.免责声明 一.概述 在 Telesquare TLR-2005Ksh 1.0.0 和 1.1.4 中发现的一个问题允许攻击者通过 Cmd 参数运行任意系统命令。 二 .漏洞影响 通过提交…

C语言---顺序表(二)

文章目录 前言1.准备工作2.代码的实现2.1.顺序表的创建、销毁和打印2.2.顺序表的扩容、头插\删、尾插\删2.2.1.扩容2.2.2.尾插2.2.3.头插2.2.3.尾删2.2.4.头删 2.3.指定位置之前插入/删除数据/查找数据2.3.1.指定位置之前插入数据2.3.2.指定位置之前删除数据2.3.3.查找特定数据…

vue3 依赖-组件tablepage-vue3说明文档,列表页快速开发,使用思路及范例(Ⅰ)配置项文档

vue3 依赖-组件tablepage-vue3说明文档&#xff0c;列表页快速开发&#xff0c;使用思路及范例&#xff08;Ⅰ&#xff09;配置项文档 vue3 依赖-组件tablepage-vue3说明文档&#xff0c;列表页快速开发&#xff0c;使用思路及范例&#xff08;Ⅱ&#xff09;搜索及数据获取配…

Linux-select剖析

一、select函数 select函数是IO多路复用的函数&#xff0c;它主要的功能是用来等文件描述符中的事件是否就绪&#xff0c;select可以使我们在同时等待多个文件缓冲区 &#xff0c;减少IO等待的时间&#xff0c;能够提高进程的IO效率。 select()函数允许程序监视多个文件描述符…

旋转编码器原理(超简单)

波形图 A相和B相的状态变化与旋转方向有关。当顺时针旋转时&#xff0c;A相引脚会先变化&#xff0c;然后是B相引脚。而逆时针旋转时&#xff0c;B相引脚会先变化&#xff0c;然后是A相引脚 这是两个引脚的实际波形采样&#xff0c;越密集的旋转的越快 可以发现特点&#xff0…

Redis从入门到精通(十四)Redis分布式缓存(二)Redis哨兵集群的搭建和原理分析

文章目录 前言5.3 Redis哨兵5.3.1 哨兵原理5.3.1.1 集群的结构和作用5.3.1.2 集群监控原理5.3.1.3 集群故障恢复原理 5.3.2 搭建哨兵集群5.3.3 RedisTemplate5.3.3.1 搭建测试项目5.3.3.2 场景测试 前言 Redis分布式缓存系列文章&#xff1a; Redis从入门到精通(十三)Redis分…

Git分布式版本控制系统——Git常用命令(二)

五、Git常用命令————分支操作 同一个仓库可以有多个分支&#xff0c;各个分支相互独立&#xff0c;互不干扰 分支的相关命令&#xff0c;具体如下&#xff1a; git branch 查看分支 git branch [name] 创建分支&#x…

面试题:重写equals(),为什么还要重写hashcode()

认识equals(): Object类中的equals; public boolean equals(Object obj) {return (this obj);}当我们没有重写equals&#xff08;&#xff09;&#xff0c;我们是调用父类object中的方法&#xff0c;比较的是对象的内存地址 重写equals后&#xff0c; public class Student…

蓝桥杯嵌入式(G431)备赛笔记——DMA+UART

目录 CubeMX配置&#xff1a; 代码配置: DMA通道接收&#xff1a; DMA通道发送&#xff1a; 注意&#xff1a; 主函数中记得开启串口接收回调函数&#xff1a; 加了DMA的UART接收通道和一般的区别&#xff1a; 加了DMA的UART发送和一般的区别&#xff1a; CubeMX配置&…

Day23_学点儿Java_多态复习

1 做错的选择题 Java中的多态性是通过以下哪个机制实现的&#xff1f;&#xff08;&#xff09; A. 方法重载 B. 方法覆盖 C. 抽象类 D. 接口2 多态复习 2.1 学点儿Java_Day7_继承、重载、重写、多态、抽象类 2.2 面向对象四大基本特征 封装、抽象、继承、多态 封装 面向…