旋转位置编码Rope
1.背景
注意力机制本身没有获取位置信息的能力,对于transformer来说"Hello world"和"world Hello"两句话中的"Hello"张量是完全相同的,即使两句话中的相同Hello可能有不同的表达含义,所以需要在输入信息中添加位置信息
2.原理
transformer中KQV都是而二维的张量,所以可以用复数空间来表示输入数据的位置信息。只需要对K,Q信息进行位置编码
3.公式
对于一个输入\(x_m\),有\(f_q(x_m, m) = (W_qx_m)e^{im\theta}\),其中\(e^{im\theta}\)就是添加的位置信息,由欧拉公式可得:\(e^{im\theta} = cos(i\theta) + isin(i\theta)\)。假设输入的长度为2。
\(q_{m} = \left( \begin{array}{c}
q_{m}^{(1)} \
q_{m}^{(2)}
\end{array} \right) = W_{q}x_{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}\)。这里的\(q_{m}^{(1)},
q_{m}^{(2)}\)可视为一个在复数平面的坐标。
那么\(q_m\)可表示为\(q_{m}^{(1)} \
+q_{m}^{(2)}i\),带入\((W_qx_m)e^{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}\)
扩展到长度为\(d/2\):