Press "Enter" to skip to content

4篇paper了解Transformer的局部信息建模

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

根据时间线整理了几篇transformer相关的文章,如何更好的建模超长距离依赖以及其他优化问题。目前来看对于超长文本,我们大概有两个选择 (i) 用一些启发式的手段,比如丢弃掉长的部分,或者分段处理。(ii)改进transformer的架构,利用局部信息替代全局信息。在研究过程中,众多领域发现了局部信息的重要性,甚至每个注意力头都被设计为关注局部信息的transformer在很多任务依旧表现良好。

 

 

    1. HIBERT: Document Level Pre-training of Hierarchical BidirectionalTransformers for Document Summarization

 

    1. On the Importance of Local Information in Transformer Based Models

 

    1. Longformer: The Long-Document Transformer

 

    1. Big Bird: Transformers for Longer Sequences

 

 

HIBERT: Document Level Pre-training of Hierarchical BidirectionalTransformers for Document Summarization

 

文章的motivation很简单,对于文章摘要抽取任务,传统工作是使用层次化的encoder(RNN,CNN)来提取文章的表示,本文尝试了使用transformer来代替传统encoder并提出了一种用于摘要提取的预训练encoder的方式。

 

Document Representation

 

所谓层次化的transformer,就是我们先对每个sentence抽取表示,然后将每个sentence的表示输入上一层transformer从而得到整个文章的表示。具体过程如下,我们先用一个transformer对每一个单词的embedding进行处理,我们选择每个句子EOS token最终的表示作为这个句子的表示,接下来所有句子会被扔进文档级别的transformer中。这里需要注意的是,在处理每个单词的时候,我们会加上单词的position encoding,同样在文档级别的transformer中我们会对每个sentence加上position encoding。

Pre-Training

 

我们已经知道了encoder的设计,那幺接下来的任务就是如何训练他,最好是无监督的训练。其实传统的Summarization任务中也是没有句子级别的label的,往往我们需要先对每个句子的label进行预测,然后用预测的label作为目标进行摘要抽取,这种自己预测的标签本来就是不准确的,要用它来训练这幺复杂的层次化encoder是非常难以收敛的,因此文章更倾向于无监督的方式对encoder进行预训练。

 

对摘要抽取任务而言,我们要学习的是整个文章的表达,它的基本单元是句子,因此预训练应该以句子为单位,即将句子mask掉然后利用左,右侧的信息来预测mask掉的整个句子。Mask的方式与BERT一致

 

随机选择文档中15% 的句子进行mask,然后根据文档中其他的句子表示向量来预测mask的部分

80% 使用[MASK]进行填充
10% 使用从文档中随机选择的句子进行填充
10% 不改变选择的句子

从上面的模型图中可以看出,在预测mask的句子时同样是进行逐词预测,直到遇到[EOS]为止。特殊之处在于这里预测的每一步都会给当前预测词的embedding上该句子的embedding。预训练的loss就是这些单词预测结果的负对数似然。

 

摘要生成

 

这里主要就是如何定义句子的重要性,摘要生成就是选择最重要的那些句子构成文章的摘要(给每个句子打上True或者False的标签)。因为我们已经将最重要的分层encoder预训练好了,所以直接Linear projection就能得到结果。这时我们需要sentence真实的标签来对全连接层进行训练,文中是对每一个文章,选择一个句子的子集,该子集使得ROUGE指标最大。子集中的句子都打上true,其余句子为false。

 

HiBERT的总体分为sangebufen

 

 

    1. 在GIGA-CM数据集上预训练。(out-of-domain data)

 

    1. 在CNNDM(NYT50)数据集上预训练。(in domain data)

 

    1. 在CNNDM(或者NYT50)fine-tune(即使用摘要生成的目标进行训练)

 

 

在定量的分析上,HiBERT击败了现有的方法。其中下标S表示模型使用上述提到的预训练数据集,in-domain表示只使用CNNDM,M表示使用更大的数据集进行训练。

On the Importance of Local Information in Transformer Based Models

 

目前已经有很多文章研究多头注意力机制取得成功的本质原因,他们有一些共性的发现:少部分关注于局部信息或者语义信息的注意力比其他head更加重要。本文是一篇实验性的文章,旨在在这个观察下更进一步,文章得到的结论也很振奋:即使我们只保留局部注意力,transformer的性能依旧不会收到影响。

 

Analysis of Locality in Transformerbased models

 

这一节主要论证了局部信息在当前基于transformer的模型中起到的重要性。文章针对两组任务分别选择了两个基准模型

针对机器翻译任务,选择了Transformer (标准的transformer)作为基准模型,用在WMT’14的En-Ru和En-De两个翻译任务上。
针对自然语言理解任务,选择 作为基准模型,用在QQP,SST-2,MRPC,QNLI四个数据集上。

Sensitivity analysis

 

作者首先使用梯度评估重要程度,使用如下三个公式度量局部,语义和无关信息在传统模型中所占比重。 指的是输出 对输入 的梯度(梯度越大对结果的影响也越大,即对该位置比较敏感)。 指的是在第i个token附近距离小于2的token集合。 表示与第i个token有语义关系的token集合, 表示其他。以对局部信息重要性的度量为例,其实就是对每个token,求出他临近位置4个token的重要性的均值,然后在整个sequence上求均值。

我们随机在数据集中抽取100个句子然后计算上面的指标,可以看到,基本上在所有数据集上局部信息的重要性都是dominant的。这也就证实了每一层的输出对他的局部信息都要更为敏感。

除了梯度外,作者也通过注意力权重来评估了局部信息的重要性。评估方式如下l:给定一整段sentence 和其中一组token集合 表示计算第i个token的表示时对位置j的token的注意力权重,那幺我们说一个token 对 的注意力偏向比为

如果 取上述的 ,那幺我们就评估的是model对局部信息的注意力偏向程度,结果如下图所示,我们知道一个完全随机初始化的transformer他的偏向比应该为1。下图的横坐标表示这个比例,纵坐标显示了注意力偏向比大于该阈值的head占总体head的数目,可以看到非常多的head对局部信息有偏向。

那幺我们不妨大胆一点,如果我们强制让所有的注意力头都学习局部信息会怎样呢?

 

Transformers With Only Local Attention

 

文章通过两个设计来enforce这个目标

 

Applying Masks to Attention Heads

 

最简单的方式就是给原本计算好的attention map乘上一个mask,文中提出了好几种mask的方式,无非就是限制一定距离内的token的注意力权重不变,其他的置为0。虽然这样的手段引入了归纳偏置,减小了感受野,但是因为encoder也是多层的,所有最终还是可以建模长距离依赖(参考CNN)。

Parameter Sharing Across Heads

 

第二种方式称为参数共享,也就是说我们能否在多个注意力头中共享 ,但是给他们选择不同的mask,从而得到不同的激活结果。这里也有很多的问题值得讨论

 

 

    1. 如何给每个注意力头选择合适的mask?

 

    1. 哪些注意力头需要共享参数?

 

 

显然,参数共享可以使得我们的参数量大大下降,但是这对我们的性能有什幺影响呢,实验部分会一一展开。

 

Results and Discussions

 

Intermixing Global and Local AttentionHeads

 

在第一个实验中,作者尝试了将传统attention和完全局部的attention进行组合来观察,一共有六种组合方式。如下图(a-f)所示。(a)就是传统transformer没变,(b)称之为 2locHeads_All6 (6个encoder换2个位局部头,这里应该是笔误,一共8个head),(d)称之为 8LocaHeads_First3(前三层全部换为局部头,同样笔误

效果感人,即使全部用局部头,性能也并没有下降多少,甚至在EN-DE这里还有所上升。

Parameter Sharing Within Layer

 

共享参数作者一共实现了四种方式,对应图四 (g-j),图中淡蓝色head共享其左侧深蓝色head的query,key参数矩阵。称(g)为4LocHeads4TiedLocAll6 (其余类推)。结果既然很惊艳,我们可以发现掉点其实很少,甚至在有些setting下还有所提升。

Parameter Sharing Across Layers

 

这一步做得更绝,整层attention都共享参数,或者说一半的attention共享参数,一般为原始。Again,效果基本不降甚至有所提升。

总结一下,这篇文章最突出的地方在于验证了 局部注意力在翻译以自然语言理解任务上的有效性,除此之外,还验证了参数共享的可行性。

 

Longformer: The Long-Document Transformer

 

本文最大的亮点就在于:attention机制对内存与算力的需求与序列长度呈线性关系,而不是原有的二次方。而且作者给出了不同的实现方式,在速度方面有些许的差异。

Background

 

我们知道,对attention机制进行改进的文章已经很多了,对长序列而言最暴力的就是我们只用它开头的 个token强行处理,但是这样显然会丢失非常多的信息。目前主要有如下两种方式进行改进 (i) ltr: left-to-right,我们从左到右依次处理小块的token,这种方式使得它在需要双向信息的任务上表现不佳。本文属于第二种类型 (ii) 不去计算整个注意力矩阵,使其稀疏化。但是从下图可以看到,作者argue他们的实验都不完善,大多数只在LM的任务上进行验证,作者做了LM, 其他常见NLP的tasks,还将模型进行预训练然后微调再进行做对比。

LongFormer

 

文中给出了三种线性复杂度的attention实现方案

 

    1. (b) 滑动窗口为

    1. 即每一个token左右各取

    1. 个token计算局部注意力。假设窗口大小是w,序列长度是n,那幺这个pattern的计算复杂度就是

    1. 。有点像卷积,多层堆叠同样能得到较大的感受野。

 

    1. (c) 窗口的缝隙大小是 (每两个window之间距离为 ),假设window size是

    1. ,transformer的层数是 ,那幺窗口能覆盖到的接受范围就是

    1. 。在mutilhead attention中,作者设置允许一些没有空洞的head专注于局部上下文,而其他具有空洞的head专注于较长的上下文,最终发现这样的做法能提升整体的表现

 

    1. (d) 对于一些任务,比如说QA,需要通过question去找document里的答案,因此局部注意力在这种情况下就不适用。因此,作者就在一些预先选择的位置上添加了全局注意力。在这些位置上,会对整个序列做attention。这些位置根据具体任务而定,比如在分类任务上,这个global attention就落在[CLS]标签上,在QA任务上,就在整个问句上计算global attention。global attention是视具体任务而定的,显然是引入了 inductive bias,换个任务可能之前的做法就不适用了,但作者认为,这仍然比现有的trunk或者shorten的做法要简单很多。

 

 

Experiments

 

对于LM任务,作者选择了text8和enwik8两个数据集,在小的模型上,long former比其他模型都要好。这也证明了这个模型的有效性。在大的模型上,比18层的transformerxl要好,跟第二个和第三个齐平,不如第四、五两个。但作者说明,这两个模型并不适用于pretrain-finetune的模式。

首先来看一下这几种不同的attention paradigm效果如何,如下图所示递增窗口大小的表现最好,递减窗口大小表现最差,使用固定窗口的表现介于两者之间。表格的下半部分展示了使不使用空洞窗口的区别,可以看出对两个head增加一些空洞比完全不使用空洞窗口表现要好一些。

作者从RoBERTa的checkpoints开始进行训练,具体实施就不贴了,最终再NLP的多种task上都击败了前者。

Big Bird: Transformers for Longer Sequences

 

当graph遇到attention会发生什幺?这篇文章将注意力机制使用图来建模,然后使用图上的稀疏化技术将注意力机制的时空复杂度与输入序列长度的依赖降到线性,与以往的工作不同,本文还给出了理论上的支撑。

 

BIG BIRD架构

 

往简单来说,big bird的注意力机制主要包含三部分

 

    1. 个可以做全局注意力的token。(c)

 

    1. 所有的token可以访问其两边长度为

    1. 的窗口内的所有token。(b)

 

    1. 所有token可以访问任意 个随机位置的token。(a)

 

 

我们都可以从直观上想到这样的方法,那有没有一些观察告诉我们为什幺选择这些方式呢?这就不得不说big bird有趣的建模了。

 

给定输入序列 ,我们可以用图来描述一个注意力机制。这个图的点即序列中的每个token,因此点集 ,图中的边其实就是attention weight,用 表示token 可以访问的所有token的集合,那幺 经过attention之后的输出我们可以定义为

其中 是注意力头的数目, 即我们注意力机制的参数矩阵。 是softmax或者hardmax。注意到这里计算key的集合 并不是全体token,而是 可以访问的邻居节点。对一个图,我们可以用邻接矩阵 来表示每个点的连接状况,当 是全一矩阵的时候其实这就是传统的attention。使用图的方式对注意力机制进行建模允许我们图上稀疏化的方法来优化这一过程,接下来我们挨个本文为什幺需要上述三种局部信息的获取方式

 

 

    1. 随机图可以在很多不同情况下近似完全图,而且它邻接矩阵的二阶特征值比一阶特征值小得多,这个性质表明信息可以在任何一对节点之间快速流动。根据这一理论,作者也提出了一种完全随机的稀疏关注,即一个query可以随机的访问 个任意位置的key。

 

    1. 现在NLP社区越来越多的人关注局部性这一性质,基于固定窗口的attention上文也讲过,不过作者给出了局部性,相邻节点在语言学,图中的重要性。

 

    1. 全局注意力的重要性是作者从理论分析中得到的,这里作者使用了两种方法指定一部分token做全局注意力 (i) internal transformer construction (ITC): 在所有token中随机的选一个子集

    1. ,允许他们访问其他所有token。 (ii) extended transformer construction (ETC): 像BERT一样手工添加 个类似于CLS这样的token用于获取全局信息。

 

 

理论部分比较长,这里就不列出来了。

 

Experiments

 

本文同样创建了base,large两个版本的模型,从RoBERTa的checkpoint开始进行预训练.

 

在QA数据集上,big bird_base超过相应的base model:Roberta以及longformer,只是ITC和ETC两种产生全局token的方式各有强弱。

虽然作者将BIGBIRD-ETC与当前以下数据集的top 3进行了比较

计算效率的上升意味着处理长文本的能力得以增强,这类应用最典型的就要属Summarization了。可以看到,在各个数据集上Big Bird都取得了巨大的性能提升。

总结一下,越来越多的文章聚焦在局部/全局信息的tradeoff上,虽然大家得出的结论不全相同,但是如何更好地利用attention map的稀疏性来提高计算和存储效率依然是一个热点问题。随着transformer应用在image上,这个问题变得更加多样化。

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注