GPT:GPT采用了大量的无监督的数据进行预训练(Pre-training),并在有监督的数据上进行微调(Fine-tuning)来做具体的NLP的任务。 结构:GPT使用了12层12头,单向transformer的decoder部分,编码出来的向量768维 1.GPT中所使用的transformer的decoder部分相比较transformer的decoder少了一层全局的attention和残差标准化。 全局的attention是为了关联编码器和解码器,但是GPT没有解码器,因此去掉。 2.为什么不用encoder而用decoder? 因为decoder第一层用了遮蔽的self-attention,形成了天然的语言模型。 3.transformer是编解码模型,怎么做特征提取? transform不能做特征提取,但是把它拆开看,单看tranform的encoder、decoder都可以做特征提取。 4.为什么GPT不用双向,而用单向? GPT当中一定不能用双向,第一层的遮蔽多头self-attention,因为已经把后边遮蔽掉了,如果用双向,那就又使得模型看到后边的信息。 GPT:不能证明通过语言训练所得到的词向量,一定比通过分类训练的词向量好。
GPT:
GPT采用了大量的无监督的数据进行预训练(Pre-training),并在有监督的数据上进行微调(Fine-tuning)来做具体的NLP的任务。
在NLP当中标注的数据是少量的,而未标注的数据是大量的,如果只用有监督的数据的话,肯定达不到很好的效果,因为要充分的利用无监督的数据,并且在其中提取大量的信息,并提取特征。
GPT提出的动机:
1.现实世界中,无标签的文本语料库非常巨大,而带有标签的数据则显得十分匮乏,如何有效利用无标签的原始文本,对缓解自然语言处理相关任务对有监督学习方式的依赖显得至关重要。
2.有效的从无标签文本中利用超单词级信息有两个主要的难点:
①无法确定什么样的优化目标能学到最有效的文本表征,使之更好的用于迁移目的。
②对于学习到的文本表征,采用何种方式将其迁移到目标任务上,目前尚无共识。
3.论文中提出了半监督的方式来做语言理解,也就是无监督的pre-train,和有监督的fine-tune。该方法首先利用无监督的pre−train模型,学习到更加普遍、更适用的表征,然后模型以很小的微调迁移到众多特定的有监督学习任务上。在实验效果上,大幅超过了众多任务的state-of-art。不同于word Embedding、ELMo 以无监督的方式学习到一些特征,然后利用这些特征喂给一些特定的有监督模型,这里是先无监督的pre−train模型,然后直接fine-tune预训练后的模型,迁移到一些特定的有监督任务上。
4.ELMo方法中,训练基于LSTM的双向语言模型能结合上下文内容学习到语义更丰富的词表征,而本论文中预训练的语言模型中使用了transformer(Masked Multi-Head Attention,单向)结构,相对而言,transformer更加鲁棒,在长距离依赖上的效果更好,迁移效果也更好。
5.适用场景:无标签样本量(只有X)远大于有标签样本量的数据集(同时有X,y),如果只用这少量的带标签样本训练出的模型泛化能力肯定比较弱,这个时候我们可以先用无标签样本(也就是只用X)预训练好一个语言模型,然后在该语言模型基础上用少量带标签的样本(同时有X,y)进行fine-tune,有监督的训练。
GPT 训练过程分为两个阶段:第一个阶段是 Pre-training 阶段,主要利用大型语料库完成非监督学习;第二阶段是 Fine-tuning,针对特定任务在相应数据集中进行监督学习,通过 Fine-tuning 技术来适配具体任务。
上图中,每一层的所有Trm属于一个自左向右的单向transformer,故在embedding输入和上一层的输出到下一层的输入时,都会做self attention操作,而这个self attention操作相当于当前位置cell会结合上一层所有位置的状态信息,这样就相当于双向连接了,因此需要乘以一个mask矩阵,用来屏蔽当前位置后面的位置的隐藏层状态信息。这是transformer decoder的一个关键。如果不做这样的一个屏蔽操作,那么就变成双向的了。
预训练阶段
从上图我们可以看出,GPT 采用 Transformer 来代替 LSTM 作为特征提取器,并基于语言模型进行训练。这里只使用了 Transformer 的 Decoder 部分,并且每个子层只有一个 Masked Multi Self-Attention(768 维向量和 12 个 Attention Head)和一个 Feed Forward,共叠加使用了 12 层的 Decoder。
这里简单解释下为什么没有用decoder中的encoder-decoder attention:语言模型是利用上文预测下一个单词的,因为 Decoder 使用了 Masked Multi Self-Attention 屏蔽了单词的后面内容,所以 Decoder 是现成的语言模型。又因为没有使用 Encoder,所以也就不需要 encoder-decoder attention 了。
GPT 输入文本和位置 Embedding(采用使用 one-hot 编码),经过 12 层的 Transformer 的 Decoder 后通过 Softmax 得到输出:
预训练时的代价函数:
其中,k是上下文窗口的大小,P为条件概率,Θ 为条件概率的参数,参数更新采用 SGD。
微调:
实战中其他任务微调的使用:
上图是对不同任务进行微调的输入转换。将所有的结构化输入转换为 Token 序列,然后使用预训练模型(Transformer)进行处理,最后使用线性和 Softmax 层完成特定的监督学习任务。
对于文本蕴涵(Text Entailment)来说,作者将前提 p 和假设 h 令牌序列连接起来,并使用分隔符($)分开。
对于句子相似(Similarity)来说,为了消除两个句子之间的内在的顺序,作者以不同顺序合并了两个句子并以分隔符进行分割,然后独立地处理每一种顺序并得到两个句子的表征,对两个句子进行元素求和后送给 Linear 层。
对于问答和常识推理来说,有上下文文档 z 、问题 q 和可能答案的集合{ ak },作者将上下文和问题与每个可能的答案连接起来并在中间添加分隔符令牌 $ 得到。每个序列都将由模型独立处理,然后通过 Linear 层和 Softmax 层,从而在可能的答案上产生一个输出分布。