ChatGPT原理简介

news2024/11/26 16:23:41

承接上文GPT前2代版本简介

GPT3的基本思想

GPT2没有引起多大轰动,真正改变NLP格局的是第三代版本。

GPT3训练的数据包罗万象,上通天文下知地理,所以它会胡说八道,会说的贼离谱,比如让你穿越到唐代跟李白对诗,不在一个频道上,他说的你理解不了,你说的他理解不了。

GPT3太泛了,把世界上所有的东西都给训练了,不受约束条件的、无法无天,给它发一个指令,它抗拒指令,按照自己的思维模式去做,比如我问一个问题,接下来你用python代码的方式来回答我,它可能不按照这个模式来,不受我的约束。

这就是GPT3,不按照我们自己的思维去做我们自己的事情,也是给后面的ChatGPT做了一个铺垫。

GPT3 三种模式对比

  • Zero-shot

不管我输入什么,后面都会加上提示,比如把英文转换成法语,接下来就输出了法语。

  • One-shot

为了让它更好的理解我说的意思,我给它举了一个例子。

举一个例子,这个例子作为输入,我让你干什么,我给你举一个例子,你回答的时候可以参考这个例子。

这些例子都是我写到输入对话框中,一起给到模型,模型基于我写的例子,再往下输出。

  • Few-shot

Few-shot是举多个例子。

这就是GPT3的基本思想。

Few-shot像在下游任务中又做了个简单的训练,比如举了三个例子,即三条数据,相当于把下游任务融入到了这个任务当中。

GPT3本质上还是一个生成式模型,它不需要下游任务,下游任务可以放到Few-shot或放到One-shot中。

横轴表示语言模型的大小, One-shot和Few-shot之间还是存在差异的,尤其是模型越大的时候,差异越明显,Few-shot效果更好一些。

GPT3网络结构没有什么亮眼的,就是把Transformer做的更大了。

NLP哪家强,就看谁的模型更大,谁的数据更多。

OpenAI训练的GPT-3 1750亿个权重参数,每批次的训练数据大小是3.2M,这么大的量级,目前只有OpenAI大型GPU集群才能玩的转。

准备训练数据

准备数据不难,但数据又多又干净才不容易准备。

OpenAI对收集到的数据有质量的判断,对于网页的爬取会设计一些算法去评估哪些网页要求比较低或可信度比较低的,它会把这些网页过滤掉,只爬一些有价值的网页。

GPT三代算法告诉我们一件事,这种生成式语言模型能解决一切的事情,即以不变应万变。以后的趋势是GPT这个系列一家独大,可能再过10年NLP的其他分支就不存在了,因为一个通用大模型可以解决所有的事情,干嘛还要每个NLP分支做自己的东西呢。

CODEX

程序猿一般都是面向百度、Google编程,而GPT面向github编程。

使用GPT-3模型,训练数据是所有的github数据,进行重新训练(注意不是微调)。

github和OpenAI都是微软的,所以CODEX拿到github的数据很容易,然后进行清洗和训练。

10年之内不用考虑程序猿能否被替代,因为ChatGPT以及现在的GPT还不能解决特别多的实际任务。

举例说明什么是有监督学习?

小时候家里没钱买电脑,就经常上网吧,我爸就教育我不要去网吧,我特别理解我爸,我还没嫌他穷呢他还嫌我上网吧。我爸教育我,你这么做是不对的,我爸给了明确的标签,有了标准答案,我下次去网吧的时候,就会想一想是我不对,不是我爸不对,那这次我就不去网吧了,这是一个有监督学习。

人工的给了一些标注,在预训练模型基础之上继续去学一学正确的说话逻辑,学一学怎样正确的回答问题。

ChatGPT提出的第一件事情就是不能再用无监督去做了,无监督不确定的东西太多了,它生出来的东西是好是坏都不好说,所以要限制它,它的语言能力已经非常强了,我们现在要让它继续去完成我们的任务,学我们说的话,办我们说的事,所以ChatGPT是有监督训练。

模型越大、参数越大并不是越好,文本模型越大,参数越多,结果越专一,越专一的结果可能并不是想要的,比如随便问一句话,永远回复的一样。

训练模型,希望模型学人类说话的逻辑,说人话办人事,让机器更像人,更符合人的逻辑的给你解释这些东西,而不是像原来的GPT3只是纯生成的模型,那下一步应该怎么办?

大家在问ChatGPT问题的时候,后面加一个提示,这些提示是经常问的问题,这些问题由人工标注,人工来回答。有了输入和输出,接下来训练GPT3.5模型,继续在它无监督的基础上再去做这个有监督任务,有监督学习就是我们希望它输出啥,就用这样的数据去训练它。

无监督学习任务中不可能有一个学习的过程,而有监督首先要解决的就是敏感话题,比如跳楼是一个不好的,得告诉你不要去跳楼。

  • 第一个要标注答案,不要是有“毒”的东西

  • 第二个应该是跟我们聊天近似的,要一些有感情的东西,而不是像专家一样教育我

这得需要有监督去做,通过有监督解决无监督解决不了的事情,要说人话、办人事。

强化学习

先来玩个游戏,来了解下什么是强化学习,

右边有一个飞船,想降落在2个旗子当中,某一时刻的飞船可以往左走,也可以往右走,那飞船应该往哪边走?

上图中的飞船想要落到两个棋子中间需要往左走,飞船往左走的时候给它一个奖励,表示走对了,如果往右走了,奖励就很低,表示走错了。

飞船降落的过程,不要把它想象成一个连续的,当它是离散的,比如它是由1000个step组成,每一个step都有当前的一个状态 当前位置以及action(action表示接下来往那边走)这些属性。

我们所关注的东西,并不是一个片面的,即并不是每一步走的怎么样,而是要看最终的一个累加的结果。

这是目标函数,希望全局奖励越高越好。

不关注每一步怎么样,而是看全局,飞船完成一个完整的过程之后总的奖励,这就是强化学习基本的思想。

有这样一个序列,{s1,a1,s2,a2,....,st,at},表示飞船在每一个step的状态和action,

类似于见人(s1)说人话(a1),见鬼(s2)说鬼话(a2)。

那每一步如何走才能得到更多的奖励呢,这就需要训练神经网络了。

把a1输入到神经网络中,不需要知道a1是人还是鬼,神经网络输出这个状态下的预测结果是什么。

或者把这个图片作为输入到神经网络中,

神经网络会告诉飞船往左走。

状态和动作可以跟神经网络联系在一起,动作做的对做的准奖励才高。

为了让奖励做的高,神经网络的权重参数要不断更新。

通过奖励最高这种机制来训练神经网络,让神经网络知道输入一个状态,怎么样输出一个好的答案。

在ChatGPT中,状态是你输入的一句话,action是输出的一句话。

象棋、围棋等游戏也都可以设置奖励,阿法尔狗大战李世石就是用强化学习来做的。

用强化学习,得需要有什么?

得有一个奖励,得知道这一步到底做的对不对,做的不对的话,再改正,所以需要单独训练一个可以预测奖励的模型。

输入一句话到奖励模型,输出一个reward(奖励值)。

为什么ChatGPT没有用纯的监督学习来训练?不用强化学习行不行?

  • 什么是监督学习

比如我上网吧,我爸给我一顿揍,这是监督学习,我爸告诉我,我干这件事情是错的。

我爸揍我的强弱程度决定了这件事我是错的多还是错的少,这是监督学习,直接告诉你这件事情是对的还是错的。

  • 什么是强化学习?

我去网吧了,我爸回家哭了,我没哭,我寻思我爸咋哭了,是不是我哪做的不对?是不是以后不上网吧就行了呢? 强化学习并不是哪件事情是对还是错,而是告诉你,你做的这个东西,可能是好的,可能也是不好的,但没有告诉你有多不好或有多坏,你接下来怎么去更新并不是一个固定的机制,需要我去思考的,不是固定的。

再比如导师给你安排了一个项目,但没有说具体该怎么做。

导师说:你态度不端正,思考问题的方式不行。

说你不对,但没有告诉你哪块不对,也没有告诉你这个项目第一步怎么做,第二步怎么做,不会告诉你具体的每一件事。

如果导师告诉你就是有监督学习,你输入一个东西,我告诉你答案,但是没有锻炼到你。

你回到家去思考,想到一个解决方式,就先这么改进吧,改进完之后,给导师看,导师又给一顿骂,在反复找导师的过程中会思考一个问题,怎么做更迎合导师的思维。

强化学习并不是一个固定的输入输出模式,怎么做能让输出的东西更符合想要的答案,强化学习不是给你的一个答案,而给的是导师的满意程度。

需要额外再训练一个奖励模型,第一步少不了人工标注。

比如随便问一个问题“你瞅啥?”,产生四种答案:瞅你咋滴、没瞅啥、我就随便看看、你说啥。

导师对4个答案打分,对于每一个输出都要人工打分,人工打分之后,再做一个排序操作。

人工打分需要知道什么样的打分高,什么样的打分低。

怎么训练奖励模型,输入一句话,输出一个分值?

正常的语言模型要输出接下来预测的每一个词的概率,比如一共有3万个词,每个词的概率是多少。 奖励模型不是这样了,它把最后的输出层改了,去预测一个得分值。

奖励模型还是基于Transformer去做的,只是以前是一个分类任务,3万个词,预测每个词的得分,现在变成了预测一个得分值。

通过这个损失函数去猜怎么训练的,这个奖励模型是一个小的6亿参数的GPT。

x是“你瞅啥”,

Yw是得分最高的那一个,

Yl是得分较低的那一个,

w是“瞅你咋滴”,

l是“我就随便看看”。

得分最高和最低两者差异越大越好,

sigmod函数,差异越大,得到的结果越接近1。 得分高的和得分低的没啥差异的化,可能就接近0,效果就越差。

传入log对数函数中,越接近1的,损失越小,越接近0的 ,损失越大。

标注分高的和标注分低的,起码在奖励得分上要高出一个等级,越高越好。 输入和输出是由人工标注的。

比如k=4,表示4句话,比如选“瞅你咋滴”和"随便看看"以及"没瞅啥","你说啥",从中选择2个, 所有的输出结果都是由人工标注的,在所有标注中任选其中的2个,k个里面选2个来计算,损失越低越好。

奖励模型怎么去做,首先人工标注,想要的,得分高点;不想要的,得分低点。

奖励模型并不需要特别大的模型,若是1750亿权重参数的模型,验证集准确率很低,效果一般,小版本6亿参数的模型却恰恰好。

继续训练这个模型得到一个初始化模型,最后的一个圈层 当中正常是要做一个多分类,现在把多分类用FC预测一个得分值。

往ChatGPT模型中输入“你瞅啥”,输出“没瞅啥”,

输出的东西要往奖励模型中传入,奖励模型会帮你输出一个分数,分数低的话,要更新ChatGPT模型的权重参数。

通过强化学习的方式就可以无限制的更新我们的模型了, 奖励模型会判断你输入给我的东西是不是我想要的,是我想要的,分高一点,不是我想要的,分低一点, 根据分的高低更新ChatGPT。

比如经过了一个epoch(一个epoch等于使用训练集中的全部样本训练一次的过程)之后,ChatGPT更新了一次,奖励模型也要进行更新,交替训练,交替更新,这就是强化学习当中的基本思想。

ChatGPT和奖励模型都是在原始的GPT中衍生过来的。

我们需要的模型就是通过RL来更新的,模型输出的句子通过奖励模型得到得分,再反馈,而且模型更新一阵后,也需要再更新奖励模型。

目标函数

这是目标函数,首先要更新的是ChatGPT模型,这是最核心的,模型在更新的过程中,希望x传入这个模型之后得到的奖励越高越好,对应着第一项越大越好,

第一项后面是一个减号, 对于目标函数来说,希望减去的第二项越小越好。

贝塔系数(β)是一个权重, SFT表示有监督渲染出来的模型,把x输入之后,有监督模型会帮我们生成一个结果,强化学习ChatGPT也会生成一个结果,强化学习跟有监督之间的一个pk,两者做了一个除法,输出是一个句子,可以把输出一个句子叫输出一个分布或者输出它的概率分布,这时强化学习认为输入这个句子每个词的概率分布合在一起。

右边是有监督模型,它输出的句子每个词的概率分布合在一起。

计算两个分布之间的差异。

前面是一个对数,对数当中只有为1的时候最小。

除法2/2=1、3/3为1,两者旗鼓相当。

强化学习思维会比较发散,那怎么做才能得分高?可能会尝试很多东西。

类比怎么让导师满意我?我给他转100万和用监督模型学习,结果导师可能都高兴, 但现在越学越离谱了,因为强化学习不太可控,强化学习说你把导师揍一顿,他下次就不敢说你了,会和人工标注的(有监督)差异非常大。

强化学习要探索,我不知道正确答案,但我不按套路出牌,我可以任意去发挥,它很容易发散,比如我从9楼跳下去,它说你从天台跳,9楼可能摔不死。

需要降低强化学习和有监督的差异,强化学习太离谱了,别让它那么离谱,减去这个差异,要以人为主,跟有监督模型(人工标注的)做对比,你要去学怎么样接近人类的思维。

这个是泛化能力,之前是没有的,额外做了拓展,即做了一个对比实验。

模型能生成你的对话,但模型不仅仅生成对话。

类比你的体育天赋特别好,一般跑步跳远很棒的人,踢足球也是很好的。

加了一些下游任务,在不同的下游任务里面也要预测的好,比如情感分析、机器翻译、文本摘要,在这些例子中也会做的不错,所以叫它泛化能力。

就在当前这个前提上,可能人家又加了一些业务场景,在其他业务场景中也要做的好,这就是一个多目标损失函数 ,而不仅是一项做的好。

强化学习要以人为主,尽可能跟有监督是类似的,最后再结合一个泛化能力,应用到不同的拓展任务当中,效果也要好才行。

上面所将的ChatGPT思想出自2020年的一篇论文。

它是做文本摘要的,怎么把文本摘要做的好?

第一步:

人工的去收集一些数据,这个文本应该有哪些摘要。

在语言模型当中再加上下游任务。

第二步:

训练一个奖励模型,奖励模型希望得分高的和得分低的差异越大越好,要让模型知道这样一个事。

再用PPO损失函数去渲染整个模型。

OpenAI做了个分析

GPT、给GPT加了提示、有监督模型、PPO(强化学习思想)、ptx(泛化能力)这几个模型的对比效果图。

第一个比较维度,问ChatGPT能不能争取有效的回答。

第二个维度,有没有满足限制条件,比如请你用一个女生的口吻来和我说话。

第三个维度,模型输出的有没有太离谱的,为什么解释以人本,其实就是以这个图思考的,

第四个维度,能不能帮我们解决常见的事情,比如充当一个助手。

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

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

相关文章

JavaScript如何实现上拉加载,下拉刷新?

一、前言 下拉刷新和上拉加载这两种交互方式通常出现在移动端中。本质上等同于PC网页中的分页,只是交互形式不同。开源社区也有很多优秀的解决方案,如iscroll、better-scroll、pulltorefresh.js库等等。这些第三方库使用起来非常便捷。我们通过原生的方式…

(13)ADDA

AD(Analog to Digital):模拟-数字转换,将模拟信号转换为计算机可操作的数字信号,ADC模拟-数字转换器 DA(Digital to Analog):数字-模拟转换,将计算机输出的数字信号转换…

Spring MVC 框架

Spring MVC 框架 Spring MVC 简介Spring MVC 概述 Spring MVC入门案例案例步骤案例总结Bean 加载控制 请求与响应RequestMapping 设置请求路径请求参数五种类型参数传递普通参数POJO 数据类型嵌套POJO类型参数数组类型参数集合类型参数 JSON 数据传输参数日期类型参数传递响应 …

WPF MaterialDesign 初学项目实战(5):设计首页

原项目视频 WPF项目实战合集(2022终结版) 25P 其他内容 WPF MaterialDesign 初学项目实战(0):github 项目Demo运行 WPF MaterialDesign 初学项目实战(1)首页搭建 WPF MaterialDesign 初学项目实战(2)首页…

甲骨文云服务器 您无权访问任何应用程序?怎么办

背景 注册了甲骨文,登入是个难题,每次登入都这样显示 您无权访问任何应用程序 解决办法 因为我的服务器在于日本的大阪,每次登入链接即使采用书签的方法都会自动跳转到中国或者美国,所以是登入的连接错误了,我们需…

Mysql实现对某一字段排序并将排名写入另一字段

文章目录 前言一、数据库表结构和样例数据二、排名操作1.普通排名2.无间隔排名3.有间隔排名运行结果如图,我们可以看出此时的75已然变成了6,实现了跳跃: ![在这里插入图片描述](https://img-blog.csdnimg.cn/34f7c4db158945f1a709fc40d6f1843…

.Net C# 使用 EF Core

使用ORM框架可以加快开发速度,现在简单说下在.Net开发中使用微软官方提供的ORM框架 Entity Framework Core初始化数据库及数据表上手用法。 首先引入依赖项,通过Nuget服务添加如下3个包,因为当前使用的SQL Server数据库所以引入的是SQL Ser…

【Java算法题】剑指offer_01数据结构

前言 刷题链接: https://www.nowcoder.com/exam/oj/ta?page2&tpId13&type265 1. 链表 JZ24 反转链表 思路:基本操作,如下所示。 /* public class ListNode {int val;ListNode next null;ListNode(int val) {this.val val;} }…

【开源硬件篇】STM32F103C8T6核心板

STM32F103C8T6核心板 文章目录 STM32F103C8T6核心板一、STM32F103C8T6芯片1.1 STM32F103C8T6简介1.2 芯片引脚说明 二、去耦电路2.1 原理图设计2.2 原理分析2.2.1 结论2.2.2 去耦效果图2.2.3 放置距离问题2.2.3 放置位置问题 2.3 PCB设计示例 三、晶振电路3.1 原理图设计3.2 原…

(9)AT24C02存储器

AT24C02是一种可以实现掉电不丢失的存储器,可用于保存单片机运行时想要永久保存的数据信息 存储介质:E2P ROM通讯接口:I2C总线容量:256字节 I2C总线(Inter IC BUS)是由Philips公司开发的一种通用数据总线 …

linux(基础IO)下

目录: 1.追加实现重定向 2.dup2系统调用 3.程序替换是否会影响我们曾经打开的文件呢?? ---------------------------------------------------------------------------------------------------------------------------- 1.追加实现重定向…

Linux操作系统安全

账号的基本概念 用户: Linux中通过建立不同权限的用户,合理的控制和运用系统的资源,并且可以帮助用户构建自己的私人空间,更好的组织和管理自己的文件。 当创建一个用户时,系统会操作 /etc/passwd /etc/shadow 这两个文…

(10)DS18B20温度传感器

DS18B20是一种常见的数字温度传感器,其控制命令和数据都是以数字信号的方式输入输出,相比较于模拟温度传感器(如热敏电阻),具有功能强大、硬件简单、易扩展、抗干扰性强等特点 测温范围:-55C 到 125C通信接…

希望计算机专业同学都知道这些博主

湖科大教书匠——计算机网络 “宝藏老师”、“干货满满”、“羡慕湖科大”…这些都是网友对这门网课的评价,可见网课质量之高!最全面的面试网站 湖南科技大学《计算机网络》微课堂是该校高军老师精心制作的视频课程,用简单的语言描述复杂的…

二十九、搜索与图论——克鲁斯卡尔算法(Kruskal 算法,稀疏图)

Kruskal算法主要内容 一、基本思路1、基本思想与概念2、算法步骤3、注意 二、Java、C语言模板实现三、例题题解 一、基本思路 1、基本思想与概念 解决问题: 多个城市中铺公路,使城市之间可以相互联通,问如何才能让铺设公路的长度最短——铺…

二十七、搜索与图论——Floyd 算法(多元路最短路径问题)

Floyd算法主要内容 一、基本思路1、算法原理2、基本思路3、注意 二、Java、C语言模板实现三、例题题解 一、基本思路 1、算法原理 遍历每条边,通过比较进行路径更新——暴力 解决多源最短路问题,求解 i 点到 j 点的最短距离 f [ i, j, k] 表示从 i 走…

REST服务,使用Dubbo还是SpringMVC

pringMVC、Dubbo 都支持 REST 服务,那当我们要开发一个 REST 服务接口时,该如何选择? 本文将包括以下两方面内容: REST服务的写法 REST服务的应用场景 REST服务的写法 首先我们看下 SpringMVC 怎么实现一个 REST 服务&#xff1…

盘点数据仓库建设需要知道的那些事

文章目录 建设规范为何要有规范规范如何落地有哪些规范 数仓分层分层原则常见分层主题域划分原则数据模型设计原则数据类型规范**数据冗余规范**表规范处理规范命名规范生命周期管理 指标管理指标定义指标构成指标分类命名规范 建设规范 为何要有规范 无规矩不成方圆&#xff…

vue项目百度ueditor编辑器集成135和秀米,主题图标美化

目录 前言效果预览教程1. 首先下载主题美化插件2. 接入135编辑器3. 接入秀米编辑器4. 组件封装5. main.js引入样式和js文件6. 页面使用 完成! 前言 本文介绍vue项目里引入百度Ueditor富文本编辑器,集成135编辑器和秀米编辑器,使内容编辑更加丰…

09- 基于MASK-RCNN的气球检测项目 (目标检测)

要点: 一 项目介绍 基于MASK-RCNN框架的气球检测项目 项目介绍项目流程下载数据集下载MASK-RCNN框架源码MASK-RCNN模型介绍FPN层特征提取原理解读FPN网络架构实现解读生成框比例设置基于不同尺度特征图生成所有框RPN层的作用与实现解读候选框过滤方法Proposal层实现…