【期末复习向】长江后浪推前浪之ChatGPT概述

参考文章:GPT系列模型技术路径演进-CSDN博客

这篇文章讲了之前称霸NLP领域的预训练模型bert,它是基于预训练理念,采用完形填空和下一句预测任务2个预训练任务完成特征的提取。当时很多的特定领域的NLP任务(如情感分类,信息抽取,问答等)都是采用bert加上领域数据微调解决。

【期末向】“我也曾霸榜各类NLP任务”-bert详解-CSDN博客文章浏览阅读208次,点赞4次,收藏3次。首先我们要了解一下什么是预训练模型,举个例子,假设我们有大量的维基百科数据,那么我们可以用这部分巨大的数据来训练一个泛化能力很强的模型,当我们需要在特定场景使用时,例如做文本相似度计算,那么,只需要简单的修改一些输出层,再用我们自己的数据进行一个增量训练,对权重进行一个轻微的调整。NSP属于二分类任务,在此任务中,我们输入两个句子,B有50%的可能是A的下一句,也有50%的可能是来自语料库的随机句子,预测B是不是A的下一句。即对于给定的输入序列,我们随机屏蔽15%的单词,然后训练模型去预测这些屏蔽的单词。https://blog.csdn.net/weixin_62588253/article/details/135002295?spm=1001.2014.3001.5501但是2022年底,随着ChatGPT的兴起,大模型开始全面替代各种特定领域的NLP任务。下面就讲讲ChatGPT的发展史以及对NLP带来的影响。

(1)GPT及其结构

ChatGPT(Chat Generative Pre-trained Transformer)系列,最早由OpenAI(也叫CloseAI,开玩笑)于2018年提出第一版GPT,也是预训练语言模型。GPT的任务最初就是从网上爬取完整的句子数据,用于训练预测给定上下文信息后的下一个单词。仅仅凭借这一预训练方式和未标注的数据集GPT就可以完成对话任务,但是效果并不好 。

GPT与bert不同,bert采用的是transformer中的encoder结构;而GPT采用的则是decoder结构,如下图所示:

(2)GPT-2

2019年OpenAI又提出了GPT-2,其目标旨在训练一个泛化能力更强的词向量模型,但是它并没有对GPT的网络进行过多的结构的创新与设计,而是采用更多的网络参数和更大的数据集。但是它提出了一个后来成为大模型称霸NLP的理念:zero-shot即零少样本学习。它认为可以将预训练好的模型直接应用到下游任务,而不用根据特定领域的标注数据再次微调,只需要模型根据给定的指令(prompt或instruction)来理解任务。OpenAI作者认为,当一个语言模型的容量足够大时,它就能足以覆盖所有的有监督任务,也就是说所有的有监督学习都是无监督语言模型的一个子集,当模型的容量非常大且数据量足够丰富时,仅仅靠训练语言模型的学习便可以完成其他有监督学习的任务,这个思想也是提示学习(Prompt Learning)的前身。

(3)GPT-3

2020年,GPT-3发布。相比之前的GPT,GPT-3的显著特点是参数很多,是一个巨型模型,参数量高达1750亿参数量。与此同时,GPT-3还验证了GPT-2中提出的zero-shot的理念。所谓的zero-shot,就是零样本学习,它是直接应用到下游任务的,不会改变模型的参数。具体想法是利用过去的知识(预训练获得的信息),在脑海中推理出新的知识,从而能在没有微调的情况下完成原来需要利用特殊领域数据微调才能完成的下游任务。值得一提的是,这种理念可以用在各种领域,而非局限在NLP。

除了zero-shot,还有one-shot和few-shot。one-shot是指在预测时将一个例子也作为输入输入模型;few-shot是指在预测时加上几个例子作为输入。


 (4)ChatGPT

预训练模型自诞生之始,一个备受诟病的问题就是预训练模型的偏见性。因为预训练模型都是通过海量数据在超大参数量级的模型上训练出来的,对比完全由人工规则控制的专家系统来说,预训练模型就像一个黑盒子。没有人能够保证预训练模型不会生成一些包含种族歧视,性别歧视等危险内容,因为它的几十GB甚至几十TB的训练数据里几乎肯定包含类似的训练样本。这也就是InstructGPT和ChatGPT的提出动机,论文中用3H概括了它们的优化目标:

  • 有用的(Helpful)
  • 可信的(Honest)
  • 无害的(Harmless)

因此在2021和2022年OPenAI分别发表InstructCPT和ChatGPT,并提出了全新的训练步骤,这也是ChatGPT与bert等传统预训练语言模型。

 第一步-预训练。当然是预训练步骤(上图没有展示出来),利用大量的网上爬取的数据做无监督的预训练,任务应该还是预测下一个字。

第二步-微调(SFT)。利用人工标注的数据做微调,注意这里的微调并非针对特定的下游任务。而是针对预训练过程中部分数据存在的偏见等问题,由人类标注一些符合人类伦理道德、喜好的数据对其进行纠正。并且这里并不需要太多的人工标注的数据,是因为模型本身预训练已经知道了正确答案,只是受到了脏数据的影响不一定能够生成符合人类需要的数据。因此只需要一部分数据来告诉那些数据符合人类偏好即可。

第三步-训练打分模型(RM)。这里分2步,第一步因为ChatGPT开放使用所以可以收集用户与ChatGPT之间的对话数据。然后由人工对这些对话数据进行打分得到一个新的数据集。然后利用这个数据集来训练一个打分模型RM,它可以对ChatGPT不同的回复进行打分,用于模拟人类的打分。

第四步-强化学习(RLFM,Reinforcement Learning from Human Feedback) 。这里是利用强化学习PPO算法,通过前面RM模型给出的分数来调整ChatGPT的参数,使得其得分更高,也就是ChatGPT的回答更符合人类的需求。

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

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

相关文章

LLM之Agent(六)| 使用AutoGen、LangChian、RAG以及函数调用构建超级对话系统

本文我们将尝试AutoGen集成函数调用功能。函数调用最早出现在Open AI API中,它允许用户调用外部API来增强系统的整体功能和效率。例如,在对话过程中根据需要调用天气API。 函数调用和Agent有各种组合,在这里我们将通过函数调用调用RAG检索增强…

【SpringBoot】配置文件

配置文件官网 1. 配置方式 application.propertiesapplication.yml / application.yaml 2. 自定义配置信息 将实体类中的本应该写死的信息写在属性配置文件中。 可以使用 Value("${键名}") 获取,也可以使用 ConfigurationProperties(prefix"前…

访谈型软文写作方式,媒介盒子告诉你

访谈型软文一般用于维护企业形象,分享品牌故事。但是许多企业在写访谈型软文时经常容易跑偏或者写来写去没有逻辑,今天媒介盒子就来和大家分享访谈型软文的写作方式,看完这四点,小白也能写好访谈型软文! 一、 访谈对象…

C++_构造函数与析构函数

目录 1、构造函数的写法 1.2 构造函数优化写法 2、默认构造函数与默认成员函数 2.1 默认成员函数对不同类型的处理 3、对内置类型的补丁 4、析构函数 4.1 析构函数的写法 5、默认析构函数 6、初始化列表 6.1 初始化列表的写法 6.2 初始化列表的作用 6.3 回顾与总结 …

【Proteus仿真】【51单片机】电子门铃设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器,使共阴数码管,按键、无源蜂鸣器等。 主要功能: 系统运行后,数码管默认显示第一种门铃音调,可通过K1键切…

flutter的SingleChildScrollView控件详解

文章目录 SingleChildScrollView的介绍和使用场景详细介绍 SingleChildScrollView的介绍和使用场景 SingleChildScrollView 是 Flutter 中的一个小部件,用于创建一个可滚动的单个子部件。它通常用于处理内容超出屏幕可见区域的情况,允许用户通过滚动来查…

5.3 Linux DNS 服务

1、概念介绍 DNS(Domain Name System)域名系统,是互联网的一项核心服务,可以作为域名和IP地址相互映射的一个分布式数据库,提供域名与IP地址的解析服务,能够使人们更加方便的使用域名访问互联网而不是记住…

Vue3-11- 【v-for】循环数组

v-for的基本介绍 v-for 是一个指令&#xff0c; 它是用来在 html 模板中实现循环的。它可以循环 普通的数组、也可以直接循环一个范围值&#xff0c;也可以循环对象的每个属性。v-for 的语法介绍 <div v-for"(item,index) in arrayName" : key"index"…

有哪些好用的运维管理软件?哪个工单管理系统的操作简单一些?

运维管理软件可以帮助企业更有效地管理公司内外的事务&#xff0c;比如现在不少公司就引入了工单管理系统来处理后勤和售后的事务。那么&#xff0c;有哪些好用的运维管理软件&#xff1f;哪个的操作简单一些呢&#xff1f;   随着技术的发展和成熟&#xff0c;现在的工单管理…

vue_域名部署无法访问后端

前言 目前部署的比较另类&#xff0c;因为服务器为windows&#xff0c;目前还不是很会nginx&#xff0c;所以现在就只能在服务器上安装nodejs&#xff0c;然后直接使用npm run dev命令行的方式运行项目 遇到的坑 使用ip访问前端的时候&#xff0c;就可以访问&#xff0c;但是…

压缩照片怎么压缩?半分钟解决!

有时候我们在平台上传照片的时候&#xff0c;会有图片大小限制&#xff0c;想要将照片压缩到限制的大小范围内&#xff0c;可以使用专业的图片压缩软件、图片处理软件或者在线网站压缩&#xff0c;下面给大家分享三个方法&#xff0c;压缩照片的同时还能保持图片清晰度哦&#…

Windows10安装Node.js环境

Windows10安装Node.js环境 文章目录 1.下载安装包2.安装配置2.1安装2.2 配置全局的安装路径和缓存路径2.3配置环境变量2.4配置镜像源2.5包管理工具 3.查看版本4.编译跑项目5.总结 1.下载安装包 官方下载网址如下&#xff1a; https://nodejs.org/enInstaller表示是安装程序&a…

【回眸】Tessy 单元测试软件使用指南(三)怎么打桩和指针测试

目录 前言 Tessy 如何进行打桩操作 普通桩 高级桩 手写桩 Tessy单元测试之指针相关测试注意事项 有类型的指针&#xff08;非函数指针&#xff09;&#xff1a; 有类型的函数指针&#xff1a; void 类型的指针&#xff1a; 结语 前言 进行单元测试之后&#xff0c;但凡…

LED透镜粘接UV胶是一种特殊的UV固化胶

LED透镜粘接UV胶是一种特殊的UV固化胶&#xff0c;用于固定和粘合LED透镜。 它具有以下特点&#xff1a; 1. 高透明度&#xff1a;LED透镜粘接UV胶具有高透明度&#xff0c;可以确保光线的透过性&#xff0c;不影响LED的亮度和效果。 2. 快速固化&#xff1a;经过UV紫外线照射…

HTTP 404错误:页面未找到,如何解决

在互联网上浏览时&#xff0c;偶尔会遇到“HTTP 404错误&#xff1a;页面未找到”的提示。这通常意味着用户尝试访问的网页不存在或无法找到。本文将探讨HTTP 404错误的原因以及如何解决这个问题。 一、HTTP 404错误的原因 HTTP 404错误可能是由多种原因引起的。以下是一些常…

SQL进阶理论篇(五):什么是Hash索引

文章目录 简介MySQL中的Hash索引与B树的区别总结参考文献 简介 hash&#xff0c;即哈希&#xff0c;也被称为是散列函数。 Hash在数据库中的应用&#xff0c;可以帮助我们大幅度提升检索数据的效率。 大名鼎鼎的MD5其实就是Hash函数的一种变体。 Hash算法&#xff0c;是通过…

富文本 unpkg.com地址无法访问可替代方案

一、背景&#xff1a; 项目中使用的 wangEditor富文本&#xff0c;使用的地址为&#xff1a;https://unpkg.com &#xff0c;但无法访问&#xff0c;富文本加载不出来&#xff0c;一直转圈圈 二、解决方案&#xff1a; 2.1、方案一 &#xff1a; 将项目中 https://unpkg.co…

k8s容器部署mysql5.7全流程分享

文章目录 一、前言二、打开dockerhub 看到mysql的版本为 5.7三、K8S 容器编排3.1、编写POD的相关信息3.2、编写mysql的data存储位置3.3、编写mysql的my.cnf的挂载文件3.4、编写mysql的service端口 四、启动并禁用root账户4.1 登录&#xff0c;默认密码1234564.2 配置账户权限 五…

Linux系统编程(二):标准 I/O 库(下)

参考引用 UNIX 环境高级编程 (第3版)嵌入式Linux C应用编程-正点原子 1. 标准 I/O 库简介 标准 I/O 库是指&#xff1a;标准 C 库中用于文件 I/O 操作&#xff08;如&#xff1a;读、写文件等&#xff09;相关的一系列库函数的集合 标准 I/O 库函数相关的函数定义都在头文件 &…

【MySQL学习之基础篇】概述

文章目录 1. mysql的启动和停止命令2. 客户端连接3. 数据模型 1. mysql的启动和停止命令 通过指令启动或停止&#xff0c;以管理员身份运行cmd&#xff0c;进入命令行执行如下指令&#xff1a; &#xff08;1&#xff09;启动myaql net start mysql&#xff08;2&#xff09;…