首页 > 其他分享 >GPT 1-3 简单介绍

GPT 1-3 简单介绍

时间:2024-11-03 22:19:41浏览次数:3  
标签:shot 训练 模型 介绍 学习 任务 简单 GPT

GPT-1

简介

2018年6月,OpenAI公司发表了论文"Improving Language Understanding by Generative Pretraining"(用生成式预训练提高模型的语言理解能力), 推出了具有 1.17亿个参数的GPT-1(Generative Pre-training,生成式预训练)模型。

GPT-1 采用 传统的语言模型方法进行预训练,即使用单词的上下文来预测单词,使得GPT更擅长自然语言生成任务(NLG), 而BERT更擅长处理自然语言理解任务(NLU)

模型架构

下图中间的就是GPT-1:
image
从上图可知,GPT采用的是 单向Transformer模型。例如给定一个句子\([u_1,u_2, ..., u_n]\),GPT-1在预测单词\(u_i\)的时候,只会利用\([u_1, u_2, ..., u_{n-1}]\) 的信息,而BERT会同时利用上下文的信息\([u_1, u_2, ..., u_{(i-1)}, u_{(i+1)},.., u_n]\)

image

训练过程

GPT-1的训练包括两阶段过程:1. 无监督的预训练语言模型;2.有监督的下游任务fine-tunning

无监督的预训练语言模型

给定句子\(U=[u_1, u_2, ..., u_n]\),GPT训练语言模型时的目标是 最大化下面的似然函数:

\[L_1(U)=\sum_ilogP(u_i|u_{i-k},...,u_{i-1};\theta) \]

上述公式含义即:预测每个词\(u_i\) 的概率,这个概率是基于它前面\(u_{i-k}\)到\(u_{i-1}\),以及模型\(\theta\)

这里的k表示上文的窗口大小,理论上,k取得越大,模型所能获取的上文信息越充足,模型的能力越强。

GPT-1是一个 单向语言模型,模型对输入U进行特征嵌入得到transformer第一层的输出\(h_0\),再经过多层transformer 特征编码,使用最后一层的输出即可得到当前预测的概率分布,计算过程如下:

\[h_0 = UW_e + W_p \]

\(W_p\)代表单词的位置编码,形状为\([max\_seq\_len, embedding\_dim]\),\(W_e\)的形状为\([vocab\_size, embedding\_dim]\)

得到输入张量\(h_0\)后,要将\(h_0\)传入GPT的 Decoder Block中,依次得到\(h_t\):

\[h_t = transformer\_block(h_{l-1}) l \in[l,t] \]

最后通过得到的\(h_t\)来预测下一个单词:

\[P(u)=softmax(h_tW_e^T) \]

有监督的下游任务fine-tunning

GPT预训练后,会针对具体的下游任务队模型进行微调
微调采用的是 有监督学习,训练样本包括单词序列\([x_1, x_2, ..., x_n]\)和label y
GPT微调的目标任务:根据单词序列\([x_1, x_2, ..., x_n]\)预测标签y

\[P(y|x^1, ..., x^m) = softmax(h_l^mW_y) \]

其中,\(W_y\)表示预测输出的矩阵参数,微调任务的目标是最大化下面的函数:

\[L_2 = \sum_{(x,y)}log{P(y|x^1, ..., x^m)} \]

综合两个阶段的目标任务函数,可知GPT的最终优化函数为:

\[L_3 = L_2 + \lambda L_1 \]

整体训练过程架构图

根据下游任务适配的过程分两步:

  1. 根据任务定义不同输入
  2. 对不同任务增加不同的分类层
    具体定义可以参见下图:
    image

GTP数据集

GPT使用了BooksCorpus数据集,文本大小约5GB,包含7400W+的句子。这个数据集由7000本独立的、不同风格类型的书籍组成,选择该部分数据集的原因:

    1. 书籍文本包含大量高质量长句,保证模型学习长距离信息依赖
    1. 书籍未开源公布,所以很难在下游数据集上见到,更能体验模型的泛化能力

GPT模型的特点

模型的一些关键参数为:
image

优点

  • GPT在9个任务上的表现sota
  • 更易于并行化

缺点

  • GPT-1语言模型是单向的
  • 针对不同的任务,需要不同数据集进行模型微调,相对比较麻烦

PS:

  1. GPT-1的模型架构?
    答:Transformer的Decoder模块(去掉中间第二个子层)
  2. GPT-1预训练任务?
    答:1.无监督预训练;2.有监督任务微调
  3. GPT-1模型基本参数?
    答: 12层,12个head,768维,参数量1.17亿

GPT-2

简介

2019年2月,OpenAI推出了GPT-2,同时,发表了该模型的论文"Language Model are Unsupervised Multitask Leaners"(语言模型是无监督的多任务学习者)

相比于GPT-1,GPT-2突出的思想为多任务学习,其目标旨在仅采用无监督预训练得到一个泛化能力更强的语言模型,直接应用到下游任务中。 GPT-2并没有对GPT-1的网络结构进行过多的创新与设计,而是使用了更多的网络参数与更大的数据集:最大模型共计48层,参数量达15亿
image

GPT-2模型架构

在模型方面,相对与GPT-1,GPT-2做了微小的改动:

  • LN层被放置在Self-Attention层和Feed Forward层前,而不是像原来那样后置(目的:随着模型层数不断增加,梯度消失和梯度爆炸的风险越来越大,这些调整能够减少预训练过程中各层之间的方差变化,使梯度更加稳定)

  • 在最后一层Transformer Block后增加了LN层

  • 输入序列的最大长度从512扩充到1024
    image

GPT-2 训练核心思想

GPT-2模型的学习目标:使用无监督的预训练模型做有监督的任务

GPT-2模型目的:模型从大规模数据中学到的能力能够直接在多个任务之间进行迁移,而不需要额外提供特定任务的数据进行Fine-Tuning

因此,GPT-2提出了新的观点:zero-shot,通过zero-shot,在迁移到其他任务上的时候不需要额外的标注数据,也不需要额外的模型训练

GPT-2的训练只包括无监督的预训练过程,和GPT-1第一阶段训练一样,也属于一个单项语言模型:

  • 语言模型其实也是在给序列的条件概率建模,即\(p(s_n|s_1, s_2, ..., s_{n-1})\)

在zero-shot的设定下,不同任务的输入序列应该与训练时见到的文本长得一样,也就是以自然语言的形式去作为输入,例如,下面两个任务的输入序列是这样改造的:
机器翻译任务: translate to french,{english text}, {french text}
阅读理解任务: answer the question, {document}, {question}, {answer}

为什么上述输入序列的改造是有效的?或者说为什么zero-shot是有效的?这里引用原文的一句话:

Our approach motivates building as large and diverse a dataset as possible in order to collect natural language demonstrations of tasks in as varied of domains and contexts as possible.
大致意思:从一个尽可能大且多样化的数据集中一定能收集到不同领域不同任务相关的自然语言描述示例。

综上,GPT-2的核心思想:当模型的容量非常大且数据量足够丰富时,仅仅靠语言模型的学习便可以完成其他有监督学习的任务,不需要再下游任务微调。

GPT-2的数据集

  • 为了保证zero-shot的效果,必须要足够大且覆盖面广
  • GPT-2专门爬取了大量的网络文本数据,GPT-2的文章取自Reddit上高赞的文章,命名为WebText
  • 数据集共有约800万篇文章,累积体积约40G
  • 为了避免和测试集的冲突,WebText移除了涉及Wikipedia的文章

GPT-2模型的特点

与GPT-1的区别:

    1. 主推zero-shot,而GPT-1为pre-train + fine-tuning
    1. 训练数据规模更大,GPT-2为800W 文档 40G, GPT-1为5GB
    1. 模型大小,GPT-2最大15亿参数,GPT-1 为1 亿参数
  • 4。 模型架构调整,层归一化
    1. 训练参数,batch_size 从 64 增加到 512,上文窗口大小从512 增加到 1024

优点:

  • 文本生成效果好,仅通过zero-shot学习,就有7个任务超过之前sota的方法
  • 海量数据和大量参数训练出来的词向量有迁移到其他类别任务中而不需要额外训练

缺点:

  • 无监督学习能力有待提升
  • 有些任务上的表现不如随机

GPT-2表明随着模型容量和数据量的增大,其潜能还有进一步开发的空间。也正是基于这个思想,诞生了GPT-3

PS:

  1. GPT-2模型架构?
    答:相较于GPT-1做了较小的改动:1) pre_LayerNorm;2) 最后一层加入LN层;3) 序列长度扩大到1024

  2. GPT-2预训练任务?
    答:无监督预训练

  3. GPT-2提出的新思想?
    答:zero-shot,零样本学习,达到开箱即用的效果

GPT-3

简介

2020年5月,OpenAI发布了GPT-3,同时发表论文"Language Models are Few-Shot Learner"《小样本学习者的语言模型》
GPT-3提出的核心观点:Few-Shot思想
相比GPT-2的Zero-Shot,需要使用少量样本在下游任务中去做微调,从而让模型给出更准确的答案。

GPT-3模型架构

GPT-3不是一个单一的模型,而是一个模型系列。系列中的每个模型都有不同数量的可训练参数。下表显示了每个模型、体系结构及其对应的参数:
image

在模型结构上,GPT-3延续使用GPT模型架构,但引入了Sparse Transformer中的Sparse Attention模块(稀疏注意力)
Sparse Attention与传统的Self-Attention(称为dense Attention)的区别在于:

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

具体来说,Sparse Attention除了相对距离不超过k亦即相对距离不超过k,2k,3k, ..., 的token,其他所有的token的注意力都设为0,如下图所示:
image

使用sparse attention的好处主要有:

  • 减少注意力层的计算复杂度,节约显存和耗时,从而能够处理更长的输入序列
  • 具有 "局部紧密相关和远程稀疏相关"的特性,对于距离较近的上下文关注更多,对于距离较远的上下文关注较少

最大版本GPT-3 175B或"GPT-3" 模型具有175个B参数、96层的多头Transformer、Head size为96、词向量维度为12288、文本长度大小为2048

GPT-3 训练核心思想

GPT-3 模型训练的思想与GPT-2的方法相似,去除了fine-tune过程,只包括预训练过程,不同只在于采用了参数更多的模型、更丰富的数据集和更长的训练的过程

但 GPT-3 模型在进行下游任务评估和与预测时采用了三种方法:Few-shot、One-shot、Zero-shot

其中 Few-Shot、One-Shot 也被称之为情境学习(in-context learning,也可称为提示学习)。
情景学习理解:在被给定的几个任务示例或一个任务说明的情况下,模型应该能通过简单预测以补全任务中其他的实例,即情境学习要求预训练模型要对任务本身进行理解

In-context learning核心思想在于 通过少量的数据寻找一个合适的初始化范围,是的模型能够在有限的数据集上快速你和,并获得不错的效果。

以"英语到法语的翻译任务"为例,对比传统的微调策略和GPT-3三种情境学习方式:
image
image

虽然in-context learning与fine-tuning一样都需要一些有监督标注数据,但两者的区别在于:

  • fine-tuning基于标注数据对模型参数进行更新,而In-context learning使用标注数据时不做任何的梯度回传,模型参数不更新
  • In-context learning 依赖的数据量(10 ~ 100)远远小于fine-tning一般的数据量

GPT-3通过大量下游任务实验验证:few-shot效果最佳,one-shot效果次之,zero-shot效果最差

GPT-3数据集

一般来说,模型的参数越多,训练模型所需要的数据就越多,GPT-3共训练了5个不同的语料大约45TB的文本数据。
image

不同数据的介绍:

  • Common Crawl语料库来自网络爬虫中的数据,如网页数据等
  • WebText2 是来自具有3+ upvotes的帖子的所有出站Reddit链接的网页文本
  • Books1 和Books2是两个基于互联网的图书语料库
  • 英文维基百科页面 也是训练语料库的一部分

GPT-3模型的特点

与GPT-2的区别:

  • 效果上,超出了GPT-2非常多,能生成人类难以区分的新闻文章
  • 主推few-shot,相比于GPT-2的zero-shot,具有很强的创新性
  • 模型结构略微变化,具有sparse attention模块
  • 海量训练语料,45TB(清洗后570GB),相比于GPT-2的40GB
  • 海量模型参数,最大模型为1750亿,GPT-2最大为15亿参数

GPT-3 模型的特点

优点:

  • 整体上,GPT-3在zero-shot或one-shot设置下能取得尚可的成绩,在few-shot设置下有可能超过基于fine-tunel的SOTA模型
  • 去除了fine-tuning任务
    缺点:
  • 由于40TB海量数据的存在,很难保证GPT-3生成的文章不包含一些非常敏感的内容
  • 对于部分任务比如:“填空类型”等,效果具有局限性
  • 当生成文本长度较长时,GPT-3可能重复生成一段话,前后矛盾,逻辑衔接不好等
  • 陈本太大

PS:

  1. GPT-3模型架构?
    答:和GPT-2基本一致,提出了sparse attention

  2. GPT-3预训练任务?
    答:无监督预训练

  3. GPT-3提出的新思想?
    答:ICL:Few-shot、One-shot、zero-shot

ChatGPT

介绍

ChatGPT是一种基于GPT-3的聊天机器人模型,它旨在使用GPT-3的语言生成能力来与用户进行自然语言对话。例如,用户可以向ChatGPT发送信息,然后ChatGPT会根据信息生成一条回复

GPT-3是一个更大的自然语言处理模型,而ChatGPT则是使用GPT-3来构建的聊天机器人,他们之间的关系是ChatGPT依赖于Gpt-3的语言生成能力来进行对话

注:目前基于ChatGPT的论文并没有发布,下面是基于OpenAI官网的介绍对其原理进行解析:

ChatGPT原理

原始的 GPT-3 就是能力非一致模型, 类似GPT-3 的大型语言模型都是基于来自互联网的大量文本数据进行训练, 能够生成类似人类的文本, 但它们可能并不总是产生符合人类期望的输出.

ChatGPT 为了解决模型的不一致问题, 使用了人类反馈来指导学习过程,对其进行了进一步训练.所使用的具体技术就是强化学习(RLHF)

强化学习

理解强化学习基本要素,这里以flappy bird为代表,讲解强化学习的基本要素:
image

如何让AI实现自动打游戏?
image

ChatGPT强化学习步骤

从人类反馈中进行强化学习,该方法总体包括三个步骤:

    1. 监督学习(SFT 模型), 预训练的语言模型在少量已标注的数据上进行调优, 以学习从给定的 prompt 列表生成输出的有监督的策略
    1. 训练奖励模型(reward): 标注者们对相对大量的 SFT 模型输出进行收集和排序, 这就创建了一个由比较数据组成的新数据集. 在此数据集上训练新模型, 被称为训练奖励模型(Reward Model, RM)
    1. 强化学习(PPO算法): 对RM 模型用于进一步调优和改进 SFT 模型, PPO 输出结果的是策略模式
      步骤1,只进行一次,步骤二和步骤三可以持续重复执行

监督学习

工作原理:
image

训练奖励模型

奖励模型的目的是为 SFT 模型输出进行打分, 代表这些输出对于人类来说可取程度有多大. 即模仿人类偏好的系统.
image

强化学习

强化学习被应用于通过优化 RM 模型来调优 SFT 模型. 所使用的特定算法称为近端策略优化(PPO).
image

ChatGPT特点

特点

  • 回答理性又全面,ChatGPT更能做到多角度全方位回答
  • 降低学习成本,可以快速获取问题答案

缺点

  • 由于ChatGPT服务不稳定
  • 对于部分任务比如:查询某语言系统关键字等,会给出没有意义的答案

PS:

  1. ChatGPT模型原理?
    答:有监督的微调 + 奖励模型 + 强化学习
  2. 强化学习的关键信息?
    答:1. 一种机器学习方法;2. 关注智能体和环境的交互;3. 目标追求最大化

标签:shot,训练,模型,介绍,学习,任务,简单,GPT
From: https://www.cnblogs.com/whiteBear/p/18493950

相关文章

  • 自己实现一个简单可变参数函数
    什么是可变参数在C语言编程中有时会遇到一些参数可变的函数、例如printf()、scanf(),其函数原型为:intprintf(constchar*format,...)intscanf(constchar*format,...)它除了有一个参数format固定以外,后面的参数其个数和类型都是可变的,用三个点"..."作为参数占位符号。......
  • 影刀RPA实战:识别简单计算验证码
    1.官方计算验证码基于影刀AI引擎的验证码识别指令,该指令不是长期免费,有一定的免费额度,用完之后需要我们到影刀官方充值。上图使我们要识别的计算验证码影刀指令代码:配置我们选择计算题,文件路径本次指定本地图片,实际中使用网页截图保存图片地址实现演示:计算结果166......
  • 简单讲解一下strlen与sizeof(c基础)
    strlen是一个函数,用来计算字符串的长度,但不包括字符串末尾的空字符'\0'。它通过从字符串的首地址开始遍历,直到遇到空字符为止,返回在此过程中遍历过的字符个数。""中的内容结束自动包含'\0',而‘’则不包含。srtlen会一直取到'/0',即值是随机的。例如,对于字符串 "hello",strlen......
  • 2024-11-03:得到更多分数的最少关卡数目。用go语言,Alice 和 Bob 正在进行一个有 n 个关
    2024-11-03:得到更多分数的最少关卡数目。用go语言,Alice和Bob正在进行一个有n个关卡的游戏,其中每个关卡要么是困难模式(possible[i]==0),要么是简单模式(possible[i]==1)。玩家在游戏中获得分数的规则如下:通过简单模式的关卡可得1分,而遇到困难模式的关卡将扣除1分。Alice从......
  • ZK范式系列之zkVM介绍(1)
    1.引言zkVM(Zero-KnowledgeVirtualMachine,零知识虚拟机):是一种功能强大的虚拟机,利用零知识证明(zero-knowledgeproof,ZKP)来保证计算的完整性和隐私性。零知识证明(ZKP):是一种密码学技术,使一方能够向另一方证明声明的有效性,而无需透露任何其他信息。简单来说,这就像证明......
  • 简单的C语言数据加解密算法实现与探讨
    在数据安全日益重要的今天,加密技术成为了保护信息不被未授权访问或篡改的重要手段。虽然在实际应用中,我们通常会采用如AES、RSA等复杂的加密算法,但理解加密的基本原理和实现一个简单的加密算法对于学习计算机安全基础至关重要。本文将介绍如何使用C语言实现一个基于简单替换加密(Su......
  • Windows Active Directory技术介绍和应用——集中式用户账户管理
    大纲静态IP构建组织用户加域修改DNS加域题外参考资料企业可以将所有员工的账户信息集中存储在ActiveDirectory中,方便管理员进行统一创建、修改、删除用户账号等操作。例如,当新员工入职时,管理员可以快速创建其账号并赋予相应的权限和访问级别;员工离职时,也能及时禁......
  • 虚拟化技术介绍
    概念解释虚拟化(技术)是什么虚拟化技术是一种资源管理(优化)技术,将计算机的各种物理资源予以抽象、转换,然后呈现出来的一个可供分割并任意组合为一个或多个(虚拟)计算机的配置环境。(以上摘自《虚拟化技术发展编年史》)计算机虚拟化技术简单说来就两点:虚拟化(抽象)+复用(转换);虚拟化设备......
  • Threejs渲染3D字体介绍
    概述本文主要介绍如何通过Three.js生成3D文本。效果展示代码分析核心代码部分就是通过Three.js中的FontLoader和TextGeometry来加载字体并创建3D文本。核心代码如下:constloader=newFontLoader();loader.load(textFamily.value,function(font){......