NLP《GPT》

按照时间来看,我们先看看这几个大名鼎鼎模型的顺序哈。

(1)2017年基于论文《Attention is all you need》,推出了一个超越RNN的神经网络结构,即Transformer,这个我们也是学习过了的。
(2)2018年,OpenAI基于Transformer提出了GPT;
(3)2019年,Google推出了GPT的对标版本BERT;
(4)2019年,OpenAI推出了GPT的升级版GPT2.0。

一:GPT(Generative Pre-Training)
我们学习过了Transformer,它是由decoder和encoder组成的,Bert是其中的encoder部分,而我们要学习的GPT则是使用其中的decoder部分。
在这里插入图片描述

但是却做了一点结构上的改动,去掉了“encoder-decoder muti-head self attention”这一层,因为GPT只使用的是decoder,那么encoder的输入层就不需要了,剩下了“masked muti-head self attention”层和“FFN”层。具体模块图示如下,它包含了12个decoder的叠加:
在这里插入图片描述

结构定义好了,那么我闷看看特点。因为GPT继承了Transformer的decoder,因此,decoder的一些特点也用在了GPT,它是单向的,不是双向的。

整体看来呢,decoder还是一个类似RNN的时间上递归计算结构,虽然每一步骤是并行计算的。模型在第t时间步时,只知道t-1时间步及以前的输出情况,而不知道i时间步及以后的输出情况。在训练阶段,GPT需要用一个mask把“不应该看到”的输出给遮蔽掉,就像Transformer一样。这样,GPT只能从左到右,或者从右到左扫描输入数据,因此被称为“单向模型”。

比如我们期望输出[A,B,C,D]四个token的句子。
给一个[BOS],输出一个[A]。
给一个[A],输出一个[B]。
给一个[A,B],输出一个[C]。
给一个[A,B,C],输出一个[D]。
给一个[A,B,C,D],输出一个[EOS],终止!!!。

具体操作如下:softmax前的mask处理
在这里插入图片描述

Softmax后的计算结果
在这里插入图片描述

这样一来经过 Mask 和 Softmax 之后,每一步骤都是注意和关心前面上文信息,不关心下文信息,也就是被mask遮盖掉了。

那么接着就是怎么训练这个模型了,具体的训练方法是二阶段训练方式:
第一步预训练【pre-trained】:利用没有标签的文本数据集训练语言模型,语言模型,语言模型,因为它天然是单向结构,类似RNN,跟RNN构建LM类似。
第二步微调【fine-tuning】:是根据具体的下游任务,例如 QA,文本分类等对模型进行微调,BERT 也延用了这一训练方法。

在这里插入图片描述

1:在预训练阶段,训练一个语言模型出来,这里列举一下主要的论文中的式子。
先来看看计算的过程:
在这里插入图片描述

输入到transformer之前的h0是词嵌入向量和位置向量的叠加,U是one-shot向量,We是词嵌入向量矩阵。Wp是位置向量矩阵。
在这里插入图片描述

然后就是GPT中每一层block的计算,细节呢就不展开了,之前学习transformer中讲过了的。
在这里插入图片描述

最后经过softmax输出各个token的概率。

最后极大化似然函数:给定句子 U=[u1, u2, …, un],GPT 训练语言模型时需要最大化下面的似然函数。
在这里插入图片描述

这个就是典型的语言模型的极大似然函数表达式了。

2:在微调训练阶段,接一个下游任务
比如有下游任务如下图所示,论文中主要介绍了,文本分类,关系判断,相似性分析,阅读理解:下图任务图示中,淡紫色的是句子,淡蓝色的是加入的特殊符。
在这里插入图片描述

【任务如下】
【分类任务】:输入就是文本,最后一个词的向量直接作为微调的输入,得到最后的分类结果(可以多分类)

【推理任务】:输入是 先验+分隔符+假设,最后一个词的向量直接作为微调的输入,得到最后的分类结果,即:是否成立

【句子相似性】:输入是 两个句子相互颠倒,得到的最后一个词的向量再相加,然后进行Linear,得到最后分类结果,即:是否相似

【问答任务】:输入是上下文和问题放在一起与多个回答,中间也是分隔符分隔,对于每个回答构成的句子的最后一个词的向量作为微调的输入,然后进行Linear,将多个Linear的结果进行softmax,得到最后概率最大的

GPT 经过预训练之后,利用已有的模型参数构建下游任务的网络,会针对具体的下游任务对模型进行微调。微调的过程采用的是有监督学习,训练样本包括单词序列 [x1, x2, …, xm] 和 类标 y。GPT 微调的过程中根据单词序列 [x1, x2, …, xm] 预测类标 y。
在这里插入图片描述

Wy 表示预测输出时的参数,微调时候需要最大化以下函数。
在这里插入图片描述

GPT 在微调的时候也考虑预训练的损失函数,所以最终需要优化的函数为:
在这里插入图片描述

把语言模型也加入调参,这样做的好处是(1)增加模型泛化能力。(2)加速收敛。

二:和Bert、ELMo的区别
在这里插入图片描述

Bert使用的是Transformer的encoder,可并行化,是双向的,生成式任务表现不好,其他任务表现都是可以的。

GPT使用的是Transformer的decoder,可并行化,是单向的,能力弱于Bert,但是其作为生成式任务表现很好,构建语言模型还是很可以的。因为文本生成通常都是基于当前已有的信息,生成下一个单词。

ELMo使用的基于RNN中LSTM的双向结构,不可并行化,层数不深,容易梯度消失,特征提取不够好。

三:GPT-2.0
这个是在GPT的基础上升级的版本,参数量也是激增。基本结构和内容也是没变的。整体变得非常巨大。

GPT2与GPT的不同点:

1:fine-tuning步骤:不再针对不同任务分别进行微调建模,而是不定义这个模型应该做什么任务,模型会自动识别出来需要做什么任务。学习的是一个通用NLP模型。

2:增加数据集:数据集包含800万个网页,大小为40G。GPT2需要的是带有任务信息的数据,且数据都是筛选后的优质的网页。

3:增加网络参数:GPT-2将Transformer堆叠的层数增加到48层,隐层的维度为1600,参数量更是达到了15亿(Bert large是3.4亿)。「小号」12 层,「中号」24 层,「大号」36 层,「特大号」48 层。

4:调整transformer:将layernorm放到每个sub-block之前;在最终自注意块之后添加了额外的层标准化;残差层的参数初始化根据网络深度进行调节。

在这里插入图片描述

5:GPT-2将词汇表增加到5万(bert英文是3万,中文是2万);embedding size包括768,1024,1280,1600;可处理单词序列长度从GPT的512提升到1024;batchsize增加到512。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值