当前位置:   article > 正文

【深度学习】GPT-1_gpt1

gpt1

        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)加快训练的收敛。所以我们如下定义最终的目标函数: 

        作者并没有直接使用

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/360622
推荐阅读
相关标签