GPT模型

前言

GPT主要出论文《Improving Language Understanding by Generative Pre-Training》,GPT 是"Generative Pre-Training"的简称,从名字看其含义是指的生成式的预训练。

GPT 采用两阶段过程,第一个阶段是利用语言模型进行预训练(无监督形式),第二阶段通过 Fine-tuning 的模式解决下游任务(监督模式下)。

模型结构

在这里插入图片描述

GPT 使用 Transformer 的 Decoder 结构,并对 Transformer Decoder 进行了一些改动,原本的 Decoder 包含了两个 Multi-Head Attention 结构,GPT 只保留了 Mask Multi-Head Attention,如下图所示。

在这里插入图片描述

假设预训练好了网络模型,后面下游任务怎么用?它有自己的个性,和 ELMO 的方式大有不同。

在这里插入图片描述

上图展示了 GPT 在第二阶段如何使用。

  1. 对于不同的下游任务来说,本来你可以任意设计自己的网络结构,现在不行了,你要 GPT 的网络结构看齐,把任务的网络结构改造成和 GPT 的网络结构是一样的。
  2. 在做下游任务的时候,利用第一步预训练好的参数初始化 GPT 的网络结构,这样通过预训练学到的语言学知识就被引入到你手头的任务里来了,这是个非常好的事情。再次,你可以用手头的任务去训练这个网络,对网络参数进行 Fine-tuning,【类似图像领域预训练的过程】

那怎么改造才能靠近 GPT 的网络结构呢?

在这里插入图片描述

GPT 论文给了一个改造施工图如上:

  1. 对于分类问题,不用怎么动,加上一个起始和终结符号即可;
  2. 对于句子关系判断问题,比如 Entailment,两个句子中间再加个分隔符即可;
  3. 对文本相似性判断问题,把两个句子顺序颠倒下做出两个输入即可,这是为了告诉模型句子顺序不重要;
  4. 对于多项选择问题,则多路输入,每一路把文章和答案选项拼接作为输入即可。从上图可看出,这种改造还是很方便的,不同任务只需要在输入部分施工即可。

模型解析

在这里插入图片描述

GPT 训练过程分为两个部分,无监督预训练语言模型有监督的下游任务 fine-tuning

预训练语言模型

给定句子 U=[u1, u2, …, un],GPT 训练语言模型时需要最大化下面的似然函数。

L 1 ( u ) = ∑ l o g P ( u i ∣ u i − k . . . u i − 1 ; Θ ) (1) L_1(u)=\sum log P(u_i|u_{i-k}...u_{i-1};\Theta) \tag{1} L1(u)=logP(uiuik...ui1;Θ)(1)

文章中使用的是多层Transformer的decoder的语言模型。这个多层的结构应用multi-headed self-attention在处理输入的文本加上位置信息的前馈网络,输出是词的概念分布。

h 0 = U W e + W p h l = t r a n 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=tranformerblock(h_{l-1}) \forall i \in[1,n] \\ P(u)=softmax(h_n W_e^T) \tag{2} h0=UWe+Wphl=tranformerblock(hl1)i[1,n]P(u)=softmax(hnWeT)(2)

h 0 h_0 h0 表示GPT 的输入, W p W_p Wp 是单词位置的 Embedding, W e W_e We 是单词的 Embedding。得到输入 h 0 h_0 h0 之后,需要将 h 0 h_0 h0 依次传入 GPT 的所有 Transformer Decoder 里,最终得到 h t h_t ht。最后送到softmax得到 h t h_t ht 再预测下个单词的概率。

用V表示词汇表大小,L表示最长的句子长度,dim 表示 Embedding 维度,则 W p W_p Wp 是一个 L × d i m L×dim L×dim 的矩阵, W e W_e We 是一个 V × d i m V×dim V×dim 的矩阵。

下游任务fine-tuning

GPT 经过预训练之后,会针对具体的下游任务对模型进行微调。微调的过程采用的是有监督学习,训练样本包括单词序列 [x1, x2, …, xm] 和 类标 y。GPT 微调的过程中根据单词序列 [x1, x2, …, xm] 预测类标 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)=softmax(h_l^mW_y) \tag{3} P(yx1,...,xm)=softmax(hlmWy)(3)

W y W_y Wy 表示预测输出时的参数,微调时候需要最大化以下函数。

L 2 ( C ) = ∑ ( x , y ) l o g P ( y ∣ x 1 , . . . , x m ) (4) L_2(C)=\sum_{(x,y)}log P(y|x^1,...,x^m) \tag{4} L2(C)=(x,y)logP(yx1,...,xm)(4)

GPT 在微调的时候也考虑预训练的损失函数,所以最终需要优化的函数为:

L 3 ( C ) = L 2 ( C ) + λ ∗ L 1 ( C ) (5) L_3(C)=L_2(C)+ \lambda*L_1(C) \tag{5} L3(C)=L2(C)+λL1(C)(5)

总结

GPT 预训练时利用上文预测下一个单词,ELMO和BERT 是根据上下文预测单词,因此在很多 NLP 任务上,GPT 的效果都比 BERT 要差。但是 GPT 更加适合用于文本生成的任务,因为文本生成通常都是基于当前已有的信息,生成下一个单词。

优点

  1. RNN所捕捉到的信息较少,而Transformer可以捕捉到更长范围的信息。
  2. 计算速度比循环神经网络更快,易于并行化
  3. 实验结果显示Transformer的效果比ELMo和LSTM网络更好

缺点

  1. 对于某些类型的任务需要对输入数据的结构作调整
  2. 对比bert,没有采取双向形式,削弱了模型威力

参考

https://www.cnblogs.com/yifanrensheng/p/13167796.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值