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

news2024/12/22 15:53:54

文章目录

  • 一. 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.coloradmin.cn/o/1613614.html

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

相关文章

【面试经典 150 | 数组】罗马数字转整数

文章目录 写在前面Tag题目来源解题思路方法一:模拟 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于本题涉及到的数据结构等内容进行回顾…

IoT、IIoT、AIoT的区别是什么?

一、IoT、IIoT、AIoT的区别是什么? IoT、IIoT和AIoT都是物联网(Internet of Things)的不同应用和发展方向,但它们之间存在一些区别。 IoT(物联网):物联网是指通过互联网连接各种物理设备&#x…

RIP最短路实验(思科)

华为设备参考:RIP最短路实验(华为) 一,技术简介 RIP(Routing Information Protocol,路由信息协议)是一种基于距离矢量的内部网关协议,工作原理是每个路由器周期性地向邻居路由器发…

GPT-3.5 Turbo 的 temperature 设置为 0 就是贪婪解码?

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 将 GPT-3.5 Turbo 的 temperature 设置为 0 通常意味着采用贪婪解码(greedy decoding)策略。在贪婪解码中,模型在每一步生成文本时选择概率最高的词元,从…

LeetCode题练习与总结:矩阵置零--73

一、题目描述 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]]示例 2&#xf…

每日一题---链表的中间结点

文章目录 前言1.题目2.题目分析2.1.思路一2.2.思路二(快慢指针) 3.参考代码3.1.代码1--思路13.2.代码2---思路2 前言 我们上一篇数据结构与算法的章节当中,我们学习到了单链表,下面我们做几篇中,我们做几道题&#xf…

PTA L2-052 吉利矩阵

题目 解析 这题考的是搜索剪枝 可行性剪枝: 即判断当前行(列)是否已经超过L和剩下的格子都填最大值是否小于L,若是则剪枝。 当前行数大于1时,判断上一个填完的行是否等于L,若否,则剪枝。 当前行…

nginx开启basic认证

basic认证也叫做http基本认证,防止恶意访问 首先用在线网站生成一个叫做htpasswd的账号密码文件。 将生成结果复制到/etc/nginx/htpasswd文件中 在server的location中配置 server { listen 80; server_name a.com;location / { root html;index index.…

用全连接对手写数字识别案例(附解决TensorFlow2.x没有examples问题)

数据集介绍 数据集直接调用可能出现问题,建议从官网直接下载下来,下载存在这四个文件 手写数字识别数据集下载: 链接:https://pan.baidu.com/s/1nqhP4yPNcqefKYs91jp9ng?pwdxe1h 提取码:xe1h 55000行训练数据集&a…

揭开ChatGPT面纱(3):使用OpenAI进行文本情感分析(embeddings接口)

文章目录 一、embeddings接口解析二、代码实现1.数据集dataset.csv2.代码3.运行结果 openai版本1.6.1 本系列博客源码仓库:gitlab,本博客对应文件夹03 在这一篇博客中我将使用OpenAI的embeddings接口判断21条服装评价是否是好评。 首先来看实现思路&am…

TPG原理以及verilog实现

文章目录 一、前言二、verilog代码实现三、仿真以及结果分析 一、前言 TPG(video_test_pattern generator) 视频测试模式发生器用于产生测试数据,对视频数据通路测试。根据视频输出时序产生相应的图像数据 二、verilog代码实现 timescale 1ns / 1nsmodule tpg ( i…

超星图书转成PDF格式

转为pdf 为避免浪费您的时间,本篇转载文章不值得花费您的宝贵时间阅读 方法一 感谢医学插画动画杜鹏 Roison An两位提供的方法,经试验后简化了一下,得出以下方法:1、使用超星打开你想要转换的图书2、依次打开本书的所有页面,不要…

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

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

SpringCloud-搭建XXL-JOB任务调度平台教程

一、XXL-JOB任务调度平台介绍 XXL-JOB是一个轻量级分布式任务调度框架,旨在解决分布式系统中的任务调度问题,提高系统的处理效率和任务管理的便捷性。 1. XXL-JOB任务调度概念 XXL-JOB任务调度平台通过中心化管理方式,使得任务的调度更加高…

【Linux】小知识点温习---命令

许多常见命令会用,但是很少注意他们的区别;亦或在学习中使用较少,容易忘记,今天做一个回顾。 ls系列 -a:显示所有文件(包括隐藏文件) -l:将文件以竖列形式显示 -i:显示文件的inode编号 pwd 显…

基础SQL DDL语句

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

HttpServlet,ServletContext,Listener它仨的故事

1.HttpServlet。 听起来是不是感觉像是个上古词汇,是不是没有阅读下去的兴趣了?Tomcat知道吧,它就是一个servlet容器,当用户向服务器发送一个HTTP请求时,Servlet容器(如Tomcat)会根据其配置找到…

【力扣 Hot100 | 第七天】4.22(移动零)

文章目录 1.移动零1.1题目1.2解法:双指针1.2.1双指针思路1.2.2代码实现 1.移动零 1.1题目 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数…

IDEA快速入门

目录 1. 概述 2. 安装 3. 激活 4. 关闭自动更新 5. 创建Java项目 5.1 配置JRE 5.2 创建项目 6. 配置设置 6.1 主题 6.2 设置字体默认大小 6.3 鼠标滚轮改变字体大小 6.4 设置自动导入 6.5 项目选择 7. lombok插件 7.1 安装插件 7.2 启用注解 8. 安装包及插件…

Redis 内存策略

目录 1. key到期的情况 Redis的内存结构redisDb Redis怎么知道哪个key过期的 Redis对过期key的删除策略 惰性删除 周期删除 2. key未到期,但内存使用已达上限的情况 Redis检查内存阈值的时刻 达到内存上限,Redis淘汰key的策略 结构体redisObj…