相对位置编码(二) Relative Positional Encodings - Transformer-XL

这篇具有很好参考价值的文章主要介绍了相对位置编码(二) Relative Positional Encodings - Transformer-XL。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. Motivation

在Transformer-XL中,由于设计了segments,如果仍采用transformer模型中的绝对位置编码的话,将不能区分处不同segments内同样相对位置的词的先后顺序。

比如对于segmenti��������的第k个token,和segmentj��������的第k个token的绝对位置编码是完全相同的。

鉴于这样的问题,transformer-XL中采用了相对位置编码。

Top

2. Relative Positional Encodings

paper中,由对绝对位置编码变换推导出新的相对位置编码方式。

vanilla Transformer中的绝对位置编码

相对位置编码(二) Relative Positional Encodings - Transformer-XL,transformer,深度学习,人工智能

它对每个index的token都通过sin/cos变换,为其唯一指定了一个位置编码。该位置编码将与input的embedding求sum之后作为transformer的input。

相对位置编码(二) Relative Positional Encodings - Transformer-XL,transformer,深度学习,人工智能

那么如果将该位置编码应用在transformer-xl会怎样呢?

相对位置编码(二) Relative Positional Encodings - Transformer-XL,transformer,深度学习,人工智能

其中τ�表示第τ�个segment, 

相对位置编码(二) Relative Positional Encodings - Transformer-XL,transformer,深度学习,人工智能

是当前segment的序列sτ��的word embedding sequence, L�是序列长,d�是每个word embedding的维度。U1:L�1:�表示该segment中每个token的绝对位置编码组成的序列。

可以看到对于hτ+1ℎ�+1和hτℎ�,其在位置编码表示是完全相同的,都是U1:L�1:�,这样就会造成motivation中所述的无法区分在不同segments中相对位置相同的tokens.

Top

3. Transformer-XL中的相对位置编码

transformer-xl中没有采用vanilla transformer中的将位置编码静态地与embedding结合的方式;而是沿用了shaw et al.2018的相对位置编码中通过将位置信息注入到求Attention score的过程中,即将相对位置信息编码入hidden state中。

为什么要这么做呢?paper中给出的解释是:

1) 位置编码在概念上讲,是为模型提供了时间线索或者说是关于如何收集信息的"bias"。出于同样的目的,除了可以在初始的embedding中加入这样的统计上的bias, 也可以在计算每层的Attention score时加入同样的信息。

2) 以相对而非绝对的方式定义时间偏差更为直观和通用。比如对于一个query vector qτ,i��,� 与 key vectors kτ,≤i��,≤�做attention时,这个query 并不需要知道每一个key vector在序列中的绝对的位置来决定segment的时序。它只需要知道每一对kτ,j��,� 和其本身qτ,i��,�的相对距离(比如,i - j)就足够。

因此,在实际中可以创建一个相对位置编码的encodings矩阵 R∈RLmax×d�∈�����×�,其中第i行 Ri��表示两个pos(比如位置pos_q, pos_k)之间的相对距离为i. (可以参考我在参考链接3中的介绍,以下图示便是一个简单的说明例子.

但是图示中的i表示query的位置pos, 与Ri�� 中的i不同。如果以该图示为例,当pos_q = i, pos_k = i - 4时, 相对位置为 0, 二者的相对位置编码是 R0�0。

相对位置编码(二) Relative Positional Encodings - Transformer-XL,transformer,深度学习,人工智能

--------------------------------------------------------------------------------------------------

Transformer-XL的相对位置编码方式是对Shaw et al.,2018 和 Huang et al.2018提出模型的改进。它由采用绝对编码计算Attention score的表达式出发,进行了改进3项改变。

若采用绝对位置编码,hidden state的表达式为:

相对位置编码(二) Relative Positional Encodings - Transformer-XL,transformer,深度学习,人工智能

那么对应的query,key的attention score表达式为:

(应用乘法分配率, query的embedding 分别与 key的embedding, positional encoding相乘相加;之后 query的positional encoding分别与 key的embedding, positional encoding相乘相加)

(其中i是query的位置index,j是key的位置index) (WE, WU是对embedding进行linear projection的表示,细节内容可以参看attention is all you need 中对multi-head attention的介绍)

相对位置编码(二) Relative Positional Encodings - Transformer-XL,transformer,深度学习,人工智能

Transformer-XL 对上式进行了改进:

相对位置编码(二) Relative Positional Encodings - Transformer-XL,transformer,深度学习,人工智能

改进1) Uj→Ri−j��→��−�.

首先将 Aabsi,j��,���� 中的key vector的绝对位置编码 Uj�� 替换为了相对位置编码 Ri−j��−� 其中 R�是一个没有需要学习的参数的sinusoid encoding matrix,如同Vaswani et al., 2017提出的一样。

该改进既可以避免不同segments之间由于tokens在各自segment的index相同而产生的时序冲突的问题。

改进2)  (c):UTiWTq→u∈Rd(�):������→�∈��;(d):UTiWTq→v∈Rd(�):������→�∈��

在改进1中将key的绝对位置编码转换为相对位置编码,在改进2中则对query的绝对位置编码进行了替换因为无论query在序列中的绝对位置如何,其相对于自身的相对位置都是一样的。这说明attention bias的计算与query在序列中的绝对位置无关,应当保持不变. 所以这里将Aabsi,j��,���� 中的c,d项中的UTiWTq������分别用一个可学习参数u∈Rd�∈��,v∈Rd�∈��替换。

改进3) Wk→Wk,E��→��,�, Wk,R��,�

在vanilla transformer模型中,对query, key分别进行线性映射时,query 对应Wq��矩阵,key对应Wk��矩阵,由于input 是 embedding 与 positional encoding的相加,也就相当于

queryembeddingWq+queryposencodingWq����������������+������������������得到query的线性映射后的表征;

keyembeddingWq+keyposencodingWq��������������+���������������� 得到key的线性映射后的表征。

可以看出,在vanilla transformer中对于embedding和positional encoding都是采用的同样的线性变换。

在改进3中,则将key的embedding和positional encoding 分别采用了不同的线性变换。其中Wk,E��,�对应于key的embedding线性映射矩阵,Wk,R��,�对应与key的positional encoding的线性映射矩阵。

在这样的参数化定义后,每一项都有了一个直观上的表征含义,(a)表示基于内容content的表征,(b)表示基于content的位置偏置,(c)表示全局的content的偏置,(d)表示全局的位置偏置。

与shaw的RPR的对比

shaw的RPR可以参考我在参考链接3中的介绍。这里给出论文中的表达式:其中ai,j��,�是query i, key j的相对位置编码矩阵A�中的对应编码。

attention score: (在key的表征中加入相对位置信息)

相对位置编码(二) Relative Positional Encodings - Transformer-XL,transformer,深度学习,人工智能

softmax计算权值系数:

相对位置编码(二) Relative Positional Encodings - Transformer-XL,transformer,深度学习,人工智能

attention score * (value + 的output:(在value的表征中加入相对位置信息)

相对位置编码(二) Relative Positional Encodings - Transformer-XL,transformer,深度学习,人工智能

1) 对于eij���可以用乘法分配率拆解来看,那么其相当于transforerm-xl中的(a)(b)两项。也就是在shaw的模型中未考虑加入(c)(d)项的全局内容偏置和全局位置偏置

2) 还是拆解eij���来看,涉及到一项为xiWQ(aKij)T����(����)�,是直接用 query的线性映射后的表征 与 相对位置编码相乘;而在transformer-xl中,则是与query的线性映射后的表征 与 相对位置编码也进行线性映射后的表征 相乘

优势:

paper中指出,shaw et al用单一的相对位置编码矩阵 与 transformer-xl中的WkR���相比,丢失掉了在原始的 sinusoid positional encoding (Vaswani et al., 2017)中的归纳偏置。而XL中的这种表征方式则可以更好地利用sinusoid 的inductive bias

----------------------------为什么XL中的这种表征方式则可以更好地利用sinusoid 的inductive bias?--------------------------------------------------------------------

有几个问题:原始的 sinusoid positional encoding (Vaswani et al., 2017)中的归纳偏置是什么呢?为什么shaw et al 把它丢失了呢?为什么transformer-xl可以适用呢?

这里需要搞清楚:

1. 为什么在vanilla transformer中使用sinusoid?

2. shaw et al.2018中的相对位置编码Tensor是什么?

3. transformer-xl的相对位置编码矩阵是什么?

对于1,sinusoid函数具有并不受限于序列长度仍可以较好表示位置信息的特点。

We chose the sinusoidal version because it may allow the model to extrapolate to sequence lengths longer than the ones encountered during training. ~Attention is all you need.

为什么不用学得参数而采用sinusoid函数呢?sinusoidal函数并不受限于序列长度,其可以在遇到训练集中未出现过的序列长度时仍能很好的“extrapolate.” (外推),这体现了其具有一些inductive bias。

对于2,shaw et al.2018中的相对位置编码Tensor是两个需要参数学习的tensor. 

相对位置编码矩阵是设定长度为 2K + 1的(K是窗口大小) ,维度为da��的2个tensor(分别对应与key的RPR和value的RPR),其第i行表示相对距离为i的query,key(或是query, value)的相对位置编码。这两个tensor的参数都是需要训练学习的。那么显然其是受限于最大长度的。在RPR中规定了截断的窗口大小,在遇到超出窗口大小的情况时,由于直接被截断而可能丢失信息。

对于3,transformer-xl的相对位置编码矩阵是一个sinusoid矩阵,不需要参数学习。

在transformer-xl中虽然也是引入了相对位置编码矩阵,但是这个矩阵不同于shaw et al.2018。该矩阵Ri,j��,�是一个sinusoid encoding 的矩阵(sinusoid 是借鉴的vanilla transformer中的),不涉及参数的学习。

具体实现可以参看代码,这里展示了pytorch版本的位置编码的代码:

相对位置编码(二) Relative Positional Encodings - Transformer-XL,transformer,深度学习,人工智能
 1 class PositionalEmbedding(nn.Module):
 2     def __init__(self, demb):
 3         super(PositionalEmbedding, self).__init__()
 4 
 5         self.demb = demb
 6 
 7         inv_freq = 1 / (10000 ** (torch.arange(0.0, demb, 2.0) / demb))
 8         self.register_buffer('inv_freq', inv_freq)
 9 
10     def forward(self, pos_seq, bsz=None):
11         sinusoid_inp = torch.ger(pos_seq, self.inv_freq)
12         pos_emb = torch.cat([sinusoid_inp.sin(), sinusoid_inp.cos()], dim=-1)
13 
14         if bsz is not None:
15             return pos_emb[:,None,:].expand(-1, bsz, -1)
16         else:
17             return pos_emb[:,None,:]
相对位置编码(二) Relative Positional Encodings - Transformer-XL,transformer,深度学习,人工智能

其中demb����是embedding的维度。

sinusoid的shape:[batch_size, seq_length × (d_emb / 2)]

sin,cos concat之后,pos_emb的shape:[batch_size, seq_length × d_emb]

pos_emb[:,None,:]之后的shape:[batch_size, 1, seq_length × d_emb]


那么综合起来看,transformer-xl的模型的hidden states表达式为:

相对位置编码(二) Relative Positional Encodings - Transformer-XL,transformer,深度学习,人工智能

Top

4. 高效计算方法

相对位置编码(二) Relative Positional Encodings - Transformer-XL,transformer,深度学习,人工智能

在该表达式中,在计算Wk,RRi−j��,���−�时,需要对每一对(i,j)进行计算,时间复杂度是O(n2)�(�2)。paper中提出了高效的计算方法,使其降为O(n).�(�).

核心算法:发现(b)项组成的矩阵的行列之间的关系,构建一个矩阵,将其按行左移,恰好是(b)项矩阵B�,而所构建的矩阵只需要O(n)�(�)时间。

由于相对距离(i-j)的变化范围是[0, M + L - 1] (其中M是memory的长度,L是当前segment的长度)

那么令:

相对位置编码(二) Relative Positional Encodings - Transformer-XL,transformer,深度学习,人工智能

那么将(b)项应用与所有的(i,j)可得一个L×(M+L)�×(�+�)的矩阵 B�: (其中q是对E经过Wq��映射变换后的表示)

相对位置编码(二) Relative Positional Encodings - Transformer-XL,transformer,深度学习,人工智能

看这些带红线的部分,是不是只有q的下标不一样!

如果我们定义B˜�~:

相对位置编码(二) Relative Positional Encodings - Transformer-XL,transformer,深度学习,人工智能

对比B�与B˜�~发现,将B˜�~的第i行左移 L−1−i�−1−�个单位即为B�。而B˜�~的计算仅涉及到两个矩阵的相乘,因此B�的计算也仅需要求qQT���之后按行左移即可得到,时间复杂度降为O(n)�(�)!

同理,可以求(d)项的矩阵D。

相对位置编码(二) Relative Positional Encodings - Transformer-XL,transformer,深度学习,人工智能
相对位置编码(二) Relative Positional Encodings - Transformer-XL,transformer,深度学习,人工智能

这样将B,D原本需要O(n2)�(�2)的复杂度,降为了O(n)�(�).

相对位置编码(二) Relative Positional Encodings - Transformer-XL,transformer,深度学习,人工智能

 

相对位置编码(二) Relative Positional Encodings - Transformer-XL,transformer,深度学习,人工智能

Top

5. 总结

Transformer-XL针对其需要对segment中相对位置的token加入位置信息的特点,将vanilla transformer中的绝对位置编码方式,改进为相对位置编码。改进中涉及到位置编码矩阵的替换、query全局向量替换、以及为key的相对位置编码和embedding分别采用了不同的线性映射矩阵W。

transformer-xl与shaw et al.2018的相对编码方式亦有区别。1. shaw et al.2018的相对编码矩阵是一个需要学习参数的tensor,受限于相对距离的窗口长度设置;而transformer-xl的相对编码矩阵是一个无需参数学习的使用sinusoid表示的矩阵,可以更好的generalize到训练集中未出现长度的长序列中;2. 相比与shaw et al.2018,transformer-xl的attention score中引入了基于content的bias,和基于位置的bias。

另外在计算优化上,transformer-xl提出了一种高效计算(b)(d)矩阵运算的方法。通过构造可以在O(n)�(�)时间内计算的新矩阵,并将其项左移构建出目标矩阵B,D的计算方式,将时间复杂度由O(n2)�(�2)降为O(n)�(�)。

参考:

1. Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context: https://arxiv.org/pdf/1901.02860.pdf

2. Self-Attention with Relative Position Representations (shaw et al.2018): https://arxiv.org/pdf/1803.02155.pdf

3. [NLP] 相对位置编码(一) Relative Position Representatitons (RPR) - Transformer https://www.cnblogs.com/shiyublog/p/11185625.html文章来源地址https://www.toymoban.com/news/detail-517401.html

到了这里,关于相对位置编码(二) Relative Positional Encodings - Transformer-XL的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深入理解深度学习——注意力机制(Attention Mechanism):位置编码(Positional Encoding)

    分类目录:《深入理解深度学习》总目录 相关文章: ·注意力机制(AttentionMechanism):基础知识 ·注意力机制(AttentionMechanism):注意力汇聚与Nadaraya-Watson核回归 ·注意力机制(AttentionMechanism):注意力评分函数(AttentionScoringFunction) ·注意力机制(AttentionMechanism):Bahda

    2024年02月08日
    浏览(46)
  • Swin Transformer之相对位置编码详解

    目录 一、概要 二、具体解析 1. 相对位置索引计算第一步  2. 相对位置索引计算第二步 3. 相对位置索引计算第三步      在 Swin Transformer 采用了 相对位置编码 的概念。       那么相对位置编码的作用是什么呢?           解释: 在解释相对位置编码之前,我们需要先了解

    2023年04月16日
    浏览(37)
  • decomposed Relative Positional Embeddings的理解

    relative positional embedding 的一种实现方式是:先计算q和k的相对位置坐标,然后依据相对位置坐标从给定的 table 中取值。 以q和k都是7×7为例,每个相对位置有两个索引对应x和y两个方向,每个索引值的取值范围是[-6,6]。(第0行相对第6行,x索引相对值为-6;第6行相对第0行,x索

    2024年02月10日
    浏览(34)
  • 关于SAM中decomposed Relative Positional Embeddings的理解

    关于SAM中decomposed Relative Positional Embeddings的理解。 relative positional embedding的一种实现方式是:先计算q和k的相对位置坐标,然后依据相对位置坐标从给定的table中取值。以q和k都是7×7为例,每个相对位置有两个索引对应x和y两个方向,每个索引值的取值范围是[-6,6]。(第0行相对

    2024年02月11日
    浏览(32)
  • CSS绝对定位(absolute)、相对定位(relative)方法(详解)

    什么是定位? 元素可以使用的顶部,底部,左侧和右侧属性定位。然而,这些属性无法工作,除非是先设定 position属性。他们也有不同的工作方式,这取决于定位方法。 position 属性指定了元素的定位类型,   用于指定一个元素在文档中的定位方式。 属性: relative 相对定位

    2024年01月16日
    浏览(39)
  • [HTML]Web前端开发技术10(HTML5、CSS3、JavaScript )CSS+DIV页面布局,固定定位,相对定位relative,绝对定位absolute,层定位的应用——喵喵画网页

    希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,佬佬会看到更多有趣的博客哦!!! 喵喵喵,你对我真的很重要! 目录 前言 课后练习 网页标题:固定定位 网页标题:相对定位relative 网页标题:绝对定位absolute 网页标题:层定

    2024年02月02日
    浏览(56)
  • 将时间序列转成图像——相对位置矩阵方法 Matlab实现

    目录 1 方法 2 Matlab代码实现 3.结果 【若觉文章质量良好且有用,请别忘了 点赞收藏加关注 ,这将是我继续分享的动力,万分感谢!】 其他: 1.时间序列转二维图像方法及其应用研究综述_vm-1215的博客-CSDN博客 2.将时间序列转成图像——格拉姆角场方法 Matlab实现_vm-1215的博客

    2024年02月02日
    浏览(36)
  • IIC读取AS5600磁编码器并计算相对角度与圈数代码移植

    芯片F103CBT6,使用cubeide+hal库,驱动部分源码移植于: (22条消息) STM32使用模拟I2C读取AS5600(深入讲解:带波形图)_yizeni的博客-CSDN博客_as5600使用方法 使用前需要重定向printf,方便串口调试;此外,sys库是由正点原子那个由m3内核直接写寄存器的位带操作库,无法用于其他co

    2024年02月13日
    浏览(30)
  • Qt实用技巧:QCustomPlot做北斗GPS显示绝对位置运动轨迹和相对位置运动轨迹图的时,使图按照输入点顺序连曲线

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/136131310 红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…   使用QCustomPlot绘制多个目标的

    2024年02月20日
    浏览(54)
  • 一文通透位置编码:从标准位置编码、欧拉公式到旋转位置编码RoPE

    关于位置编码和RoPE  应用广泛,是很多大模型使用的一种位置编码方式,包括且不限于LLaMA、baichuan、ChatGLM等等 我之前在本博客中的另外两篇文章中有阐述过(一篇是关于LLaMA解读的,一篇是关于transformer从零实现的),但自觉写的不是特别透彻好懂 再后来在我参与主讲的类C

    2024年02月08日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包