预训练模型(持续更新)

GPT

GPT模型也是当下非常火的一个预训练模型,GPT和BERT刚好相反,它采用的是Auto-Regressive,使用的是Transofrmer的Decoder部分,是一个单向的语言模型,Auto-Reressive模型的目标函数是 m a x i m i z e   L ( θ ) = ∑ l o g p ( x t ∣ x < t , θ ) maximize\ L(\theta)=\sum{log{p(x_t|x_{<t},\theta)}} maximize L(θ)=logp(xtx<t,θ)。在实际操作过程中,GPT对Decoder进行了一点修改,即只保留了Mask Multi-Head Attention部分,删除了Encoder-Decoder Attention,然后加深模型(GPT-1是12层)。GPT模型的结构其实并无新奇之处,它强就强在它的Pre-train task上。GPT是基于大量优质文本进行预训练,这个大量还不是一般的大量,GPT-2其实就只是在文本的数量和质量上做了改进,而GPT-3更是"有钱人的模型",模型参数达到了1750亿,文本量更是达到了惊人的45TB,GPT3的训练开销也因此达到了460万美元。

GPT可实现的下游任务也不少,比如文本分类、问答系统等

在这里插入图片描述

XLNet

Google推出了BERT模型霸榜了NLP各项任务之后,一个对BERT改进的模型被提出,叫做XLNet,我们首先来复习一下Auto-Regressive和Auto-Encoding的优缺点。Auto-Regressive的优点是它没有偏差,但缺点是单向模型,无法利用下文信息(典型代表为GPT);Auto-Encoding的优点是双向模型,但缺点是有偏差且没有考虑被[MASK]的词之间的依赖关系。那么我们自然会想,能不能综合这两者的优点,搞出一个"无敌"模型。于是XLNet就诞生了。

Permutation Language Model

对于一个单向的语言模型,怎么让它能看到后面token的信息呢?XLNet采用的方法是对原句子进行排列组合。假设原句子是 x 1 , x 2 , x 3 , x 4 x_1,x_2,x_3,x_4 x1,x2,x3,x4,那我枚举全排列,得到了一种次序是 x 2 , x 3 , x 1 , x 4 x_2,x_3,x_1,x_4 x2,x3,x1,x4,这样一来,当我们我这个新句子作为输入时, x 1 x_1 x1不就能看到 x 2 , x 3 x_2,x_3 x2,x3这两个原来是它的下文的信息了么?

在这里插入图片描述

Double-Stream Attention

上面介绍了基于重新排列的方法,但是有一个问题:我们不能在做预测的时候也把所有的输入进行全排列对吧,因此这个顺序的重新排列事实上是在Transformer里面实现的,因此必须要对Attention mask进行改进,因为我们知道,Transformer是一个不依赖于时序特征的模型,因此如果我们不对Attention进行修改,当总的排列情况不变时,对于任意两个token如 x 2 , x 3 x_2,x_3 x2,x3,他们所得到的输出分布是一样的,公式如下(公式中Transoformer的输出 h θ h_{\theta} hθ是不变的)
p ( x z t ∣ x z < t , θ ) = e x p [ e ( x ) h θ ( x z < t ) ] ∑ x ′ e x p [ e ( x ′ ) h ( x z < t ) ] p(x_{z_t}|x_{z_{<t}},\theta)=\frac{exp[e(x)h_{\theta}(x_{z_{<t}})]}{\sum_{x'}exp[{e(x')h(x_{z_{<t}})]}} p(xztxz<t,θ)=xexp[e(x)h(xz<t)]exp[e(x)hθ(xz<t)]
那么我们自然想到如果能把位置信息加到 h θ h_{\theta} hθ里就好了,于是我们把上式改写一下
p ( x z t ∣ x z < t , θ ) = e x p [ e ( x ) g θ ( x z < t , z t ) ] ∑ x ′ e x p [ e ( x ′ ) g ( x z < t , z t ) ] p(x_{z_t}|x_{z_{<t}},\theta)=\frac{exp[e(x)g_{\theta}(x_{z_{<t}}, z_t)]}{\sum_{x'}exp[{e(x')g(x_{z_{<t}}, z_t)]}} p(xztxz<t,θ)=xexp[e(x)g(xz<t,zt)]exp[e(x)gθ(xz<t,zt)]
其中 g θ g_{\theta} gθ包含了 x z t x_{z_{t}} xzt的内容信息和位置信息。那么当我们要用 x t x_t xt去预测后面的token的时候, x z t x_{z_{t}} xzt的位置和内容信息都应该是可见的;当 x z t x_{z_{t}} xzt作为被预测的token时,只有位置信息可见,内容信息是不可见的。这显然不能通过普通的Attention机制来实现,接下来我们详细介绍双流注意力。

Content Stream

Content Stream就是用来处理用 x t x_t xt去预测后面的token的时候, x z t x_{z_{t}} xzt的位置和内容信息都应该是可见的这一情况,那么这个部分就和一般的Transformer相同

在这里插入图片描述

Query Stream

Query Stream用于处理当 x z t x_{z_{t}} xzt作为被预测的token时,只有位置信息可见,内容信息是不可见的这种情况。此时只有位置信息可见,因此计算Key和Value时就不包括 x z t x_{z_t} xzt的信息

在这里插入图片描述

下面这张图综合介绍了Two-Stream Attention以及它是怎么利用mask来实现factorization的,右边的mask就是XLNet当中的核心部分

在这里插入图片描述

关于XLNet的细节还有一些,比如动态的Positional Embedding之类的,在这里不详述,本文重点了解XLNet当中新的Attention方法,值得借鉴。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值