作者 | sliderSun

知乎专栏 | 优选读、BERT巨人肩膀

整理 | NewBeeNLP

一篇来自微软关于Transformer中位置编码的文章,关于位置编码,我们之前也有讨论过,参见:

  • Transformers Assemble(PART III)

  • 【ICLR2020】Transformer Complex-order:一种新的位置编码方式

论文:https://arxiv.org/abs/2006.15595 (arxiv访问慢的小伙伴后台回复 "0714"直达论文)
代码:https://github.com/guolinke/TUPE

介绍

文中首先质疑在输入层添加单词嵌入和绝对位置嵌入的合理性。由于这两种嵌入显然是异构的,所以这种“add”操作带来了位置信息和单词语义之间的混合关联。例如,通过扩展第一层的self-attention模块,我们(均指论文作者们)发现有特定项使用“word”作为查询“position”的key,或者使用“position”作为查询“word”的key。但是在语言学中,很少有证据表明,词的语义和位置有很强的相关性,或者在不知道具体语境的情况下,一个词的位置是可以预测的。

其次,注意到Transformer模型并不总是只处理自然语言单词。特别是在预训练模型中,如BERT,通常在句子后面附加一个特殊的符号[CLS]。大家普遍认为这个符号是用来从所有位置接收和总结有用信息的,[CLS]的上下文表示将被用作下游任务中句子的表示。由于[CLS]符号的作用不同于自然包含语义的规则词,我们认为,如果把它的位置当作词在句子中的位置来对待,它将是无效的。例如,如果对这个符号进行相对位置编码,注意力的分布很可能会偏向于前几个单词,从而影响对整个句子的理解

本文针对BERT提出了一种新的位置编码方法—Transformer with Untied Positional Encoding(TUPE),如上图所示。TUPE只使用单词嵌入作为输入。在self-attention模块中,分别计算不同类型的相关性,以反映不同方面的信息,包括单词上下文相关性和绝对位置相关性(以及相对位置相关性)。每一种相关性都有其自身的参数,并将其相加产生注意力分布。进一步,为[CLS]符号设置专门的位置关联,目的是正确地捕获句子的全局表示。

首先,如下(b)图我们可以看到在TUPE中,位置相关性和单词相关性分别在self-attention模块中计算,然后相加。该设计成功地消除了词语和位置之间的关联。

其次,TUPE使用一个不同的函数来计算[CLS]符号和其他位置之间的相关性。这种灵活性可以帮助模型学习整个句子的准确表示。下面具体介绍TUPE模型。

TUPE

解开位置与词语之间的关联

在绝对位置编码中,位置嵌入与单词嵌入相加,作为神经网络的输入。然而,这两种信息是异构的。另一方面,绝对位置嵌入以序列的方式编码索引,这与语义无关,与词义差别很大。对词嵌入和位置嵌入线性运算的合理性提出了质疑。为了验证清楚,我们看一下绝对位置编码的计算公式及其展开(这里以Transformer第一层self-attention为例),

其中,










是 softmax 之前的 logits,







是 token embedding,







是 positional embedding,












是映射到 Q 和 K 所用的矩阵。在上面展开的式子里,展示了单词嵌入和位置嵌入是如何在注意模块中进行投影和查询的。我们可以看到,扩展后出现了四项: 词与词的相关性、词与位置的相关性、位置与词的相关性、位置与位置的相关性。

不难看出,第一项和最后一项描述了一对单词或位置之间的同类关系。但是,第二和第三项使用位置(单词)作为查询来获取由单词(位置)组成的键。很少有证据表明,某个位置和某个词一定有很强的关联。此外,尽管第一项和最后一项描述了同类信息之间的关系,但是投影矩阵







,













,





在这两项中是共享的。作为一种常识,投影被用作一种将上下文向量映射到不同语义空间的方法,以增加模型的表现力。对位置信息应用语义投影是不合理的。

为此,对其进行改进:通过使用不同的投影矩阵直接对一对单词或位置之间的关系进行建模,并删除中间两项, 公式如下

其中,












是把 positional embedding 映射到 Q 和 K 所用的矩阵,













用于维持










的量纲。与相对位置编码相结合,只需将上式改变为

可以看到得到的系数是同时考虑绝对位置编码和相对位置编码的。

从位置上解开[CLS]符号

尽管句子中的单词具有局部依赖关系,然而,Transformer模型的输入序列并不总是一个自然的句子。

Bert中,一个特殊的符号[CLS]通常附加在句子的开头。经过预处理后,[CLS]符号的上下文表征将用于下游分类任务的预测。最近的一些工作研究了[CLS]符号的功能,发现[CLS]位置上的注意分布熵值较高,说明[CLS]符号的表示包含了整个句子的全局信息,因此具有广泛的关注性,可以聚合所有信息。

由于[CLS]符号具有独特的作用,不同于其他自然包含语义意义的词语,因此,我们也可以在注意模块中对[CLS]符号给出不同的表述方式:如果仍然对[CLS]符号使用相对位置编码











,注意力模型很可能会使[CLS]符号侧重于前几个单词而不是整个句子,这将影响下游任务的执行。

为了将[CLS]符号从其他位置解开,建议重置与[CLS]相对应的位置相关性。为了更好地演示,将










表示为位置i和j之间的无内容(仅位置)相关性。

当使用绝对位置编码时,公式为,

当使用相对位置编码时,公式为,












的值重置为:

其中,




θ







θ










θ








参数是可学习的,注意,此修改可广泛应用于任何仅位置关联,包括本文提出的位置编码和之前的相对位置编码,下图提供了可视化。

实现细节及讨论

TUPE有两个版本:

  • 第一种版本是使用带有未绑定[CLS]符号的未绑定绝对位置编码,称为「TUPE-A」

  • 第二个版本是在第一版本的基础上额外的相对位置编码,「TUPE-R」

数学公式如下:

「多头版本 & 参数共享」

TUPE可以轻松扩展到多头版本。在我们的实现中,位置i的绝对位置嵌入







在不同的头之间共享,而对于每个头,投影矩阵















不同。对于相对位置编码,











对于不同的头是不同的。参数θ也不会在头之间共享。

为了提高效率,在不同的层级共享(多头)投影矩阵















。因此,在TUPE中,总参数的数量变化不大。以BERT-Base为例,引入了约1.18M的新参数,仅占总参数的1%左右。

「Normalization & Rescaling」

在TUPE中,每当使用







时,我们也会对其进行层归一化。












一项用于Transformer中将点积的输出重新调整到一个标准范围。本文中













对两项求和后保持量纲。为了直接得到每一项的相似尺度,参数化





θ











θ





「绝对位置编码+相对位置编码中的冗余」

大家可能认为中的后两个项都是描述无关内容的联系,因此其中一个是多余的。但是,我们将显示它们确实有联系,但是捕获了位置信息的不同方面。

实验

我们对展开后的四项做了可视化。如下图所示,可以看到中间两项看起来很均匀,说明position 和 token 之间确实没有太强的关联;token 和 position 用了相同的矩阵做 QKV 的变换。但 position 和 token 所包含的信息不一样,共享矩阵也不合理。

实验结果表明,按上面的式子把 positional embedding 从 input 拆开后,不仅 pre-training loss 收敛得更快,下游任务的表现也更好。另外,我们还特殊处理了 [CLS] token 的 position,使其不会因 positional locality 而忽略了整个句子的信息。这个也能带来不小的提升。整体的实验结果如下,可以看到,我们的方法不仅最后比 baseline 要好很多,并且可以在 30% (300k-step) 的时候,就达到 baseline 在 1000k-step 时的效果。

结论

本文提出了TUPE(具有不受约束的位置编码的Transformer),它通过两种方法改进了现有的方法:解开单词和位置之间的相关性,以及解开序列位置上的[CLS]。具体来说,首先从Transformer的输入中去除绝对位置编码,在自注意模块中分别使用不同的投影矩阵计算位置相关性和单词相关性。然后,通过重置与[CLS]相关的位置相关性来解除[CLS]。大量实验表明,TUPE具有较好的性能。

END -

TUPE :重新思考语言预训练中的位置编码相关推荐

  1. 【Transformer】Transformer 中的位置编码 -- ICLR 2021

    引言 Transformer是近年来非常流行的处理序列到序列问题的架构,其self-attention机制允许了长距离的词直接联系,可以使模型更容易学习序列的长距离依赖.由于其优良的可并行性以及可观的 ...

  2. StructBERT:将语言结构纳入深度语言理解的预训练中——中文翻译

    STRUCTBERT:将语言结构纳入深度语言理解的预训练中 Wei Wang, Bin Bi, Ming Yan, Chen Wu, Zuyi Bao, Jiangnan Xia, Liwei Pen ...

  3. 中科院自动化所:最新视觉-语言预训练综述

    论文标题: VLP: A Survey on Vision-Language Pre-training 论文链接: https://arxiv.org/abs/2202.09061 摘要 在过去几年中 ...

  4. 首个视觉-语言预训练综述来了!

    文 | Feilong Chen等 编 | 陈萍 源 | 机器之心 一文了解视觉 - 语言预训练最新进展和新领域. 让机器做出与人类相似的反应一直是 AI 研究不懈追求的目标.为了让机器具有感知和思考 ...

  5. 【综述】基于Transformer的视频语言预训练

    关注公众号,发现CV技术之美 ▊ 1. 论文和代码地址 Survey: Transformer based Video-Language Pre-training 论文地址:https://arxiv ...

  6. 【阅读笔记】技术前沿(视觉-语言预训练、能量模型)

    1. 视觉-语言预训练 (Vision-Language Pre-training,VLP) 预训练模型,生成图像标注,视觉问答 - 模型角度,基于编码器-解码器的模型在「图文检索」task中尚未成功 ...

  7. 多模态预训练中的Prompt(ALPRO,Frozen)

    以往的文章更新过,背景就不再赘述: Cross-modal Pretraining in BERT(多模态预训练) CLIP,DALL-E 预训练新范式(Prompt-tuning,Prefix-tu ...

  8. ICCV2021 | Vision Transformer中相对位置编码的反思与改进

    前言  在计算机视觉中,相对位置编码的有效性还没有得到很好的研究,甚至仍然存在争议,本文分析了相对位置编码中的几个关键因素,提出了一种新的针对2D图像的相对位置编码方法,称为图像RPE(IRPE). ...

  9. 深入理解transformer中的位置编码

    文章目录 总览 问题1 问题2 问题3 问题4 问题5 问题6 总览 我们今天需要讲解transformer中的位置编码,这其实属于进阶内容.既然你会到这里,我默认你已经看过了transformer的 ...

最新文章

  1. 嵌入式linux仪器,一种基于嵌入式Linux设备双系统的启动方法
  2. v9php 碎片信息,phpcms v9碎片管理及调用技巧分享
  3. Select()系统调用及文件描述符集fd_set的应用
  4. python之禅中文-「翻译」Python之禅
  5. python和php-PHP和Python如何选择?或许可以考虑这三个问题
  6. 计算机原理第六章简答题,2012年4月考前串讲计算机组成原理第六章(2)
  7. Android -- 无线网络配置信息的管理者WifiConfigStore简介
  8. jquery 页面自动滚动到顶部
  9. php中explorer,explorer.php
  10. International Journal of Intelligent Systems投稿经验分享
  11. 使用PLSQL演示TM锁互斥现象
  12. JAVA日志框架与日志系统
  13. flash 交互操作:裁剪位图
  14. 实操信贷场景中的反欺诈模型
  15. linux应用程序注册表,如何打开 Linux 中 Windows 程序的注册表编辑器
  16. ISP—图像调试实习生(第七天)
  17. SDUSTOJ1670 Problem C: 农夫果园
  18. 打通apk到hal层
  19. 【C#】游戏客户端编程
  20. 都2021年了,再不学ES6你就out了 —— 一文搞懂ES6

热门文章

  1. 如何用计算机技术,如何利用计算机技术快速高效建立学籍档案
  2. 从e租宝被查 看P2P网站安全
  3. Dedecms 5.7sp1文章模型栏目接口使用手册
  4. (十四)全解MySQL之各方位事无巨细的剖析存储过程与触发器!
  5. 潘建中-632007060420
  6. 工业级洗地机器人_基于多传感器融合的自动洗地机器人避障研究
  7. 自己整理的财务知识(财务比率)(英文不标准是为了自己建立自定义字段而已)
  8. VSLAM 相关知识点总结
  9. 万里长征第一步——python实现有向图转多叉树
  10. Diffusion Model(扩散模型)