RoPE位置编码
旋转位置编码 RoPE
标准Transformer绝对位置编码
标准 Transformer 的位置编码通常采用绝对位置编码,也就是对于一句话中每个词(token)的位置:
$$
p_{k,2i}=\sin\left(\frac{k}{10000^{\frac{2i}{d}}}\right)
$$
$$
p_{k,2i+1}=\cos\left(\frac{k}{10000^{\frac{2i}{d}}}\right)
$$
说明:
- $k$ 表示 token 在序列中的位置索引(通常从 $0$ 开始),即 $k=0,1,\dots,L-1$
- $d$ 为 embedding 的维度,$i=0,1,\dots,\frac{d}{2}-1$. 对每个 $i$,两个分量索引为 $(2i,2i+1)$,偶数维用 $\sin$,奇数维用 $\cos$
例子:设 $d=6$,则索引对为 $(0,1),(2,3),(4,5)$. 第三个 token(若从 0 开始,则 $k=2$)在 $i=1$ 时对应的两个分量为 $2i=2$ 和 $2i+1=3$:
$$
p_{2,2}=\sin\left(\frac{2}{10000^{2/6}}\right)
$$
$$
p_{2,3}=\cos\left(\frac{2}{10000^{2/6}}\right)
$$
关于不同句子中相同位置:
这里公式中的2i, 2i + 1, 分别表示第k个token的位置编码维度(需要与token的embedding保持一致, 比如这里token embedding是100维的, 那么这个token的位置编码的计算方式则为i = 0-50,逐一按上面的公式计算得到不同位置的编码向量)。如果在不同的句子当中,位置3与位置3的位置编码向量就是一样的。
RoPE相对位置编码
根据Attention的计算公式,实际在标准Transformer的计算QK点积的时候(embedding + pos) * (embedding + pos), 引入了无关的交叉项 也就是 embedding * pos 这对于模型来说可能是没有意义的。
$$
Attention(Q,K,V) = softmax(\frac{QK^T}{\sqrt{d}})V
$$
在RoPE中,我们对每一个token的embedding, $x_m, x_n$,(分别表示位置是m和n的两个token),乘上了一个旋转系数 $e^{ix\theta}$,这里的x表示向量的位置(也就是m/n)。
经过Q/K矩阵的向量就变成了下边的形式 $x_m’ = W_qx_m e^{im\theta}\space , x_n’ = W_kx_n e^{in\theta}$。将$W_qx_m 与 W_kx_n$先计算,可以表示为$q_m, k_n$。
这里以二维的嵌入矩阵为例
$$
q_m = \begin{pmatrix}
W_q^{11} & W_q^{12} \
W_q^{21} & W_q^{22}
\end{pmatrix} \begin{pmatrix}
x_m^1 \
x_m^2
\end{pmatrix} = \begin{pmatrix}p_m^1 \ p_m^2 \end{pmatrix}
$$
二维的矩阵可以表示成为一个虚数的形式(欧拉公式)。
$$
x_m^{^{\prime}}=W_qx_me^{im\theta}=(W_qx_m)e^{im\theta}=q_me^{im\theta}=
\begin{pmatrix}
cos(m\theta) & -sin(m\theta) \
sin(m\theta) & cos(m\theta)
\end{pmatrix}
\begin{pmatrix}
q_m^1 \
q_m^2
\end{pmatrix}
$$
同理对于$x_n^{\prime}$:
$$
x_{n}^{^{\prime}}=W_{k}x_{n}e^{in\theta}\quad=(W_{k}x_{n})e^{in\theta}=q_{k}e^{in\theta}\quad=
\begin{pmatrix}
cos(n\theta) & -sin(n\theta) \
sin(n\theta) & cos(n\theta)
\end{pmatrix}
\begin{pmatrix}
k_{n}^{1} \
k_{n}^{2}
\end{pmatrix}\quad
$$
当计算这两个值的点积时:
$$
x_{m}^{\prime T}x_{n}^{^{\prime}}=\left(q_{m}^{1}q_{m}^{2}\right)
\begin{pmatrix}
cos((m-n)\theta) & -sin((m-n)\theta) \
sin((m-n)\theta) & cos((m-n)\theta)
\end{pmatrix}
\begin{pmatrix}
k_{n}^{1} \
k_{n}^{2}
\end{pmatrix}\quad
$$
那么我们如何扩展到多维呢,给出下边的这个矩阵:
$$
\begin{pmatrix}
\cos m\theta_0 & -\sin m\theta_0 & 0 & 0 & \cdots & 0 & 0 \
\sin m\theta_0 & \cos m\theta_0 & 0 & 0 & \cdots & 0 & 0 \
0 & 0 & \cos m\theta_1 & -\sin m\theta_1 & \cdots & 0 & 0 \
0 & 0 & \sin m\theta_1 & \cos m\theta_1 & \cdots & 0 & 0 \
\vdots & \vdots & \vdots & \vdots & \ddots & \vdots & \vdots \
0 & 0 & 0 & 0 & \cdots & \cos m\theta_{d/2-1} & -\sin m\theta_{d/2-1} \
0 & 0 & 0 & 0 & \cdots & \sin m\theta_{d/2-1} & \cos m\theta_{d/2-1}
\end{pmatrix}
\begin{pmatrix}
q_0 \
q_1 \
q_2 \
q_3 \
\vdots \
q_{d-2} \
q_{d-1}
\end{pmatrix}
$$