深入理解深度学习——GPT(Generative Pre-Trained Transformer):基础知识

news2024/11/14 14:00:40

分类目录:《深入理解深度学习》总目录


《深入理解深度学习——Transformer》系列文章介绍了Transformer,该模型最初被用于机器翻译任务,其出色表现引起了学术界的极大兴趣,其优异的特征提取与语义抽象能力得到了学者的广泛认可,于是研究人员纷纷采用Transformer作为特征提取器,推出了新一代性能更优的预训练语言模型。在自然语言处理领域,最重要的预训练语言模型可以分为两个系列,一个是擅长自然语言生成任务的GPT(Generative Pre-Trained Transformer)系列模型,另一个是擅长自然语言理解任务的BERT(Bidirectional Encoder Representations from Transformers)模型。

GPT是OpenAI在论文《Improving Language Understanding by Generative Pre-Training》中提出的生成式预训练语言模型。该模型的核心思想是通过二段式的训练,以通用语言模型加微调训练的模式完成各项定制任务,即先通过大量无标签的文本训练通用的生成式语言模型,再根据具体的自然语言处理任务,利用标签数据做微调训练。这样一来,GPT就可以很好地完成若干下游任务,包括分类、蕴含、相似度、多选等。对使用者来说,直接使用训练好的模型参数作为初始状态,用少量标签数据进行微调,就可以得到针对特定领域与任务的高性能专用模型,不仅节省了训练成本,还大幅提高了模型的表现性能,而这也是预训练语言模型的魅力所在。在多个下游任务中,微调后的GPT系列模型的性能均超过了当时针对特定任务训练的SOTA模型,真正达到了“一法通,万法通”的境界。

GPT的结构:基于Transformer Decoder

GPT在无监督训练阶段,依然采用标准的语言模型,即给定无标签的词汇集合 u = { u 1 , u 2 , ⋯   , u n } u=\{u_1, u_2, \cdots, u_n\} u={u1,u2,,un},最大化以下似然函数:
L 1 ( u ) = ∑ i log ⁡ P ( u i ∣ u i − k , u i − k + 1 , ⋯   , u i − 1 ; Θ ) L_1(u)=\sum_i\log P(u_i | u_{i-k}, u_{i-k+1}, \cdots, u_{i-1};\Theta) L1(u)=ilogP(uiuik,uik+1,,ui1;Θ)

其中, k k k是上下文窗口的大小。在模型结构上,GPT选择了Transformer Decoder作为其主要组成部分。如下图所示,GPT由12层Transformer Decoder的变体组成,称其为变体,是因为与原始的Transformer Decoder相比,GPT所用的结构删除了Encoder-Decoder Attention层,只保留了Masked Multi-Head Attention层和Feed Forward层。GPT如此设计结构是合乎情理的。Transformer结构提出之始便用于机器翻译任务,机器翻译是一个序列到序列的任务,因此Transformer设计了Encoder用于提取源端语言的语义特征,而用Decoder提取目标端语言的语义特征,并生成相对应的译文。GPT的目标是服务于单序列文本的生成式任务,所以舍弃了关于Encoder的一切,包括Decoder中的Encoder-Decoder Attention层。GPT选择Decoder也因为其具有文本生成能力,且符合标准语言模型的因果性要求。
GPT架构图及下游任务
GPT保留了Decoder中的Masked Multi-Head Attention层和Feed Forward层,并扩大了网络的规模。除了将层数从6层扩展到12层,GPT还将Attention的维数扩大到768(原来为512),将Attention的头数增加到12(原来为8),将Feed Forward层的隐层维数增加到3072(原来为2048),总参数量达到1.5亿。GPT还优化了学习率预热算法,使用更大的BPE码表(融合次数为40000),将激活函数ReLU改为对梯度更新更友好的高斯误差线性单元GeLU,并将原始的正余弦构造的位置编码改成了待学习的位置编码(与模型其余部分一样,在训练过程中学习参数)。整体来说,GPT并没有提出结构上更新颖的改动,而是以Transformer Decoder为蓝本,搭建了语言模型的骨架,称为Transformer Block,扩大了模型的复杂度并更新了相应的训练参数。GPT的结构清晰,数据流如下:

  1. 输入语句的前 k k k个词通过词表转化为一维向量 U = { u − k , u − k + 1 , ⋯   , u − 1 , } U=\{u_{-k}, u_{-k+1}, \cdots, u_{-1}, \} U={uk,uk+1,,u1,}
  2. 输入 U U U右乘权重矩阵 W e W_e We W p W_p Wp(上图中的Text&Position Embedding模块,对应词向量编码和位置编码模块)转化为特征向量 h 0 h_0 h0 h 0 = U W e + W p h_0=UW_e+W_p h0=UWe+Wp
  3. 经过12层Transformer Block,最终的语义特征向量 h n h_n hn n = 12 n=12 n=12)的计算公式为: h l = Tansformer_Block ( h l = 1 ) h_l=\text{Tansformer\_Block}(h_{l=1}) hl=Tansformer_Block(hl=1)
  4. Softmax输出下一个词 u u u的概率为: P ( u ) = Softmax ( h n W e T ) P(u)=\text{Softmax}(h_nW^T_e) P(u)=Softmax(hnWeT)

以上为无监督训练阶段语言模型的数据流,此阶段利用 L 1 L_1 L1似然函数作为优化目标训练语言模型。在监督微调阶段,GPT采用附加的线性输出层作为针对不同任务的自适应层(每个自适应层都是并列关系,各自拥有独立的权重矩阵 W y W_y Wy,需要根据特定任务微调训练)。假定有带标签的数据集 C C C,其中每个实例由一系列输入词 x 1 , x 2 , ⋯   , x m x_1, x_2, \cdots, x_m x1,x2,,xm和标签 y y y组成。通过预训练的GPT先将输入转化成语义特征 h l m h_l^m hlm(下标 l l l表示层数,上标 m m m表示输入 x m x_m xm对应的语义特征),再经过任务特定的线性输出层预测 y y y
P ( y ∣ x 1 , x 2 , ⋯   , x m ) = Softmax ( h i m W y ) P(y|x^1, x^2, \cdots, x^m)=\text{Softmax}(h_i^mW_y) P(yx1,x2,,xm)=Softmax(himWy)

而需要优化的目标函数也变为:
L 2 = ∑ x , y log ⁡ P ( y ∣ x 1 , x 2 , ⋯   , x m ) L_2=\sum_{x, y}\log P(y|x^1, x^2, \cdots, x^m) L2=x,ylogP(yx1,x2,,xm)

为了使微调训练后的模型有更好的泛化性能,在监督微调的优化目标函数中加入辅助优化函数是一个已被验证可行的方法,而且可以加速模型的微调收敛。在监督微调训练阶段,GPT使用的优化目标函数为:
L 3 ( C ) = L 2 ( C ) + λ L 1 ( C ) L_3(C) = L_2(C)+\lambda L_1(C) L3(C)=L2(C)+λL1(C)

其中, L 1 L_1 L1是无监督训练阶段的目标函数, λ \lambda λ是辅助函数的权重常系数。总体来说,在GPT监督微调训练阶段,需要训练的最主要的额外权重矩阵就是 W y W_y Wy

参考文献:
[1] Lecun Y, Bengio Y, Hinton G. Deep learning[J]. Nature, 2015
[2] Aston Zhang, Zack C. Lipton, Mu Li, Alex J. Smola. Dive Into Deep Learning[J]. arXiv preprint arXiv:2106.11342, 2021.
[3] 车万翔, 崔一鸣, 郭江. 自然语言处理:基于预训练模型的方法[M]. 电子工业出版社, 2021.
[4] 邵浩, 刘一烽. 预训练语言模型[M]. 电子工业出版社, 2021.
[5] 何晗. 自然语言处理入门[M]. 人民邮电出版社, 2019
[6] Sudharsan Ravichandiran. BERT基础教程:Transformer大模型实战[M]. 人民邮电出版社, 2023
[7] 吴茂贵, 王红星. 深入浅出Embedding:原理解析与应用实战[M]. 机械工业出版社, 2021.

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

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

相关文章

企业做seo有什么好处?SEO 为您的企业带来的 10 大主要优势?

如果您希望建立长期的品牌知名度、扩大目标受众并赚取更多收入,那么搜索引擎优化至关重要。让我们看看 SEO 为您的企业带来的 10 大好处,以及如何实现它们。 1. 它提高了你的可信度 在搜索引擎结果页面上排名靠前的网站通常被搜索引擎认为是高质量和值得…

【unity细节】—怎么将unity编译时和运行时的功能隔开

👨‍💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 收录于专栏:unity细节和bug ⭐怎么将unity编译时和运行时的功能隔开的问题⭐ 文章目录 ⭐怎么将unity编译时和…

TCP的十个核心机制

目录 前言一 到 三四. 滑动窗口五. 流量控制六. 拥塞控制七. 延时应答八. 捎带应答九. 面向字节流十. 异常处理总结 前言 TCP协议是传输层的重点协议, 负责将数据从发送端传输到接收端. TCP协议是传输控制协议, 顾名思义也就是对数据的传输进行控制的协议. TCP 协议有很多, 我…

android存储3--初始化.unlock事件的处理

android版本:android-11.0.0_r21http://aospxref.com/android-11.0.0_r21 概述:收到unlock事件后,StorageSessionController、vold、storaged模块进行各自初始化操作。 一、StorageManagerService::onUnlockUser处理unlock事件 设备解锁后…

openlayers瓦片的使用

OpenLayers是一个用于WebGIS客户端的地图开发库,支持多种地图。在使用瓦片时,先将自己需要的瓦片下载,下载好的瓦片会分层,越高的层级瓦片的数量余额多。 使用时可以引入 ol.js 文件,和 ol.css 文件,或者使…

机器学习 | 实验五:LDA

LDA的思想:“投影后类内方差最小,类间方差最大”。即数据在低维度上进行投影,投影后希望每一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大。 假设我们有两类数据分别为红色和蓝色,…

关于socket编程中FD_XXX以及select函数的理解

文章目录 01 | 宏接口定义02 | 使用方法03 | 服务端代码示例 学习socket编程的时候看到很多FD开头的宏定义和函数,这里记录一下这些宏定义和函数的含义及处理流程 01 | 宏接口定义 fd_set fd_set 是一种表示文件描述符的集合类型,在socket编程中&#xf…

计算机网络——自顶向下方法(第三章学习记录)

本章学习运输层 运输层位于应用层和网络层之间,是分层的网络体系的重要部分,该层为运行在不同主机上的应用进程提供直接的通信服务起着至关重要的作用。 运输层协议为运行在不同主机上的应用进程之间提供了逻辑通信(logic communication)功能。从应用程…

CSS3-补充-伪元素

伪元素 作用:在网页中创建非主体内容,开发中常用CSS创建标签,比如装饰性的不重要的小图 区别: 1 元素:HTML 设置的标签 2 伪元素:由 CSS 模拟出的标签效果 …

EMC学习笔记(七)阻抗控制(一)

阻抗控制(一) 1.特征阻抗的物理意义1.1 输入阻抗1.2 特征阻抗1.3 偶模阻抗、奇模阻抗、差分阻抗 2.生产工艺对阻抗控制的影响 1.特征阻抗的物理意义 1.1 输入阻抗 在集总电路中,输入阻抗是经常使用的一个术语 ,它的物理意义是: …

FreeRTOS实时操作系统(六)列表与列表项

系列文章目录 文章目录 系列文章目录简要概念列表列表项迷你列表项 相关API函数初始化列表列表项初始化列表项插入(升序)末尾列表项插入列表项删除 实战实验 简要概念 列表是 FreeRTOS 中的一个数据结构,概念上和链表有点类似,列…

ubuntu环境下测试硬盘读写速度

在Ubuntu下,可以使用hdparm、dd和fio等工具来测试硬盘的读写速度。 开始之前,先使用sudo fdisk -l命令来列出系统中所有的硬盘和分区: 1.使用hdparm测试硬盘读取速度: 安装hdparm: sudo apt-get install hdparm 通…

C++17中utf-8 character literal的使用

一个形如42的值被称作字面值常量(literal),这样的值一望而知。每个字面值常量都对应一种数据类型,字面值常量的形式和值决定了它的数据类型。 由单引号括起来的一个字符称为char型字面值,双引号括起来的零个或多个字符则构成字符串型字面值。 字符串字面…

9.QT 三目运算符

上面引出两个新的概念: 左值:能被赋值的就是左值。 右值:不能被赋值的就是右值。

基於ranger,kerberos,hadoop ha 配置hvie多用戶

基於ranger,kerberos,hadoop ha 配置hvie多用戶 hive多用戶權限管理一、hive的管理員用戶二、hive配置普通用戶1.添加用戶2.配置kerberos2.1 创建主体2.2 生成keytab文件2.3 修改keytab文件所有者(可做可不做) 3. 配置windows hive多用戶權限管理 一、h…

English Learning - L3 综合练习 8 TED-Living Beyond the Limits 2023.06.21 周三

English Learning - L3 综合练习 8 TED-Living Beyond the Limits 2023.06.21 周三 句 1句 2扩展 句 3句 4句 5句 6句 7扩展 random 句 8扩展 句 9句 10句 11句 12句 13句 14句 15句 16句 17句 18句 19句 20句 21句 22句 23 句 1 Four months later I was back up on a snowbo…

SVN使用步骤

1.基本操作 2.提交之间看一下变更内容 3.显示日志 是查看所有提交的记录4.撤销和恢复操作 撤销本地修改 或者点击提交的时候 还原 把修改的撤销掉 第二种情况,内容已经提交上去了点击提交日志 进行操作 只是撤销了本地 接着还需要继续提交到服务端 第三种情况 我们需要恢…

Linux系统之安装showdoc文档工具

Linux系统之部署showdoc文档工具 一、showdoc介绍1.1 showdoc简介1.2 showdoc功能 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本3.3 检查本地yum仓库状态 四、安装httpd服务4.1 安装httpd4.2 启动httpd服务…

用Visual C++写出你第一个Windows程序

我是荔园微风,作为一名在IT界整整25年的老兵,今天来看看如何用Visual C写出你第一个Windows程序。 与其看很多Windows的书,不如先自己动手写一个Windows程序。由于Windows程序的特有机制,不建议去写那种简单的HELLO WORLD&#x…

iOS 制作私有库framework + 图片资源的使用

1. 库的分类 开源库:公开源代码,能看到具体实现** 闭源库**:不公开源代码,是经过编译后的二进制文件,看不到具体实现;其中包括:静态库和动态库 2. 开源库的制作 我了解的开源库的制作&#xff0…