GPT模型与Transformer进行对比

  • Post author:
  • Post category:其他


gpt2与gpt的模型结构差别不大,但是采用了更大的数据集进行实验。

gpt采用的训练方法分为两步,第一步利用没有标签的文本数据集训练语言模型,第二步是根据具体的下游任务,例如QA,文本分类等对模型进行微调。


预训练:和传统的语言模型一样通过上文预测下一个单词


例如给定一个句子[u1,u2,…un],GPT在预测单词ui的时候只会利用[u1,u2,…u(i-1)]的信息,而BERT会利用[u1,u2,…,u(i-1),u(i+1),…un]的信息

不同模型的区别
模型效果:

GPT因为采用了传统语言模型所以更加适合用于自然语言生成类的任务(NLG),因为这些任务是根据当前信息生成下一刻的信息,而BERT更是和用于自然语言理解任务(NLU)。


模型结构:

GPT采用了Transformer的Decoder,而BERT采用了Transformer中的Encoder。GPT使用Decoder中的Mask Multi-Head Attention结构,在使用[u1,u2,…u(i-1)]预测单词ui的时候,会将ui之后的单词Mask掉。


2.原装的Transformer Decoder和GPT Decoder内容进行对比

原装的Transformer Decoder和GPT Decoder对比
GPT使用句子序列预测下一个单词,因此要采用Mask Multi-Head Attention对单词的下文遮挡,防止信息泄漏。

例如给定一个句子包含4个单词[A,B,C,D],GPT需要利用A预测B,利用[A,B]预测C,利用[A,B,C]预测D,而预测B的时候,需要将[B,C,D]Mask起来。


Mask是在Self-Attention进行Softmax之前进行的,具体做法是将Mask的位置用一个无穷小的数替换-inf,然后再softmax,具体的操作如下所示。

Softmax之前需要Mask
GPT Softmax之后原先的-inf变为0
可以看到,经过Mask和Softmax之后,当GPT根据单词A预测单词B时,只能使用单词A的信息,根据[A,B]预测单词C时只能利用单词A,B的信息,这样就能防止信息泄漏。

下图是GPT整体模型图,其中包含了12个Decoder。

GPT中12个Decoder的结构

GPT训练过程


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

预训练语言模型


3.1 预训练语言模型


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

最大化似然函数内容
可以看到GPT是一个单向的模型,GPT的输入用h0表示,h0的计算公式如下。

h0的计算公式
其中



W

P

W_{P}







W











P






















是单词的position Embedding,



W

e

W_{e}







W











e






















是单词的word embedding。用voc表示词汇表的大小,pos表示最长句子的长度,dim表示Embedding的维度,则



W

p

W_{p}







W











p






















是一个pos

dim的矩阵,



W

e

W_{e}







W











e






















是一个voc

dim的矩阵。

得到输入



h

0

h_{0}







h











0






















之后,需要将



h

0

h_{0}







h











0






















依次传入GPT的所有Transformer Decoder里,最终得到



h

t

h_{t}







h











t
























得到ht的对应内容

3.2 下游任务fine-tuning


GPT经过预训来之后,会针对具体的下游任务对模型进行微调,微调的过程采用的是有监督学习,训练样本包括单词序列



[

x

1

,

x

2…

x

m

]

[x1,x2…xm]






[


x


1


,




x


2


.


.


.


x


m


]





和类标y。GPT微调的过程中根据单词序列[x1,x2,…xm]预测类标y。

微调的函数内容



w

y

w_{y}







w











y






















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

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

需要优化的函数内容

4.GPT总结


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