GPT-1介绍

发展历程

GPT(Generative Pre-Training)是由Open AI 提出的预训练大语言模型。采用了两阶段模型训练过程。

  • 基于大量数据进行无监督的模型预训练
  • 基于多种具体任务进行有监督微调(Fine-tuning)

模型

参数量

样本数据量

发布时间

GPT

1.17亿

5GB

2018.6

GPT-2

15亿

40GB

2019.2

GPT-3

1750亿

45TB

2020.5

GPT-1 原理

GPT的的训练过程氛围两个阶段,第一阶段是基于大量文本进行无监督预训练,得到具有普适性的文本特征。第二阶段是在常见的具体任务场景(比如文本分类、序列标注、摘要生成等)下进行Fine-tuning以解决目标任务。表现形式如下


gpt能实现nlp gpt it_深度学习

第一阶段:模型预训练

GPT预训练采用的是单向语言模型,即从左到右序列输入的形式。为了获取强大的表征能力,GPT借鉴了Transformer的Decoder模块并进行了改进----只使用Masked Multi-Head Attention(Transformer的Decoder既有Multi-Head Attention,也有Masked Multi-Head Attention)。

为什么使用Transformer的Decoder模块?

因为GPT是单向语言模型,而非BERT系列的双向语言模型。只能看到当前词之前的文本信息。这和Masked Multi-Head Attention的功能一致。

在训练过程中,GPT采用的是语言模型的训练思路,即通过上文预测当前词。给定一个无标签词序列gpt能实现nlp gpt it_语言模型_02

gpt能实现nlp gpt it_gpt能实现nlp_03

其中k是滑动窗口的大小,P是条件概率,gpt能实现nlp gpt it_深度学习_04

GPT模型的输入为

gpt能实现nlp gpt it_gpt_05

其中gpt能实现nlp gpt it_自然语言处理_06 表示模型的输入,0代表输入层。gpt能实现nlp gpt it_语言模型_07 表示所有词的词向量矩阵,gpt能实现nlp gpt it_gpt能实现nlp_08 则代表当前输入序列所有词的词向量矩阵。gpt能实现nlp gpt it_自然语言处理_09

假设当前序列长度为10,词汇表大小为6000,embedding的维度为128。则gpt能实现nlp gpt it_语言模型_07 的大小为 6000×128,gpt能实现nlp gpt it_gpt能实现nlp_08 的大小为 10×28,gpt能实现nlp gpt it_自然语言处理_09

GPT中的位置向量position embedding采用的随机初始化,让模型自己学习的方式,而不是Transformer的正弦余弦函数。

得到输入gpt能实现nlp gpt it_自然语言处理_06 之后,将gpt能实现nlp gpt it_自然语言处理_06 依次传入设计好的Transformer Decoder中,最终得到gpt能实现nlp gpt it_gpt_15

gpt能实现nlp gpt it_深度学习_16

其中n为使用的层数。得到gpt能实现nlp gpt it_gpt_15,之后再预测下一个单词的概率

gpt能实现nlp gpt it_gpt能实现nlp_18

最后输出的大小为10×6000。代表输入的10个词分别预测对应位置的下一个词。

整体流程:将序列中的 num个词的词向量矩阵gpt能实现nlp gpt it_深度学习_19 加上位置嵌入gpt能实现nlp gpt it_自然语言处理_20, 输入到 Transformer Decoder中,num个词分别预测该位置的下一个词。

第二阶段:有监督微调 Fine-Tuning

预训练阶段我们得到了一个包含通用知识的预训练模型,现在需要设计具体任务进行模型的微调。以分类任务为例,假设输入的文本序列为 gpt能实现nlp gpt it_gpt能实现nlp_21 ,其对应的分类标签为gpt能实现nlp gpt it_深度学习_22

现在将gpt能实现nlp gpt it_gpt能实现nlp_21输入Transformer Decoder模型,得到输出层最后一个时刻的输出gpt能实现nlp gpt it_自然语言处理_24 ,现新增一个Softmax层(参数为gpt能实现nlp gpt it_gpt_25)进行分类操作。最后用交叉熵计算损失并进行反向传播调整预训练模型的参数以及gpt能实现nlp gpt it_gpt_25的参数。等价于最大似然估计:

gpt能实现nlp gpt it_深度学习_27

微调阶段需要最大化下面的函数:

gpt能实现nlp gpt it_语言模型_28

为了提升模型的泛化性,GPT使用了Multi-Task Leanrning,在微调过程也考虑到预训练过程的损失函数,整体损失函数为

gpt能实现nlp gpt it_gpt_29

对于预训练的损失函数gpt能实现nlp gpt it_自然语言处理_30,使用的数据仍然是当前有监督任务的输入数据,并且只使用gpt能实现nlp gpt it_gpt能实现nlp_21,不使用标签信息gpt能实现nlp gpt it_深度学习_22

不同任务的输入形式

接下来介绍微调阶段主要的四种任务形式

  1. 分类任务:将起始和终止token加入到原始序列两端,输入transformer中得到特征向量,最后经过一个全连接层得到目标标签的概率值。
  2. 自然语言推理:将前提(premise)和假设(hypothesis)通过分隔符(Delimiter)隔开,两端加上起始和终止token。再依次通过transformer和全连接得到预测结果。
  3. 语义相似度:输入的两个句子,正向和反向各拼接一次,然后分别输入给transformer,得到的特征向量拼接后再送给全连接得到预测结果(二分类–是否相似)。
  4. 问答和知识推理:将 包含n个选项的问题抽象化为n个二分类问题,即每个选项分别和内容进行拼接,然后各送入transformer和全连接中,最后选择置信度最高的作为预测结果。

gpt能实现nlp gpt it_语言模型_33

GPT使用的数据集

GPT-1使用了BooksCorpus数据集,这个数据集包含 本没有发布的书籍。作者选这个数据集的原因有二:1. 数据集拥有更长的上下文依赖关系,使得模型能学得更长期的依赖关系;2. 这些书籍因为没有发布,所以很难在下游数据集上见到,更能验证模型的泛化能力。

GPT模型细节

  1. 使用了12层Transformer,每个Transformer块使用12个头。
  2. 位置编码使用的可学习方式,而不是正余弦函数。
  3. 使用字节对编码(BPE)处理数据,共有40000个字节对。
  4. 词编码embedding长度为768。
  5. 使用的激活函数为GLEU。
  6. 训练期间的batchsize为64,epoch为100,学习率为gpt能实现nlp gpt it_语言模型_34。序列长度为512。
  7. 模型参数量1.17亿。

GPT的特点

优点

  • 使用Transformer构造强大的特征抽取器,能够有效捕捉长距离记忆信息,且相较于传统的RNN系列方法更易于并行化。
  • 预训练和微调两阶段模式,基于通用的预训练模型进行下游任务的微调,避免了针对各个任务进行定制设计的麻烦。

缺点

  • GPT属于单向语言模型,根据已知的信息预测当前词,无法利用后面词的信息。