【大模型应用极简开发入门(2)】GPT模型简史:从GPT-1到GPT-4:从小数据量的微调到大数据量的强化学习不断优化模型

文章目录

  • 一. GPT-1:无监督与微调
    • 1. 在GPT-1之前的`监督学习`的问题
    • 2. GPT-1中新的学习过程-无监督的预训练
    • 3. 复杂任务下的微调
    • 4. GPT-1为更强大的模型铺平了道路
  • 二. GPT-2:context learning
    • 1. 核心思想:context learning
    • 2. GPT-2的数据集
  • 三. GPT-3:sparse attention与强化学习
    • 1. 数据集
    • 2. 模型结构 - sparse attention
    • 3. GPT-3会回答与用户期望不一致的答案
  • 四. 从GPT-3到InstructGPT - 监督微调与RLHF
    • 1. InstructGPT模型
  • 五. GPT-3.5、Codex和ChatGPT
    • 1. GPT-3.5
    • 2. Codex
    • 3. ChatGPT
  • 六. GPT-4
  • 七. 小结

一. GPT-1:无监督与微调

2018年年中,就在Transformer架构诞生一年后,OpenAI发表了[论文:Improving Language Understanding by Generative Pre-Training]。这篇论文介绍了GPT,也被称为GPT-1。

1. 在GPT-1之前的监督学习的问题

在GPT-1出现之前,构建高性能NLP神经网络的常用方法是利用监督学习。这种学习技术使用大量的手动标记数据。以情感分析任务为例,目标是对给定的文本进行分类,判断其情感是积极的还是消极的。一种常见的策略是收集数千个手动标记的文本示例来构建有效的分类模型。然而,这需要有大量标记良好的监督数据。这一需求限制了监督学习的性能,因为要生成这样的数据集,难度很大且成本高昂。

 

2. GPT-1中新的学习过程-无监督的预训练

在论文中,GPT-1的作者提出了一种新的学习过程,其中引入了无监督的预训练步骤

  1. 这个预训练步骤不需要标记数据(标记数据后做什么)。相反,他们训练模型来预测下一个标记
  2. 由于采用了可以并行化的Transformer架构,预训练步骤是在大量数据上进行的。
  3. 对于预训练,GPT-1模型使用了BookCorpus数据集。该数据集包含约11000本未出版图书的文本。BookCorpus最初由Yukun Zhu等人在2015年的论文“Aligning Books and Movies: Towards Story-like Visual Explanations by Watching Movies and Reading Books”中给出,并通过多伦多大学的网页提供。
    人们发现,GPT-1在各种基本的文本补全任务中是有效的。在无监督学习阶段,该模型学习BookCorpus数据集并预测文本中的下一个词

 

3. 复杂任务下的微调

  • 然而,GPT-1是小模型,它无法在不经过微调的情况下执行复杂任务。因此,人们将微调作为第二个监督学习步骤,让模型在一小部分手动标记的数据上进行微调,从而适应特定的目标任务。
  • 比如,在情感分析等分类任务中,可能需要在一小部分手动标记的文本示例上重新训练模型,以使其达到不错的准确度。这个过程使模型在初始的预训练阶段习得的参数得到修改,从而更好地适应具体的任务。
    ![[Pasted image 20240420225446.png]]

具体见:[论文:Improving Language Understanding by Generative Pre-Training]:3.2 Supervised fine-tuning

 

4. GPT-1为更强大的模型铺平了道路

尽管规模相对较小,但GPT-1在仅用少量手动标记的数据进行微调后,能够出色地完成多个NLP任务。GPT-1的架构包括一个解码器(与原始Transformer架构中的解码器类似),具有1.17亿个参数。作为首个GPT模型,它为更强大的模型铺平了道路。后续的GPT模型使用更大的数据集和更多的参数,更好地利用了Transformer架构的潜力。

 

二. GPT-2:context learning

2019 年 2 月,OpenAI发布了GPT- 2 ,2019年11月,OpenAI发布了完整版的GPT-2模型。见论文:[Language Models are Unsupervised Multitask Learners] 。这是GPT-1的一个扩展版本,其参数量和训练数据集的规模大约是GPT-1的10倍。这个新版本的参数量为15亿,训练文本为40GB。

 

1. 核心思想:context learning

GPT-2的核心思想概括为:

任何有监督任务都是语言模型的一个子集,当模型的容量非常大且数据量足够丰富时,仅仅靠训练语言模型的学习便可以完成其他有监督学习的任务,不需要在下游任务微调。GPT-2依然沿用GPT-1单向transformer的模式,只不过使用了更多的网络参数和更大的数据集。

 

模型结构上的改变

GPT-2去掉了fine-tuning层:不再针对不同任务分别进行微调建模,而是不定义这个模型应该做什么任务,模型会自动识别出来需要做什么任务。fine-tuning去掉后,引入大量的训练文本,效果就非常好,这也说明只要训练文本够大,网络够大,模型是可以自己根据输入内容判断需要做的任务是什么的。

 
提示词提示工作

当然GPT-2的输入也会加入提示词,比如:“TL;DR:”,GPT-2模型就会知道是做摘要工作了,是不是有点prompt-learning/In Context Learning的感觉了。


GPT-2与GPT-1核心区别是in context learning,其次是网络参数和更大的数据集。


 

2. GPT-2的数据集

GPT-2的文章取自于Reddit上高赞的文章,命名为WebText。数据集共有约800万篇文章,累计体积约40G。为了避免和测试集的冲突,WebText移除了涉及Wikipedia的文章。

模型参数

  • 同样使用了使用字节对编码构建字典,但字典大小增加为 50,257 ;
  • 滑动窗口的大小增加为 1,024 ; batchsize的大小增加为512 ;
  • 将残差层的初始化值用 1/sqrt(N)进行缩放,其中 N 是残差层的个数。
  • 增加网络参数:将Transformer堆叠层数增加到48层,隐层的维度增至1600,参数量达15亿。

 

三. GPT-3:sparse attention与强化学习

2020 年 6 月,OpenAI发布了GPT- 3 。[论文:Language Models are Few-Shot Learners]

1. 数据集

GPT-3比GPT-2大得多,它有1750亿个参数,这使其能够捕捉更复杂的模式。此外,GPT-3是在更广泛的数据集上进行训练的。这包括Common Crawl(它就像互联网档案馆,其中包含来自数十亿个网页的文本)和维基百科。这个训练数据集包括来自网站、书籍和文章的内容,使得GPT-3能够更深入地理解语言和上下文。因此,GPT-3在各种语言相关任务中都展示出更强的性能。
此外,它在文本生成方面还展示出更强的连贯性和创造力。它甚至能够编写代码片段,如SQL查询,并执行其他智能任务。并且,GPT-3取消了微调步骤,而这在之前的GPT模型中是必需的。

 

那对于小公司或个人来说,训练自己的大模型,因为数据量的原因,微调还是必不可免的.

 

2. 模型结构 - sparse attention

模型结构上,GPT3和GPT-1 GPT-2的区别主要在于使用了稀疏的自注意力,具体叫局部带状稀疏注意力locally banded sparse attention[​ Generating Long Sequences with Sparse Transformers]。

sparse attention 与传统 self-attention(称为 dense attention) 的区别在于:

  • dense attention:每个 token 之间两两计算 attention,复杂度 O(n²)。
  • sparse attention:每个 token 只与其他 token 的一个子集计算 attention,复杂度 O(n*logn)。

具体来说,

sparse attention 强行要求每个元素只跟它相对距离为k,2k,3k,…的元素关联,其中k>1
是预先设定的超参数。从下左的注意力矩阵看,就是强行要求相对距离不是k的倍数的注意力为0(白色代表0),如下图所示:

在这里插入图片描述

使用 sparse attention能够:减少注意力层的计算复杂度,节约显存和耗时,从而能够处理更长的输入序列;但对于距离较近的上下文关注更多,对于距离较远的上下文关注较少,如此依赖必定会对长文本建模的效果变差。

 

3. GPT-3会回答与用户期望不一致的答案

GPT-3存在一个问题,即最终用户提供的任务与模型在训练过程中所见到的任务不一致。

我们已经知道,语言模型根据输入文本的上下文来预测下一个标记。这个训练过程不一定与最终用户希望模型执行的任务一致。此外,增大语言模型的规模并不能从根本上使其更好地遵循用户的意图或指令

 

数据质量导致模型回答出现偏差

像GPT-3这样的模型是在互联网数据上进行训练的。尽管数据源经过一定的筛选,但用于训练模型的数据仍然可能包含虚假信息或有问题的文本,比如涉及种族歧视、性别歧视等。因此,模型有时可能说错话,甚至说出有害的话。

 

通过强化学习与人类反馈进行优化

2021年,OpenAI发布了GPT-3模型的新版本,并取名为InstructGPT。与原始的GPT-3基础模型不同,InstructGPT模型通过强化学习和人类反馈进行优化。这意味着InstructGPT模型利用反馈来学习和不断改进。这使得模型能够从人类指令中学习,同时使其真实性更大、伤害性更小

 

提示工程来获取所需的答案

当然,使用标准的GPT-3模型也能够得到所需的回答,但需要应用特定的提示词设计和优化技术。这种技术被称为提示工程(prompt engineering),后文将详细介绍。

 

四. 从GPT-3到InstructGPT - 监督微调与RLHF

在题为“Training Language Models to Follow Instructions with Human Feedback”的论文中,解释了InstructGPT是如何构建的。

1. InstructGPT模型

从GPT-3模型到InstructGPT模型的训练过程主要有两个阶段:监督微调(supervised fine-tuning,SFT)和通过人类反馈进行强化学习(reinforcement learning from human feedback,RLHF)。每个阶段都会针对前一阶段的结果进行微调。也就是说,SFT阶段接收GPT-3模型并返回一个新模型。RLHF阶段接收该模型并返回InstructGPT版本。如下图:

在这里插入图片描述

 

根据OpenAI的论文,这里重新绘制了一张流程图,如图所示。我们来逐一探讨每个阶段。

在这里插入图片描述

在SFT阶段中,原始的GPT-3模型通过监督学习进行微调(如图步骤1),具体微调步骤如下:

OpenAI拥有一系列由最终用户创建的提示词。首先,从可用的提示词数据集中随机抽样。然后,要求一个人(称为标注员)编写一个示例来演示理想的回答。重复这个过程数千次,以获得一个由提示词和相应的理想回答组成的监督训练数据集。最后,使用该数据集微调GPT-3模型,以针对用户的提问提供更一致的回答。此时得到的模型称为SFT模型。

RLHF阶段分为两个子步骤:首先训练奖励模型(上图步骤2),然后使用奖励模型进行强化学习(上图步骤3)。

  • 奖励模型的目标是自动为回答给出分数。当回答与提示词中的内容匹配时,奖励分数应该很高;当回答与提示词中的内容不匹配时,奖励分数应该很低。
  • 为了训练奖励模型,OpenAI首先随机选择一个问题,并使用SFT模型生成几个可能的答案。通过一个叫作温度(temperature)的参数,可以针对同一输入生成许多回答。然后,要求标注员根据与提示词的匹配程度和有害程度等标准给这些回答排序。在多次重复此过程后,使用数据集微调SFT模型以进行评分。这个奖励模型将用于构建最终的InstructGPT模型。

训练InstructGPT模型的最后一步是强化学习,这是一个(自动)迭代的过程。

  • 它从一个初始的生成式模型开始,比如SFT模型。然后随机选择一个提示词,让模型给出预测结果,由奖励模型来评估结果。根据得到的奖励分数,相应地更新生成式模型
  • 这个过程可以在无须人工干预的情况下重复无数次,从而自动、高效地提高模型的性能。

 
与基础的GPT-3模型相比,InstructGPT模型能够针对用户的提问生成更准确的内容。OpenAI建议使用InstructGPT模型,而非原始版本。

 

五. GPT-3.5、Codex和ChatGPT

1. GPT-3.5

2022年3月,OpenAI发布了GPT-3的新版本。新模型可以编辑文本或向文本中插入内容。它们所用的训练数据截至2021年6月,OpenAI称它们比先前的版本更强大。2022年11月底,OpenAI正式称这些模型为GPT-3.5模型。

 

2. Codex

OpenAI还提出了Codex模型,这是一个在数十亿行代码上进行了微调的GPT-3模型。

  • 正是它给GitHub Copilot这款自动化编程工具赋予了强大的能力,为使用Visual Studio Code、JetBrains甚至Neovim等许多文本编辑器的开发人员提供了帮助。然而,Codex模型在2023年3月被OpenAI弃用。相反,OpenAI建议用户从Codex切换到GPT-3.5 Turbo或GPT-4。
  • 与此同时,GitHub发布了基于GPT-4的Copilot X版本,其功能比之前的版本多得多。

OpenAI对Codex模型的弃用提醒我们,使用应用程序接口存在固有风险:随着更高效的模型的开发和发布,它们可能会发生变化,甚至被停用。

 

3. ChatGPT

2022年11月,OpenAI推出了ChatGPT,并将其作为一种实验性的对话式模型

该模型经过了微调,采用如上图InstructGPT模型的类似技术,在交互式对话中表现出色。ChatGPT源自GPT-3.5系列,该系列为其开发奠定了基础。

 

六. GPT-4

2023年3月,OpenAI发布了GPT-4。

与OpenAI GPT家族中的其他模型不同,GPT-4是第一个能够同时接收文本和图像的多模态模型。这意味着GPT-4在生成输出句子时会考虑图像和文本的上下文。这样一来,用户就可以将图像添加到提示词中并对其提问。

 

七. 小结

  1. GPT模型的演变历程
    在这里插入图片描述

 
2. ChatGPT的多轮对话
ChatGPT把多轮对话当做上下文,根据上一轮用户的反馈,进行强化学习,来优化下一轮生成。而GPT-3 只是针对当前一轮输入生成输出。

 

 

参考:

  • https://youzipi.blog.csdn.net/article/details/108743639
  • https://time.geekbang.org/column/article/700557
  • https://arxiv.org/pdf/2203.02155.pdf
  • https://zhuanlan.zhihu.com/p/607141390
  • 《大模型应用极简开发入门》

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【编译原理】03语法分析

1,语法分析的若干问题 1.1 语法分析器的作用 编译器前端的重要组成部分: (1) 根据词法分析器提供的记号流,为语法正确的输入构造分析树(或语法树)。 (2) 检查输入中的语法(可能包括词法)错误,并调用出错处理器进…

如何在一台服务器上同时运行搭载JDK 8, JDK 17, 和 JDK 21的项目:终极指南

🐯 如何在一台服务器上同时运行搭载JDK 8, JDK 17, 和 JDK 21的项目:终极指南 🚀 摘要 在企业开发环境中,常常需要在同一台服务器上运行使用不同Java开发工具包(JDK)版本的多个项目。本文详细介绍如何在L…

Linux——进程基本概念中篇

Linux——进程基本概念中篇 文章目录 Linux——进程基本概念中篇一、通过系统调用创建进程——fork1.1 fork的理解1.2 fork的返回值 二、进程状态2.1 运行状态2.2 睡眠状态和休眠状态2.3 停止状态和死亡状态2.4 僵尸进程2.5 孤儿进程2.6 前台和后台进程 三、进程优先级3.1 查看…

linux普通用户执行sudo

一般普通用户想要具有root的权利,那么只有把普通用户切换到root用户 但是我们发现在普通用户的命令前面sudo 然后系统会让你输入普通用户自己的密码 但是这样并不能实现,因为如果随便一个普通用户都只要在前面sudo就能执行root的权限命令,那么…

在一台笔记本电脑上试用Ubuntu22.04

在一台笔记本电脑上试用Ubuntu22.04。 本来想看以下该操作系统能否识别笔记本电脑上的硬盘,于是下载试一下。选了一个国内镜像网站下载。下载速度很快。下载以后用软件win image 将下载的iso文件写到U盘上,用的是usb2.0的U盘,该操作用时11分…

利用Opencv4.9为图像添加边框

返回:OpenCV系列文章目录(持续更新中......) 上一篇利用OpenCV4.9制作自己的线性滤波器! 下一篇 :OpenCV系列文章目录(持续更新中......) 目标 在本教程中,您将学习如何: 使用 OpenCV 函数 …

在使用 sqlite 时遇到的奇怪问题的正解

在使用 sqlite 时遇到的奇怪问题, 用 DB Browser for SQLite (一款 sqlite 可视化工具)操作 sqlite 数据库 ,一个名叫 testDB 的数据库(位置在C:\sqlite\testDB.db),在里面建了一个表&#xff0…

【Linux】在centos快速搭建K8S1.18集群

使用 kubeadm 创建集群帮助文档 如果您需要以下几点,该工具是很好的选择:kubeadm 一种简单的方法,让你尝试 Kubernetes,可能是第一次。现有用户自动设置群集并测试其应用程序的一种方式。其他生态系统和/或安装程序工具中的构建…

Qt 窗口的坐标体系

Qt 窗口的坐标体系 Qt 中使用的坐标系也是平面直角坐标系,但是呢又和我们平时在数学中使用的坐标系是不同的,我们在数学中使用的坐标系是 x 向右增长, y 向上增长。 但是在 Qt 中使用的是 x 轴不变,y 轴是向下增长的。 所以Qt 中…

【Python】自定义修改pip下载模块默认的安装路径

因为电脑下载了Anaconda提供的默认Python 3.9 以及后期下载的python3.10所以在Pychram进行项目开发时,发现一些库怎么导入都导入不了,手动install也是失败,后期在cmd里面发现python以及pip配置有点儿混乱,导致执行命令时&#xff…

十大排序算法详解-上篇:比较排序算法【python 动态图解】

作者介绍:10年大厂数据\经营分析经验,现任大厂数据部门负责人。 会一些的技术:数据分析、算法、SQL、大数据相关、python 欢迎加入社区:码上找工作 作者专栏每日更新: LeetCode解锁1000题: 打怪升级之旅 python数据分析…

TCP/IP协议—MQTT

TCP/IP协议—MQTT MQTT协议MQTT协议特点MQTT通信流程MQTT协议概念 MQTT报文固定报头可变报头有效载荷 MQTT协议 消息队列遥测传输(Message Queuing Telemetry Transport,MQTT)是一个基于客户端-服务器的消息发布/订阅传输协议。它的设计思想…

C语言指针进阶:各类型指针变量详解

目录 1. 字符指针变量2. 数组指针变量2.1 什么是数组指针变量2.2 数组指针变量的初始化 3. 二维数组传参的本质4. 函数指针变量4.1 函数指针变量的创建4.2 函数指针变量的使用4.3 代码分析4.3.1 typedef 关键字 5. 函数指针数组6. 转移表 正文开始。 1. 字符指针变量 我们可以…

基于SpringBoot + Vue实现的时装购物管理系统设计与实现+毕业论文+开题报告+答辩PPT

介绍 系统包含用户、管理员两个角色 管理员:首页、个人中心、用户管理、商品分类管理、颜色管理、商品信息管理、商品评价管理、系统管理、订单管理 用户:首页、个人中心、商品评价管理、我的收藏管理、订单管理 前台首页:首页、商品信息、商品资讯、个人中心、后台…

vue 的生命周期--图解

生命周期函数中的this指向是vm 或 组件实例对象。 常用的生命周期钩子: mounted: 发送ajax请求、启动定时器、绑定自定义事件、订阅消息等【初始化操作】。beforeDestroy: 清除定时器、解绑自定义事件、取消订阅消息等【收尾工作】。 关于销毁Vue实例 销毁后借助Vu…

Spring-datasource事务管理-手动请求事务回滚

什么场景下会触发? 在 Spring 中,调用 setRollbackOnly() 方法会将当前事务标记为 rollback-only,表示事务只能回滚,不能提交。这种情况通常发生在以下情景中: 业务逻辑判断:在方法中根据某些业务逻辑的判…

[GFCTF 2021]wordy

用ida查看可知存在大量jmp跳转语令,编写脚本将其改为空指令

MyBatis Dynamic SQL基本使用

MyBatis Dynamic SQL基本使用 一、概念二、特性Hamcrest是什么 三、MyBatis Dynamic SQL 快速入门3.1 环境准备3.2 定义表和列3.3 创建 MyBatis3 映射器3.4 使用 MyBatis3 执行 SQL 四、数据库对象表示4.1 表或视图表示4.2 表别名4.3 列表示 五、Where 子句支持5.1 简单的 wher…

磁盘损坏无法读取:原因、恢复方案与防范之道

在数字化信息爆炸的时代,磁盘作为数据存储的重要载体,承载着无数重要的文件和资料。然而,当磁盘突然损坏,无法读取数据时,我们往往会陷入困境,焦虑不已。面对这种情况,我们该如何应对&#xff1…

晶圆制造之MPW(多项目晶圆)简介

01、MPW是什么? 在半导体行业中,MPW 是 "Multi Project Wafer" 的缩写,中文意思是多项目晶圆。MPW 的主要思想是将使用相同工艺的多个集成电路设计放在同一晶圆片上进行流片(即制造)。这种方法允许多个设计共…