参考:https://spaces.ac.cn/archives/8130

绝对位置编码

绝对位置编码是在计算 QKV 之前,把位置编码跟 embedding 加起来。也就是在输入的第 k 个向量 x_k 中加入位置向量p_k,变为x_k+p_k,其中p_k只依赖于位置编号k。

训练式

将位置编码作为可训练参数。

这样的好处是不需要设计,坏处是不好外推。比如设计时的 context len 长度是 512,那你就总共训练了 512 个位置编码,肯定不好轻易外推,不然额外的位置编码的权重从哪来的呢?

相乘式

这里是提出问题,为什么位置编码普遍用加法,为什么不用乘法或者别的什么方式呢?很奇怪。

相对位置编码

相对位置并没有完整建模每个输入的位置信息,而是在算Attention的时候考虑当前位置与被Attention的位置的相对距离,由于自然语言一般更依赖于相对位置,所以相对位置编码通常也有着优秀的表现。对于相对位置编码来说,它的灵活性更大,更加体现出了研究人员的“天马行空”。

经典式

google 提出的,还是用的加性位置编码。做了很多近似,感觉不靠谱。

XLNET式

似乎从这个工作开始,后面的相对位置编码都只加到Attention矩阵上去,而不加到 v_j 上去了。