论文笔记:Self-Attention with Relative Position Representations

1,148 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情

导语

本文是最早提出Relation-aware Self-attention的工作。该工作最初是为了解决Transformer的Self-attention模块中无法编码位置信息的问题,在机器翻译任务上取得了很好的结果。从我个人的调研来看,这种关系的引入在Text-to-SQL任务中大放光彩,如RAT-SQL、LGESQL、S2SQL等模型就是结合这种Relation-aware Self-attention机制来做的工作。

1 简介

Transformer通过借助Self-attention模块实现了高效的并行计算,并取得了优异的表现。然而,相比于RNN或LSTM对token序列处理的顺序性,vanilla transformer(即最原始的transformer)结构在编码时无法处理token之间的位置信息。因而,transformers结构在输入之前使用一个positional encoding模块来编码位置信息。

本文探索了一种将Self-attention中加入relation模块来编码relative position信息方法,使用该结构后,transformer将可以不使用额外的positional encoding模块也能获取位置信息。

实验表明,单独使用positional encoding模块和单独使用relation-aware Self-attention模块都能大幅度提升机器翻译任务上的表现,而且使用relation-aware Self-attention模块比使用positional encoding模块的效果要好。不过,作者也做实验发现,将relation-aware Self-attention模块和positional encoding模块结合使用,并不会带来进一步的提升。

最后,作者也说到使用relation-aware Self-attention编码相对位置信息可以被看作是一个特殊的例子,实际上,我们可以考虑输入的任意两个元素之间的任意关系,这也是后续Relation-aware Self-attention被广泛应用的原因。

2 背景

2.1 Transformer中的位置编码

image.png

上图即一个transformer的结构示意图,其由Encoder和Decoder组成。在输入和输出的Embedding后,都使用一个额外的模块来进行positional encoding。对于positional encoding,人们通常使用一个正弦函数来进行编码,因为这样可以更好的表示相对位置信息,而不是让模型过拟合到绝对位置上。

2.2 Self-attention

Transformer中使用了多头注意力机制。对于任意一个Self-attention layer,其计算过程如下:

image.png

其中H为头的数目。WK,WQ,WVW_K, W_Q, W_V即三个可学习的参数矩阵。对于Transformer和Self-attention的详细原理,这里不再赘叙,如有兴趣可参考我之前的系列博客:NLP学习笔记(九)自我注意力机制(Self-Attention) .

3 提出的架构

3.1 Relation-aware Self-attention

Relation-aware Self-attention实际上就是在计算任意两个token i和j的Self-attention时,考虑他们的先验关系rijr_{ij}。具体来说,Relation-aware Self-attention是对2.2中提到的Self-attention的计算作出如下修改:

image.png

可以看到,在计算eije_{ij}ziz_i时,考虑了先验关系rijr_{ij}。这种关系可以是任意的预先知道的关系。

3.2 相对位置表示

在定义了Relation-aware Self-attention后,作者将它用来编码token i和j之间的相对位置信息来应用到机器翻译中。这里,作者假设超过一定距离后的相对位置信息将不那么重要(比如,第一个token和第500个token之间的相对位置信息肯定没有第一个token和第二token之间的相对位置信息重要),所以这里作者设置了一个阈值k,即只考虑相对位置偏差在k范围内的位置信息。

image.png

与当前token i距离超过k的token j之间的相对位置信息rijr_{ij}将被截断,不会考虑。

image.png

如上图所示,token x2x_2和token x1x_1之间的关系被记作w1Kw_{-1}^K,token x2x_2和token x4x_4之间的关系被记作w2Kw_{2}^K. 这样将一共会有2k+1中相对位置编码关系。

3.3 高效实现

为了尽量不增加计算的复杂度和时间,作者使用了多种方式来进行高效的代码实现。

首先,作者在实现时,将token i和token j之间的relation信息rijr_{ij}在H个头之间共享。 其次,在相应的计算eije_{ij}ziz_i时,可以展开以方便并行计算。

image.png

4 实验

4.1 主要实验结果

作者在机器翻译任务进行实验,baseline就是使用额外的positional encoding的transformer模型。结果如下:

image.png

可以看到,将相对位置信息编码到Self-attention后,效果比直接在输入层添加positional encoding要好。

4.2 Ablation Study

接着,作者对比了截取阈值k对于最终结果的影响。

image.png

可以看到,K=0时,由于完全没有相对位置编码信息,效果很差。在K>2之后,提升K对实现结果影响也不大了。这表明在当前token附近的几个token之间的相对位置信息对于翻译任务很重要。

最后,作者还对比了rKr_KrVr_V带来的提升影响。

image.png

5 总结

本文提出了一种自注意的扩展方法,将相对位置信息引入序列中,提高了机器翻译的性能。在未来的工作中,该机制完全可以编码任意有向的图输入。