OpenAI-GPT原理详解

本文参考

OpenAI GPT算法原理解析
openai-GPT模型

一、前言

本文对论文《Improving Language Understanding
by Generative Pre-Training》做一个解析。

一个对文本有效的抽象方法可以减轻NLP对有监督学习的依赖。目前大多数深度学习方法依靠大量的人工标注信息,这限制了在很多领域的应用。此外,即使在可获得相当大的监督语料情况下,以无监督学习的方式学到的表示也可以提供显着的性能提升。到目前为止,最引人注目的证据是广泛使用预训练词嵌入来提高一系列NLP任务的性能。

二、基础知识

Transform模型原理

三、OpenAI GPT

3.1 OpenAI GPT 原理

本文提出一种半监督的方式来处理语言理解的任务。使用非监督的预训练和监督方式的微调。我们的目标是学习一个通用的语言标示,可以经过很小的调整就应用在各种任务中。这个模型的设置不需要目标任务和非标注的数据集在同一个领域。
GPT是“Generative Pre-Training”的简称,从名字看其含义是指的生成式的预训练。GPT也采用两阶段过程,第一个阶段是利用语言模型进行预训练,第二阶段通过Fine-tuning的模式解决下游任务。
GPT的预训练过程,其实和ELMO是类似的,主要不同在于两点:首先,特征抽取器不是用的RNN,而是用的Transformer,上面提到过它的特征抽取能力要强于RNN,这个选择很明显是很明智的;其次,GPT的预训练虽然仍然是以语言模型作为目标任务,但是采用的是单向的语言模型,所谓“单向”的含义是指:语言模型训练的任务目标是根据 [公式] 单词的上下文去正确预测单词 W i W_i Wi W i W_i Wi 之前的单词序列Context-before称为上文,之后的单词序列Context-after称为下文。ELMO在做语言模型预训练的时候,预测单词 W i W_i Wi同时使用了上文和下文,而GPT则只采用Context-before这个单词的上文来进行预测,而抛开了下文。

3.2 OpenAI GPT模型结构

OpenAI-GPT提出一种半监督的方式来处理语言理解的任务。使用非监督的预训练和监督方式的微调。模型的目标是学习一个通用的语言表示,可以经过很小的调整就应用在各种任务中。这个模型的设置不需要目标任务和非标注的数据集在同一个领域。模型有两个过程。
在这里插入图片描述在这里插入图片描述

3.2.1 非监督预训练

非监督:
通过前k-1个词预测第k个词,从前往后,不断前进,属于单向的预测。此处记整个无监督训练的任务为L1。
处理非监督文本 ( u 1 , u 2 , . . . , u m ) (u_1,u_2,...,u_m) (u1,u2,...,um)的普通方法是用语言模型去最大化语言模型的极大似然。

L 1 ( X ) = ∑ i l o g P ( u i ∣ u i − k , . . . , u i − 1 : θ ) L_1(X)=\sum_ilogP(u_i|u_{i-k},...,u_{i-1}:\theta) L1(X)=ilogP(uiuik,...,ui1:θ)

文章中使用的是多层(12层)Transformer的decoder的语言模型。这个多层的结构应用multi-headed self-attention在处理输入的文本加上位置信息的前馈网络,输出是词的概率分布。
h 0 = U W e + W p h_0=UW_e+W_p h0=UWe+Wp

h l = t r a n s f o r m e r _ b l o c k ( h l − 1 ) h_l=transformer\_block(h_{l-1}) hl=transformer_block(hl1)

P ( u ) = s o f t m a x ( h n W e T ) P(u)=softmax(h_nW^T_e) P(u)=softmax(hnWeT)
这里
U = ( u k , u k − 1 , . . . , u 1 ) U=(u_k,u_k-1,...,u_1) U=(uk,uk1,...,u1)是tokens的上下文。
n是网络层数 W e W_e We是tokens的embedding矩阵。
W p W_p Wp是tokens的位置embedding矩阵
P ( u ) P(u) P(u)是通过softmax输出的一个概率

3.2.2 监督微调fine-tuning

这个阶段要对前一个阶段模型的参数,根据监督任务进行调整。我们假设有标签数据集 C C C,里面的结构是 ( x 1 , x 2 , . . . , x m , y ) (x_1,x_2,...,x_m,y) (x1,x2,...,xm,y)。输入 ( x 1 , x 2 , . . . , x m ) (x_1,x_2,...,x_m) (x1,x2,...,xm)经过我们预训练的模型获得输出向量 h l m h_l^m hlm,然后经过线性层和softmax来预测标签。
P ( y ∣ x 1 , x 2 , . . . , x m ) = s o f t m a x ( h l m W y ) P(y|x_1,x_2,...,x_m)=softmax(h_l^m{W_y}) P(yx1,x2,...,xm)=softmax(hlmWy)

L 2 ( C ) = ∑ x , y l o g P ( y ∣ x 1 , . . . , x m ) L_2(C)=\sum_{x,y}logP(y|x_1,...,x_m) L2(C)=x,ylogP(yx1,...,xm)

我们增加了语言模型去辅助微调,提高了监督模型的结果。最后的损失函数可以标示为

L 3 ( C ) = L 2 ( C ) + λ L 1 ( C ) L_3(C)=L_2(C)+\lambda{L_1(C)} L3(C)=L2(C)+λL1(C)

3.2.3 改造OpenAI GPT用于下游NLP任务

在这里插入图片描述
输入变换
对于有些任务,像文本分类,我们能够直接用上文的模型进行微调。另外的任务,问答系统,需要构造输入的句子对,或者三个文档。由于我们的预训练模型需要连续的文本序列,我们需要改变这种多句文本的输入。

  • 文本含义:用$链接前后两个文本
  • 相似度:对于相似度的问题,由于没有文本内部的先后顺序。我们可以有两个输入 T e x t 1 Text1 Text1$ T e x t 2 Text2 Text2 T e x t 2 Text2 Text2$ T e x t 1 Text1 Text1,输出的表示向量在加起来。
  • 问答系统:有 C o n t e x t Context Context A n s w e r 1 , . . . , A n s w e r N Answer1,...,AnswerN Answer1,...,AnswerN,我们可以组合成 N N N C o n t e x t Context Context$ A n s w e r i Answer_i Answeri输入,获得 N N N个输出,在通过linear后softmax出概率分布。

GPT缺点:
单向语言模型

BERT使用双向语言模型,训练模型和GPT相同。(下一章准备写)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值