文章目录
- 相对位置编码
- 经典式
- XLNET式
- T5式
- DeBERTa式
相对位置编码
上一节我们介绍了绝对位置编码,这一节我们来看相对位置编码,也就是用相对位置信息来表示,之前每一个token的位置式通过一个绝对的位置向量来表示的,现在我们在计算i与j的注意力分数的时候,采用i-j的函数来表示位置向量,这样的话,其外推性相对绝对位置来说更好,并且目前已经证明相对位置编码相对绝对位置编码效果更好。
经典式
我们首先考虑一般的带绝对位置编码的Attention:
现在位置向量就是和每一个token所处的位置有关系,现在我们在计算注意力分数的时候,将q和k带进去得到:
为了引入相对位置信息,Google把第一项位置去掉,第二项 p j W k p_jW_k pjWk改为二元位置向量 R i , j K R_{i,j}^K Ri,jK,变成:
这样的话,注意力分数就会和相对位置有关系了,并且通常来说会进行截断,以适应不同的距离:
这样依赖,只需要有限个位置编码,就可以表达出任意长度的相对位置,这里的 p k p_k pk可以选择可训练的或者式三角函数式的。这里补充说明以下,就相当于对于未知i来说,如果j超过某个长度之后,二者的插值过大,就进行截断,也就是将超过阈值的很远的都一视同仁了。
XLNET式
首先对计算注意力分数的公式完全展开:
直接将 p j p_j pj替换为 R i − j R_{i-j} Ri−j,对于 p i p_i pi,直接替换为可训练的向量。
T5式
对于上面这个式子,我们可以将其理解为4项,分别是输入输入,输入位置,位置输入,位置位置。如果我们认为位置和输入是解耦的,那么中间两项就可以去掉,最后一项就可以看作一个偏置,变为:
不同于常规的位置编码的截断的方式,T5采用一种分桶的做法:
但是这个也会带来一个问题,就是外推性。
DeBERTa式
去掉最后只有位置编码的那一项,然后和普通的一样进行裁剪。