博采众长式的旋转位置编码
-
上一篇文章中,我们对原始的Sinusoidal位置编码做了较为详细的推导和理解,总的感觉是Sinusoidal位置编码是一种"想要成为相对位置编码的绝对位置编码"。
本文将会介绍追一科技自研Rotary Transformer(RoFormer)模型,它的主要改动是引用了苏剑林大佬构思的"旋转式位置编码(Rotary Position Embedding,RoPE)“,这是一种配合Attention机制能达到"绝对位置编码的方式实现相对位置编码的设计”。而也正因为这种设计,它还是目前唯一一种可用于线性Attention的相对位置编码
基本思路
我们假设通过下述运算来给q,k\boldsymbol{q},\boldsymbol{k}q,k添加绝对位置信息:
$$
\begin{equation}\tilde{\boldsymbol{q}}_m = \boldsymbol{f}(\boldsymbol{q}, m), \quad\tilde{\boldsymbol{k}}_n = \boldsymbol{f}(\boldsymbol{k}, n)\tag{1}\end{equation}
$$
也就是说,我们分别为q,k\boldsymbol{q},\boldsymbol{k}q,k设计操作f(⋅,m),f(⋅,n)\boldsymbol{f}(\cdot, m),\boldsymbol{f}(\cdot, n)f(⋅,m),f(⋅,n),使得经过该操作后,q~m,k~n\tilde{\boldsymbol{q}}_m,\tilde{\boldsymbol{k}}_nq~m,k~n就带有了位置m,nm,nm,n的绝对位置信息。Attention的核心运算是内积,所以我们希望内积的结果带有相对位置信息,因此假设存在恒等关系:
$$
\begin{equation}\langle\boldsymbol{f}(\boldsymbol{q}, m), \boldsymbol{f}(\boldsymbol{k}, n)\rangle = g(\boldsymbol{q},\boldsymbol{k},m-n)\tag{2}\end{equation}
$$
所以我们要求出该恒等式的一个(尽可能简单的)解。求解过程还需要一些初始条件,显然我们可以合理地设f(q,0)=qf(\boldsymbol{q},0)=\boldsymbol{q}f(q,0)=q和f(k,0)=kf(\boldsymbol{k},0)=\boldsymbol{k}f(k,0)=k求解过程
同上一篇思路一样,我们先考虑二维情形,然后借助复数来求解。在复数中有⟨q,k⟩=Re[qk<em>]\langle\boldsymbol{q},\boldsymbol{k}\rangle=\text{Re}[\boldsymbol{q}\boldsymbol{k}^<em>]⟨q,k⟩=Re[qk<em>],Re[]\text{Re}[]Re[]代表复数的实部,我们希望存在某个函数ggg,使其能够包含相对位置信息,即:
$$
\begin{equation}\text{Re}[\boldsymbol{f}(\boldsymbol{q}, m)\boldsymbol{f}^(\boldsymbol{k}, n)] = g(\boldsymbol{q},\boldsymbol{k},m-n)\tag{3}\end{equation}
$$
简单起见,我们假设存在复数g(q,k,m−n)g(\boldsymbol{q},\boldsymbol{k},m-n)g(q,k,m−n),使得f(q,m)f∗(k,n)=g(q,k,m−n)\boldsymbol{f}(\boldsymbol{q}, m)\boldsymbol{f}^*(\boldsymbol{k}, n) = \boldsymbol{g}(\boldsymbol{q},\boldsymbol{k},m-n)f(q,m)f∗(k,n)=g(q,k,m−n),然后我们用复数的指数形式,设
$$
\begin{equation}\begin{aligned}
\boldsymbol{f}(\boldsymbol{q}, m) =&, R_f (\boldsymbol{q}, m)e^{\text{i}\Theta_f(\boldsymbol{q}, m)} \
\boldsymbol{f}(\boldsymbol{k}, n) =&, R_f (\boldsymbol{k}, n)e^{\text{i}\Theta_f(\boldsymbol{k}, n)} \
\boldsymbol{g}(\boldsymbol{q}, \boldsymbol{k}, m-n) =&, R_g (\boldsymbol{q}, \boldsymbol{k}, m-n)e^{\text{i}\Theta_g(\boldsymbol{q}, \boldsymbol{k}, m-n)} \
\end{aligned}\tag{4}\end{equation}
$$
那么带入方程后就得到方程组
$$
\begin{equation}\begin{aligned}
R_f (\boldsymbol{q}, m) R_f (\boldsymbol{k}, n) =&, R_g (\boldsymbol{q}, \boldsymbol{k}, m-n) \
\Theta_f (\boldsymbol{q}, m) - \Theta_f (\boldsymbol{k}, n) =&, \Theta_g (\boldsymbol{q}, \boldsymbol{k}, m-n)
\end{aligned}\tag{5}\end{equation}
$$
对于第一个方程,带入m=n=0m=n=0m=n=0得到
$$
\begin{equation}R_f (\boldsymbol{q}, m) R_f (\boldsymbol{k}, m) = R_g (\boldsymbol{q}, \boldsymbol{k}, 0) = R_f (\boldsymbol{q}, 0) R_f (\boldsymbol{k}, 0) = \Vert \boldsymbol{q}\Vert \Vert \boldsymbol{k}\Vert\tag{6}\end{equation}
$$
最后一个等号源于初始条件f(q,0)=q\boldsymbol{f}(\boldsymbol{q}, 0)=\boldsymbol{q}f(q,0)=q和f(k,0)=k\boldsymbol{f}(\boldsymbol{k}, 0)=\boldsymbol{k}f(k,0)=k。所以现在我们可以很简单地设Rf(q,m)=∥q∥,Rf(k,m)=∥k∥R_f (\boldsymbol{q}, m)=\Vert \boldsymbol{q}\Vert, R_f (\boldsymbol{k}, m)=\Vert \boldsymbol{k}\VertRf(q,m)=∥q∥,Rf(k,m)=∥k∥,即它不依赖于mmm。至于第二个方程,同样带入m=n=0m=n=0m=n=0得到
$$
\begin{equation}\Theta_f (\boldsymbol{q}, m) - \Theta_f (\boldsymbol{k}, m) = \Theta_g (\boldsymbol{q}, \boldsymbol{k}, 0) = \Theta_f (\boldsymbol{q}, 0) - \Theta_f (\boldsymbol{k}, 0) = \Theta (\boldsymbol{q}) - \Theta (\boldsymbol{k})\tag{7}\end{equation}
$$
这里的Θ(q),Θ(k)\Theta(\boldsymbol{q}),\Theta(\boldsymbol{k})Θ(q),Θ(k)是q,k\boldsymbol{q},\boldsymbol{k}q,k本身的幅角,最后一个等号同样源于初始条件。根据上式得到Θf(q,m)−Θ(q)=Θf(k,m)−Θ(k)\Theta_f (\boldsymbol{q}, m) - \Theta (\boldsymbol{q}) = \Theta_f (\boldsymbol{k}, m) - \Theta (\boldsymbol{k})Θf(q,m)−Θ(q)=Θf(k,m)−Θ(k),所以Θf(q,m)−Θ(q)\Theta_f (\boldsymbol{q}, m) - \Theta (\boldsymbol{q})Θf(q,m)−Θ(q)应该是一个只与mmm相关,跟q\boldsymbol{q}q无关的函数,记为φ(m)\varphi(m)φ(m),即Θf(q,m)=Θ(q)+φ(m)\Theta_f (\boldsymbol{q}, m) = \Theta (\boldsymbol{q}) + \varphi(m)Θf(q,m)=Θ(q)+φ(m)。接着带入n=m−1n=m-1n=m−1,整理得到
$$
\begin{equation}\varphi(m) - \varphi(m-1) = \Theta_g (\boldsymbol{q}, \boldsymbol{k}, 1) + \Theta (\boldsymbol{k}) - \Theta (\boldsymbol{q})\tag{8}\end{equation}
$$首先将n=m−1n=m-1n=m−1带入式(5)的第二个式子,得到
$$
\begin{aligned}
\Theta_f (\boldsymbol{q}, m) - \Theta_f (\boldsymbol{k}, m-1) =, \Theta_g (\boldsymbol{q}, \boldsymbol{k}, 1)
\end{aligned}
$$
上式两边同减Θ(q)\Theta(\boldsymbol{q})Θ(q)得
$$
\begin{aligned}
\Theta_f (\boldsymbol{q}, m) - \Theta(\boldsymbol{q}) - \Theta_f (\boldsymbol{k}, m-1) =, \Theta_g (\boldsymbol{q}, \boldsymbol{k}, 1) - \Theta(\boldsymbol{q})
\end{aligned}
$$
因为Θf(q,m)−Θ(q)=φ(m)\Theta_f (\boldsymbol{q}, m) - \Theta(\boldsymbol{q})=\varphi(m)Θf(q,m)−Θ(q)=φ(m),所以
$$
\begin{aligned}
\varphi(m) - \Theta_f (\boldsymbol{k}, m-1) =, \Theta_g (\boldsymbol{q}, \boldsymbol{k}, 1) - \Theta(\boldsymbol{q})
\end{aligned}
$$
上式两边同加Θ(k)\Theta(\boldsymbol{k})Θ(k)得
$$
\begin{aligned}
\varphi(m) + \Theta(\boldsymbol{k}) - \Theta_f (\boldsymbol{k}, m-1) =, \Theta_g (\boldsymbol{q}, \boldsymbol{k}, 1) + \Theta(\boldsymbol{k}) - \Theta(\boldsymbol{q})
\end{aligned}
$$
因为Θ(q)−Θf(q,m)=Θ(k)−Θf(k,m)\Theta (\boldsymbol{q}) - \Theta_f (\boldsymbol{q}, m) = \Theta (\boldsymbol{k}) - \Theta_f (\boldsymbol{k}, m)Θ(q)−Θf(q,m)=Θ(k)−Θf(k,m),所以
$$
\begin{aligned}
\varphi(m) + \Theta (\boldsymbol{q}) - \Theta_f (\boldsymbol{q}, m-1) =, \Theta_g (\boldsymbol{q}, \boldsymbol{k}, 1) + \Theta(\boldsymbol{k}) - \Theta(\boldsymbol{q})
\end{aligned}
$$
最后因为Θf(q,m−1)−Θ(q)=φ(m−1)\Theta_f (\boldsymbol{q}, m-1) - \Theta(\boldsymbol{q})=\varphi(m-1)Θf(q,m−1)−Θ(q)=φ(m−1),所以
$$
\begin{equation}\varphi(m) - \varphi(m-1) = \Theta_g (\boldsymbol{q}, \boldsymbol{k}, 1) + \Theta (\boldsymbol{k}) - \Theta (\boldsymbol{q})\end{equation}
$$说了这么多,就是为了证明φ(m){\varphi(m)}φ(m)是等差数列,设右端为θ\thetaθ,那么就解得φ(m)=mθ\varphi(m)=m\thetaφ(m)=mθ
编码形式
综上,我们得到二维情况下用复数表示的RoPE:
$$
\boldsymbol{f}(\boldsymbol{q},m)=R_f(\boldsymbol{q},m)e^{\text{i}\Theta_f(\boldsymbol{q},m)}=\Vert q\Vert e^{\text{i}(\Theta(q)+m\theta)}=\boldsymbol{q}e^{\text{i}m\theta}\tag{9}
$$$$
\begin{aligned}
\Vert q\Vert e^{\text{i}(\Theta(q)+m\theta)}&=\Vert q\Vert (e^{\text{i}\Theta(\boldsymbol{q})}\cdot e^{\text{i}m\theta}) \
&= (\Vert q\Vert e^{\text{i}\Theta(\boldsymbol{q})} )e^{\text{i}m\theta}\
&=\boldsymbol{q}e^{\text{i}m\theta}
\end{aligned}
$$根据复数乘法的几何意义,该变换实际上对应着向量的旋转,所以我们称之为"旋转式位置编码",它还可以写成矩阵形式:
$$
\begin{equation}
\boldsymbol{f}(\boldsymbol{q}, m) =\begin{pmatrix}\cos m\theta & -\sin m\theta\ \sin m\theta & \cos m\theta\end{pmatrix} \begin{pmatrix}q_0 \ q_1\end{pmatrix}\tag{10}\end{equation}
$$为什么旋转对应矩阵相乘,可以看这篇文章:旋转之一 - 复数与2D旋转,或者大家直接搜复数乘法与向量旋转
由于内积满足线性叠加性,因此任意偶数维的RoPE,我们都可以表示为二维情形的拼接,即
$$
\begin{equation}\scriptsize{\underbrace{\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}}{\boldsymbol{\mathcal{R}}m} \begin{pmatrix}q_0 \ q_1 \ q_2 \ q_3 \ \vdots \ q{d-2} \ q{d-1}\end{pmatrix}}\tag{11}\end{equation}
$$
也就是说,给位置为mmm的向量q\boldsymbol{q}q乘上矩阵Rm\boldsymbol{R}_mRm,位置为nnn的向量k\boldsymbol{k}k乘上矩阵Rn\boldsymbol{R}_nRn,用变换后的Q,K\boldsymbol{Q},\boldsymbol{K}Q,K序列做Attention,那么Attention就自动包含相对位置信息了,因为下列等式恒成立:
$$
\begin{equation}(\boldsymbol{\mathcal{R}}_m \boldsymbol{q})^{\top}(\boldsymbol{\mathcal{R}}_n \boldsymbol{k}) = \boldsymbol{q}^{\top} \boldsymbol{\mathcal{R}}_m^{\top}\boldsymbol{\mathcal{R}}n \boldsymbol{k} = \boldsymbol{q}^{\top} \boldsymbol{\mathcal{R}}{n-m} \boldsymbol{k}\tag{12}\end{equation}
$$总可以利用积化和差公式,使得cos\coscos或者sin\sinsin中带有(m−n)(m-n)(m−n)项
值得指出的是,Rm\boldsymbol{R}_mRm是一个正交矩阵,它不会改变向量的模长,因此通常来说它不会改变原模型的稳定性
由于R<em>m\boldsymbol{R}<em>mR<em>m的稀疏性,所以直接用矩阵乘法来实现会很浪费算力,推荐通过使用下述方式来实现RoPE:
$$
\begin{equation}\begin{pmatrix}q_0 \ q_1 \ q_2 \ q_3 \ \vdots \ q{d-2} \ q_{d-1}
\end{pmatrix}\otimes\begin{pmatrix}\cos m\theta_0 \ \cos m\theta_0 \ \cos m\theta_1 \ \cos m\theta_1 \ \vdots \ \cos m\theta_{d/2-1} \ \cos m\theta_{d/2-1}
\end{pmatrix} + \begin{pmatrix}-q_1 \ q_0 \ -q_3 \ q_2 \ \vdots \ -q_{d-1} \ q_{d-2}
\end{pmatrix}\otimes\begin{pmatrix}\sin m\theta_0 \ \sin m\theta_0 \ \sin m\theta_1 \ \sin m\theta_1 \ \vdots \ \sin m\theta_{d/2-1} \ \sin m\theta_{d/2-1}
\end{pmatrix}\tag{13}\end{equation}
$$
其中⊗\otimes⊗是逐位对应相乘,即Numpy、Tensorflow、PyTorch等计算框架中的∗*∗运算。从这个实现角度也可以看到,RoPE可以视为是乘性位置编码的变体远程衰减
可以看到,RoPE形式上和Sinusoidal位置编码有点相似,只不过Sinusoidal位置编码是加性的,而RoPE可以视为乘性的。在θi\theta_iθi的选择上,我们同样沿用了Sinusoidal位置编码的方案,即θi=10000−2i/d\theta_i=10000^{−2i/d}θi=10000−2i/d,它可以带来一定的远程衰减性
具体证明如下:将q,k\boldsymbol{q},\boldsymbol{k}q,k两两分组后,它们加上RoPE后的内积可以用复数乘法表示为
$$
\begin{equation}
(\boldsymbol{\mathcal{R}}m \boldsymbol{q})^{\top}(\boldsymbol{\mathcal{R}}n \boldsymbol{k}) = \text{Re}\left[\sum{i=0}^{d/2-1}\boldsymbol{q}{[2i:2i+1]}\boldsymbol{k}_{[2i:2i+1]}^* e^{\text{i}(m-n)\theta_i}\right]\tag{14}\end{equation}
$$式(14)主要是由式(12)变形得到
记hi=q<em>[2i:2i+1]k</em>[2i:2i+1]<em>,Sj=∑i=0j−1ei(m−n)θih_i = \boldsymbol{q}<em>{[2i:2i+1]}\boldsymbol{k}</em>{[2i:2i+1]}^<em>, S_j = \sum\limits_{i=0}^{j-1} e^{\text{i}(m-n)\theta_i}hi=q<em>[2i:2i+1]k</em>[2i:2i+1]<em>,Sj=i=0∑j−1ei(m−n)θi,并约定hd/2=0,S0=0h_{d/2}=0,S_0=0hd/2=0,S0=0,那么有:
$$
\begin{equation}\sum_{i=0}^{d/2-1}\boldsymbol{q}{[2i:2i+1]}\boldsymbol{k}{[2i:2i+1]}^ e^{\text{i}(m-n)\theta_i} = \sum_{i=0}^{d/2-1} h_i (S_{i
+1} - S_i) = -\sum_{i=0}^{d/2-1} S_{i+1}(h_{i+1} - h_i)\tag{15}\end{equation}
$$式(15)的第二个等式主要由Abel分部求和法得到(令d/2=nd/2=nd/2=n):
$$
\begin{aligned}
\sum_{i=0}^{n-1} h_i (S_{i
+1} - S_i)&=-0+h_{n-1}S_n-h_{n-1}S_{n-1}+h_{n-2}S_{n-1}-h_{n-2}S_{n-2}\cdots +h_0S_1-h_0S_0\
&=-h_{n}S_n+h_{n-1}S_n+\cdots +h_0S_1-h_0S_0\
&=\sum_{i=0}^{n-1}S_{i+1}(h_i-h_{i+1})\
&=-\sum_{i=0}^{n-1}S_{i+1}(h_{i+1}-h_i)
\end{aligned}
$$所以
$$
\begin{equation}\begin{aligned}
\left|\sum_{i=0}^{d/2-1}\boldsymbol{q}{[2i:2i+1]}\boldsymbol{k}{[2i:2i+1]}^* e^{\text{i}(m-n)\theta_i}\right| =&, \left|\sum_{i=0}^{d/2-1} S_{i+1}(h_{i+1} - h_i)\right| \
\leq&, \sum_{i=0}^{d/2-1} |S_{i+1}| |h_{i+1} - h_i| \
\leq&, \left(\max_i |h_{i+1} - h_i|\right)\sum_{i=0}^{d/2-1} |S_{i+1}|
\end{aligned}\tag{16}\end{equation}
$$
因此我们可以考察1d/2∑i=1d/2∣Si∣\frac{1}{d/2}\sum\limits_{i=1}^{d/2} |S_i|d/21i=1∑d/2∣Si∣随着相对距离变化的情况作为衰减性的体现,Mathematica代码如下d = 128; [Theta][t_] = 10000^(-2*t/d); f[m_] = Sum[ Norm[Sum[Exp[I*m*[Theta][i]], {i, 0, j}]], {j, 0, d/2 - 1}]/(d/2); Plot[f[m], {m, 0, 256}, AxesLabel -> {相对距离, 相对大小}]
结果如下图:
从途中我们可以看到,随着相对距离的变大,内积结果有衰减趋势的出现。因此,选择θi=10000−2i/d\theta_i=10000^{-2i/d}θi=10000−2i/d,确实能带来一定的远程衰减性。当然,同上一篇文章说的一样,能带来远程衰减性的不止这个选择,几乎任意的光滑单调函数都可以,这里只是沿用了已有的选择而已。苏剑林大佬还试过以θi=10000−2i/d\theta_i=10000^{-2i/d}θi=10000−2i/d为初始化,将θi\theta_iθi视为可训练参数,然后训练一段时间后发现θi\theta_iθi并没有显著更新,因此干脆就直接固定θi=10000−2i/d\theta_i=10000^{-2i/d}θi=10000−2i/d了
线性场景
最后,我们指出,RoPE是目前唯一一种可以用于线性Attention的相对位置编码。这是因为其他的相对位置编码,都是直接基于Attention矩阵进行操作的,但是线性Attention并没有事先算出Attention矩阵,因此也就不存在操作Attention矩阵的做法,所以其他的方案无法应用到线性Attention中。而对于RoPE来说,它是用绝对位置编码的方式来实现相关位置编码,不需要操作Attention矩阵,因此有了应用到线性Attention的可能性
关于线性Attention的介绍,这里不再重复,有需要的读者请参考《去掉 Attention 的 Softmax,复杂度降为 O (n)》。线性Attention的常见形式是:
$$
\begin{equation}Attention(\boldsymbol{Q},\boldsymbol{K},\boldsymbol{V})i = \frac{\sum\limits{j=1}^n \text{sim}(\boldsymbol{q}_i, \boldsymbol{k}_j)\boldsymbol{v}j}{\sum\limits{j=1}^n \text{sim}(\boldsymbol{q}_i, \boldsymbol{k}j)} = \frac{\sum\limits{j=1}^n \phi(\boldsymbol{q}_i)^{\top} \varphi(\boldsymbol{k}_j)\boldsymbol{v}j}{\sum\limits{j=1}^n \phi(\boldsymbol{q}_i)^{\top} \varphi(\boldsymbol{k}j)}\tag{17}\end{equation}
$$
其中ϕ,φ\phi,\varphiϕ,φ是值域非负的激活函数。可以看到,线性Attention也是基于内积的,所以很自然的想法是将RoPE插入到内积中:
$$
\begin{equation}\frac{\sum\limits{j=1}^n [\boldsymbol{\mathcal{R}}_i\phi(\boldsymbol{q}_i)]^{\top} [\boldsymbol{\mathcal{R}}_j\varphi(\boldsymbol{k}_j)]\boldsymbol{v}j}{\sum\limits{j=1}^n [\boldsymbol{\mathcal{R}}_i\phi(\boldsymbol{q}_i)]^{\top} [\boldsymbol{\mathcal{R}}_j\varphi(\boldsymbol{k}_j)]}\tag{18}\end{equation}
$$
但这样存在的问题是,[Riϕ(qi)]⊤[Rjφ(kj)][\boldsymbol{\mathcal{R}}_i\phi(\boldsymbol{q}_i)]^{\top} [\boldsymbol{\mathcal{R}}_j\varphi(\boldsymbol{k}_j)][Riϕ(qi)]⊤[Rjφ(kj)]可能为负数,因此它不再是常规的概率注意力,而且分母有0的风险,可能会带来优化上的不稳定,考虑到Ri,R<em>j\boldsymbol{R}_i,\boldsymbol{R}<em>jRi,R<em>j都是正交矩阵,它不改变向量的模长,因此我们可以抛弃常规的概率归一化要求,使用如下运算作为一种新的线性Attention:
$$
\begin{equation}\frac{\sum\limits{j=1}^n [\boldsymbol{\mathcal{R}}_i\phi(\boldsymbol{q}_i)]^{\top} [\boldsymbol{\mathcal{R}}_j\varphi(\boldsymbol{k}_j)]\boldsymbol{v}j}{\sum\limits{j=1}^n \phi(\boldsymbol{q}_i)^{\top} \varphi(\boldsymbol{k}_j)}\tag{19}\end{equation}
$$
也就是说,RoPE只插入分子中,而分母则不改变,这样的注意力不再是基于概率的(注意力矩阵不再满足归一性),但它某种意义上来说也是一个归一化方案,而且也没有证据表明非概率式的注意力就不好(比如Nyströmformer也算是没有严格依据概率分布的方式构筑注意力),所以我们将它作为候选方案之一进行实验,而我们初步的实验结果显示这样的线性Attention也是有效的此外,苏剑林大佬在《去掉 Attention 的 Softmax,复杂度降为 O (n)》中还提出过另外一种线性Attention方案:
$$
\text{sim}(\boldsymbol{q}_i, \boldsymbol{k}_j) = 1 + \left( \frac{\boldsymbol{q}_i}{\Vert \boldsymbol{q}_i\Vert}\right)^{\top}\left(\frac{\boldsymbol{k}_j}{\Vert \boldsymbol{k}_j\Vert}\right)\tag{20}
$$
它不依赖于值域的非负性,而RoPE也不改变模长,因此RoPE可以直接应用于此类线性Attention,并且不改变它的概率意义模型开源
关于模型开源部分请查看文章开头部分的Rotary Transformer(RoFormer)
Reference