当前位置: 首页 > news >正文

State of ChatGPT ---- ChatGPT的技术综述

        声明:该文总结自AI菩萨Andrej Karpathy在youtube发布的演讲视频。

        原视频连接:State of GPT | BRK216HFS

        基础知识:

Transformer原文带读与代码实现icon-default.png?t=O83Ahttps://blog.csdn.net/m0_62716099/article/details/141289541?spm=1001.2014.3001.5501

How to train your (Chat)GPT Assistant?

四个主要阶段:预训练(Pretraining)、监督微调(Supervised Finetuning)、奖励建模(Reward Modeling)、强化学习(Reinforcement Learning)。.

四个阶段按照先后顺序进行。Pretraining是99%的计算发生的地方,可能花费数月的时间进行训练;其余三个阶段都属于Finetuning,花费的算力与时间都较小。

Pretraining

在训练之前,我们首先需要获取训练所需要的数据。混合多种来源的数据(已有数据集、Github、维基百科...)按照一定的算法进行采样等数据处理,形成了GPT的数据集。

在训练之前,还有一个重要的步骤,即为Tokenization(词元化),目的在于将所有的文本变换成整数的列表。词元的划分方式有所不同,GPT采用的是一种subword的方式。

在Pretraining阶段,我们一般会发生哪些步骤呢?

这里其实考验的就是Transformer的知识点了。因为之前已经讲过,我在这里就不赘述。如果不了解的同学可以去看一下我之前发的博客,里面也给了一些老师的视频链接。这是基础。

那么我们就是在Transformer的基础上训练一个模型。将我们(B,T)的词元输入到Transformer中并进行训练。如图所示 B=4, T=10。当然实际的长度会长的多。

总而言之,模型的输入是一长串的上下文数字序列,输出的是预测的下一个token。并行训练计算并不断地调整权重。

Supervised Finetuning

在经过漫长的预训练过程后,我们得到了一个强大的,能够进行广泛表达的模型。接下来我们就需要通过一些有监督的小型数据集进行微调,以至于让大模型能够更好的帮助进行下游任务。(GPT1)

预训练模型能够通过提示完成任务。例如在这个例子中,我们存在一些段落,然后提供一些QA,QA,QA,这就也被称为Few-show prompt,然后我们完成Q,GPT在补充文档的过程中帮助我们回答了A的答案。这就是基于模型的提示工程的示例。

        然后,Karpathy说了,目前最好用的Base Model 可能是Leta的LLaMA系列,虽然其参数量不大,但是其训练的数据更好。有更多的词元。

        但是,总而言之,Base models不是真正意义上的助手,其只是帮助我们预测下一个Token是什么,并完成它目前认为的文档。

 因此我们进入了Supervised Finetuning阶段,在这个阶段,我们需要获取的是少量但是高质量的数据集(Prompt,Response...)。我们依然要进行语言建模并进行训练,得到一个SFT模型。这样我们就得到了真正的助手,并且在某种程度上可以发挥作用。

Reward Modeling && Reinforcement learning

微调过后,我们就可以进入基于人类反馈的强化学习(reinforcement learning from human feedback)了。其包括Reward modeling && reinforcement learning。

在reward modeling过程中,我们需要把数据收集转换成比较的形式。

在训练的过程中,我们的数据集大概是如上的样式,我们生成了3段一摸一样的的提示词,然后利用Fine tuning中训练的SFT模型生成结果。生成结果后,我们通过人工的判断进行打分。这样我们就得到了自己的数据集。

我们把提示词和生成的回答以及打分都进行词元化,并将reward作为预测的结果进行训练。这样我们就可以让模型自己判断生成结果的好坏,并要求输出的结果必须远高于其他的结果。

但是在完成了奖励模型后,可能是由于在实际应用中发现奖励模型的效果欠佳,所以人们逐渐探索出强化学习的道路,并发现奖励模型在强化模型中应用效果非常好。因此逐渐对奖励模型进行强化学习。

这里不得不提一嘴,关于Finetuning后面的部分,我个人其实也不是很了解技术层面。因此若有问题,还是欢迎大家提出批评 :)

接下来我们就利用奖励模型得到的评分,进行强化学习。具体思路大概如下:评分越高,我生成completion中的token概率就会越高,反而就会越低。这样能够提升我们生成高质量回答的概率。

最后我们就可以获得一个可以部署的模型(RHLF模型)。当然市面上目前有的大多数模型是Base Model, SFT Model 与 RHLF Model。

RHLF对于专业知识的效果更好,但是会失去一些熵,这就意味着,base model的生成多样性可能是更好的。

Applications

 

    人们在应用的过程中发现,尤其是有关于需要推理的问题,模型很少能够完成复杂的问题。这并不是模型能力不够,而是复杂的推理过程可能无法在一个token中展现出来。因此用户们尝试着让模型对任务步骤进行分解,分成多个阶段进行处理,这样可以大大提升处理任务的成功率。这种方法也被称为chain of thought。

让模型使用工具

利用记忆帮助完成任务。

强制约束LLM的输出

更改模型的权重。

以上就是关于内容的总结。欢迎大家交流讨论~~~

相关文章:

State of ChatGPT ---- ChatGPT的技术综述

声明:该文总结自AI菩萨Andrej Karpathy在youtube发布的演讲视频。 原视频连接:State of GPT | BRK216HFS 基础知识: Transformer原文带读与代码实现https://blog.csdn.net/m0_62716099/article/details/141289541?spm1001.2014.3001.5501 H…...

构建高效新闻推荐系统:Spring Boot的力量

1系统概述 1.1 研究背景 如今互联网高速发展,网络遍布全球,通过互联网发布的消息能快而方便的传播到世界每个角落,并且互联网上能传播的信息也很广,比如文字、图片、声音、视频等。从而,这种种好处使得互联网成了信息传…...

如何使用ipopt进行非线性约束求目标函数最小值(NLP非线性规划)内点法(inner point method)

非线性规划,一般用matlab调用cplex和gurobi了,但这两个一般用于线性规划和二次规划 线性规划LP,二次规划(quadratic programming),如果要求更一般的非线性规划IPOT是个很好的选择,求解器很多&a…...

【Unity学习笔记】解决疑似升级Win11或使用Unity6导致Unity旧版本无法打开的问题

【Unity学习笔记】解决疑似升级Win11或使用Unity6导致Unity旧版本无法打开的问题 一句话省流: 确保项目地址没有任何中文,重新申请个许可证,然后该咋就咋,完事。 ——————————————————————————————…...

回归分析在数据挖掘中的应用简析

一、引言 在数据驱动的时代,数据挖掘技术已成为从海量数据中提取有价值信息的关键工具。 回归分析,作为一种经典的统计学习方法,不仅在理论研究上有着深厚的基础,而且在实际 应用中也展现出强大的功能。 二、回归分析基础 2.1 回…...

【Node.js】worker_threads 多线程

Node.js 中的 worker_threads 模块 worker_threads 模块是 Node.js 中用于创建多线程处理的工具。 尽管 JavaScript 是单线程的,但有时候在处理计算密集型任务或长时间运行的操作时,单线程的运行会导致主线程被阻塞,影响服务器性能。 为了…...

贪心算法c++

贪心算法C概述 一、贪心算法的基本概念 贪心算法(Greedy Algorithm),又名贪婪法,是一种解决优化问题的常用算法。其基本思想是在问题的每个决策阶段,都选择当前看起来最优的选择,即贪心地做出局部最优的决…...

【STM32】 TCP/IP通信协议(3)--LwIP网络接口

LwIP协议栈支持多种不同的网络接口(网卡),由于网卡是直接跟硬件平台打交道,硬件不同则处理也是不同。那Iwip如何兼容这些不同的网卡呢? LwIP提供统一的接口,底层函数需要用户自行完成,例如网卡的…...

15分钟学 Python 第39天:Python 爬虫入门(五)

Day 39:Python 爬虫入门数据存储概述 在进行网页爬虫时,抓取到的数据需要存储以供后续分析和使用。常见的存储方式包括但不限于: 文件存储(如文本文件、CSV、JSON)数据库存储(如SQLite、MySQL、MongoDB&a…...

使用Pytorch构建自定义层并在模型中使用

使用Pytorch构建自定义层并在模型中使用 继承自nn.Module类,自定义名称为NoisyLinear的线性层,并在新模型定义过程中使用该自定义层。完整代码可以在jupyter nbviewer中在线访问。 import torch import torch.nn as nn from torch.utils.data import T…...

学习记录:js算法(五十六):从前序与中序遍历序列构造二叉树

文章目录 从前序与中序遍历序列构造二叉树我的思路网上思路 总结 从前序与中序遍历序列构造二叉树 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 示…...

qt使用QDomDocument读写xml文件

在使用QDomDocument读写xml之前需要在工程文件添加: QT xml 1.生成xml文件 void createXml(QString xmlName) {QFile file(xmlName);if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate |QIODevice::Text))return false;QDomDocument doc;QDomProcessin…...

Oracle架构之表空间详解

文章目录 1 表空间介绍1.1 简介1.2 表空间分类1.2.1 SYSTEM 表空间1.2.2 SYSAUX 表空间1.2.3 UNDO 表空间1.2.4 USERS 表空间 1.3 表空间字典与本地管理1.3.1 字典管理表空间(Dictionary Management Tablespace,DMT)1.3.2 本地管理方式的表空…...

springboot整合seata

一、准备 docker部署seata-server 1.5.2参考&#xff1a;docker安装各个组件的命令 二、springboot集成seata 2.1 引入依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId>&…...

鸿蒙开发(NEXT/API 12)【二次向用户申请授权】程序访问控制

当应用通过[requestPermissionsFromUser()]拉起弹框[请求用户授权]时&#xff0c;用户拒绝授权。应用将无法再次通过requestPermissionsFromUser拉起弹框&#xff0c;需要用户在系统应用“设置”的界面中&#xff0c;手动授予权限。 在“设置”应用中的路径&#xff1a; 路径…...

docker export/import 和 docker save/load 的区别

Docker export/import 和 docker save/load 都是用于容器和镜像的备份和迁移&#xff0c;但它们有一些关键的区别&#xff1a; docker export/import: export 作用于容器&#xff0c;import 创建镜像导出的是容器的文件系统&#xff0c;不包含镜像的元数据丢失了镜像的层级结构…...

明星周边销售网站开发:SpringBoot技术全解析

1系统概述 1.1 研究背景 如今互联网高速发展&#xff0c;网络遍布全球&#xff0c;通过互联网发布的消息能快而方便的传播到世界每个角落&#xff0c;并且互联网上能传播的信息也很广&#xff0c;比如文字、图片、声音、视频等。从而&#xff0c;这种种好处使得互联网成了信息传…...

STM32+ADC+扫描模式

1 ADC简介 1 ADC(模拟到数字量的桥梁) 2 DAC(数字量到模拟的桥梁)&#xff0c;例如&#xff1a;PWM&#xff08;只有完全导通和断开的状态&#xff0c;无功率损耗的状态&#xff09; DAC主要用于波形生成&#xff08;信号发生器和音频解码器&#xff09; 3 模拟看门狗自动监…...

R语言绘制散点图

散点图是一种在直角坐标系中用数据点直观呈现两个变量之间关系、可检测异常值并探索数据分布的可视化图表。它是一种常用的数据可视化工具&#xff0c;我们通过不同的参数调整和包的使用&#xff0c;可以创建出满足各种需求的散点图。 常用绘制散点图的函数有plot()函数和ggpl…...

安装最新 MySQL 8.0 数据库(教学用)

安装 MySQL 8.0 数据库&#xff08;教学用&#xff09; 文章目录 安装 MySQL 8.0 数据库&#xff08;教学用&#xff09;前言MySQL历史一、第一步二、下载三、安装四、使用五、语法总结 前言 根据 DB-Engines 网站的数据库流行度排名&#xff08;2024年&#xff09;&#xff0…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...

十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建

【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...

es6+和css3新增的特性有哪些

一&#xff1a;ECMAScript 新特性&#xff08;ES6&#xff09; ES6 (2015) - 革命性更新 1&#xff0c;记住的方法&#xff0c;从一个方法里面用到了哪些技术 1&#xff0c;let /const块级作用域声明2&#xff0c;**默认参数**&#xff1a;函数参数可以设置默认值。3&#x…...