【大模型】GPT-1

        GPT-1是OpenAI在《Improving Language Understanding by Generative Pre-Training》中于2018年提出的生成式预训练语言模型。 

1.GPT-1 简介

        在自然语言处理任务中,存在大量无标签的语料数据,而有标签的语料数据相对较少,因此基于有监督训练的模型性能的提升大大受限于数据集。为了解决这个问题,GPT-1的作者们提出先在大量的无标签数据上训练一个语言模型,然后再在下游具体任务的有标签数据集上进行Fine-Turn。

        GPT-1:使用通用的预训练提升自然语言的理解能力,使用没有标号的文本来预训练模型,最后在子任务上微调模型。

2.GPT-1 详情

2-1 GPT的出现

        GPT是基于Transformer发展而来。因为Transformer是一个语言翻译模型。其整个模型由编码器和解码器两部分组成,而这两部分的训练方法有所不同。编码器考验的是对语言的理解,所以它使用的方法是完形填空,训练时给出先后文,把中间的字MASK,让模型给出MASK位置的词;而解码器是要根据意思,翻译成另外一种语言,考验的是语言的生成,训练方法是词语接龙,训练时给出前文,让模型给出后续的词。Google和OpenAI分别使用Transformer的编码器和解码器,训练出了自己的语言模型。Google训练的模型重在语言理解,叫做BERT,OpenAI训练的模型重在语言生成,叫做GPT。

2-2 GPT-1结构

        GPT-1由12层Transformer Decoder的变体组成,称其为变体,是因为与原始的Transformer Decoder相比,GPT-1所用的结构删除了Encoder-Decoder Attention层,只保留了Masked Multi-Head Attention 层和Feed Forward层。Transformer结构提出之始便用于机器翻译任务,机器翻译是一个序列到序列的任务,因此Transformer设计了Encoder用于提取源端语言的语义特征,而用Decoder提取目标端语言的语义特征,并生成相对应的译文。GPT-1目标是服务于单序列文本的生成式任务,所以含弃了关于Encoder部分,包括Decoder的 Encoder-Dcoder Atcnion层。

        GPT保留了Decoder的Masked Multi-Atenlion 层和 Fed Forward层,并扩大了网络的规模。将层数扩展到12层,GPT-1还将Atention 的维数扩大到768(原来为512),将Attention的头数增加到12层(原来为8层),将Fed Forward层的隐层维数增加到3072(原来为2048),总参数达到1.5亿。GPT-1还优化了学习率预热算法,使用更大的BPE码表,活函数ReLU改为对梯度更新更友好的高斯误差线性单元GeLU,将正余弦构造的位置编码改为了带学习的位置编码。

2-2 模型训练

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

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

2-2-1 无监督预训练

        给一组无监督学习语料的tokens​​​​​​​:U={u_1,u_2,...u_n}我们以语言模型的目标函数作为目标,最大化其似然函数:

         k表示窗口大小, P 表示由参数Θ决定的神经网络所输出的条件概率值。

        在GPT中,作者对position embedding矩阵进行随机初始化,让模型自己学习,而不是采用正弦余弦函数进行计算。(原Transformer用的三角函数)

        从GPT的计算公式来看,其实跟Transformer基本是一样的,只是对每个时间步,都只考虑左侧窗口大小的上下文信息。由于使用了Masked Self-Attention,所以每个位置的词都不会“看见”后面的词,也就是预测的时候是看不见“答案”的,即避免了see themselves 的问题,保证了模型的合理性,这也是为什么OpenAI采用了单向Transformer的原因。

        这里再简单用公式阐述下前言中提到的本文核心的多头transformer-decoder层:

        其中U=(u_{-k},...,u_{-1})是文本的tokens向量,n是transformer的层数,W_e是token embedding矩阵, W_p是position embedding矩阵。

2-2-2 有监督学习

        在完成了无监督学习后,我们希望在有标签的数据集上对模型进行有监督的微调。我们定义标注数据集为 C,对于每一组序列tokens:x = {x^1,x^2,...x^m},都对应一个标签y。输入x通过预训练模型后得到最后一层transformer层的隐向量h_l^m ,通过一个线性层+softmax预测标签y:

        w_y为全连接层参数,有监督目标是使下面这个目标函数最大化:

       在有监督微调的训练中,如果加入语言模型的目标函数,可以有两个好处:(a)使得有监督模型具备更强的生成能力;(b)加快训练的收敛。所以我们如下定义最终的目标函数: 

        作者并没有直接使用𝐿2,而是向其中加入了𝐿1,并通过𝜆λ调节权重,一般采用0.5。

2-3 GPT 算法关键

        无监督训练的模型采用Transformer的decoder,目标函数采用标准的语言模型的目标函数,通过前k个词来预测第k+1个词。目标函数其实是比BERT模型完形填空式(根据上下文信息来预测中间被mask的词)的语言模型目标函数要难,因为预测未来要比预测中间难。这可能也是导致GPT在训练和效果上比BERT差一些的一个原因。 由于是通过前k个词来预测,因此GPT使用的是transformer的解码器(只在当前及之前的特征上做自注意力,之后的都被mask)而非编码器(可以看到全局的特征)。

        有监督fine-tune采用标准的分类目标函数。此外,作者发现在有监督训练时额外加上语言模型的目标函数更好,能够提高模型的泛化性和加速模型收敛。
        微调:类似BERT,针对不同下游任务采用特殊符号如开始和分隔、抓取等,用prompt提示来分辨任务类型,最后用抓取这一个向量的输出训练一个全连接层解决问题(进行分类)。整个过程只微调模型参数,不改变模型结构。

2-4 针对不同下游任务的输入与输出

        对于不同的下游任务,将数据转换成统一的形式送入预训练好的语言模型,因为预训练模型是在连续的文本序列上训练的,需要一些修改才能将其应用于这些任务,之后再接一层线性层进行分类等。可以发现,在fine-tune时,仅需要对预训练的语言模型做很小的结构改变,即加一层线性层,即可方便地应用于下游各种任务。

        1.分类任务:将起始和终止的token加入到原始序列两端,输入transformer中得到特征向量,最后经过一个全连接层得到预测的概率分布;

        2.NLI任务:将前提和假设同通过分割符隔开,两端加上起始和终止token,再一次通过transformer和全连接得到预测结果;

        3.语义相似度任务:输入两个句子,正向和反向各拼接一次,然后分别输入给transformer,得到特征向量拼接后再送给全连接得到预测结果;

        4.问答和常识推断:将𝑛n个选项的问题抽象化为𝑛n二分类问题,即每个选项分别和内容进行拼接,然后各送入transformer和全连接中,最后选择置信度最高的作为预测结果。

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

2-5 补充说明

2-5-1 特定的微调任务

  • 1.自然语言推理(NLI)

    • 判断两个句子是否包含关系,矛盾关系,中立关系;

  • 2.问答和常识推理

    • 类似多选题,输入文章,问题以及若干候选答案,输出为每个答案的概率;

  • 3.语义相似度

    • 判断两个句子语义上是否相关;

  • 4.分类

    • 判断输入文本是指定的那个类别。

2-5-2 训练数据集

        GPT-1使用的数据集BooksCorpus,包含7000本没有发布的书籍。使用原因由两点:

  • 有助于未见过的数据集上训练语言模型,该数据不太可能在下游任务的测试集中找到;
  • 数据集拥有长的合理的上下文依赖关系,使得模型学习更长的依赖关系​​​​​​​

2-5-3 实现细节

        1.使用字节对编码(BPE:byte pair encoding),共有4000个字节对;

        2.词编码长度为768;

        3.位置编码也需要学习;

        4.12层transformer,每个transformer块有12个头;

        5.位置编码的长度是3072;

        6.Attention,残差,Dropout等机制用来进行正则化,drop比例为0.1;

        7.激活函数GLUE;

        8.训练的batchsize为64,学习率为2.5𝑒−42.5e−4,序列长度为512,序列epoch为100。

2-3-6 与BERT对比

   1.GPT在预训练时并没有引入[CLS][SEP], Bert全程引入;

   2.Bert是真正能够捕捉所有层上下文信息的,受益于自注意力机制,将所有token距离直接缩短到1,GPT-1是单向捕捉信息;

       3.input: GPT采用BPEBert用了Word PieceGPT有位置编码, Bert有位置编码和段编码.

3.总结

        GPT-1模型的核心思想:通过二段式的训练,第一个阶段是利用语言模型进行预训练(无监督形式),第二阶段通过 Fine-tuning 的模式解决下游任务(监督模式下)。GPT-1可以很好地完成若干下游任务,包括分类、蕴含、相似度、多选等。在多个下游任务中,微调后的GPT-1系列模型的性能均超过了当时针对特定任务训练的SOTA模型。 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值