位置编码
引言 最近在看相对位置编码的知识,本文算是对位置编码的总结吧。本文简单回顾绝对位置,然后介绍相对位置编码和PoRE(Rotary Position Embedding) preliminary 绝对位置编码 由于Transformer(Attention Is All You Need)的attention机制本身是没有引入位置信息的,例如,Sequence 1: ABC, Sequence 2: CBA, 两个Sequence中单词A经过Transformer的encode后,编码是一样的。但是在真实世界中,句子中单词的顺序对应语义理解是非常重要的。所以Transformer在计算MHA之前会将输入序列的词嵌入(embedding)加上一个位置信息,由于这个位置信息是直接加在embedding上的,所以也被称为绝对位置编码。在Transformer中的绝对位置编码实现是Sinusoidal位置编码,在BERT和GPT位置编码则当成是可学习参数。 Sinusoidal位置编码 $$\begin{cases} p_{k,2i} = sin(k/10000^{2i/d})\\ p_{k,2i+1} = cos(k/10000^{2i/d}) \end{cases}$$ $p_{k,2i}, p_{k,2i+1}$是位置k的位置编码向量的第$2i,2i+1$个分量,d是位置编码向量的维度(与输入embedding的维度相同)。 绝对位置编码的Attention 对于输入序列的$X = (x_1, x_2, …,x_i,…,x_j, …, x_n)$, 经过attention计算后的输出为$Z=(z_1, z_2, …,z_i,…,z_j,…,z_n)$, 其中$x_i \in R^d, z_i \in R^d$。 attention计算如下: $$\begin{cases} q_i = (x_i+pi)W_Q \\ k_j = (x_j+pj)W_K \\ v_j = (x_j+pj)W_V \\ a_{i,j} = softmax(\frac{q_ik_j^T}{\sqrt d }) \\ z_i = \sum_j a_{i,j}v_j \end{cases} $$...