从GPT-1到GPT-3 预训练语言模型的演进与突破

本文由 ChatMoney团队出品

前言

Generative Pre-trained Transformer(GPT)系列是由OpenAI开发的预训练语言模型,它们在多种NLP任务中取得了令人瞩目的成绩,包括文章生成、代码生成、机器翻译和问答等。GPT系列模型的核心思想是通过无监督学习在大规模语料库上进行预训练,再通过少量数据进行微调以适应特定任务。随着模型容量的增加和训练数据的扩大,GPT系列模型的能力也在不断提升。

模型

发布时间

参数量

预训练数据量

GPT

2018 年 6 月

1.17 亿

约 5GB

GPT

2019 年 2 月

15 亿

40GB

GPT

2020 年 5 月

1,750 亿

45TB

GPT-1:无监督学习与通用预训练

在GPT-1问世之前,传统的自然语言处理(NLP)模型主要依赖于有监督学习,这种方法要求大量带有明确标签的数据进行任务特定的模型训练。然而,有监督学习存在两大局限性:

  1. 数据标注的挑战:高质量的标注数据往往难以获取,特别是在一些复杂场景中,如图像标注或情感分析,数据的标签可能模糊或不清晰。

  2. 模型泛化能力的局限:通过某一特定任务训练的模型往往难以直接应用于其他任务,这使得模型更像是“领域专家”而非真正理解NLP的“通才”。

GPT-1打破了这一局限,它采用了一种全新的思路:先通过无标签数据学习一个通用的语言模型,再根据具体任务进行微调。GPT-1能够处理的有监督任务包括:

  • 自然语言推理判断两个句子之间是否存在蕴含、矛盾或中立关系。

  • 问答与常识推理:类似于多选题,给定文章、问题和多个候选答案,模型需要预测每个答案的概率。

  • 语义相似度判断:确定两个句子在语义上是否相关。

  • 文本分类:识别输入文本的类别归属。

这种将无监督学习作为有监督模型预训练目标的方法,被称为通用预训练(Generative Pre-training,GPT)。

GPT-1的训练过程

GPT-1的训练分为两个阶段:无监督的预训练和有监督的微调。

1.1.1 无监督预训练

GPT-1的无监督预训练基于语言模型进行。给定一个无标签的文本序列,模型的优化目标是最大化序列中每个词的条件概率乘积,即最大化似然值。这一过程中,GPT-1使用了滑动窗口机制,并在每个窗口内计算条件概率。这些参数通过随机梯度下降(SGD)等优化算法进行更新。

GPT-1的模型结构基于Transformer架构,特别是其中的解码器部分。它采用了12个Transformer块堆叠而成,每个块都包含多头自注意力机制和全连接层,用于生成输出概率分布。

通过这种方式,GPT-1能够在无标签数据上学习语言的通用表示,为后续的有监督任务微调提供强有力的基础

1.2 GPT-1的数据集

GPT-1的训练主要基于BooksCorpus数据集,这是一个包含大量未发布书籍的集合。选择这个数据集的原因主要有两点:首先,书籍中的文本通常具有较长的上下文依赖关系,这有助于模型学习长期的依赖模式;其次,由于这些书籍未公开发布,因此在其他NLP数据集中出现的可能性较低,这进一步验证了GPT-1模型的泛化能力。

1.3 网络结构的细节

GPT-1采用了基于Transformer的架构,具体包含12层的Transformer解码器。以下是一些关键的网络结构细节:

  • 掩码自注意力机制:GPT-1使用了掩码自注意力头,确保模型在预测某个词时不会看到该词之后的任何信息,这有助于模型学习语言的自然顺序。

  • 字节对编码(BPE):GPT-1使用BPE进行文本编码,共有固定的字节对数量,这种编码方式能有效处理罕见的和未见过的词汇。

  • 词编码长度:词编码的长度设定为固定的长度,以适应不同长度的词汇。

  • 位置编码:GPT-1也学习位置编码,以捕捉序列中词的位置信息。

  • Transformer层数与头数:GPT-1包含12层的Transformer,每个Transformer块有多个自注意力头,头数设定为固定值。

  • 正则化机制:GPT-1使用了包括Attention、残差连接、Dropout等多种机制进行正则化,以防止过拟合。

  • 激活函数:GPT-1的激活函数为GELU(Gaussian Error Linear Unit),这是一种平滑的ReLU变种,有助于模型更好地学习非线性关系。

  • 训练参数:GPT-1的训练参数包括batch size、学习率、序列长度、训练轮数(epoch)等,这些参数的选择对模型的性能有重要影响。GPT-1的模型参数数量达到了数十亿级别。

1.3.1 无监督训练

在无监督训练阶段,GPT-1主要关注于最大化给定文本序列的似然值。这通过调整模型的参数,使模型能够预测序列中每个词的出现概率来实现。

1.3.2 有监督微调

在有监督微调阶段,GPT-1使用无监督训练得到的模型作为起点,针对特定NLP任务进行微调。这通常涉及调整模型的顶层结构,以适应不同任务的输出要求。通过微调,GPT-1能够在保持模型泛化能力的同时,提高在特定任务上的性能。

1.4 GPT-1的性能

GPT-1在多个NLP任务上展示了强大的性能。在有监督学习的12个基准任务中,GPT-1在9个任务上的表现超过了当时的最佳模型。在零次学习(zero-shot)任务中,GPT-1也显示出较好的稳定性,并且随着训练次数的增加,性能逐渐提升。这表明GPT-1具有较强的泛化能力,可以应用于与训练任务不直接相关的其他NLP任务中。

然而,值得注意的是,GPT-1在未经微调的任务上虽然也有一定的效果,但其性能通常低于经过微调的有监督任务。这说明GPT-1虽然在语言建模方面取得了显著进展,但仍需要在特定任务上进行微调才能充分发挥其潜力。因此,GPT-1可以被视为一个强大的“领域专家”,但还不是一个通用的语言学家。

GPT-2:多任务学习与更大的模型

GPT-2旨在通过扩展模型容量和采用更大的数据集来训练一个泛化能力更强的词向量模型。与GPT-1相比,GPT-2在模型结构上并未进行大的创新,但它在网络参数和数据集规模上有了显著的增加。下面我们将对GPT-2进行详细的介绍。

2.1 GPT-2的核心思想

GPT-2的核心思想是使用无监督的预训练模型来执行有监督的任务。基于文本数据的时序性,GPT-2将语言建模任务转化为根据已知上文预测未知下文的条件概率问题。具体来说,一个输出序列可以表示为一系列条件概率的乘积,这实际上是一个序列生成任务。

GPT-2进一步扩展了这一思想,认为当模型的容量足够大且数据量足够丰富时,仅通过训练语言模型就可以覆盖大部分有监督学习任务。这是因为有监督学习任务可以看作是无监督语言模型的一个子集。例如,在训练了包含“Micheal Jordan is the best basketball player in the history”的语料后,模型不仅学会了语言模型,还隐含地学会了回答类似“who is the best basketball player in the history?”的问题。

2.2 GPT-2的数据集

GPT-2采用了名为WebText的数据集,该数据集来源于Reddit上的高赞文章。WebText共包含约800万篇文章,总数据量约为40GB。为了避免与测试集冲突,WebText移除了与Wikipedia相关的文章。

2.3 模型参数

GPT-2在多个方面对模型参数进行了调整和优化:

  • 字典大小:使用字节对编码(BPE)构建字典,字典的大小设定为特定值,以适应不同长度的词汇。

  • 滑动窗口大小:根据模型需要设定滑动窗口的大小,用于捕获文本中的上下文信息。

  • Batch Size:为了加速训练和提高模型性能,GPT-2增大了batch size的大小。

  • Layer Normalization:在Transformer块的输入部分添加了Layer Normalization,并在每个self-attention之后也添加了一个Layer Normalization,以增强模型的稳定性。

  • 残差层缩放:GPT-2对残差层的初始化值进行了缩放,缩放因子与残差层的个数相关,以改善深层模型的训练效果。

GPT-2训练了四组不同层数和词向量长度的模型,这些模型在多个NLP任务上均取得了显著的性能提升。实验结果表明,随着模型规模的增大,GPT-2的泛化能力和性能也在不断提升。

参数量

层数

词向量长度

117M(GPT-1)

12

768

345M

24

1024

762M

36

1280

1542M

48

1600

GPT-3:海量参数与In-context Learning

GPT-3是目前最强大的语言模型之一,它凭借其巨大的参数量、庞大的训练数据集以及创新的训练方式,在各种NLP任务上均展现出了出色的性能。无需大量有标签的训练数据,GPT-3仅需零次或少数几次学习即可在下游任务中取得优异的表现。

3.1 In-context Learning

GPT-3的出色性能在很大程度上归功于其采用的In-context Learning方法。为了理解In-context Learning,我们先来探讨一下元学习(Meta-learning)的概念。元学习的核心思想是通过学习如何学习,来找到一种有效的学习策略或初始化参数,使得模型能够在新的、未见过的任务上快速适应并取得良好的性能。

In-context Learning是元学习思想的一种具体实现,它允许模型在给定一些示例的情况下,直接通过这些示例来学习并完成任务,而无需显式地更新模型参数。在GPT-3中,这种学习方式被应用于各种NLP任务中。具体来说,当给定一个新的任务时,我们可以向GPT-3提供少量的示例输入和对应的输出(即“上下文”),然后让GPT-3根据这些示例来推断并生成针对新输入的输出。通过这种方式,GPT-3能够在不依赖大量有标签训练数据的情况下,快速适应并完成各种NLP任务。

GPT-3的In-context Learning能力得益于其巨大的参数量和训练数据集。通过在大规模无监督文本数据上进行预训练,GPT-3已经学习到了丰富的语言知识和模式。这使得它能够在给定少量示例的情况下,快速理解并应用这些知识来完成新任务。同时,GPT-3的巨大参数量也使其具备了强大的表征能力,能够捕捉并表达复杂的语言现象和语义关系。

除了In-context Learning外,GPT-3还采用了多种先进的技术和策略来提高其性能和泛化能力。例如,GPT-3采用了Transformer架构的变体,并引入了稀疏自注意力机制来降低计算复杂度。此外,GPT-3还使用了混合精度训练、数据并行等技术来加速训练过程并减少资源消耗。这些技术和策略共同使得GPT-3成为了一个强大而高效的语言模型。

总结

GPT系列模型的发展历程展示了预训练语言模型的强大潜力和广阔前景。随着模型容量的不断增加和训练数据的不断扩大,我们可以期待未来会有更加强大和智能的NLP模型出现。

关于我们

本文由ChatMoney团队出品,ChatMoney专注于AI应用落地与变现,我们提供全套、持续更新的AI源码系统与可执行的变现方案,致力于帮助更多人利用AI来变现,欢迎进入ChatMoney获取更多AI变现方案!

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

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

相关文章

leetcode--二叉树中的最长交错路径

leetcode地址:二叉树中的最长交错路径 给你一棵以 root 为根的二叉树,二叉树中的交错路径定义如下: 选择二叉树中 任意 节点和一个方向(左或者右)。 如果前进方向为右,那么移动到当前节点的的右子节点&…

《vue3》reactivity API(vue3的$set呢?)

在Vue2中&#xff0c;修改某一些数据&#xff0c;视图是不能及时重新渲染的。 比如数组 <div> {{ myHobbies }} </div>data: () > ({myHobbies: [篮球, 羽毛球, 桌球] }); mounted () {this.myHobbies[1] sing; // 视图层并没有改变 }因此&#xff0c;Vue2就提…

实验2 字符及字符串输入输出与分支程序设计实验

字符及字符串输入输出 从键盘输入两个一位十进制数&#xff0c;计算这两个数之和&#xff0c;并将结果在屏幕上显示出来。 分支程序设计 从键盘输入一字符&#xff0c;判断该字符是小写字母、大写字母、数字或者其他字符。若输入为小写字母&#xff0c;显示“You Input a Lo…

无忧易售功能:刊登页面文本翻译,无缝对接全球买家

每一个词语&#xff0c;每一句话&#xff0c;都承载着产品的灵魂和品牌的故事&#xff0c;无忧易售的刊登页面文本翻译服务&#xff0c;一键操作即可将你的产品介绍、详情或广告文案转化为多语言版本&#xff0c;轻松管理&#xff0c;高效发布。 一、Allegro、OZON、Coupang、…

手动将dingtalk-sdk-java jar包打入maven本地仓库

有时候,中央镜像库不一定有自己需要的jar包,这时候我们就需要用到该方法,将jar打入maven本地仓库,然后项目中,正常使用maven的引入规则。 mvn install:install-file -Dmaven.repo.local=D:\software\maven\apache-maven-3.6.3-bin\apache-maven-3.6.3\repo -DgroupId=ding…

高德地图轨迹回放并提示具体信息

先上效果图 到达某地点后显示提示语&#xff1a;比如&#xff1a;12&#xff1a;56分驶入康庄大道、左转驶入xx大道等 <!doctype html> <html> <head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"…

Datawhale AI夏令营2024 Task3

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 #AI夏令营 #Datawhale #夏令营 一、数据集制作1.1 环境配置1.2 数据处理prompt1.3 训练数据集制作1.4 测试集数据制作 二、模型微调2.1 平台微调2.2 平台微调 三、微调推理提…

天环公益原创开发进度网站源码带后台免费分享

天环公益计划首发原创开发进度网站源码带后台免费分享 后台地址是&#xff1a;admin.php 后台没有账号密码 这个没有数据库 有能力的可以自己改 天环公益原创开发进度网站 带后台

【Vue】使用html、css实现鱼骨组件

文章目录 组件测试案例预览图 组件 <template><div class"context"><div class"top"><div class"label-context"><div class"label" v-for"(item, index) in value" :key"index">…

深度解析Java世界中的对象镜像:浅拷贝与深拷贝的奥秘与应用

在Java编程的浩瀚宇宙中&#xff0c;对象拷贝是一项既基础又至关重要的技术。它直接关系到程序的性能、资源管理及数据安全性。然而&#xff0c;提及对象拷贝&#xff0c;不得不深入探讨其两大核心类型&#xff1a;浅拷贝&#xff08;Shallow Copy&#xff09;与深拷贝&#xf…

【ROS2】初级:CLI工具-使用 rqt_console 查看日志

目标&#xff1a;了解 rqt_console &#xff0c;一种用于内省日志消息的工具。 教程级别&#xff1a;初学者 时间&#xff1a;5 分钟 目录 背景 先决条件 任务 设置在 rqt_console 上的 2 条消息 日志级别 3 摘要 下一步 背景 rqt_console 是用于在 ROS 2 中内省日志消息的 GUI…

【Python实战因果推断】21_倾向分1

目录 The Impact of Management Training Adjusting with Regression 之前学习了如何使用线性回归调整混杂因素。此外&#xff0c;还向您介绍了通过正交化去偏差的概念&#xff0c;这是目前最有用的偏差调整技术之一。不过&#xff0c;您还需要学习另一种技术--倾向加权。这种…

东哥教你如何用Orange Ai pro为家里做一个垃圾分类检测机器

前言 最近入手了一块香橙派&#xff08;Orange Ai Pro&#xff09;的板子&#xff0c;他们的口号是&#xff1a;为AI而生&#xff0c;这让一个算法工程师按捺不住了&#xff0c; 之前主要是在RKNN和ESP32等设备上部署AI模型&#xff0c;看到官方介绍的强大AI算力&#xff0c;很…

how to use Xcode

Xcode IDE概览 Xcode 页面主要分为以下四个部分&#xff1a; 工具栏&#xff08;ToolBar area&#xff09;&#xff1a;主要负责程序运行调试&#xff0c;编辑器功能区域的显示 / 隐藏&#xff1b;编辑区&#xff08;Editor area&#xff09;&#xff1a;代码编写区域&#xf…

前端面试题(CSS篇二)

一、请解释一下 CSS3 的 Flex box&#xff08;弹性盒布局模型&#xff09;&#xff0c;以及适用场景 相关知识点: Flex是FlexibleBox的缩写&#xff0c;意为"弹性布局"&#xff0c;用来为盒状模型提供最大的灵活性。 任何一个容器都可以指定为Flex布局。行内元素也可…

Unity之VS脚本自动添加头部注释Package包开发

内容将会持续更新&#xff0c;有错误的地方欢迎指正&#xff0c;谢谢! Unity之VS脚本自动添加头部注释Package包开发 TechX 坚持将创新的科技带给世界&#xff01; 拥有更好的学习体验 —— 不断努力&#xff0c;不断进步&#xff0c;不断探索 TechX —— 心探索、心进取&…

Swift 中的方法调用机制

Swift 方法调用详解&#xff1a;与 Objective-C 的对比、V-Table 机制、Witness Table 机制 在 iOS 开发中&#xff0c;Swift 和 Objective-C 是两种常用的编程语言。尽管它们都能用于开发应用程序&#xff0c;但在方法调用的底层机制上存在显著差异。本文将详细介绍 Swift 的…

CD4017 – 带解码输出的十进制计数器

CD4017 IC 是一个十进制计数器&#xff0c;它有 10 个输出&#xff0c;分别代表 0 到 9 的数字。计数器在&#xff08;14号引脚&#xff09;每个时钟脉冲上升时增加 1。计数器达到 9 后&#xff0c;它会在下一个时钟脉冲时从 0 重新开始。 引脚名称管脚 &#xff03;类型描述VD…

【常用工具】Linux命令行Restful接口调试神器——curl脚本

最近的工作经常要涉及到在Linux服务器端和外部系统联调接口&#xff0c;由于Postman无法在命令行使用&#xff0c;这里浅记一个curl脚本模板&#xff1a; #!/bin/bash # 请求标题 TITLE # token信息 TOKEN # url信息 URL # 请求方式 METHODPOST # Restful请求报文 BODYecho -e…