XLNet 理解汇总

两种无监督目标函数:

  1. AR(autoregressive):自回归,假设序列数据存在线性关系,用 x1,x2,x3,...xn 预测  ,传统的单向语言模型如:ELMo、GPT 都是以 AR 作为目标。
  2. AE(autoencoding):自编码,将输入复制到输出,BERT的 MLM 就是AE的一种。

AR是以前常用的方法,缺点是不能进行双向的编码。BERT采用AE,获取序列全局信息。

BERT采用AE方法带来的两个问题:

  1. BERT 不符合真实情况的假设:即被mask掉的token是相互独立的。如预训练输入:“自然 [Mask] [Mask] 处理”,目标函数是 p(语|自然处理) + p(言|自然处理),使用AR则应该是 p(语|自然) + p(言|自然语)。BERT得到的概率分布忽略了 token 间的联系。
  2. BERT在预训练和精调阶段存在差异:在预训练阶段大部分输入都包含 [Mask],引入了噪声,即使在小部分情况下使用了其他 token,与真实数据存在差异。

XLNet 的改进:

  • 采用 AR 模型替代 AE 模型,解决mask带来的负面影响
  • 双流注意力机制
  • 引入transformer-xl

AR与AE语言模型
目前主流的nlp预训练模型包括两类 autoregressive (AR) language model 与autoencoding (AE) language model,AR模型的主要任务在于评估语料的概率分布,给定序列:X = (x1​,...,xT​),AR模型就是在计算其极大似然估计 ,即已知 xt 之前的序列预测xt;AR模型的缺点,该模型是单向的。

AE模型采用的是上下文的方式,最典型的就是bert;bert 的预训练阶段,预训练包括了两个任务,Masked Language Model与 Next Sentence Prediction,Next Sentence Prediction 即判断两个序列的推断关系,Masked Language Model采用了一个标志位 [MASK] 随机替换一些词,再用[MASK] 的上下文来预测 [MASK] 的真实值,bert的最大问题也是 MASK,在微调阶段,没有MASK,就导致预训练和微调数据的不统一,导致人为误差。

XLNet 使用AR模式,则如何解决上下文的问题是关键。

XLNet 提出了排列语言模型,不再对传统的 AR 模型的序列的值按顺序进行建模,而是最大化所有可能的序列的因式分解顺序的期望对数似然,如有序列[1,2,3,4],预测目标是3,对于传统的AR模型来说,结果是,如果采用本文方法,先对该序列进行因式分解,最终会有24(=4!)种排列方式。

下图是其中可能的四种情况,对于第一种情况因为3的左边没有其他的值,无需做对应的计算,第二种情况 3 左边还包括了2与4,所以得到的结果是p ( 3 ) = p ( 3 ∣ 2 ) ∗ p ( 3 ∣ 2 , 4 ) ,后续的情况类似,这样处理过后不但保留了序列的上下文信息,也避免了采用 mask 标记位。

表示的是添加了mask后的transformer的输出值,其并不依赖于其要预测的内容的位置信息,因为无论预测目标的位置在哪里,因式分解后得到的所有情况都是一样的,并且transformer 的权重对于不同的情况是一样的,因此无论目标位置怎么变都能得到相同的分布结果

XLNet 提出来新的分布计算方法,实现目标位置感知:

双流自注意力 Two Stream Self-attention,该机制需要解决了两个问题:

 

第一层的查询流是随机初始化了一个向量, ,内容流是采用的词向量, ,

self-attention 计算过程中两个流的网络权重是共享的,最后在微调阶段,只需要简单的把query stream移除,只采用content stream。

transformer-xl的相对位置编码与片段循环机制;

片段循环机制主要为解决超长序列的依赖问题,对于普通的 transformer 由于有一个最长序列的超参数控制其长度,对特别长的序列就会导致丢失一些信息,transformer-xl就能解决这个问题。有长度为1000的序列,设置 transformer 的最大序列长度是100,则序列需要计算十次,并且每一次的计算都没法考虑到每一个段之间的关系,如采用片段循环机制,首先取第一个段进行计算,然后把得到的结果的隐藏层的值进行缓存,第二个段计算的过程中,把缓存的值拼接起来再进行计算。该机制不但能保留长依赖关系还能加快训练,因为每一个前置片段都保留了下来,不需要再重新计算,在transformer-xl的论文中,经过试验其速度比transformer快了1800倍。

在xlnet中引入片段循环机制,只需要在计算 KV 的时候做简单的修改,

bert 的 position embedding 是绝对位置编码,但是绝对位置编码在transformer-xl 中没法区分到底是哪一个片段里的,导致了一些位置信息的损失,可使用相对位置编码;给定一对位置 i 和 j,如果 i 和 j 在同一片段则 sij = s+,如果不在同一片段则 sij = s-,这个值是在训练的过程中得到的,也是用来计算attention weight时候用到的,在传统的transformer中attention weight = softmax((Q * K / sqrt(d)) * V),在引入相对位置编码后,首先要计算出 aij = (qi + b) T * sij,b 是一个需要训练得到的偏执量,最后把得到的 aij 与传统的 transformer weight 相加得到 attention weight。

参考:

最通俗易懂的XLNET详解_u012526436的博客-CSDN博客_xlnet

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值