0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

解析Transformer中的位置编码 -- ICLR 2021

深度学习自然语言处理 来源:复旦DISC 陈伟 作者:复旦DISC 陈伟 2021-04-01 16:07 次阅读

引言

Transformer是近年来非常流行的处理序列到序列问题的架构,其self-attention机制允许了长距离的词直接联系,可以使模型更容易学习序列的长距离依赖。由于其优良的可并行性以及可观的表现提升,让它在NLP领域中大受欢迎,BERT和GPT系列均基于Transformer实现。鉴于Transformer在NLP问题上的优异表现,也有越来越多人将其引入到了CV领域。

和RNN、CNN等模型不同,对于Transformer来说,位置编码的加入是必要的,因为单纯的self-attention机制无法捕捉输入的顺序,即无法区分不同位置的词。为此我们大体有两个方式:(1)将位置信息融入到输入中,这构成了绝对位置编码的一般做法;(2)将位置信息融入self-attention结构中,这构成了相对位置编码的一般做法。

本次Fudan DISC实验室将分享ICLR 2021中关于Transformer和其位置编码的3篇论文,介绍研究人员从不同角度和场景下对Transformer和其位置编码的研究。

文章概览

重新思考语言预训练中的位置编码

Rethinking the Positional Encoding in Language Pre-training

论文地址: https://openreview.net/forum?id=09-528y2Fgf

本文针对BERT提出了一种新的位置编码方法—Transformer with Untied Positional Encoding(TUPE),它通过两种方法改进了现有的方法,即解开单词和位置之间的相关性,以及解开序列位置上的[CLS]。大量实验表明,TUPE具有较好的性能。

DEBERTA:带有解耦注意力的解码增强BERT

DeBERTa: Decoding-enhanced BERT with Disentangled Attention

论文地址: https://openreview.net/forum?id=XPZIaotutsD

本文提出了两种改进BERT预训练的方法:第一种方法是分散注意机制,该机制使用两个向量分别对每个单词的内容和位置进行编码来表示每个单词,并使用分散矩阵计算单词之间在内容和相对位置上的注意力权重;第二个方法是一个增强的掩码解码器,它取代了输出的Softmax层来预测用于MLM预训练的掩码令牌。使用这两种技术,新的预训练语言模型DeBERTa在许多下游NLP任务上表现都优于RoBERTa和BERT。

把图片当作16乘16的词:用于大规模图像识别的Transformer

An Image Is Worth 16X16 Words: Transformers for Image Recognition at Scale

论文地址: https://openreview.net/forum?id=YicbFdNTTy

本文提出在视觉任务中的Transformer—Vision Transformer(ViT)。图像对卷积神经网络的依赖不是必要的,并且将纯transformer直接应用于图像patch序列可以很好地执行图像分类任务。本文的实验表明,当对大量数据进行预训练并将其传输到中等大小或较小的图像识别基准时,与最先进的卷积网络相比,ViT可获得出色的结果,同时训练所需的计算资源也大大减少。

论文细节

1

156cf67e-92a2-11eb-8b86-12bb97331649.png

动机

因为 Transformer 在结构上不能识别来自不同位置的 token,一般需要用 positional embedding 来辅助。最简单的做法就是在 input token embedding 上直接加 positional embedding (NSP loss现在基本不用,所以这里不再考虑 segment embedding)。然后在 Transformer 的 self-attention 里,会把 input 用三个矩阵映射到不同的空间,Q,K,V,接着把 Q 和 K 做点积,过 softmax ,得到 attention 的 weight 。因此,在第一层 Transformer 的 QK 点积 ,我们可以得到:

15aa69b4-92a2-11eb-8b86-12bb97331649.png

其中 是self attention matrix在进行softmax之前第i行第j列的元素,代表第i个token对第j个token的注意力大小, 是 token embedding,是position embedding,、是映射Q和K所用的矩阵。作者认为代表token和position的交叉的中间两项没有给self attention做出贡献,为了验证该想法,作者对展开后的四项进行了可视化,如Figure 2所示,可以看到中间两项看起来很均匀,说明position 和 token 之间确实没有太强的关联。

15caaaee-92a2-11eb-8b86-12bb97331649.png

同时,作者认为 token 和 position 用了相同的矩阵做 QKV 的变换。但 position 和 token 所包含的信息不一样,共享矩阵也不合理。

方法

为了解决上述问题,作者将self attention做了如下改动:

160b1674-92a2-11eb-8b86-12bb97331649.png

其中,、是把 positional embedding 映射到 Q 和 K 所用的矩阵,分母中的根号 2d 是为了保持量纲。简单来说,作者去掉了 position 和 token 之间的交叉,同时用了不同的变换矩阵。需要注意的是,在多层的 Transformer 模型里,比如BERT,上面式子的第二项在不同层之间是共享的。因此,这里仅需要算一次,几乎没有引入额外的计算代价。

作者还提出,在上述的公式中,可以再添加一个与相对位置相关的偏置项,即

16279e16-92a2-11eb-8b86-12bb97331649.png

作者在文中使用了T5文章中提出的相对位置编码。

另外,作者还特殊处理了 [CLS] token 的 position,使其不会因 positional locality 而忽略了整个句子的信息。具体来说,在的第二项,即与位置相关的注意力计算中,作者将[CLS] 对其他token的注意力以及其他token对[CLS]的注意力额外引入了两个参数,这两个参数与位置信息无关,是一个可学习的标量,这样就完成了和[CLS]相关注意力的计算。

164dda86-92a2-11eb-8b86-12bb97331649.png

166fc97a-92a2-11eb-8b86-12bb97331649.png

模型整体的架构如下

16a25110-92a2-11eb-8b86-12bb97331649.png

实验

作者首先使用TUPE模型以类似BERT的方式进行预训练,然后在GLUE数据集下进行微调。其中-A代表仅使用了绝对位置编码,-R代表在绝对位置编码的基础上增加了相对位置编码(即偏置项)。mid表示训练了300k步的中间结果,tie-cls代表移除对[CLS]的特殊处理,d代表为词和位置使用不同的投影矩阵。

16f9e506-92a2-11eb-8b86-12bb97331649.png

结果表明,添加相对位置信息对下游任务效果有一定提升;TUPE模型的效果持续优于BERT模型的效果;TUPE仅训练300k-step(30%)的结果已经可以和BERT等模型的效果相比较;对[CLS] token的特殊处理和使用不同的投影矩阵均可以增加模型性能。

分析

作者最后对TUPE和BERT的预训练过程进行了分析,结果表明,TUPE不仅最后比 baseline 要好,并且可以在 30% (300k-step) 的时候,就达到 baseline 在 1000k-step 时的效果。

17430006-92a2-11eb-8b86-12bb97331649.png

最后作者还对TUPE学习到的多个head得到的注意力矩阵进行了可视化,作者发现,不同的head捕捉到了不同的注意力模式,作者还对下图中的几种进行了命名,如 attending globally; attending locally; attending broadly; attending to the previous positions; attending to the next positions 等。

17735062-92a2-11eb-8b86-12bb97331649.png

2

179e6b58-92a2-11eb-8b86-12bb97331649.png

动机

和上一篇文章类似,文章也是对self attention的结构进行了重构,与上篇文章不同的是,文章直接从相对位置出发,认为在一个序列中的第i个token可以用两个向量对其进行表示,分别是 和 ,分别代表了该token的内容信息和相对第j个token的相对位置信息。那么第i个token和第j个token的注意力计算可以拆解为如下公式:

17c3e3ba-92a2-11eb-8b86-12bb97331649.png

那么注意力可以解耦成四个部分,分别是内容和内容、内容和位置、位置和内容、位置与位置。作者认为第四项相对位置和相对位置的交叉无法给注意力提供有效信息,可以舍弃,因此作者提出了解耦注意力机制。

同时,作者认为现有的预训练、微调模式存在一些GAP,首先它们的任务不同,预训练阶段是直接预测被MASK掉的token,微调阶段是拿句子表示再添加额外的网络层去完成下游任务,为了弥补这种GAP,作者提出了解码增强的BERT。

方法

为了解决上述问题,作者将self attention做了如下改动:

18007730-92a2-11eb-8b86-12bb97331649.png

在解耦注意力中,作者抛弃了位置与位置部分,并且认为内容和位置的投影矩阵是异质的,因此引入了新参数 和 ,其中 P是跨所有层共享的相对位置嵌入向量。其中 函数的定义如下:

183197ca-92a2-11eb-8b86-12bb97331649.png

该函数定义了token之间的相对距离,计算token之间的注意力机制的时候,将通过该公式计算token和token之间的相对距离矩阵,则相对位置向量则可以通过事先定义的embedding层取出。作者还提出了一种计算解耦注意力的高效算法,可以有效地减小空间复杂度。

上述的注意力计算中中仅包含了相对位置信息,作者认为只有相对位置也不好,最好能把绝对位置信息也加进去,作者给了两张添加的方式。第一种方式是在输入的时候,把绝对位置信息添加到输入的token embedding中;第二种方式是在最后一两层再添加到前面那些层输出的隐向量中。

考虑到BERT等预训练模型在预训练和微调时不一样,预训练的时候,bert的输出经过softmax后,直接给出概率。微调的时候,bert的输出会经过一些与任务相关的decoder。作者将掩码语言模型(MLM)视为任何微调任务,并添加一个任务特定解码器,该解码器被实现为两层 Transformer 解码器和 Softmax 输出层,用于预训练。所以作者这里将预训练和微调的模型尽可能相近,模型共有13层,前11层称为encoder,后2层参数共享,称为decoder,然后微调的时候,前12层保留,然后和bert一样进行各类任务的微调。

实验

作者按照 BERT 的设置预训练DeBERTa,和BERT不同的是,作者使用了 BPE 词汇表。对于训练数据,作者使用 了 Wikipedia(English Wikipedia dump;12GB)、BookCorpus(6GB)、OPENWEBTEXT(public Reddit content;38GB)和 STORIES(CommonCrawl 的子集;31GB)。重复数据消除后的总数据大小约为 78GB。我们使用 6 台 DGX-2 机器和 96 个 V100 GPU 来训练模型。单个模型训练,batch size 设置为 2K,1M 的 steps,大约需要 20 天的时间。

作者将预训练好的模型在GLUE数据集上进行微调,表 1 显示,与 BERT 和 RoBERTa 相比,DeBERTa 在所有任务中始终表现得更好。同时,DeBERTa 在八项任务中有六项优于 XLNet。特别是,MRPC(1.7% 超过 XLNet,1.6% 超过 RoBERTa)、RTE(2.2% 超过 XLNet,1.5% 超过 RoBERTa)和 CoLA(0.5% 超过 XLNet,1.5% 超过 RoBERTa)的改进非常显著。

185938fc-92a2-11eb-8b86-12bb97331649.png

作者还使用了其他数据集来评估 DeBERTa,分别是(1)问答:SQuAD v1.1、SQuAD v2.0、RACE、ReCoRD 和 SWAG;(2)自然语言推理:MNLI;(3)NER:CoNLL-2003。为了进行比较,他们还将 Megatron 分为三种不同的模型尺寸:Megatron 336M、Megatron 1.3B 和 Megatron 3.9B,它们使用与 RoBERTa 相同的数据集进行训练。与之前的 SOTA 模型(包括 BERT、RoBERTa、XLNet 和 Megatron336M)相比,DeBERTa 在这 7 项任务中的表现始终更优。尽管 Megatron1.3B 是 DeBERTa 的 3 倍大,DeBERTa 在四个基准中的三个方面仍然可以超过 Megatron1.3B。结果表明,在不同的下游任务中,DeBERTa 算法都具有较好的性能。

191544ac-92a2-11eb-8b86-12bb97331649.png

作者还对DeBERTa进行了消融实验,-EMD 是没有增强解码器的DeBERTa模型。C2P 是没有内容-位置项的DeBERTa模型。P2C 是没有位置-内容项的DeBERTa模型。作者发现删除 DeBERTa 中的任何一个组件都会导致所有基准测试的性能下降。

19ab9380-92a2-11eb-8b86-12bb97331649.png

最后作者还研究了注意力机制模式和预训练模型的有效性。结果表明,在预训练的训练过程中,DeBERTa 的表现一直优于 RoBERTa-ReImp,并且收敛速度更快。

3

19e52668-92a2-11eb-8b86-12bb97331649.png

动机

本篇文章跟位置编码的关系不是特别大,但文章将Transformer在图像识别领域中完全代替了卷积神经网络。近年来,Transformer已经成了NLP领域的标准配置,但是CV领域还是CNN(如ResNet, DenseNet等)占据了绝大多数的SOTA结果。最近CV界也有很多文章将transformer迁移到CV领域,虽然已经有很多工作用self-attention完全替代CNN,且在理论上效率比较高,但是它们用了特殊的attention机制,无法从硬件层面加速,所以目前CV领域的SOTA结果还是被CNN架构所占据。文章不同于以往工作的地方,就是尽可能地将NLP领域的transformer不作修改地搬到CV领域来。

方法

NLP处理的语言数据是序列化的,而CV中处理的图像数据是三维的(长、宽和channels)。所以需要一个方式将图像这种三维数据转化为序列化的数据。文章中,图像被切割成一个个patch,这些patch按照一定的顺序排列,就成了序列化的数据。作者首先将图像分割成一个个patch,然后将每个patch reshape成一个向量,得到所谓的flattened patch。

作者对上述过程得到的flattened patches向量做了Linear Projection,这些经过线性映射后的向量被称为 patch embedding(类似word embedding),一个255乘255像素的图片,每隔16乘16个像素进行分割,则这些图片可以被当做16乘以16的词拼在一起。作者也为这些patch添加了位置信息,因为按照特定顺序的patch是需要具备位置信息的,作者采取了常见的绝对位置编码,给每个位置的patch学习一个位置编码向量。

1a1e5370-92a2-11eb-8b86-12bb97331649.png

为了给图像进行分类,作者也借鉴BERT在第一个patch前添加了[CLS] patch,该patch经过Transformer后的hidden vector被用于对图形进行分类的特征。

文中还提出了一个比较有趣的解决方案,将transformer和CNN结合,即将ResNet的中间层的feature map作为transformer的输入。和之前所说的将图片分成patch然后reshape成sequence不同的是,在这种方案中,作者直接将ResNet某一层的feature map reshape成sequence,再通过Linear Projection变为Transformer输入的维度,然后直接输入进Transformer中。

到下游任务微调时,如果图像的分辨率增大时(即图像的长和宽增大时),如果保持patch大小不变,得到的patch个数将增加,即序列长度将增加。但是由于在预训练的时候,position embedding的个数和pretrain时分割得到的patch个数相同。因此超出部分的positioin embedding在模型中是未定义或者无意义的。为了解决这个问题,文章中提出用2D插值的方法,基于原图中的位置信息,将pretrain中的position embedding插值成更多个,这样有利于位置编码在面对更高分辨率图片微调时可以更好地收敛。

实验

作者使用提出的模型,即VIT,做了大量实验。实验的范式遵循预训练-微调模型,现在某个数据集下使用大量有标签的图片进行预训练,然后再在某个数据集下进行微调。下表中最上面一行指的是预训练用的数据集,最左边一列指的是微调使用的数据集。ViT-H/14指的是,使用了ViiT-Huge模型的设置,并且patch的size是14乘14的。Noisy Student是ImageN上的SOTA,BiT是其余任务上的SOTA。

可以看到,在JFT数据集上预训练的ViT-L/16性能比BiT-L(也是在JFT上进行预训练)更好。模型更大一点的ViT-H/14性能进一步提升,尤其是在更具挑战性的任务上,如ImageNet、CIFAR-100和VTAB,且所需的计算资源依旧远小于之前SOTA。在I21K上预训练得到的ViT-L/16性能也非常不错,需要的计算资源更少,在8TPU上训练30天即可。

1a6d6bf4-92a2-11eb-8b86-12bb97331649.png

作者进一步使用可视化的结果分析了使用不同预训练数据集和不同复杂度模型的情况下,下游任务的表现。作者发现,在预训练数据集比较小的情况下,大模型(ViT-L)性能还是不如小模型(ViT-B);当预训练数据集比较大的情况,大模型效果会更好。作者得出的结论是,在小数据集上,卷积的归纳偏置是是非常有用的,但在大数据集上,直接学relevant pattern就够了,这里的relevant pattern应该指的是patch和patch之间的相关模式。

1af0d0f2-92a2-11eb-8b86-12bb97331649.png

总结

此次 Fudan DISC 解读的三篇论文围绕Transformer以及位置编码展开。对于序列来讲,位置编码的影响十分重要,词和句子的位置信息对语义的影响是巨大的,如何在Transformer模型中有效地融合位置信息是十分重要的。

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编码
    +关注

    关注

    6

    文章

    835

    浏览量

    54456
  • CV
    CV
    +关注

    关注

    0

    文章

    51

    浏览量

    16709
  • 卷积神经网络

    关注

    4

    文章

    284

    浏览量

    11712

原文标题:【Transformer】Transformer 中的位置编码 -- ICLR 2021

文章出处:【微信号:zenRRan,微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    视觉Transformer基本原理及目标检测应用

    视觉Transformer的一般结构如图2所示,包括编码器和解码器两部分,其中编码器每一层包括一个多头自注意力模块(self-attention)和一个位置前馈神经网络(FFN)。
    发表于 04-03 10:32 292次阅读
    视觉<b class='flag-5'>Transformer</b>基本原理及目标检测应用

    编码器零点位置怎么看 | 编码器零位怎样确定

    编码器零点位置怎么看 要确定编码器的零点位置,可以通过以下几种方式进行观察: 1. 物理标记点:一些编码器在其旋转轴上具有专门的物理标记点,
    的头像 发表于 02-18 18:28 946次阅读
    <b class='flag-5'>编码</b>器零点<b class='flag-5'>位置</b>怎么看 | <b class='flag-5'>编码</b>器零位怎样确定

    编码器零点位置怎么看 编码器零位怎样确定

    一些编码器会在其旋转轴上标记一个特殊的标记点,例如一个凹槽或凸起。通过在编码器旋转到特定位置时对标记点进行检测,可以确定零位。
    发表于 01-18 14:49 453次阅读

    深度解析大语言模型的位置编码及其外推性

    我们先来回顾一下绝对位置编码的问题。绝对位置编码通过可学习的 Positional Embedding 来编码位置信息,这种方案直接对不同的
    发表于 01-16 11:37 382次阅读
    深度<b class='flag-5'>解析</b>大语言模型的<b class='flag-5'>位置</b><b class='flag-5'>编码</b>及其外推性

    关于深度学习模型Transformer模型的具体实现方案

    Transformer 本质上是一个 Encoder-Decoder 架构。因此中间部分的 Transformer 可以分为两个部分:编码组件和解码组件。
    发表于 11-17 10:34 309次阅读
    关于深度学习模型<b class='flag-5'>Transformer</b>模型的具体实现方案

    求助,AD8132谐波测试电路transformer有没有推荐型号?

    AD8132谐波测试电路transformer有没有推荐型号?
    发表于 11-16 06:15

    大模型的位置编码和外推性问题一样吗

    这种编码方式又叫做 Sinusoidal编码 。直觉上看,第个位置的表征向量维度是 ,这个向量的奇数位置元素使用余弦值,偶数位置元素使用正弦
    发表于 09-06 10:04 554次阅读
    大模型的<b class='flag-5'>位置</b><b class='flag-5'>编码</b>和外推性问题一样吗

    基于Transformer的目标检测算法难点

    理解Transformer背后的理论基础,比如自注意力机制(self-attention), 位置编码(positional embedding),目标查询(object query)等等,网上的资料比较杂乱,不够系统,难以通过
    发表于 08-24 11:19 163次阅读
    基于<b class='flag-5'>Transformer</b>的目标检测算法难点

    增量型编码器和绝对值编码器控制位置一样吗

    增量型编码器和绝对值编码器是两种常见的位置控制装置,它们在控制位置方面有着不同的工作原理和特点。虽然它们都可以用于位置控制,但是在某些方面存
    的头像 发表于 08-18 14:43 521次阅读
    增量型<b class='flag-5'>编码</b>器和绝对值<b class='flag-5'>编码</b>器控制<b class='flag-5'>位置</b>一样吗

    基于Transformer的目标检测算法的3个难点

    理解Transformer背后的理论基础,比如自注意力机制(self-attention), 位置编码(positional embedding),目标查询(object query)等等,网上的资料比较杂乱,不够系统,难以通过
    发表于 07-18 12:54 450次阅读
    基于<b class='flag-5'>Transformer</b>的目标检测算法的3个难点

    浅谈LLaMA 中的旋转式位置编码

    对于位置编码,常规的做法是在计算 query, key 和 value 向量之前,会计算一个位置编码向量 pi 加到词嵌入 xi 上,位置
    发表于 07-10 10:12 2030次阅读
    浅谈LLaMA 中的旋转式<b class='flag-5'>位置</b><b class='flag-5'>编码</b>

    如何入门面向自动驾驶领域的视觉Transformer

    理解Transformer背后的理论基础,比如自注意力机制(self-attention), 位置编码(positional embedding),目标查询(object query)等等,网上的资料比较杂乱,不够系统,难以通过
    的头像 发表于 07-09 14:35 396次阅读
    如何入门面向自动驾驶领域的视觉<b class='flag-5'>Transformer</b>?

    http 编码无法正常解析

    *附件:这是什么编码 文件夹2013.rar http 返回一段数据,,不能正常解析,,uft-8也试过不行,,正确的内空在上面,,请问这是什么编码解析成正常显示,多谢,
    发表于 06-21 10:02

    基于transformer编码器-解码器模型的工作原理

    与基于 RNN 的编码器-解码器模型类似,基于 transformer编码器-解码器模型由一个编码器和一个解码器组成,且其编码器和解码器
    发表于 06-11 14:17 1283次阅读
    基于<b class='flag-5'>transformer</b>的<b class='flag-5'>编码</b>器-解码器模型的工作原理

    PyTorch教程11.6之自注意力和位置编码

    电子发烧友网站提供《PyTorch教程11.6之自注意力和位置编码.pdf》资料免费下载
    发表于 06-05 15:05 0次下载
    PyTorch教程11.6之自注意力和<b class='flag-5'>位置</b><b class='flag-5'>编码</b>