GPT状态和原理 - 解密OpenAI模型训练

目录

1 如何训练 GPT 助手

1.1 第一阶段 Pretraining 预训练

1.2 第二阶段:Supervised Finetuning有监督微调

1.3 第三阶段 Reward Modeling 奖励建模

1.4 第四阶段 Reinforcement Learning 强化学习

1.5 总结

2 第二部分:如何有效的应用在您的应用程序

2.1 一些技巧可以提升GPT的表现

2.1.1 如果任务需要推理,不能指望 transformer 对每个标记进行太多推理,必须将推理分散到越来越多的标记上。

2.1.2 可以问它:“你完成任务了吗”,来推动它进行检查。

参考文献:


【精校版】Andrej Karpathy微软Build大会精彩演讲: GPT状态和原理 - 解密OpenAI模型训练_哔哩哔哩_bilibili

在B站上看的一个视频,简单记一下笔记。 

1 如何训练 GPT 助手

训练过程分为4个阶段,其中第一个阶段属于 PreTrain,而后面3个阶段属于微调 FineTune。,在FineTune的3个阶段(Supervised FineTuning + Reward Modeling + Reinforcement Learning),模型按SFT->RM->RL的方向进化

1.1 第一阶段 Pretraining 预训练

所有计算工作基本发生的地方,是训练计算时间的 99%。

在实际训练数据之前,还需要经过一个预处理步骤即标记化

1.2 第二阶段:Supervised Finetuning有监督微调

个人理解:这个地方我的理解是,其实GPT并不是一个问答模型,它本质上还是用来预测文档的下文的,只不过我们把训练数据的文档里面写了一些问题和答案,然后这样GPT预测文档下文时就相当于是回答了我们的问题。

基础模型不是助手,他们不想回答你的问题,他们只是想完成文件,

在有监督的微调阶段,我们将收集少量但高质量的数据集。在这种情况下,将要求人工承包商收集及时和理想响应形式的数据,将收集很多,通常是上万个。

1.3 第三阶段 Reward Modeling 奖励建模

进入 RLHF,从人类反馈中强化学习,包括奖励建模和强化学习。在奖励建模中,是将数据收集转变为比较形式

transformer 会根据prompt的完成程度预测一些奖励,所以它对每个完成的质量进行了猜测。我们将其制定为损失函数,并训练模型做出与来自所有承包商比较的基本事实一致的奖励预测,这使我们能够对提示的完成程度进行评分

奖励模型本身作为助手不是很有用,但是对于下面的强化学习阶段非常有用。因为有了奖励模型,所以可以对任何给定提示的任意完成的质量进行评分

1.4 第四阶段 Reinforcement Learning 强化学习

针对奖励模型进行强化学习

1.5 总结

基础模型有很多熵 

伯克利的一个团队做的排名:

2 第二部分:如何有效的应用在您的应用程序

人在写作的时候,有一个独立的过程,几乎是在检查正在写的东西,并判断它是否好,然后也许删除了,也许重新构造,也许对结果感到满意,有很多的内心独白。

但是,在训练 GPT 的时候,这样的句子是什么样的?

从 GPT 的角度,只是一个标记序列(tokens)。当GPT在接收到一个输入,比如你给出的主题。它会生成一段与输入相关的文本,GPT的目标是预测下一个词,所以它会连续生成一串词,形成一段连贯的文本。

他们不知道他们不知道什么,不知道自己擅长什么、不擅长什么,不检查任何东西。它不会纠正自己的错误,它只是产生抽样的标记序列

他们的头脑中没有单独的内心独白流,他们正在评估正在发生的事情。但他们确实有认知优势,拥有大量基于事实的知识涵盖大量领域。

prompt 只是弥补了这两种架构之间的认知差异。

2.1 一些技巧可以提升GPT的表现

2.1.1 如果任务需要推理,不能指望 transformer 对每个标记进行太多推理,必须将推理分散到越来越多的标记上。

设定步骤来引导GPT展示其工作过程(Chain of Though)

此外可以通过说“let's think step by step”,使得transformer 有点像展示它的工作

2.1.2 可以问它:“你完成任务了吗”,来推动它进行检查。

人类的工作里,可以开始写,没有成功,可以再试一次;多次尝试,选择一个最好的

而 transformer遇到死胡同则会继续走下去,即使他们知道会失败

参考文献:

【精校版】Andrej Karpathy微软Build大会精彩演讲: GPT状态和原理 - 解密OpenAI模型训练_哔哩哔哩_bilibili

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

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

相关文章

Linux——匿名管道

为什么要有进程间通信? 在操作系统中,进程是独立运行的程序,多个进程之间要想互相协作完成任务,就需要进程间通信。 什么是进程间通信? 数据传输:一个进程需要将它的数据发送给另一个进程资源共享&#…

C语言数据结构之链表

目录 前言 \color{maroon}{前言} 前言1.链表的概念及结构2.链表的分类3.无头单向非循环链表的实现4.带头双向循环链表的实现5.顺序表和链表的对比 前言 \color{maroon}{前言} 前言 在上一篇博客中我们提到,线性表包括顺序表和链表,顺序表在上篇博客中已…

普通人切入抖音的黄金赛道 软件自动生成文字动画视频 3天15个作品涨粉5000

文字动画,就是导入一段文字,用软件可以自动生成一条文字动画视频,因为这是软件自动生成的,所以过原创的话是很简单没什么问题的。 这种视频的特点是什么? 首先第一点就是非常简单,找好素材直接导入软件就可以自动生成…

java-Spring-入门学习-第二天(单例模式和多例模式)

目录 Bean作用域 单例模式(默认可以不写) Spring下的 AutoWired 依赖注入 JaveEE下的 Resource 依赖注入 多例模式 Bean作用域 ​在Spring框架中,Bean是按照作用域来创建的,常见的作用域有两种:Singleton 和 Prototype。Singleton (单例…

STM32 HAL库F103系列之ADC实验(一)

ADC工作原理: 1、输入通道: 2、转换序列: A/D转换被组织为两组:规则组(常规转换组)和注入组(注入转换组) 规则组最多可以有16个转换,注入组最多有4个转换 规则组和注入…

【GIS面试】GIS算法介绍

作者:后端小肥肠 1. 前言 在地理信息系统(GIS)的领域中,算法扮演着极其重要的角色,它们使得复杂的空间数据分析成为可能。无论是在环境科学、城市规划,还是在灾害管理等众多领域,高效和精确的算…

【信号与系统 - 10】拉普拉斯变换

1 定义 周期信号的傅里叶变换那篇提到了&#xff1a; F ( j w ) ∫ − ∞ ∞ e − j w t f ( t ) d t F(jw)\int^{\infty}_{-\infty}e^{-jwt}f(t)dt F(jw)∫−∞∞​e−jwtf(t)dt 这个定义式需要满足绝对可积&#xff0c;即 ∫ − ∞ ∞ ∣ f ( t ) ∣ d t < ∞ \int…

C++11 数据结构5 队列的概念,队列的顺序存储,实现,测试

一&#xff0c;队列的概念 队列是一种特殊的受限制的线性表。 队列&#xff08;queue&#xff09;是只允许在一端进行插入操作&#xff0c;而在另一端进行删除操作的线性表。 队列是一种先进先出的t&#xff08;First In First Out&#xff09;的线性表&#xff0c;简称FIF…

这8款3DMAX建筑室内插件一个都不能少!

3DMax是一款经典的建筑室内场景设计和渲染软件&#xff0c;它能够帮助3D设计师、建筑师和艺术家实现他们的创意概念。本文推荐的8款建筑室内插件&#xff0c;将使3DMax如虎添翼&#xff0c;大大节约设计师们的工作时间&#xff0c;提高工作效率。 1.3DMAX楼层平面图生成器&…

idea使用plantuml插件报错(类图):Dot Executable: /opt/local/bin/dot

报错提示&#xff1a; 解决方式&#xff1a; 方式一: 直接设置Remote Rendering即可 &#xff08;使用服务器地址&#xff09; 无特殊要求可直接使用默认提供的服务地址&#xff0c;也可自行搭建服务替换地址。 自行搭建服务可参考&#xff1a; 在本地Windows 11 系统的桌面…

C++ 程序的内存分配

C 程序的内存分配 C 程序的内存分配栈堆数据区程序代码区参考 C 程序的内存分配 一个 C 编译的程序占用内存分为以下几个部分&#xff08;从高地址到低地址&#xff09;&#xff1a; 内核空间&#xff1a;由操作系统创建并控制&#xff0c;用户代码不能读写。栈&#xff1a;由…

【ds】替换空格

用‘%20’替换空格 var replaceBlank (charArr)> {if (!charArr || charArr.length 0) return var len charArr.lengthlet spaceLen 0for (let i 0; i < len; i) {if (charArr[i] ) {spaceLen}}var extraLen spaceLen * 2 // -> 20% 每一个空格需要增加2个ch…