预训练模型之BERT、Transformer-XL、XL-Net等

news2024/11/24 16:38:12

文章目录

  • 预训练模型(Pre-trained Models, PTMs)前置知识
  • BERT
  • Transformer-XL
  • XLNet
  • Transformer-XL类似工作(Scalable Transformer)
    • 1. 《Scaling Transformer to 1M tokens and beyond with RMT》
    • 2. 《》


预训练模型(Pre-trained Models, PTMs)前置知识

一、语言模型(Language Modeling,LM)的概念
\quad 标准定义:对于语言序列 w 1 , w 2 , . . . , w n w_1,w_2,...,w_n w1,w2,...,wn,语言模型就是计算该序列的概率,即 P ( w 1 , w 2 , . . . , w n ) P(w_1,w_2,...,w_n) P(w1,w2,...,wn)
\quad 从机器学习的角度来看:语言模型是对语句的概率分布的建模。
\quad 通俗解释:判断一个语言序列是否是正常语句,即是否是人话,例如 P ( I   a m   L i g h t ) > P ( L i g h t   a m   I ) P(I \ am \ Light)>P(Light \ am \ I) P(I am Light)>P(Light am I)

\quad 计算 P ( w 1 , w 2 , . . . , w n ) P(w_1,w_2,...,w_n) P(w1,w2,...,wn)时,首先由链式法则可以得到:
在这里插入图片描述
\quad 然后我们一般采用极大似然估计来计算每个词出现的条件概率 P ( w i ∣ w 1 , . . . , w i − 1 ) P(w_i|w_1,...,w_{i-1}) P(wiw1,...,wi1),但是对于任意长的自然语言语句,直接计算 P ( w i ∣ w 1 , . . . , w i − 1 ) P(w_i|w_1,...,w_{i-1}) P(wiw1,...,wi1)显然不现实。因此为了解决这个问题,N-gram模型应运而生。

\quad N-gram模型(N元模型)是语言模型的一种。 它为语言模型引入马尔可夫假设(Markov assumption),即假设当前词出现的概率只依赖于前 n-1 个词,这样就可以得到:
在这里插入图片描述
\quad 根据上式,定义N-gram模型如下:
在这里插入图片描述
\quad N-gram模型优缺点:

  • 优点:(1) 采用极大似然估计,参数易训练;(2) 完全包含了前 n-1 个词的全部信息;(3) 可解释性强,直观易理解。

  • 缺点:(1) 缺乏长期依赖,只能建模到前 n-1 个词;(2) 随着 n 的增大,参数空间呈指数增长;(3) 数据稀疏,难免会出现OOV(Out Of Vocabulary)的问题;(4) 单纯的基于统计频次,泛化能力差。

\quad 总的来讲,语言模型就是基于朴素贝叶斯(naïve Bayesian)的一个概率模型,目标是求出在给定一个条件(序列)下预测下一个词出现的概率,并找出概率最大的那个词: c ∗ = a r g m a x P ( c ) ∏ i = 1 n P ( a i ∣ c ) c^*=argmax{P(c)\prod_{i=1}^n{P(a_i|c)}} c=argmaxP(c)i=1nP(aic)

\quad 获取语言模型的概率分布是我们的目标,用N-gram语言模型建模也好,用深度学习语言模型建模也罢,都只是达到这一目标的一种途径。

参考:深入理解语言模型 Language Model。侵删。

二、NLP中预训练模型PTMs分类

\quad PTMs按照任务类型可分为2大类:监督学习 和 无监督学习/自监督学习。

\quad 预训练技术最早被应用于计算机视觉领域,自2015年ResNet出现后开始在视觉领域被广泛应用(因为使用残差连接缓解了堆叠太多层带来的梯度消失和梯度爆炸问题。预训练于ImageNet数据集)。受此启发,NLP领域才开始探索监督预训练,所以NLP领域预训练的方法最开始都是属于“监督学习”,最有代表的作品是 CoVE。

\quad 但虽然 CoVE 取得了不错的成绩,但要想在 NLP 领域标注一个像 ImageNet 的数据集几乎不太可能。这是因为标注文本数据比图像要复杂得多。由于 NLP 领域有大量的无标注文本,所以使用无标签数据自监督学习就成了NLP预训练领域最好的选择。因此从那至今,NLP领域的PTMs大都属于 自监督学习。

\quad NLP-PTMs在自监督学习中也可以被分为两种类型:基于上下文(Context Based)基于对比(Contrastive Based)

(1)基于上下文(Context Based)
\quad 基于上下文的PTMs,主要基于数据本身的上下文信息构造辅助任务,在NLP中我们通常引入语言模型作为训练目标。PTMs中的语言模型主要分为三大类:
在这里插入图片描述

  1. Auto-regressive语言模型(LM): 自回归语言模型指的是依据前面(或后面)出现的单词来预测当前时刻的单词,可以公式化如下:
    在这里插入图片描述
    可以看出它是标准的语言模型LM联合概率的无偏估计,所以它被称为 LM,代表有单向自回归模型ELMo, GPT,XL-Net等)和双向自回归模型XL-Net)。

    • 缺点:单向自回归模型只能利用单向语义而不能同时利用上下文信息。双向自回归模型没有这一缺点,XL-Net就是一种双向自回归模型可用于解决这一点。
    • 优点:自回归模型对生成模型友好,天然符合生成式任务的生成过程。这也是为什么 GPT 能够编故事的原因。
  2. Auto-encoder语言模型(DAE-LM): 通过上下文信息来预测被mask的单词,本质为降噪自编码器,所以统称为DAE。代表有Word2Vec(CBOW) ,BERT , RoBERTa等。它可以公式化如下,如果当前token被预测,则 m t = 1 m_t=1 mt=1,否则 m t = 0 m_t=0 mt=0 x ~ \widetilde{x} x 为原始文本被替换后的输入:
    在这里插入图片描述
    - 优点:能够很好的编码上下文语义信息(即考虑句子的双向信息), 在自然语言理解相关的下游任务上表现突出。
    - 缺点:

    • 引入MASK间独立性假设,这样做属于语言模型联合概率的有偏估计,没有考虑MASK token之间的相关性(如BERT中没有对被遮掩(Mask)的 token 之间的关系进行学习);
    • 预训练时的「MASK」噪声在finetune阶段不会出现,导致预训练数据与微调阶段数据不一致问题
    • BERT是自编码语言模型的一个典型代表,但其采用的MLM策略和Transformer-Encoder结构,导致其不适合直接处理生成任务。为了解决这一问题,也可采用基于Seq2Seq MLM方法,比如MASS:encoder部分采取masked策略,而decoder部分以自回归的方式预测encoder部分被mask的token。
  3. 排列语言模型(Permuted Language Modeling,PLM):

    • 排列语言模型(Permuted Language Model,PLM)综合了LM和DAE-LM两者的优点。严格来讲,PLM和LM是标准的自回归语言模型(注:PLM是一种广义的自回归方法[14]),而MLM不是一个标准的语言模型,其引入独立性假设,隐式地学习预测token(mask部分本身的强相关性)之间的关系。如果衡量序列中被建模的依赖关系的数量,标准的自回归语言模型可以达到上界,不依赖于任何独立假设。LM和PLM能够通过自回归方式来显式地学习预测token之间的关系。然而,LM无法对双向上下文进行表征,借鉴 NADE[32]的思想,PLM将这种传统的自回归语言模型(LM)进行推广,将顺序拆解变为随机拆解(从左至右分解),产生上下文相关的双向特征表示。
    • PLM最为典型的代表就是XLNet[14],这是对标准语言模型的一个复兴[33]:提出一个框架来连接标准语言模型建模方法和预训练方法。
    • 一个关键问题:为什么PLM可以实现双向上下文的建模?PLM的本质就是语言模型联合概率的多种分解机制的体现,其将LM的顺序拆解推广到随机拆解。PLM没有改变原始文本序列的自然位置,只是定义了token预测的顺序。PLM只是针对语言模型建模不同排列下的因式分解排列,并不是词的位置信息的重新排列。

\quad 对基于上述三类语言模型的PTMs进行总结:
在这里插入图片描述

(2)基于对比(Contrastive Based)
\quad 不同于Context Based主要基于数据本身的上下文信息构造辅助任利用,Contrastive Based主要利用样本间的约束信息构造辅助任务,这类方法也是 Contrastive learning(CTL)。CTL假设观察到的文本对(正样本)在语义上比随机采样的文本(负样本)更相似。CTL 背后的原理是「在对比中学习」。相较于语言建模,CTL 的计算复杂度更低,因而在预训练中是理想的替代训练标准。主要分为以下四类,具体参考NLP算法面试必备!PTMs:NLP预训练模型的全面总结:

  1. Deep InfoMax (DIM)
  2. Replaced Token Detection (RTD)
  3. Next Sentence Prediction (NSP)
  4. Sentence Order Prediction (SOP)

\quad 总结如下:
在这里插入图片描述
最后,对PTMs的架构设计进行展望:

  • 对于PTMs,Transformer 已经被证实是一个高效的架构。然而 Transformer 最大的局限在于其计算复杂度(输入序列长度的平方倍)。受限于 GPU 显存大小,目前大多数 PTM 无法处理超过 512 个 token 的序列长度。打破这一限制需要改进 Transformer 的结构设计,例如 Transformer-XL。
  • 设计合适的模型架构来适合生成任务。 例如,BERT采用的MLM策略和Transformer-Encoder结构,导致其不适合直接处理生成任务。而XL-Net有效解决了这一点。

二、两种预训练范式:feature-based & fine-tuning

  • feature-based:代表作如EMLo,想想在17年之前,Transformer没出的时候,大家最常解决NLP任务的方法就是用别人训练好的词向量作为embedding,然后后面接全新初始化的RNN/LSTM/CNN等网络结构,也就是预训练只提供了feature-based的embedding。
  • fine-tunning:代表作如GPT,用于下游任务时,不仅保留了输入的embedding,Transformer里面的参数(如attention层、全连接层)也同样可以保留,在fine-tuning的时候只需在原来的Transfomer上加一些简单的层,就可以应用于具体的下游任务。这也是目前主流的pretrain范式。

XLNet 的提出是为了解决 BERT 中存在的两个问题[20]:1)BERT 认为 Mask 的单词之间是独立的;2)BERT 使用了实际不存在的 [MASK] 符号,这会导致训练与微调出现差异。因此 XLNet 基于排列语言建模(PLM)提出了一个自回归的方法,并引入了双向自注意力机制和 Transformer-XL 实现模型。

MASS 把 BERT 推广到生成任务[21],并设计统一了 BERT 和传统单向语言模型框架 BERT+LM,使用 BERT 作为编码器,使用标准单向语言模型作为解码器。UniLM 进一步将双向语言模型、单向语言模型、Seq2Seq 语言模型结合进行预训练[22]。

参考:【NLP】预训练模型综述、万字解读:预训练模型最新综述、NLP算法面试必备!PTMs:NLP预训练模型的全面总结。侵删。


BERT

\quad Paper:《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》【NAACL’2019】
\quad Code:https://github.com/google-research/bert

\quad 在介绍Transformer-XL系列工作之前,让我们先来回顾下BERT。BERT是NLP预训练领域一篇里程碑式的论文,在很多地方可以找到它的讲解,因此我们这里只对它的核心进行回顾和记录。

1)核心理解一:Bidirectional 架构。

\quad BERT的全称是Bidirectional Encoder Representation from Transformers,即双向Transformer的Encoder,这句话包含两点:

  • BERT就是一个Transformer encoder。
    • BERT就是一个现成的Transformer encoder架构。也就是说,在模型架构上,BERT并没有创新,这点与GPT一样都是用的现成的模型结构。但BERT与GPT有以下区别:1)BERT基于Transformer encoder,GPT基于Transformer decoder;2)BERT的语料库更大,模型规模也更加庞大;3)二者Pretrain方法不同。
  • BERT是双向的。
    • 因为以往的预训练语言模型都是单向的,这样只能捕捉到单向语义信息,而不能捕捉上下文信息。BERT的模型结构如最左图。GPT基于Transformer decoder所以是单向的;ELMo虽然虽然把LSTM的正向向量和反向向量拼接在一起,但由于只是拼接,并没有发生交互,所以并不是真正的双向。而BERT是基于Transformer encoder,所以可以实现真正的双向编码。
      在这里插入图片描述

2)核心理解二:BERT的主要创新之Pretrain方法。

\quad BERT的创新性全部位于预训练方法中,即在预训练过程中引入了两个任务:Masked Language Model(MLM)+Next Sentence Prediction(NSP)。BERT也遵循fine-tuning范式,它的架构如下图。

  • Masked Language Model(MLM)
    • 在训练过程中作者随机mask 15%的token,而不是把像cbow一样把每个词都预测一遍。最终的损失函数只计算被mask掉那个token。
    • 因为在实际预测时是碰不到这个[MASK]标记的,为了缓解这个问题:在随机mask的时候10%的单词会被替代成其他单词,10%的单词不替换,剩下80%才被替换为[MASK]。
  • Next Sentence Prediction(NSP)
    • 因为涉及到Question Answering (QA) 和 Natural Language Inference (NLI)之类的任务,增加了Next Sentence Prediction预训练任务,目的是让模型理解两个句子之间的联系。与Masked Language Model任务相比,Next Sentence Prediction更简单些,训练的输入是句子A和B,B有一半的几率是A的下一句,输入这两个句子,BERT模型预测B是不是A的下一句。
    • 由于注意力计算开销是输入序列长度的平方,较长的序列会影响训练速度,为了加快实验中的预训练速度,所以90%的steps都用序列长度为128进行预训练,余下10%的steps预训练为512长度的输入。
  • fine-tune下游任务
    • MNLI:Multi-Genre Natural Language Inference
    • NER:Named Entity Recognition

    • 在这里插入图片描述

3)核心理解三:DAE与Masked Language Model联系

  • BERT模型基于DAE(Denoising AutoEncoder,去燥自编码器)的,这部分在BERT中被称为Masked Language Model (MLM)。
  • MLM并不是严格意义上的语言模型,它仅仅是训练语言模型的一种方式。BERT随机把一些单词通过MASk标签来代替,并接着去预测被MASk的这个单词,过程其实就是DAE的过程。

4)核心理解四:BERT的输入
\quad 在模型输入的时候,并非是具体的单词,而是一些句子对,句子对中的每一个单词还会拆分成WordPiece再输入。

  • WordPiece: 如embedding这个单词,通过WordPiece会拆分成em、##be、##dd、##ing四个token,带有##前缀的token表示它是单词的一部分,且不在单词的开头,所以在词表里面bed、##bed,它们的含义是完全不一样的。引入WordPiece作为输入可以有效缓解OOV问题,且进一步增加词表的丰富度和表征能力

  • Sentence Pairs:
    在这里插入图片描述

  • Embedding制作: 每个embedding由以下三部分组成。

    • Token Embeddings是词向量,第一个单词是CLS标志,可以用于之后的分类任务
    • Segment Embeddings用来区别两种句子,因为预训练不光做LM还要做以两个句子为输入的分类任务
    • Position Embeddings和之前文章中的Transformer不一样,不是三角函数而是学习出来的
      在这里插入图片描述
  • 预训练语料:BooksCorpus(800M单词)和英语维基百科(2500M单词),一共约16G的语料。

5)核心理解四:BERT的优缺点

  • 优点
    • 对比起之前的预训练模型,它捕捉到的是真正意义上的bidirectional context信息。
    • 还用的是Transformer,相对rnn更加高效、能捕捉更长距离的依赖。
  • 缺点
    • BERT只是建模了近似的概率密度,因为在预测某个MASK标记时,它与其他MASK标记之间的关系没被考虑,这样做预测的前提是BERT假设要预测的词(MASK)之间是相互独立的,即 Mask 之间相互不影响,所以预测在某一个Mask时,可以不考虑其他Mask(事实上这样做假设是由于没法考虑,因为其他Mask未知)。
      • 假设 m 1 , m 2 , m 3 m_1,m_2,m_3 m1,m2,m3是三个Mask, w 1 , . . . , w n w_1,...,w_{n} w1,...,wn是句子中已知的词,真正的语言模型预测 m 1 m_1 m1时应该为: P ( m 1 ) = P ( m 1 ∣ w 1 , . . . , w n , m 2 , m 3 ) P(m_1)=P(m_1|w_1,...,w_{n},m_2,m_3) P(m1)=P(m1w1,...,wn,m2,m3),但是BERT预测的 m 1 m_1 m1其实是 P ( m 1 ) = P ( m 1 ∣ w 1 , . . . , w n ) P(m_1)=P(m_1|w_1,...,w_{n}) P(m1)=P(m1w1,...,wn)
    • [MASK]标记在实际预测中不会出现,会出现预训练数据与微调阶段数据不一致问题
    • 生成任务表现不佳:预训练过程(自编码)和生成过程(自回归)的不一致,导致在生成任务上效果不佳;
    • 处理长度有限:无法适用在文档级别的NLP任务,只适合于句子和段落级别的任务。
    • 每个batch只有15%的token被预测,所以BERT收敛得比left-to-right模型要慢(它们会预测每个token)

6)BERT的变体

  • RoBERTa:采用动态mask,并去掉下句预测的NSP任务;

参考:NLP】Google BERT模型原理详解、详解:一文读懂BERT模型。侵删。


Transformer-XL

\quad Paper:《Transformer-XL:Attentive Language Models Beyonds a Fixed-Length Context》【ACL’2019】
\quad Code:https://github.com/kimiyoung/transformer-xl

\quad 在正式讨论Transformer-XL【XL是extra long的意思】之前,首先回顾经典的Transformer(下文称之为vanilla Transformer)的计算流程,它的整体流程如下图所示(以机器翻译任务为例)。
在这里插入图片描述
\quad 对于一段序列,vanilla Transformer的处理流程为(下图翻译的句子与上图翻译的句子不一样,下图是中翻英,输入为:我有一只猫): 首先, 将其中每个词转换为embedding表示向量(词embedding+位置embedding);其次,将整个序列组成的embedding 矩阵输入至encoder部分用来编码,encoder部分输出一个尺寸不变的编码矩阵C。最后,encoder部分输出的编码矩阵C输入至decoder中,充当交叉注意力部分的K和V。decoder部分这时会输入一个翻译开始符 < B e g i n > <Begin> <Begin>,这个符号会通过一个masked MSA后得到交叉注意力部分的Q,通过这个Q去attend K和V得到一个矩阵,这个矩阵在经过FFN+Linear+Softmax后会得到一个词 “I”,这个词 “I” 就是decoder部分预测到的输入的开始字符 < B e g i n > <Begin> <Begin>后的词。然后进行下一轮预测, < B e g i n > <Begin> <Begin>+ “I” 同时输入至masked MSA中得到Q,再去查询K和V得出下一个单词 “have”,以此类推 直至预测到终止符 < E n d > <End> <End>,整个预测任务才结束。

  • decoder的每轮预测中,K和V不变,一直是encoder部分输出的编码矩阵C;
  • 这里说到的masked MSA如下图所示,目的是跟encoder一样,仅仅为了将 < B e g i n > <Begin> <Begin>词汇映射到隐藏层而已,不一样的是,它的输入矩阵中除了已知的单词外(第一轮是 < B e g i n > <Begin> <Begin>,第二轮是 < B e g i n > <Begin> <Begin>+“I”),其他位置都是被masked,所以叫masked MSA。这样做的目的是:保证在预测下一个单词的时候,只能依赖于前面的信息(只能看见前面已预测到的字符),而不能依赖于后面的信息(而看不见后面还未被预测的字符)。预测过程中,原始输入序列始终是看得到的,即K和V
  • encoder部分是用来编码的,负责把自然语言序列映射成为隐藏层,即含有自然语言序列的数学表达;decoder部分才是用来做预测的,负责把隐藏层再映射为自然语言序列,从而使我们可以解决各种问题,如情感分析、机器翻译、摘要生成、语义关系抽取等;

在这里插入图片描述

\quad 了解完vanilla Transformer后,就可以理解Transformer-XL论文对vanilla Transformer的计算过程的如下介绍。这里的任务不再是机器翻译任务,一般指的是自监督预训练任务,即输入encoder一段文本,再以这段文本为GT在decoder中顺序地做预测(下图中把encoder部分忽略,默认为decoder部分)。
在这里插入图片描述
\quad Transformer模型在输入时采用的是固定长度序列输入,因为Transformer模型的时间复杂度和序列长度的平方成正比因此一般序列长度都限制在最大512,长度太大时模型训练时间则会消耗太大。因此,对于一个特别长的输入序列,在训练时(如上图a),vanilla Transformer首先会按照固定的长度n(比如上图中的4),将整个序列划分成若干Segment(每个segment包含4个字符),然后将Transformer模型在每个segment内部顺序预测来进行训练。 也就是说segment间训练时独立的。训练好了之后,拿来evaluation时,训练好的模型会沿着整个序列从前至后依次预测下一个token,但每次只会attend到前面的n个单词,这是因为训练和评估时的segment长度不会变,所以只会注意到当前词的前n个词。这样虽然缓解了上下文碎片化问题,但每次的Segment都会重新计算,计算代价很大。

\quad 因此vanilla Transformer存在以下问题:

  • vanilla Transformer处理序列的长度太短(每个segment包含的字符太少),不能捕捉超过segment长度上限的依赖关系;
  • 划分segment这样"粗暴"的划分方式,通常会将一句完整的话切分到若干个Segment里,而且Transformer模型并没有捕捉segment之间的关系,从而导致上下文碎片化(context fragmentation)问题。

\quad 因此Transformer虽然相对于RNN能够建模更长的依赖关系,但是它仍限制于segment的长度内,对于超出这个范围的长距离依赖仍然是无法捕获的。反过来看RNN这种结构,虽然它建模依赖关系的距离很短,但是回想下它的建模机制,它可以将上个节点输出的隐层向量作为整个节点的表示,然后输入到下一节点中来充当上个节点的记忆,从而完成了节点之间依赖关系的建模。如果将Transformer中的segment看作是RNN中的节点,然后再采取RNN中的这种循环机制,那是不是就可以建模segment间的关系,从而建模更长距离的依赖了?

\quad 启发与此,Transformer-XL提出了以下两大技术:

  • 片段级递归机制(segment-level recurrence mechanism):引入一个记忆(memory)模块(类似于cache或cell),循环用来建模segment之间的联系。
  • 相对位置编码:为vanilla Transformer引入循环机制后,绝对位置编码就不能用了,因此提出了相对位置编码。

\quad 下面来分别讲解这两大技术。

1)片段级递归机制(segment-level recurrence mechanism,SLRM)
\quad Transformer-XL与Transformer的输入一样,都是固定长度的segment。不同的是,Transformer-XL中有“片段递归机制”,它的作用是缓存下来上一个segment的隐藏状态,然后在计算当前段的时候使用。这样做启发于RNN,可以建立起segment间的关系,从而赋予Transformer-XL建模更长期依赖的能力。

\quad 定义长度为L的连续两个segment为 s τ = [ x τ , 1 , . . . , x τ , L ] s_\tau=[x_{\tau,1},...,x_{\tau,L}] sτ=[xτ,1,...,xτ,L] s τ + 1 = [ x τ + 1 , 1 , . . . , x τ + 1 , L ] s_{\tau+1}=[x_{{\tau+1},1},...,x_{{\tau+1},L}] sτ+1=[xτ+1,1,...,xτ+1,L] s τ s_\tau sτ的隐藏状态节点为 h τ n ∈ R L × d h_\tau^n \in \mathbb{R}^{L \times d} hτnRL×d,其中d为维度,n表示层数。使用“片段递归机制”计算 s τ + 1 , s_{\tau+1}, sτ+1,的隐藏节点 h τ + 1 n h_{\tau+1}^n hτ+1n可以通过以下数学公式,清晰的了解:

在这里插入图片描述
\quad 其中,SG表示stop-gradient,即不参与BP计算, ∘ \circ 表示拼接操作,W是带学习参数。可以看出,K和V使用了上个segment的隐藏状态,Q没有用,还是只用当前segment的值。因此,整体训练过程如下图所示。
在这里插入图片描述

\quad 图中绿线的含义:虽然k和v利用了上个segment的隐层状态,但是由于Transformer的建模机制,在预测每一个节点时,只会关注前n(segment长度)个节点。意思就是在预测每一个节点时,都会利用上个segment的隐层状态构造一个新的“segment”,并且当前预测节点是新“segment”内的最后一个节点。这样的方式实现了“片段递归”的第一个好处:使模型拥有了建模更长的序列依赖能力,同时也避免了context fragmentation问题。

\quad 此外,“片段递归”还有第二个好处:加快推理速度。Transfomer-XL的推理过程通过直接复用上一个片段的缓存而不是从头计算,这种简化带来的速度提升是成百上千倍的。比如在计算下面节点1时,无论是vanilla Transformer还是Transformer-XL,都是一样的,需要用到上个隐藏层的前n个词(即红色框三个点+1’点)。但对于vanilla Transformer而言,红色框内三个点是未知的,需要重新计算,但是对这三个点计算则需要计算出蓝色框内的点,同理又需要计算出紫色框内的点,这样的计算量是巨大的,所以影响推理速度。而对于Transfomer-XL而言,它直接复用上一个片段的缓存而不是从头计算,这样做使得红色框内三个点也是已知的,就可以直接进行计算,而省去了上面的一通操作,从而极大加快了推理速度。
在这里插入图片描述
\quad 从上可以看出,Transformer-XL是一个典型的用空间换时间的方案,因为这个方法需要对上个片段的隐层节点的状态进行缓存,无疑将增大模型的显存占用量。但是理论上,只要显存足够大,Transformer-XL也可以复用更多的之前片段的隐层状态。

\quad 此外,Transformer-XL受启发于RNN,并且在实现时和残差网络思想非常接近,相当于在两个片段之间添加了一条short-cut。而复用更多片段的结构则是一个DenseNet思想的模型。更直白点,用前面一个segment加到当前segment相当于残差网络,用前面多个segment加到当前segment相当于DenseNet网络。

2)相对位置编码
\quad Tansformer的位置编码是以段(segment)为单位的,每个segment内使用相同的位置编码矩阵 U 1 : L ∈ R L × d U_{1:L} \in \mathbb{R}^{L \times d} U1:LRL×d,其中L为序列长度,d为维度。这个位置编码会通过单位加的形式和词嵌入E(word Embedding)合并成一个矩阵。

\quad 在Tansformer中,self-attention可以表示为:
在这里插入图片描述
\quad 考虑到词嵌入, Q T K Q^TK QTK的完整表达式为(E为词嵌入,U为位置编码):
在这里插入图片描述
\quad 展开后,得到下式,其中 E x i E_{x_i} Exi表示token x i x_i xi的词向量, U i U_i Ui表示第i个绝对位置编码。
在这里插入图片描述
\quad Transformer的问题是无论对于第几个片段,它们的位置编码 U 1 : L U_{1:L} U1:L都是一样的,也就是说Transformer的位置编码是相对于每个片段的绝对位置编码(absulate position encoding),与当前内容在原始句子中的相对位置是没有关系的。

\quad 所以在引入片段递归机制,绝对位置编码不能再用了,否则 s τ s_{\tau} sτ s τ + 1 s_{\tau+1} sτ+1会出现位置信息混乱。因此Transformer-XL参考《self-attention with relative positional representation》,在self-attention中使用相对位置编码。主要是在self-attention计算的attention矩阵公式中,做了一些修改,将上面的公式 A i , j a b s A^{abs}_{i,j} Ai,jabs改成下面 A i , j r e l A^{rel}_{i,j} Ai,jrel这个样子:
在这里插入图片描述

\quad 这里相对于绝对位置编码的公式,改进了以下几点:

  • 在分项(b)和(d)中,使用相对位置编码 R i j Ri_j Rij取代绝对位置编码 U j U_j Uj
  • 在分项©和(d)中,使用可训练参数u和v取代 U i T W q T U_i^TW_q^T UiTWqT。因为 U i T W q T U_i^TW_q^T UiTWqT表示第i个位置的query 向量,这个query向量对于其他要进行Attention的位置来说都是一样的,因此可以直接使用统一的可训练参数进行替换。
  • 在所有分项中,使用 W k , E W_{k,E} Wk,E,和 W k , R W_{k,R} Wk,R分别作为内容(词向量)的key向量和位置的key向量,这意味着输入序列的内容和位置编码不再共享权值,而是分开来计算。

\quad 因此,上式中的每一项分别代表的含义如下:

  • (a) 描述了基于内容的Attention
  • (b) 描述了内容对于每个相对位置的bias
  • (c ) 描述了内容的全局bias
  • (d) 描述了位置的全局bias

\quad 将上式合并后,得到最终公式如下:
在这里插入图片描述

\quad 总结,基于上述的两大技术,Transformer-XL拥有以下优点:

  • 捕获长期依赖的能力;长距离依赖建模能力: Transformer-XL > Transformer > RNNs > CNNs
  • 解决了上下文碎片问题(context segmentation problem);
  • 提升模型的预测速度和准确率。比Vanilla Transformer快1800+倍。

参考:面试百科之Transformer-XL讲解、Transformer模型详解(图解最完整版)、保姆级教程:图解Transformer、详解Transformer-XL。侵删。


XLNet

\quad Paper:《XLNet: Generalized Autoregressive Pretraining for Language Understanding》【NeurIPS’2019】
\quad Code:https://github.com/zihangdai/xlnet

\quad 自回归语言模型(LM)是标准的语言模型,但它预测联合概率按照文本序列从左至右分解(顺序拆解),这使得它无法通过上下文信息进行双向特征表征。因此,基于自编码语言模型(DAE-LM)的思想出现了BERT等工作,但是他们也有着诸多缺点,比如只是对概率密度近似建模,不适合生成任务等。

\quad 因此,本篇提出的XLNet结合LM和 DAE-LM,将传统的自回归语言模型进行推广,将顺序拆解变为随机拆解(排列语言模型,PLM),以此在预训练过程中基于Transformer结构学习到上下文相关的双向特征表示。

\quad 需要注意的是,PLM没有改变原始文本序列的自然位置,只是定义了token预测的顺序。PLM只是针对语言模型建模不同排列下的因式分解排列,并不是词的位置信息的重新排列。它的基本思想见下图。并且规定:原始输入序列为 X X X,随机排列后的预测序列为 X ~ \widetilde{X} X ,某个词之前的单词为Context_before,某个词之后的单词为Context_after。那么XL-Net要做的就是,对于一个词 x i x_i xi,通过PLM,则它在预测序列 X ~ \widetilde{X} X 中的Context_before将会包含它在原始序列 X X X中Context_after的内容,也就是说对预测序列 X ~ \widetilde{X} X 进行顺序拆解,这个过程就学习到原始序列 X X X中的上下文,解决了传统LM单向表征的问题。
在这里插入图片描述
\quad 有了这样的思想后,难的是具体该如何实现。BERT得益于Transformer encoder卓越的表征能力,因此XL-Net自然也想基于Transformer的架构来设计。但在Transformer中,每一个token同时包含了"内容+位置"信息,而在预测当前随机排列序列 X ~ \widetilde{X} X 时,需要满足:模型预测当前单词时,只能使用当前单词的“位置”信息,以及Context_before中每个单词的"内容+位置"信息;模型在预测后续单词时,需要使用其前面所有词的"内容+位置"信息。

\quad 因此在具体实现时,作者为每一个单词构造了两个向量,分别是内容向量h和查询向量g。最初的内容向量h同时包含了自身的"内容+位置"信息,而查询向量g只包含自身的“位置”信息。后续的内容向量h同时包含了自身以及Context_before词汇的"内容+位置"信息,而查询向量g只包含自身的“位置”信息以及Context_before词汇的"内容+位置"信息。这样我们最后就可以直接依据查询向量g来预测每一个位置的内容。

\quad 为什么要构造这两类向量?

  • 构造查询向量g的原因是:在最后,想要生成当前位置的"内容",只能根据Context_before词汇的"内容+位置"信息,以及当前的"位置"信息,所以构造一个查询向量g用于最后每个位置内容的预测。
  • 构造内容向量h的原因是:在逐步更新查询向量g的过程中,是需要用到Context_before词汇的"内容+位置"信息的,因此为每个位置构造一个包含"内容+位置"信息的内容向量h,用于更新排列中Context_after词汇的查询向量g。说白了,构造内容向量h,就是为了辅助更新查询向量g,毕竟最终我们只需要根据查询向量g来做预测。
    在这里插入图片描述
    在这里插入图片描述

\quad 整体计算框架如上,包含了Two-Stream Self-Attention。Content stream就是原始的Transformer encoder,因为其中每一个token同时包含了"内容+位置"信息。Content stream和Query stream的attention mask的区别就是有无对角线,也就是是否能看到自身。Query 流就是为了预测当前词,而 Content 流主要为 Query 流提供其它词的内容向量。

\quad XLNet不仅仅做了这些,它还引入了其它的因素,也算是一个当时有效技术的集成体。XLNet就是Bert、GPT 2.0和Transformer XL的综合体变身,首先,它通过PLM预训练目标,吸收了Bert的双向语言模型;然后,GPT2.0的核心其实是更多更高质量的预训练数据,这个明显也被XLNet吸收进来了;再然后,Transformer XL的主要思想也被吸收进来,那就是片段循环机制和相对位置编码,它们的主要目标是解决Transformer对于长文档NLP应用不够友好的问题。

\quad 总结: XL-Net主要用于NLP预训练,核心思想是PLM,其中吸纳了Transformer-XL解决Transformer对于长文档NLP应用不够友好的思想。

参考:XLNet:运行机制及和Bert的异同比较、他们创造了横扫NLP的XLNet:专访CMU博士杨植麟。侵删。


Transformer-XL类似工作(Scalable Transformer)

1. 《Scaling Transformer to 1M tokens and beyond with RMT》

\quad paper: https://arxiv.org/pdf/2304.11062.pdf

\quad 这篇工作很多推送把它吹的神乎其神,包括但不限于以下文章:
\quad 真·量子速读:突破GPT-4一次只能理解50页文本限制,新研究扩展到百万token
\quad GitHub Daily:ChatGPT 的能力上限将被突破!
\quad shuibai:Scaling Transformer to 1M tokens and beyond with RMT 把上下文长度提升到Million级别

\quad 但其实,该篇论文与Transformer-XL非常像,都是引入了recurrence来为下个segment提供一个memory,并无太大的新意。这一观点在[论文尝鲜] 用并发记忆Transformer(RMT)来把transformer推到百万级tokens也被指出。

2. 《》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/478761.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IPsec中IKE与ISAKMP过程分析(主模式-消息5和消息6)

IPsec中IKE与ISAKMP过程分析&#xff08;主模式-消息1&#xff09;_搞搞搞高傲的博客-CSDN博客 IPsec中IKE与ISAKMP过程分析&#xff08;主模式-消息2&#xff09;_搞搞搞高傲的博客-CSDN博客 IPsec中IKE与ISAKMP过程分析&#xff08;主模式-消息3&#xff09;_搞搞搞高傲的博客…

XML解析

XML在以后更多的是用来作为配置文件的。 一. 配置文件 什么是配置文件 用来保存程序在运行时需要的一些参数。 当配置信息比较复杂的时候&#xff0c;我们就可以用XML。 二. XML概述 三. XML的创建、语法规则 根标签就是写在最外面的标签。 <?xml version"1.0&quo…

[已成功]在mac上安装FFmpeg,详细全过程

记录一次痛苦的在mac上安装ffmpeg的过程 前言在 mac 上下载安装ffmpeg的试探之路1、从官方网站下载FFmpeg软件包2、选择用于macOS 64位的静态构建。这将使你重定向到evermeet.cx网站。3、通过 Homebrew 安装 FFmpeg3.1、在使用 Homebrew 安装的过程中可能会出现的问题3.1.1 墙的…

【MySQL】初识MySQL

数据库的重要性相信不需要我在这里着重强调了,这个专栏重点介绍的就是MySQL数据库,我所使用的版本为5.6,大致思路是先介绍MySQL的操作,然后再深入了解其底层原理,那就开始吧 目录 1.数据库相关概念2.MySQL数据模型3.SQL语法3.1 通用语法3.2 SQL语法分类3.3 DDL语句3.3.1数据库…

python读取与写入tif图片的完整信息

一、导入gdal包 在anconda环境下&#xff1a; conda install gdal 在其他环境下&#xff0c;去这个网站下载gdal包&#xff0c;直接使用pip install gdal是不行的 注意&#xff1a; 对于liunx用户&#xff0c;建议使用conda安装&#xff0c;对于win用户两者都可以。 使用方…

ChatGPT提示词工程(一):Guidelines准则

目录 一、说明二、安装环境三、Guidelines准则一&#xff1a;写出明确而具体的说明方法1&#xff1a;使用分隔符清楚地表示输入的不同部分方法2&#xff1a;用结构化输出&#xff1a;如直接要求它以HTML或者JSON格式输出方法3&#xff1a;请模型检查是否满足条件方法4&#xff…

深入理解计算机系统1--理解编译器编译的过程

前言 大家在学习C语言的时候&#xff0c;相信对编译器这个词并不会感到陌生。我们也会知道编译器编译的过程是&#xff1a;预处理-》编译-》汇编-》链接。这篇文章主要介绍这四个过程中&#xff0c;编译器究竟做了那些工作&#xff0c;它是如何让一份高级程序转换成机器语言的…

[EDA]AMP®-Parkinson‘s Disease Progression Prediction

​ 翻译自&#xff1a;AMP - EDA Models 1.数据集观察 加载四个excel文件 import pandas as pd train_clinical_data pd.read_csv(input/train_clinical_data.csv) train_peptides pd.read_csv(input/train_peptides.csv) train_protiens pd.read_csv(input/train_prote…

蓝桥杯算法竞赛系列第四章——二分算法

欢迎回到&#xff1a;遇见蓝桥遇见你&#xff0c;不负代码不负卿&#xff01; 目录 引入&#xff1a;二分查找 题目描述 题解 代码执行 复杂度分析 例题一&#xff1a;搜索插入位置 题目描述 题解 代码执行 复杂度分析 例题二&#xff1a;寻找峰值 题目描述 题解 …

【五一创作】python 基础系列篇:八、熟练掌握推导式

python 基础系列篇&#xff1a;八、熟练掌握推导式 推导式特殊的元组推导式 推导式机制玩转推导式小结 推导式 在python提供的各种语法糖中&#xff0c;老顾最青睐的就是这个推导式&#xff0c;他大大减少了代码的书写量。 比如一个正常的&#xff0c;生成长度为5的列表&…

红黑树的概念与实现

目录 ​一、红黑树的概念 1.什么是红黑树 2.红黑树满足的性质 3.红黑树存在的意义 二、红黑树的实现 1.类的构建 2.插入函数 &#xff08;1&#xff09;插入一个节点 &#xff08;2&#xff09;调整节点 &#xff08;3&#xff09;旋转 三、红黑树的检验 一、红黑树…

okio篇2-RealBufferedSource

上一篇讲过&#xff0c;okio只有两个概念&#xff0c;source和sink。source对应InputStream&#xff0c;即负责将数据读出&#xff0c;是一个输出方&#xff08;所以只有source.read方法&#xff09;。sink对应outputStream&#xff0c;负责获取数据写入&#xff0c;是一个写入…

RT-Thread Nano在keil Simulator中的仿真

目的&#xff1a;使用STM32CubeMX生成包含RT-Thread Nano内核和FinSH控制台的keil工程&#xff0c;在没有硬件开发板的情况下&#xff0c;通过keil Simulator来运行系统&#xff0c;并通过SHELL来与系统进行交互。 一、使用STM32CubeMX生成RT-Thread Nano工程 官方文档已经说…

C++标准库 -- 动态内存 (Primer C++ 第五版 · 阅读笔记)

C标准库 --动态内存 (Primer C 第五版 阅读笔记&#xff09; 第12章 动态内存------(持续更新)12.1、动态内存与智能指针12.1.1、shared_ptr类12.1.2、直接管理内存12.1.3、shared_ptr和new结合使用12.1.4、智能指针和异常12.1.5、unique_ptr12.1.6、weak_ptr 12.2、动态数组1…

网络通信之网络层与数据链路层

文章目录 讲在前面网络层网络层概述IP协议格式网段划分公有IP、私有IP、特殊IP理解路由 数据链路层MAC地址以及MAC帧&#xff08;以太网帧&#xff09;MTU协议MTU对IP和TCP协议的影响ARP协议及其作用 涉及到的相关协议DNS协议&#xff08;应用层&#xff09;NAT与NAPT协议 总结…

BEV (0)---DETR

1 DETR 1.1 DETR处理流程 1.1.1 将图像输入给Backbone获得图像特征与位置编码 ①. 对给定的输入图像通过resnet进行特征提取&#xff0c;最终得到特征图C5∈RBx2048xhxw,其中h、w为输入图像尺寸得1/32。随后再用一层11卷积压缩一下通道&#xff0c;得到特征图P5∈RBx256xhxw。…

jvm调优策略

jvm调优主要是内存管理方面的调优&#xff0c;包括各个代的大小&#xff0c;GC策略等。 代大小调优 JVM 中最大堆大小有三方面限制&#xff1a;相关操作系统的数据模型&#xff08;32-bt还是64-bit&#xff09;限制&#xff1b;系统的可用虚拟内存限制&#xff1b;系统的可用物…

数据结构学习记录——什么是堆(优先队列、堆的概念、最大堆最小堆、优先队列的完全二叉树表示、堆的特性、堆的抽象数据类型描述)

目录 优先队列 若采用数组或链表实现优先队列 数组 链表 有序数组 有序链表 总结 若采用二叉搜索树来实现优先队列 最大堆 堆的概念 优先队列的完全二叉树表示 堆的两个特性 结构性 有序性 【例】最大堆和最小堆 【例】不是堆 堆的抽象数据类型描述 优先队列…

安排超市 -- BFS分割搜索

4.安排超市 给定一个n*n的地图。地图是上下左右四联通的&#xff0c;不能斜向行走&#xff1a; *代表障碍&#xff0c;不可通行。 .代表路&#xff0c;可以通行。 #代表房子。房子也是可以通行的。 小红现在需要在一些地方安排一些超市&#xff08;不能安排在障碍物上&#xf…

山东专升本计算机第七章-计算机网络基础

计算机网络基础 计算机网络系统 考点 6 计算机网络硬件 主体设备 • 称为主机 • 一般可分为中心站&#xff08;又称服务器&#xff09;和工作站&#xff08;客户机&#xff09; 连接设备 • 网卡 • 工作在数据链路层 • 网卡又称网络适配器&#xff0c;是连接主机和网…