从GPT到ChatGPT:我们离那个理想的AI时代到底还有多远?

news2024/11/26 15:22:15

写在前面

在2023年新年伊始,科技界最为爆火一款产品无疑是OpenAI公司出品的ChatGPT了,作为一名NLP领域从业者,似乎也好久没有看到如此热闹的技术出圈场景了。诚然从现象来看,无论从效果惊艳度、社会效应、商业价值、科技发展方向的任何一方面来说,ChatGPT都是一个里程碑式的作品,更是AI发展的一记强心剂。

本文旨在简单过一下相关模型原理,基于之前的Transformer相关知识点,快速了解相关原理。

GPT

GPT论文

要想了解chatGPT的原理,初代GPT是一个不能被忽视的模型。

GPT发布在Transformer之后、BERT之前,GPT其实是由Transformer的Decoder部分演变而来,而BERT则是由Transformer的Encoder部分发展而来,两者走了不一样的技术路线,但事实上,在ChatGPT出来之前,BERT的影响范围实际上是要大于GPT的。或许我们能从GPT的原理以及它与BERT的差异中找到答案。

在Transformer出来之后,OpenAI团队就在思考一个问题,NLU的任务就很多啊,但是现实存在的能够用于训练这些任务模型的已标注数据却很少,反倒是大量的未标注数据没有得到好的利用,那我们能不能用这些未标注数据训练一个大的预训练模型,然后再利用少量的标注数据在不同任务上去做微调呢?听起来好像是可以的,那就试试呗!

OpenAI选用了Transformer中的Decoder部分来作为模型的基础,因为Encoder部分只是一个特征提取器,并不具备生成能力,而Decoder刚好符合“generative pre-training”的设想(找补的后话了,GPT早于BERT,站在当时的时间节点上,GPT只是先选择了一个技术路线,后来者BERT又选择了另外一条而已。)

OpenAI团队认为在实现这样一个生成式的预训练模型的路上有两个问题需要解决:

  1. 目标函数怎么选?
  2. 在不同的子任务上如何微调?

论文中给出了答案:

因为是预训练过程是无监督的,目标函数采用类似于w2v中才用的方式,其实也就是最大化一个似然函数(核心是语言模型中窗口内单词一起出现的联合概率)。在有监督的子任务上微调时,往往在最后一层Decoder层输出上做一个softmax。在不同任务上的微调如下图所示:

image-20230209154228331

此外论文中还提到一点就是GPT的网络层数是12层、隐藏层维度768,后面的BERT-base也正是基于此做的对比。

GPT2

GPT2论文

GPT2发布在BERT之后,彼时BERT已经大放光彩,GPT既然选了生成式预训练这条道,就得继续走啊,然后GPT2干了件啥事呢?训练更大的模型,大力出奇迹,15亿的训练参数,然后提出我这种方式可以“zero-shot”(模型在预训练完成之后不需要任何下游任务的标注数据来进行微调,而是直接进行预测)啊,这就是它的卖点之一。

整体原理上GPT2与GPT1没有太大区别,有几个细节可以稍微看一下:

  • 因为是zero-shot,所以训练数据里边的那些分隔符就都不能要了,因为也没有对应的标签了;
  • 训练数据没有使用 Common Crawl 的公开网页爬取数据,因为信噪比太低,作者去Reddit 上爬取了大量数据,然后选取了karma值不小于3的进行保留;
  • 举个机器翻译的例子,要用 GPT-2 做 zero-shot 的机器翻译,只要将输入给模型的文本构造成 translate english to chinese, [englist text], [chinese text] 就好了。比如:translate english to chinese, [machine learning], [机器学习] 。这种做法就是日后鼎鼎大名的 prompt。

最后看一下GPT2的参数量:

image-20230209165508340

GPT3

GPT3论文

GPT3的论文名字《Language Models are Few-Shot Learners》有点意思哈,看得出来,GPT3其实是想要沿用GPT2的卖点,但是完全的zero-shot其实效果上又没有那么的好,最好还是给一点标注数据(Few-Shot),这样在不同的子任务上的微调会见效更快。

GPT3作者们发现:预训练+微调的模式虽然在NLP很多领域都取得了不错的成绩,但是大多数时候我们还是需要一定的标注数据用于特定任务上的微调,但是相比之下人类的学习过程却不是这样,人类通常只需要几个例子或者简单的指令就可以完成一项新的语言任务。于是作者训练了一个1750亿参数的模型,然后不在特定任务上做任何的微调或者梯度更新(可以认为是超巨量的可学习参数已经学到了海量的知识,足以应对不同的任务)。

具体我们看看怎么做的:

文中提出一个新的叫法:meta-learning,其实也就是在多种不同形式的数据上进行学习。如下图所示

image-20230209233302989

模型基本还是上一代的模型,然后在我们使用的时候,只需要给一定的提示即可,我们可以看到在不同数量的提示下,实验得到的结果:

image-20230209233859153

看得出来,给的提示越多,其效果越好。我们可以具体看到三种提示的直观对比:

image-20230209234152604

其他的好像没有什么特别需要说明的,哦,有一点,GPT3在GPT2的基础上做了一个改变(在Transformer层中交替使用稠密和本地带状稀疏注意力机制),为了减少过拟合的发生。然后贴一个各种GPT3的网络参数吧。

image-20230210000028789

然后再就是一大堆实验,这里也不再复述。然后有意思的是在文中也提到了对这种生成式大模型的一些可能的影响的讨论。包括:

  • 模型可能会误导人啊
  • 模型可能会造假啊
  • 模型可能会有威胁的行为啊
  • 模型会有性别歧视和宗教偏见啊

总之这些讨论我觉得还是挺有意义的,展现了一个负责任团队的社会责任感。

Instruct GPT与ChatGPT

Instruct GPT论文

ChatGPT 的论文还没有发,但是官网的论文基本就说明了是基于GPT3.5而来,其实也就是基于上面的Instruct GPT而来。我们可以简单来看一下他的原理。当然我也更加推荐张俊林大佬对于它的解读,或者沐神的论文精读视频。但最好的还是我们自己去读一读原论文,印象更加深刻。

我让ChatGPT翻译了一下论文的摘要:

这篇论文表明,让语言模型变得更大并不能让它们更好地遵循用户意图。例如,大型语言模型可能生成不真实、有毒或对用户无益的输出。换句话说,这些模型与用户不一致。本文通过使用人类反馈进行微调,展示了一种将语言模型与用户意图对齐的方法,可以在多种任务上使用。首先,我们使用标签写的提示和通过OpenAI API提交的提示,收集一组标签示例,以表示所需的模型行为,然后使用监督学习对GPT-3进行微调。然后,我们收集了一组模型输出的排名数据,使用人类反馈的强化学习对这个监督模型进一步微调。我们称结果模型为InstructGPT。在我们的提示分布中的人类评估中,1.3B参数InstructGPT模型的输出被认为比175B GPT-3更好,尽管参数数量少100倍。此外,InstructGPT模型在真实性和减少有毒输出生成方面表现得更好,同时在公共NLP数据集上的性能影响最小。尽管InstructGPT仍然会犯一些简单的错误,但我们的研究结果表明,使用人类反馈进行微调是将语言模型与人类意图对齐的有前途的方向。

整个模型的基本原理如下图,我在上面做了一些标注。
在这里插入图片描述

可以看出来,模型主要有SFT+RM+RL构成,也就是官方说的GPT3.5+RLHF,SFT部分需要标注数据,也就<prompt,answer>对,然后RLHF部分则需要人类对机器生成的answers打分排序,以训练RM模型。具体还有一些关于损失函数的细节大家可以去看原文。(结合了PPO、LLM等多个部分的loss)

当然在原文中作者对安全性、有效性、精细度的讨论也有,比如在完全安全、不产生有毒数据、不睁眼说瞎话方面做的还是不够,这也的确是现阶段ChatGPT存在的问题。但总体来说,我们在这条茫茫求索之路上又向前走了一步了,巨人的肩膀又高了一节。

写在最后

本文并没有对GPT的原理进行庖丁解牛式的解读,只是将一些比较重要的点拼凑了一下,体系感还是不够强,逻辑完整性也有待重新梳理补充。大家如果需要详细深入了解,建议精度文中所提到的四篇论文,以获取更多信息。

回到文章标题的问题:我们离那个理想的AI时代到底还有多远?每个人心中或许都有不一样的答案,我的答案是:革命尚未成功,同志仍需努力!

附:ChatGPT睁眼说瞎话的样子。。。

image-20230208152211347

image-20230208152244407

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

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

相关文章

C++【多态】

文章目录1、多态的概念2、多态的定义及实现2-1、多态的构成条件2-2、虚函数2-3、虚函数的重写2-4 多态样例2-5、协变2-6、 析构函数与virtual2-7、函数重载、函数隐藏&#xff08;重定义&#xff09;与虚函数重写&#xff08;覆盖&#xff09;的对比2-8、override 和 final&…

spring的简单理解

目录 1 .ioc容器&#xff08;控制反转&#xff09; 2. Aop面向切面编程 3. 事务申明 4. 注解的方式启动 5. spring是什么与他的优势 6. 代理设计模式&#xff08;比如aop&#xff09; 7. springmvc中相应json数据 8. 使用lombok来进行对代码的简化 9. 使用logback记录…

学习SpringCloudAlibaba(二)微服务的拆分与编写

目录 一、单体架构VS微服务架构 1.单体架构 ​&#xff08;1&#xff09;.单体架构的优点 &#xff08;2&#xff09;.单体架构的缺点 2.微服务架构 &#xff08;1&#xff09;微服务的特性 &#xff08;2&#xff09;微服务架构图 &#xff08;3&#xff09;微服务的优点 …

大数据之------------数据中台

一、什么是数据中台 **数据中台是指通过数据技术&#xff0c;对海量数据进行采集、计算、存储、加工&#xff0c;同时统一标准和口径。**数据中台的目标是让数据持续用起来&#xff0c;通过数据中台提供的工具、方法和运行机制&#xff0c;把数据变为一种服务能力&#xff0c;…

ChatGPT使用、原理及问题

引言 2022年11月30日&#xff0c;OpenAI公布了他们的新产品&#xff1a;ChatGPT。随后ChatGPT火得一塌糊涂。通过b站搜索“ChatGPT”的结果&#xff1a; 搞学术的想着从它身上找点创新&#xff0c;吃瓜群众吃着这锅热瓜&#xff0c;想赚钱的眼睛贼亮&#x1f31f;&#x1f31f…

C++11中function和bind的用法

C11中function和bind的用法一、简介二、std::function的用法2.1、保存普通函数2.2、保存lambda表达式2.3、保存成员函数三、std::bind用法总结一、简介 在设计回调函数的时候&#xff0c;无可避免地会接触到可回调对象。在C11中&#xff0c;提供了std::function和std::bind两个…

云端IDE系列教程6:初识 WeTTY,想说爱你不容易

原文作者&#xff1a;行云创新产品总监 John 概述 今天我们接着上一期的文章《玩转云原生 Terminal 之 TTY 的前世今生》&#xff0c;继续来聊一聊云原生 Terminal。为了在 TitanIDE 上玩转云原生 Terminal &#xff0c;首先找到了 WeTTY&#xff0c;在这个过程中&#xff0c;…

ITSM | 限时优惠,帮助您的团队终结不良服务管理!

不良服务管理&#xff08;Bad Service Management &#xff0c;简称BSM&#xff09;是一种糟糕的状况&#xff0c;困扰着使用传统ITSM工具的公司。现在&#xff0c;它已经在许多IT团队中蔓延&#xff0c;并迅速攻击业务的其他领域&#xff0c;使他们无法处理来自不同业务领域的…

ROS2机器人编程简述humble-第四章-AN OBSTACLE DETECTOR THAT USES TF2 .1

如何检测一个障碍物呢&#xff1f;视觉、雷达&#xff1f;可视化效果如何&#xff1f;机器人所装备的传感器例如感知设备&#xff0c;主要负责环境的获取和识别。然后&#xff0c;结果发送给电机控制运动&#xff0c;在环境中自主、智能决策和规划。需要先简单看一下仿真可视化…

一篇带你MySQL运维

1. 日志 1.1 错误日志 错误日志是 MySQL 中 重要的日志之一&#xff0c;它记录了当 mysqld启动和停止时&#xff0c;以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时&#xff0c;建议首先查看此日志。 该日志是默认开启的&…

全栈自动化测试技术笔记(二):准备工作的切入点

自动化测试技术笔记(二)&#xff1a;准备工作的切入点 上篇整理的技术笔记&#xff0c;聊了自动化测试的前期调研工作如何开展&#xff0c;最后一部分也提到了工作的优先级区分。 这篇文章&#xff0c;接上篇文章的内容&#xff0c;来聊聊自动化测试前期的准备工作&#xff0…

插件 sortablejs:HTML元素可拖动排序

插件 sortablejs 用于可重新排序拖放列表的JavaScript库&#xff1b;关键链接&#xff1a;npm 地址 Github 地址 安装 npm i sortablejs引入 import Sortable from "sortablejs"HTML <ul id"items"><li>item 1</li><li>item …

Sentinel降级和热点Key限流

目录 一、降级规则 &#xff08;一&#xff09;官网 &#xff08;二&#xff09;基本介绍 &#xff08;三&#xff09;降级策略实战 二、热点key限流 &#xff08;一&#xff09;基本介绍 &#xff08;二&#xff09;官网 &#xff08;三&#xff09;测试 &#xff08…

谷粒学苑第二章前端框架-2.2前端框架开发过程

一、前端框架开发过程 第一步&#xff1a;添加路由 src/router模块用来管理路由。 第二步&#xff1a;点击某个路由&#xff0c;显示路由对应页面内容 component: () > import(/views/table/index), 表示路由对应的页面&#xff0c;是views/table/index.vue页面 第三步&a…

vue的生命周期函数不能使用箭头函数

如果使用过react和vue&#xff0c;应该发现过一个问题&#xff1a;vue告诉我们不应该把方法、生命周期用箭头函数去定义&#xff1b;而在react的类组件中&#xff0c;把方法写成箭头函数的形式却更方便。 要问其原因&#xff0c;大部分人都只把他当一个理所当然的规定。但把这…

Myba tis基础2

接口代理方式代理开发方式介绍编写StudentMapper接口测试代理方式小结动态sql语句动态 SQL 之<**if>**动态 SQL 之<**foreach>**SQL片段抽取分页插件介绍分页插件的使用分页插件的参数获取小结MyBatis的多表操作多表模型介绍多表模型一对一操作多表模型一对多操作多…

Python创意作品说明怎么写,python创意编程作品集

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;Python创意作品说明怎么写&#xff0c;python创意编程作品集&#xff0c;现在让我们一起来看看吧&#xff01; 1、有哪些 Python 经典书籍 书名&#xff1a;深度学习入门 作者&#xff1a;[ 日&#xff3d; 斋藤康毅 …

《Linux运维实战:Centos7.6部署rabbitmq3.9.16镜像模式集群》

一、RabbitMQ集群的三种模式 RabbitMQ有三种模式&#xff1a;单一模式&#xff0c;普通集群模式&#xff0c;镜像集群模式。 单一模式&#xff1a;即单机情况不做集群&#xff0c;就单独运行一个rabbitmq而已。 普通集群模式&#xff1a;普通集群模式下&#xff0c;不同的节点…

TryHackMe-Carnage

Carnage 花了两天学了下wireshark 顺便看一下现在我的红队进程 由于ad在进攻性渗透测试当中已经早早收入囊中&#xff0c;这让我在红队进度中变快 现在&#xff0c;红队路径剩下的room应该都算是在整个path当中比较有难度的了&#xff0c;我不经意的查看了剩下的部分room&…

基于昇腾计算语言AscendCL开发AI推理应用

01 初始AscendCL AscendCL&#xff08;Ascend Computing Language&#xff0c;昇腾计算语言&#xff09;是昇腾计算开放编程框架&#xff0c;是对底层昇腾计算服务接口的封装&#xff0c;它提供运行时资源&#xff08;例如设备、内存等&#xff09;管理、模型加载与执行、算子…