自然语言处理基础知识入门(六) GPT模型详解

在这里插入图片描述

GPT

  • 前言
  • 一、GPT模型
    • 1.1 为什么采用Decoder模块?
    • 1.2 为什么不使用Encoder模块?
  • 二、 模型训练
    • 2.1 预训练阶段
    • 2.2 半监督微调
  • 总结

前言

在之前的章节中,深入探究了预训练ELMo模型的架构与实现原理。通过采用双向LSTM架构在大规模文本数据上进行预训练,ELMo模型成功地为预训练模型时代的开启奠定了基础。继ELMo之后,OpenAI基于transformer架构发布了GPT(Generative Pre-training Transformer)模型,该模型同样采用预训练策略,进一步推动了自然语言处理领域的语言模型发展。在本章节,以GPT模型为起点,初步的学习ChatGPT等基于对话的AI模型背后的原理与技术演化。这将为读者深入理解当前模型在理解和生成自然语言方面的先进能力提供重要视角。鉴于Bert模型也是在GPT之后推出,为了保持学习的连贯性和理论发展的时间线顺序,本章节将优先探讨GPT模型。

一、GPT模型

按照惯例,首先对GPT下一个直白的定义。

GPT(Generative Pre-training Transformer)是由移除了交叉注意力(cross-attention)层的多层Transformer decoder构成的。

下图通过Transformer的整体架构图直观的展示GPT具体采用的区域,图中红色矩形表示GPT具体采用的部分,为Transformer decoder模块并且删除了模型了cross-attention层。

在这里插入图片描述

1.1 为什么采用Decoder模块?

要理解为何GPT采用decoder结构,首先需要了解其在预训练阶段的核心任务。GPT在本质上执行的是一个序列生成任务,类似于经典的文本接龙游戏(或称为语言模型预测任务),其目标是基于给定文本序列之前的部分,预测接下来可能出现的文本内容。换而言之,这个任务要求模型使用已知的输入信息(即前文),来预测当前可能出现的单词,这与循环神经网络(RNN)处理序列数据的方式相似。当前例子参考Lee老师针对GPT的讲解。

在这里插入图片描述

使用transformer架构decoder的作用是可以实现模型的并行化处理(主要是Transformer优于RNN的原因),这得益于自注意力机制的能力,从而不在像传统的RNN一样,并能更好地捕捉复杂的模式和依赖关系。这样的设计使得 GPT 不仅能模仿 RNN 文本生成的自回归特性,还能摆脱RNN在处理长序列时可能遇到的梯度消失等问题,从而在自然语言生成任务中实现更佳的性能。对这部分有疑问的同学可以参考当前专栏Transformer部分的内容

1.2 为什么不使用Encoder模块?

上文中讨论了预训练阶段的核心任务。GPT在本质上执行的是一个序列生成任务,自注意力带来的并行化优势选择了Transformer架构。因此采用了Decoder结构,那为什么不使用Encoder呢?
在这里插入图片描述

关键在于生成任务所需的Masked机制。正如上图所展示的,一个没有交叉注意力层的Decoder与Encoder的主要区别在于Masked机制。如果在生成任务中不应用Masked机制,模型就将直接“窥视”到正确答案,这显然违背了序列生成所需的自回归性质。因此,GPT设计中采纳了Decoder结构。本身模型不具备Encoder部分所以也不存在需要编码器指导输出,故此摒弃掉cross-attention层。

这样的设计选择体现了模型结构与任务目标的紧密配合,确保了模型能够有效且高效地处理序列生成任务,为其在各类自然语言处理应用中的成功奠定了基础。

二、 模型训练

在ELMo模型中,双向LSTM的参数在预训练阶段被学习并固定下来。当ELMo被用于下游任务(如文本分类、问答系统等)的fine-tuning阶段时,双向LSTM生成的上下文依赖表示(即深层语言特征)是不变的。变化的是对这些深层特征的使用方式,即通过调整特定于任务的缩放参数(S参数)和全局调整参数(gamma)来优化ELMo嵌入对于特定任务的表现。具体有疑问的同学可以参考当前专栏ELMo的文章

简而言之,在ELMo模型的应用过程中,双向LSTM的参数保持不变,变化的是如何利用ELMo生成的上下文特征来最佳地适应特定下游任务的需求。和ELMo类似,GPT(Generative Pretraining Transformer)模型也包含了两个主要阶段:预训练(pretraining)阶段和微调(fine-tuning)阶段。

2.1 预训练阶段

在这个阶段,它通过Transformer中修改的Decodr模块和自回归语言建模目标进行训练,以此捕捉文本中的长期依赖性和复杂的语言模式。这个阶段不专注于任何特定的下游任务,而是旨在学习一个通用的语言模型。

GPT模型利用了庞大的未标注文本数据集,包括维基百科和各种网页内容。此阶段的训练目标是通过调整模型参数来最大化数据集上的对数似然(log-likelihood)。从下图中原论文中对预训练阶段的描述可以看出,模型的结构在这一阶段保持相对简化,主要通过滑动窗口方法来构建语言模型,这与连续词袋模型(CBOW)有相似之处。目的是通过最小化损失函数,引导模型逐步迭代更新参数,以精炼其内部表示,从而更好地预测文本中单词的上下文关系。

请添加图片描述

下图中,通过观察论文中的细节可以看到模型的具体架构,就是一个多层堆叠的没有交叉注意力的Decoder:

请添加图片描述

尽管模型的调整似乎较为微小,但存在一个细节尤其值得关注:模型放弃了Transformer架构中对位置编码的常规处理方式,转而采用了一种可学习的参数矩阵 w p w_p wp 来处理位置信息。与此同时, W e W_e We 作为嵌入矩阵,其实质与Transformer架构中的处理方式并没有显著差异。这个矩阵可以是通过word2vec、GloVe或其他预训练模型生成的,用于将单词从稀疏的One-hot编码转换为密集的向量表示形式。以赋予模型一个良好的起点和对词汇之间语义相似性的基础理解,但是在后续的训练过程中,这个矩阵往往会随着损失函数的反向传播而被适当地调整。

2.2 半监督微调

在这个阶段,GPT对特定的下游任务进行微调。通常,模型会继承预训练阶段学到的参数,然后在目标任务的数据集上进行进一步训练。在微调阶段,可以对整个模型进行调整,或者只调整特定的层。此时,模型的目标是最大限度地提高在特定任务上的性能。论文中直观的给出了一个和微调相关的例子:

假设有一个标注数据集 C C C ,其中每个实例由一系列输入令牌 x 1 , . . . , x m x_1,...,x_m x1,...,xm 以及一个标签 y y y 组成。输入通过我们预训练的模型传递,以获得最终的Transformer块的激活 h m l h_m^l hml,然后这个激活被送入一个新增的线性输出层(带有参数 W y W_y Wy)来预测 y y y

P ( y ∣ x 1 , . . . , x m ) = softmax ( h m l W y ) . P(y|x_1,...,x_m) = \text{softmax}(h_m^l W_y). P(yx1,...,xm)=softmax(hmlWy).

以下要最大化的目标:

L 2 ( C ) = ∑ ( x , y ) log ⁡ P ( y ∣ x 1 , . . . , x m ) . L_2(C) = \sum_{(x,y)}\log P(y|x_1,...,x_m). L2(C)=(x,y)logP(yx1,...,xm).

上文的例子揭示了在微调阶段,GPT模型会利用带有标签的数据集 ( x , y ) (x, y) (x,y) 进行训练,并通过引入一个新的可学习的权重矩阵 W y W_y Wy 来适配具体的任务需求。这一做法表明,在面对不同任务时,GPT模型能够灵活地加入特定任务相关的可学习参数,以便对模型进行针对性的微调。通过这种方式,GPT不仅能够保留在大规模无标注数据上预训练所学到的通用语言表示能力,还能够通过额外参数的引入与调整,有效地适应并优化特定的下游任务表现。这种策略大大增强了GPT等预训练模型在多种自然语言处理任务中的应用灵活性和效果。

会不会出现模型为了当前任务的准确性而去修改动经过大量无监督训练得到的学习语意内容的参数呢?这样会不会影响模型的语义理解能力?GPT给出解决方式如下

请添加图片描述
微调阶段确实采用了两部分损失函数来进行模型参数的优化,具体目标如下(带有权重 λ \lambda λ):

L 3 ( C ) = L 2 ( C ) + λ ∗ L 1 ( C ) L_3(C) = L_2(C) + \lambda \ast L_1(C) L3(C)=L2(C)+λL1(C)

采用两个损失函数的目的,正是为了在使用有标签数据进行微调时,仍然能够保持与在无标签数据上训练时相同的模型架构。这种设计使模型在接受通过梯度下降法进行参数更新的同时,也面临着一个挑战——如何在适应新任务的需求中,不丢失先前在广泛语境下学到的语义信息。

具体而言,第一个损失 L 1 ( C ) L_1(C) L1(C)关注于维持模型对大量无标签文本数据的理解,即保留在预训练阶段获得的语义知识;而第二个损失 L 2 ( C ) L_2(C) L2(C)则针对模型在有标签数据集上的表现,旨在提升模型对特定任务的适应性和准确度。通过将这两个损失组合为一个总体目标 L 3 ( C ) L_3(C) L3(C),模型被引导在学习新任务的同时,也不过度偏离其原有的语言模型基础。

这种权衡策略,旨在防止模型过度拟合新任务而损失其通用的语义理解能力。 通过在自由接龙和目标任务之间建立平衡,确保了模型不仅能够高效地适应新任务,同时也维护了其作为一个强大通用语言模型的核心价值。这种做法体现了对模型灵活性和泛化能力的重视,同时也展示了如何通过精心设计的训练策略来优化模型性能。

请添加图片描述

论文中展示了四种针对微调任务的监督学习方式,旨在尽量减少对模型整体架构的修改以完成各项任务。如上图所示,左侧是我们提到的多层堆叠的解码器部分,该模型架构保持不变。而右侧则根据不同任务的需求,简单地添加了略有不同形式的线性层,这种设计使模型能够灵活适应多种任务,同时保持核心架构的稳定性。

总结

尽管论文的篇幅并不庞大,但GPT模型所带来的显著性能提升无疑充分体现了"大力出奇迹"的理念。目前的GPT已经在能力上取得了巨大的飞跃,现代大模型时代不仅验证了Transformer架构的卓越性能,也预示着一个更加关注参数规模的时代正式到来。随着越来越多技术细节的隐藏,可见技术上的突破越来愈多,对计算资源的依赖与日俱增,一定程度上表明强大算力在推动自然语言处理进步中重要地位。后续将会迎来本专栏的收尾工作总结Bert模型,期望能够使读者对这部分的内容有一个深层的认识,从而更好的开展科研工作。

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

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

相关文章

C++匿名对象

struct:结构体内默认访问权限:public公共->哪里都能用 class:结构体内默认访问权限:private私有->只能在类里使用 简单版本: class SV { public:SV(int dt 520):_data1(dt){};int R_num(){return _data1;}priv…

易语言本地IP一键切换程序(附带源码)

易语言本地IP一键切换程序 效果图部分源码源码领取下期更新预报 效果图 部分源码 .判断开始 (单选框1.选中 = 真)标签5.标题 = #换行符 + “正在切换IP.”.如果真 (运行 (“netsh interface ip set address ” + #引号 &#xff…

yxc图示“链式前向星”核心操作

【知识点:链式前向星】 ● 大佬 yxc 指出“链式前向星”就是“多单链表”,并基于“头插法”给出了所涉及到的 e[]、ne[]、h[] 等数组的独特解释,更易理解。其中:h[a]:存储单链表表头结点 a 的编号e[idx]:存…

vue-el-steps 使用1(上一步、下一步)

vue代码 <template> <div class"app-container"> <el-steps :active"active" finish-status"success" simple style"margin-top: 20px"> <el-step title"选择分类"></el-step> <el-step t…

Linux实验报告(一)——Linux系统安装与简单配置

目录 一、实验名称&#xff1a; 二、仪器、设备&#xff1a; 三、参考资料&#xff1a; 四、实验目的&#xff1a; 五、实验内容&#xff08;步骤&#xff09;&#xff1a; 六、实验数据&#xff08;程序&#xff09;记录&#xff1a; 七、实验结果分析&#xff1a; 八、…

Keras深度学习框架实战(2):估计模型训练所需的样本量

1、模型训练样本量评估概述 1.1 样本量评估的意义 预估模型需要的样本量对于机器学习项目的成功至关重要&#xff0c;以下是几个主要原因&#xff1a; 防止过拟合与欠拟合&#xff1a; 过拟合&#xff1a;当模型在训练数据上表现极好&#xff0c;但在未见过的测试数据上表现糟…

低代码平台:教育机构数字化转型的技术新引擎

在数字化浪潮汹涌而来的今天&#xff0c;教育行业正迎来前所未有的变革。随着技术的不断进步和教育理念的更新&#xff0c;越来越多的教育机构开始意识到数字化转型的重要性。而在这场转型的浪潮中&#xff0c;低代码平台以其独特的优势&#xff0c;正成为教育机构实现数字化转…

2024年Kubernetes管理的发展趋势及预测

Kubernetes管理的概念 Kubernetes管理是指用于监督使用Kubernetes的跨机器集群的容器化应用程序的部署、扩展和操作的过程和工具。这个编排平台自动化了部署、管理和扩展容器化应用程序的许多方面&#xff0c;但它也引入了配置、网络、安全性和资源管理方面的复杂性。 有效的K…

jmeter常用的断言

包括&#xff08;Contains&#xff09;&#xff1a;响应内容包括需要匹配的内容即代表响应成功&#xff0c;支持正则表达式 匹配&#xff08;Matches&#xff09;&#xff1a;响应内容要完全匹配需要匹配的内容即代表响应成功&#xff0c;大小写不敏感&#xff0c;支持正则表达…

keepalived安装文档

目录 1、安装环境 2、安装keepalived 2.1 上传keepalived安装文件 2.2 解压 2.3 安装keepalived 2.4 加入开机启动&#xff1a; 2.5 配置日志文件 2.6 打开防火墙的通讯地址 1、安装环境 su - root yum -y install kernel-devel* yum -y install openssl-* yum -y …

黑马一站制造数仓实战2

问题 DG连接问题 原理&#xff1a;JDBC&#xff1a;用Java代码连接数据库 Hive/SparkSQL&#xff1a;端口有区别 可以为同一个端口&#xff0c;只要不在同一台机器 项目&#xff1a;一台机器 HiveServer&#xff1a;10000 hiveserver.port 10000 SparkSQL&#xff1a;10001…

数据库(13)——DQL分组查询

语法 SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件] 示例 原始表&#xff1a; 根据性别分组并统计人数 select sex,count(*) from information group by sex; 根据性别分组&#xff0c;并求年龄的平均值&#xff1a; 查询年龄大于1…

强大的开源API接口可视化管理平台-YApi

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

AE 2021下载:After Effects 2021 for Mac/win 直装版

Adobe After Effects 2021 是一款由 Adobe 公司推出的专业影视后期制作软件&#xff0c;广泛应用于电影、电视、动画和广告等领域。它提供了强大的视觉效果和动画制作工具&#xff0c;可以帮助用户创造出令人惊艳的视觉效果和动态图形。 After Effects 2021 软件支持多种视频格…

关系数据库:关系模式

文章目录 基本概述关系的相关名词术语笛卡儿积与关系关系的类型 关系模式总结 基本概述 关系的相关名词术语 关系&#xff1a;简单来说&#xff0c;就是一张二维表格。属性(Attribute)&#xff1a;也称字段或列&#xff0c;在现实世界中&#xff0c;要描述一个事务常常取若干…

FreeRTOS基础(五):任务挂起与恢复

今天我们将探讨FreeRTOS中的两个非常重要的函数&#xff1a;任务挂起和恢复函数。在实际的嵌入式系统开发中&#xff0c;我们常常需要在特定条件下暂停某些任务的执行&#xff0c;而在满足某些条件后再恢复这些任务的执行。这就像我们日常生活中的“暂停”和“继续”按钮。无论…

5月29日-shell复习

一.Shell概述 1&#xff09;Linux提供的Shell解析器有&#xff1a;sudo cat /etc/shells /bin/sh /bin/bash /usr/bin/sh /usr/bin/bash /bin/tcsh /bin/csh 2&#xff09;bash和sh的关系 cd /bin ll | grep bash 或者使用&#xff1a;ls -l /bin/ | grep bash 3&#xff0…

力扣257. 二叉树的所有路径

思路&#xff1a;题目需要记录从根节点开始走的路径&#xff0c;无疑选用前序遍历&#xff0c;用一个数组paths 记录走过的节点信息&#xff0c;遇到叶子节点就用另一个list记录下路径&#xff0c;回溯时删掉paths尾节点即可 class Solution {public List<String> binar…

数学函数,字符串

目录 Math类 三角函数 指数函数 取整方法 其他方法 String类 常见方法 字符串比较方法 子串和数字与字符串的转换 Math类 Math类在java.lang中&#xff0c;不用显式引入。 三角函数 private static void triangleFunc() {double degree Math.toDegrees(Math.PI / 3…

PMP学习和考试难度分析

PMP&#xff08;项目管理专业人士&#xff09;考试目前是全球范围内比较具权威性和认可度的项目管理证书之一。因此PMP考试的难度是一个备受关注的话题。根据我们以往的学员经验我从不同角度解析PMP考试的难度&#xff0c;并提供一些应对挑战的建议。希望对大家有所帮助。 PMP考…