赞
踩
GPT-1是OpenAI在《Improving Language Understanding by Generative Pre-Training》中于2018年提出的生成式预训练语言模型。
在自然语言处理任务中,存在大量无标签的语料数据,而有标签的语料数据相对较少,因此基于有监督训练的模型性能的提升大大受限于数据集。为了解决这个问题,GPT-1的作者们提出先在大量的无标签数据上训练一个语言模型,然后再在下游具体任务的有标签数据集上进行Fine-Turn。
GPT-1:使用通用的预训练提升自然语言的理解能力,使用没有标号的文本来预训练模型,最后在子任务上微调模型。
GPT是基于Transformer发展而来。因为Transformer是一个语言翻译模型。其整个模型由编码器和解码器两部分组成,而这两部分的训练方法有所不同。编码器考验的是对语言的理解,所以它使用的方法是完形填空,训练时给出先后文,把中间的字MASK,让模型给出MASK位置的词;而解码器是要根据意思,翻译成另外一种语言,考验的是语言的生成,训练方法是词语接龙,训练时给出前文,让模型给出后续的词。Google和OpenAI分别使用Transformer的编码器和解码器,训练出了自己的语言模型。Google训练的模型重在语言理解,叫做BERT,OpenAI训练的模型重在语言生成,叫做GPT。
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,将正余弦构造的位置编码改为了带学习的位置编码。
GPT1的训练主要分成无监督预训练和有监督微调两部分:
2-2-1 无监督预训练
给一组无监督学习语料的tokens:,我们以语言模型的目标函数作为目标,最大化其似然函数:
k表示窗口大小, P 表示由参数Θ决定的神经网络所输出的条件概率值。
在GPT中,作者对position embedding矩阵进行随机初始化,让模型自己学习,而不是采用正弦余弦函数进行计算。(原Transformer用的三角函数)
从GPT的计算公式来看,其实跟Transformer基本是一样的,只是对每个时间步,都只考虑左侧窗口大小的上下文信息。由于使用了Masked Self-Attention,所以每个位置的词都不会“看见”后面的词,也就是预测的时候是看不见“答案”的,即避免了see themselves 的问题,保证了模型的合理性,这也是为什么OpenAI采用了单向Transformer的原因。
这里再简单用公式阐述下前言中提到的本文核心的多头transformer-decoder层:
其中是文本的tokens向量,n是transformer的层数,是token embedding矩阵, 是position embedding矩阵。
2-2-2 有监督学习
在完成了无监督学习后,我们希望在有标签的数据集上对模型进行有监督的微调。我们定义标注数据集为 C,对于每一组序列tokens:,都对应一个标签y。输入通过预训练模型后得到最后一层transformer层的隐向量 ,通过一个线性层+softmax预测标签y:
为全连接层参数,有监督目标是使下面这个目标函数最大化:
在有监督微调的训练中,如果加入语言模型的目标函数,可以有两个好处:(a)使得有监督模型具备更强的生成能力;(b)加快训练的收敛。所以我们如下定义最终的目标函数:
作者并没有直接使用
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。