从GPT到chatGPT(一):GPT1

news2025/1/16 20:56:06

GPT1

文章目录

  • GPT1
    • 前言
    • 正文
      • 模型架构
        • 无监督学习
        • 有监督学习
        • 处理不同特定任务
      • 实验
        • 训练细节
        • 实验结果
      • 分析
        • 预训练层参数转移的影响
        • zero-shot的表现
        • 消融实验
      • 总结

前言

GPT1,出自于OpenAI的论文《Improving Language Understanding by Generative Pre-Training》,是最早的将transformer以多层堆叠的方式构成语言模型的模型,其出现时间早于BERT,但二者有一个最大的区别在于BERT只用的是transformer的encoder层,而GPT1只用了transformer的decoder层。除此以外二者在目标函数等地方也有各自的方法,感兴趣的可以自行阅读对比,这里不再展开。

正文

模型架构

GPT1的训练主要分成无监督预训练有监督微调两部分:

  • 无监督预训练指的是现在大规模语料下,训练一个语言模型;
  • 有监督微调指的是基于下游任务的标注数据进行模型参数调整。

无监督学习

给一组无监督学习语料的tokens: U = { u 1 , u 2 , . . . , u n } \cal{U}=\{u_1, u_2,...,u_n\} U={u1,u2,...,un},我们以语言模型的目标函数作为目标,最大化其似然函数:
L 1 ( U ) = Σ i log ⁡ P ( u i ∣ u i − k , . . . , u i − 1 ; Θ ) (1) L_1(\cal{U})=\Sigma_{i}{\log{\it{P}}(u_i|u_{i-k},...,u_{i-1};\Theta)} \tag{1} L1(U)=ΣilogP(uiuik,...,ui1;Θ)(1)
其中 k k k表示窗口大小, P P P表示由参数 Θ \Theta Θ决定的神经网络所输出的条件概率值。
这里再简单用公式阐述下前言中提到的本文核心的多头transformer-decoder层:
h 0 = U W e + W p h l = t r a n s f o r m e r _ b l o c k ( h l − 1 ) , ∀ i ∈ [ 1 , n ] P ( u ) = s o f t m a x ( h n W e T ) (2) h_0=UW_e+W_p\\h_l=\mathrm{transformer\_block}\mathit (h_{l-1}),\forall{i\in[1,n]}\\P(u)=\mathrm{softmax}(\mathit h_nW_e^T)\tag{2} h0=UWe+Wphl=transformer_block(hl1),i[1,n]P(u)=softmax(hnWeT)(2)
其中 U = ( u − k , . . . , u − 1 ) U=(u_{-k},...,u_{-1}) U=(uk,...,u1)是文本的tokens向量, n n n是transformer的层数, W e W_e We是token embedding矩阵, W p W_p Wp是position embedding矩阵。

有监督学习

在完成了无监督学习后,我们希望在有标签的数据集上对模型进行有监督的微调。我们定义标注数据集为 C \cal{C} C,对于每一组序列tokens: x = { x 1 , x 2 , . . . , x m } x=\{x^1,x^2,...,x^m\} x={x1,x2,...,xm},都对应一个标签 y y y。输入 x x x通过预训练模型后得到最后一层transformer层的隐向量 h l m h_l^m hlm,通过一个线性层+softmax预测标签y:
P ( y ∣ x 1 , . . . , x m ) = s o f t m a x ( h l m W y ) (3) P(y|x^1,...,x^m)=\mathrm{softmax}(h_l^mW_y)\tag{3} P(yx1,...,xm)=softmax(hlmWy)(3)
由此我们的目标是使下面这个目标函数最大化:
L 2 ( C ) = Σ ( x , y ) ( l o g P ( y ∣ x 1 , . . . , x m ) ) (4) L_2(\cal{C})=\Sigma_{(x,y)}(\mathrm{log}\it P(y|x^1,...,x^m))\tag{4} L2(C)=Σ(x,y)(logP(yx1,...,xm))(4)
我们发现在在有监督微调的训练中,如果加入语言模型的目标函数,可以有两个好处:(a)使得有监督模型具备更强的生成能力;(b)加快训练的收敛。所以我们如下定义最终的目标函数:
L 3 ( C ) = L 1 ( C ) + λ ∗ L 2 ( C ) L_3(\cal{C})=L_1(\cal{C})+\lambda*L_2(\cal{C}) L3(C)=L1(C)+λL2(C)

处理不同特定任务

对于某些任务,如文本分类,我们可以直接如上所述对模型进行微调。某些其他任务,如QA或文本蕴含,其具有结构化输入,如有序的句子对,或文档、问题和答案的三元组。因为我们的预训练模型是在连续的文本序列上训练的,我们需要一些修改才能将其应用于这些任务。先前的工作提出了基于迁移学习的学习任务特定架构,这种方法重新引入了大量特定于任务的定制,对这些额外的架构组件使用迁移学习。相反,我们在这里不这么做,我们使用遍历样式方法,将结构化输入转换为预训练模型可以处理的格式,这些输入转换让我们避免对不同的任务都要进行任务架构改变。下面我们通过一些例子和一个示意图来解释。

  • 文本蕴含:我们将前提和假设的序列token按照顺序给拼接起来(可以用$等特殊标识符)
  • 文本相似度:将两个句子拼接起来,但由于相似度不存在前后关系,所以我们把句子以a b 和 b b和b bba两种方式均拼接一遍,最后将输出的两个 h l m h_l^m hlm逐个元素相加后再进入线性输出层。

具体示例如下图所示,包括了transform层的基本结构(mask多头attention+残差链接+LaryerNorm+FNN)
在这里插入图片描述

实验

训练细节

包括数据获取,数据处理,无监督训练参数设置,有监督训练参数设置等,这里不一一介绍。

实验结果

首先展示在Natural Language Inference常见公开数据集上的结果,以及和当前一些sota方法的效果对比:
在这里插入图片描述然后是在Question answering and commonsense reasoning常见公开数据集上的结果,以及和当前方法的效果对比:
在这里插入图片描述还有文本相似度任务以及分类任务等:
在这里插入图片描述

分析

预训练层参数转移的影响

我们想观察下从预训练模型中转移参数值作为有监督学习模型的初始化参数,到底会有多少提升:
在这里插入图片描述可以看到,如果将模型的参数随机初始化,并在RACE和MultiNLI任务上进行训练,在验证集上的acc只有40%左右,但是如果将预训练模型的参数迁移过来的话,可以使acc提升到80+,这个提升确实十分明显。

zero-shot的表现

我们想更好的理解为什么基于transformer的预训练语言模型是有效的。一个假设说一方面,底层的生成模型学习如何在许多我们通常评估的任务上表现更好,以此来提高语言模型的能力;另一方面,transformer比LSTM在迁移学习上表现得更好。我们设计了一系列启发式解决方案,使用底层生成模型执行任务,而无需监督微调,并将其进行饿了可视化(Figure 2的右图)。
我们观察到这些启发式算法的表现是稳定的,并且随着训练而稳步增加,这表明生成性预训练支持多种任务相关功能的学习。另外我们也观察到LSTM在各种任务上的表现参差不齐,而且整体也不如transormer。

消融实验

最后是喜闻乐见的消融实验,主要关注有监督训练的时候加入aux目标函数对效果的影响,顺便对比了下finetune后的模型、没有进行finetune模型和LSTM模型的效果。transformer的效果显然好于LSTM,不必多说。但加入aux后finetune的模型在不同的任务上表现不一,但总的来说有一个趋势:在大数据集下,加入aux会提升最终的finetune效果,但是小数据集下,不加入aux目标函数效果更好。
在这里插入图片描述

总结

我们通过单一任务不可知(task-agnostic)模型实现了一个强大的自然语言理解框架,主要包括生成性预训练和区分性微调两部分。通过在长的连续文本的不同语料库上进行预训练,我们的模型获得了重要的世界知识和处理长距离依赖的能力,然后成功地将这些知识和能力转移到解决诸如问题回答、语义相似性评估、文本蕴含、文本分类等任务上,改善了我们研究的12个数据集中的9个数据集的sota。
长期以来,使用无监督(预)训练来提高辨别性任务的性能一直是机器学习研究的一个重要目标。我们的工作表明,实现显著的性能提升确实是可能的,并提供了关于哪些模型(Transformers)和数据集(具有长范围依赖关系的文本)最适合这种方法的一些提示。我们希望这将有助于对自然语言理解和其他领域的无监督学习进行新的研究,进一步提高我们对无监督学习如何工作的理解。

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

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

相关文章

Serverless介绍

Serverless架构应该是采用FaaS(函数即服务)和Baas(后端即服务)服务来解决问题的一种设计 狭义Serverless FaaS BaaS BaaS: Bakend as a Service 负责存储后端即服务:Serverless把后端架构工作包揽下来,硬…

CIO如何控制老板提需求?CIO PLUS

老板乱提需求,员工苦不堪言,职场中经常听到吐槽老板的言论,这个话题很有意思。因为一般老板这个角色基本上是不会管公司具体业务的,公司运营一般都是由专业的职业经理人就是CEO来管理,所以作为公司的老板就更不可能亲自…

Web(五)

JavascriptDOM* 功能:控制html文档的内容* 获取页面标签(元素)对象:Element* document.getElementById("id值"):通过元素的id获取元素对象* 操作Element对象:1. 修改属性值:明确获取的对象是哪一个?查看API文…

【SpringCloud06】SpringCloud Eureka 服务注册与发现

1.Eureka基础知识 1.1什么是服务治理? Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务治理 在传统的rpc远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理&#xff0…

Linux - top命令详解

目录top启动参数基础字段说明第一行,系统任务统计信息:第二行,进程统计信息:第三行,CPU统计信息:第四行,内存统计信息:第五行,swap交换分区统计信息:第六行&a…

堆和栈详解js

认识堆和栈学习编程的时候,经常会看到stack这个词,它的中文名字叫做"栈"。理解这个概念,对于理解程序的运行至关重要。容易混淆的是,这个词其实有几种含义在理解堆与栈这两个概念时,需要放到具体的场景下去理…

基于java SSM图书管理系统简单版设计和实现

基于java SSM图书管理系统简单版设计和实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式…

软件测试/测试开发 | Jenkins通过什么方式报警?

在工作中,一般是没有时间一直看着 Jenkins 直到它运行结果出现的。所以采用了配置 Email 的方式,可以及时将结果通知给我们。 所需要用到的Jenkins插件 需要下载的 Email 插件名称,这两个插件的作用是帮助用户方便的设置格式化邮件&#xf…

【Java集合】开发中如何选择集合实现类

在实际开发中,选择什么集合实现类,主要取决于业务操作的特点,然后根据集合实现类特性进行选择: 👉 先判断存储的类型(一组对象或一组键值对): 一组对象 【单列】:Colle…

ES6-11这一篇就够啦

ES6-11这一篇就够啦ECMAScript 6-111、ECMAScript 相关介绍1.1 ECMAScript简介1.2 ES6的重要性2、ECMAScript 6新特性2.1 let关键字2.2 const关键字2.3 变量的解构赋值2.4 模板字符串2.5 简化对象写法2.6 箭头函数2.7 rest参数2.8 spread扩展运算符2.9 Symbol2.10 迭代器2.11 生…

在GCP上创建GCE的三种方式(Console,gcloud,Terraform)

1 简介 如果要选择GCP为云平台,则经常需要创建GCE(Google Compute Engine),有以下几种方式: (1) 在浏览器创建 (2) 命令 gcloud (3) Terraform 在开始之前,可以查看:《初始化一个GCP项目并用gcloud访问操作》。 …

MATLAB算法实战应用案例精讲-【数据分析】非参数估计:核密度估计KDE

前言 核密度估计(Kernel Density Estmation,KDE)认为在一定的空间范围内,某种事件可以在任何位置发生,但是在不同的地理位置上发生的概率是不一样的,如果在某一区域内其事件发生的次数较多则认为此区域内此事件发生的频率高,反之则低。另外根据地理学第一定律,即:距离…

python开发exe(无GUI)的踩坑笔记

笔者也经常在网上查询信息,但发现很多信息都是照搬,内容甚至有错误,可用性很低.笔者就认为如果要分享就应该把遇到的问题真实的分享出来,让更多同路人少走弯路.节约时间.觉得这篇文章有帮助的同学可以点个赞!将真有用的信息传递给更多人!python开发exe(无GUI)的踩坑笔记pyinsta…

你写过最愚蠢的代码是?

最近写的一些代码,拿出来给大伙看看,毕竟丢的是我的脸。第一个,是帮忙一个朋友看的力扣题目,然后就自己写了下题目如下:https://leetcode.cn/problems/median-of-two-sorted-arrays/代码写成这样void merge(int* nums1…

输入输出系统

文章目录前言前置知识实验操作实验一实验二实验三实验四实验五前言 博客记录《操作系统真象还原》第十章实验的操作~ 实验环境:ubuntu18.04VMware , Bochs下载安装 实验内容: 添加关中断的方式保证原子性。用锁实现终端输出。从键盘获取输…

Docker中的网络模式

使用命令docker inspect 容器id/name能看到容器的ip地址,使用主机和其他容器ping这个地址发现都是可以ping通的,但是使用本地局域网内的其他机器是无法ping通的。 Docker的默认网络模式可以分为:Host 模式、Bridge 模式或者 None 模式。然后来…

word中导入zotero的参考文献

平时使用Zotero管理文献,使用Word写完论文后想用Zotero导入参考文献,也方便修改参考文献格式。 Zotero 打开Zotero找到编辑-首选项 打开首选项,下载国标格式,引用-获取更多样式-搜索框:China Word Word中打开写的…

APSIM练习 :机会种植

该练习是设置一个播种规则,根据条件情况,自动取使用哪种作物进行轮作。 在之前的练习中,我们每年都会重置起始条件。我们不打算在本练习中进行此重置。相反,我们将研究如何根据这些不同的起始条件改变播种的内容;具体…

Docker简介以及安装

官方链接: Docker官网 Docker仓库地址 1、基本要求 docker要求Linux内核系统64位,内核在3.8以上 cat /etc/redhat-release uname -r 2、三要素 2.1、镜像 2.2、容器 2.3、仓库 镜像存放的地方,有点类似Maven仓库 3、安装步骤 官网指导&#xff…

最大比例(数论 最大公约数 辗转相减法)[第七届蓝桥杯省赛C++A/B组]

题目如下: 题解 or 思路: 假设题中所给的数据为 b1,b2,b3,⋅⋅⋅,bnb_1,b_2,b_3,⋅⋅⋅,b_nb1​,b2​,b3​,⋅⋅⋅,bn​,分别用第一项之后的项除以第一项,得到:b2b1,b3b1,⋅⋅⋅,bnb1\frac{b2}{b1},\frac{b3}{b1},⋅⋅…