【大模型应用极简开发入门(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
  • 《大模型应用极简开发入门》

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

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

相关文章

maven报orace,jdbc错误,并出现大量红色波浪线Unresolved dependency

由于oracle的限制,一般我们是无法通过maven直接下载oracle的驱动包的,这就可能导致其余的包出现红色波浪线,解决方法如下 1.新建一个文件夹,并将oracle驱动包放在这个新建的文件夹下,注意不要讲这个oracle包放在maven本…

浏览器数据找回

网站上分享的文章应该都是个人的心血,对于一些操作问题导致心血丢失真的很奔溃,终于找到一个弥补的办法,csdn的文章谷歌浏览器亲测有效,理论上其他浏览器的其他网站应该也可以,适用以下场景 把博客编辑当成了编写新博…

Vue3+TS版本Uniapp:项目前置操作

作者:前端小王hs 阿里云社区博客专家/清华大学出版社签约作者✍/CSDN百万访问博主/B站千粉前端up主 环境:使用vscode进行开发 如果一开始是使用的HbuilderX,请看hbuilderX创建的uniapp项目转移到vscode 为什么选择vscode?有更好…

温湿度LCD显示并上传服务器

项目需求 通过温湿度传感器将值传到LCD1602,并实时通过蓝牙透传到手机。 硬件介绍 温湿度传感器 DHT11温湿度传感器 DHT11_温湿度传感器数据格式-CSDN博客 LCD1602LCD1602-CSDN博客 HC-01 继电器模块 硬件接线 LCD1602 D0~D7 --> A0~A7VDD, A --> 5v…

(避雷指引:管理页面超时问题)windows下载安装RabbitMQ

一、背景: 学习RabbitMQ过程中,由于个人电脑性能问题,直接装在windows去使用RabbitMQ,根据各大网友教程,去下载安装完之后,使用web端进行简单的入门操作时,总是一直提示超时,要么容…

大sql mysql执行

先把sql 拆分 太大的执行失败 使用 SQLDumpSplitter3 拆分sql 执行拆分的sql 拆分的sql 打开发现很多 ; 开头的空行 替换掉 正则 ^; 修改数据库 my.cnf my,ini 执行可能会提示 [ERR] 2006 - Server has gone away 错误 在 [mysqld] 添加以下几行 wait_timeout2880000 inter…

WordPress SQLite Docker 镜像封装细节

为了让大家用的放心,同时解答 GitHub 社区中的疑问。这篇文章聊聊上一篇文章的 Docker 容器封装细节。 写在前面 在前一篇文章《WordPress 告别 MySQL:Docker SQLite WordPress》中,如果你跟着文章实践,大概三分钟就能够启动一个…

python 文件 成绩分析2

‘’’ 文件score.txt中存储了学生的考试信息,内容如下 小明,98,96 小刚,90,94 小红,90,94 小王,98,96 小刘,80,90 小赵,90,96 第二列是数学成绩,第三列是语文成绩 请写程序分析: 哪些同学语文成绩是相同的?哪些同学数学成绩是相同的?哪些同学语文和数…

HarmonyOS开发环境搭建 移动开发 鸿蒙开发 ArkTS

📜目录 💡 环境搭建 🚀安装nodejs 🤵安装ohpm 🍔安装SDK 💥Emulator安装 🌶️新建ArkTs项目 🏆️ArkTS语言 ✨️基本语法 🎈 声明式UI描述 🍱组件 …

如何在 PyCharm 中集成 GitLab?

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab :https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署…

初识C++·类和对象(中)(3)

前言,最难的已经结束了,来点轻松了放松一下。 目录 1 流重载 2 const成员 3 取地址及const取地址操作符重载 1 流重载 C语言中printf和scanf是有局限性,只能直接打印内置类型,对于自定义类型就哦豁了,所以在C中就…

基础SQL DDL语句

MySQL的DDL(Data Definition Language)语句用于定义或修改数据库结构。 DDL数据库操作 查看所有的数据库 show databases; 红色圈起来的是系统数据库,是系统自带的 mysql:包含存储MySQL服务器运行时所需信息的表。这包括数据字典…