1 绝对位置编码
1.1 Transformer的位置编码
加在embedding上,但是由于使用的是sin、cos 交替,可以通过线性变换矩阵得到其他位置的表示,所以可以期望他包含了相对位置的信息,而且由于三角函数有显示的生成规律,所以可以期望有外推性质
PE(Positional Encoding)为位置编码:
下方公式可以看出该位置编码具备周期性:

但是它也是有缺点的,由于位置编码点积的无向性,它无法表示位置方向
1.2 BERT的可学习位置编码
直接将位置编码当作可训练参数,比如最大长度为512,编码维度为768,那么就初始化一个512×768的矩阵作为位置向量,让它随着训练过程更新。
对于这种训练式的绝对位置编码,一般的认为它的缺点是 没有长度外推性,即如果预训练最大长度为512的话,那么最多就只能处理长度为512的句子,再长就处理不了了。当然,也可以将超过512的位置向量随机初始化,然后继续微调
长度外推性在另一篇大模型优化篇会有介绍,以及如何解决
1.3 RNN 位置编码
递归式的绝对位置编码,input后面接一层RNN,可以用RNN学每个位置的位置编码。优点是外推、灵活,缺点是丧失并行处理性质
RNN处理数据的方式本质上是串行的,因为每个时间步的输出依赖于之前时间步的信息。这就意味着在处理序列时,无法同时计算序列中所有位置的输出。相比之下,Transformer使用自注意力机制,可以在一次计算中考虑到整个序列的所有位置,因此可以并行计算所有位置的输出。
2 相对位置编码
2.1 Relative Position Representation
先对attention公式中的query和key列向量进行拆分,
x_i, p_i 分别为输入embedding和位置编码,
W_Q, W_K 分别为query和key的投影矩阵,同时展开output部分,
W_V 为value的投影矩阵
为了引入相对位置信息,Google将第一项位置(p_i 即 p_i W_Q )去掉,第二项 W_K^T p_j^T 改为二元位置向量 R_{i,j}^K,同时对output部分也改动得到下面的形式
二元相对位置向量只依赖于相对位置,而且通常会进行截断处理,这样只需要有限个位置编码(不管是三角函数式还是训练式),都可以表达出任意长度的相对位置
clip(i-j,p_{min},p_{max}) 为i,j位置之间的,并且截断限制在min,max区间
2.2 XLNET式的位置编码
源自于Transformer-XL论文,继续对attention公式进行完全展开
Transformer-XL的做法很简单,直接将 p_j 替换为相对位置向量 R_{i-j},至于两个 p_i,则干脆替换为两个可训练的向量 u,v:
该编码方式中的相对位置向量没有像经典模型那样进行截断,而是直接用了Sinusoidal式的生成方案,由于 R_{i-j} 的编码空间与 x_j 不一定相同,所以前面的 W_K^\top 换了另一个独立的矩阵 W_{K,R}^\top,还有 uW_Q,vW_Q 可以直接合并为单个 u,v,所以最终使用的式子是:
此外,v_j 上的位置偏置就直接去掉了,即直接令 o_i =\sum_j a_{i,j} x_j W_V。似乎从这个工作开始,后面的相对位置编码都只加到Attention矩阵上去,而不加到 v_j 上去了。
2.3 T5式的位置编码
T5模型里边用到了一种更简单的相对位置编码。思路依然源自之前的展开式,如果非要分析每一项的含义,那么可以分别理解为“输入-输入”、“输入-位置”、“位置-输入”、“位置-位置”四项注意力的组合。如果认为输入信息与位置信息应该是独立(解耦)的,那么它们就不应该有过多的交互,所以“输入-位置”、“位置-输入”两项Attention可以删掉,而 p_i W_Q W_K^\top p_j^\top 实际上只是一个只依赖于 (i,j) 的标量,我们可以直接将它作为参数训练出来,即简化为:
该方法仅仅是在Attention矩阵的基础上加一个可训练的偏置项,包含同样的思想的还有微软在ICLR 2021的论文《Rethinking Positional Encoding in Language Pre-training》中提出的TUPE位置编码,T5对相对位置进行了一个“分桶”处理,即相对位置是 i-j 的位置实际上对应的是 f(i-j) 位置,映射关系如下:

这种分桶思路其实就是距离越近分配的位置越精细,越远的位置共享一个“桶”。
2.4 DeBERTa的位置编码
同样还是从 q_{i,k}^j 展开式出发,T5干脆去掉了第2、3项,只保留第4项并替换为相对位置编码,而DeBERTa则刚刚相反,扔掉了第4项,保留第2、3项并替换为相对位置编码:
DeBERTa提供了使用相对位置和绝对位置编码的一个新视角,它指出NLP的大多数任务可能都只需要相对位置信息,但确实有些场景下绝对位置信息更有帮助,于是它将整个模型分为两部分来理解。以Base版的MLM预训练模型为例,它一共有13层,前11层只是用相对位置编码,这部分称为Encoder,后面2层加入绝对位置信息,这部分它称之为Decoder,还弄了个简称EMD(Enhanced Mask Decoder);至于下游任务的微调截断,则是使用前11层的Encoder加上1层的Decoder来进行 (需要注意的是他这里命名的encoder和decoder不是传统意义的,不要混淆了)
3 RoPE和ALiBi
3.1RoPE
旋转式位置编码 Rotary Position Embedding,通过绝对位置编码的方式实现相对位置编码,综合了绝对位置编码和相对位置编码的优点。主要就是对attention中的q, k向量注入了绝对位置信息,然后用更新的q,k向量做attention中的内积就会引入相对位置信息了。RoPE广泛应用在目前的大模型生态中。
二维情况下,对于向量q用复数表示的RoPE如下所示:
根据复数乘法的几何意义,该变换实际上对应着向量的旋转,所以称之为“旋转式位置编码”,它还可以写成矩阵形式:
由于内积满足线性叠加性,因此任意偶数维的RoPE,都可以表示为二维情形的拼接,即
也就是说,给位置为m的向量q乘上矩阵R_m、位置为n的向量k乘上矩阵R_n,用变换后的Q、K序列做Attention,那么Attention就自动包含相对位置信息了,因为成立恒等式:
R_m 和 R_n 本来是绝对位置信息,但是由于旋转矩阵的这一性质: R_m^T R_n = R_{m-n} ,意味着具备相对位置信息
值得指出的是,R_m是一个正交矩阵,它不会改变向量的模长,因此通常来说它不会改变原模型的稳定性。

3.2 ALiBi
ALIBI所做的改动非常简单,只是在Softmax之前,将Attention的计算从
改为
其中,\lambda > 0是超参数,每个head可以设置不同的值。从这个定义就可以看出ALIBI跟局部注意力的相似之处了,两者都是在Softmax之前减去一个非负矩阵,只不过被减去的非负矩阵有所不同。ALIBI可以看成是局部注意力的“平滑版”。
这意味着,在计算注意力分数时,ALIBI通过引入与位置差相关的偏置项来鼓励模型关注更近邻的位置,而这种做法相比直接限制注意力范围的方式更加灵活和平滑。这种方法允许模型在不增加计算复杂度的情况下,自然地倾向于局部依赖性,同时保留全局信息交互的能力。
