旋转位置编码 RoPE 详解:从绝对位置编码到旋转变换
系统推导旋转位置编码:从绝对位置编码与正弦编码出发,讨论良好位置编码应满足的性质,再用复数与旋转矩阵的形式推导 RoPE 如何用绝对位置的旋转表达相对位置关系。 ## **1 问题引出** ### **1.1 背景** 整个 transformer 的前向传播过程如下所示: > 定义一个长度为 $N$ 的输入序列,$w_i$ 表示输入序列中第 $i$ 个 token,$x_i$ 表示第 $i$ 个 token $w_i$ 对应的 $d$ 维词嵌入向量,$q_m$ 表示第 $m$ 个 token 对应的词向量 $x_m$ 集成位置信息 $m$ 之后的 query 向量,而 $k_n $和 $v_n$ 则表示第 $n$ 个 token 对应的词向量 $x_n$ 集成位置信息 $n$ 之后的 key 和 value 向量,**基于 transformer 的位置编码方法都是着重于构造一个合适的 ****$f(q,k,v)$**** 函数形式**。计算第 $m$ 个词嵌入向量 $x_m$ 对应的 self-attention 输出结果,就是 $q_m$ 和其他 $k_n$ 都计算一个 attention score,然后再将 attention score 乘以对应的 $v_n$ 再求和得到输出向量 $o_m$ : $$ \begin{equation}\begin{split} q_m &= f_d(x_m, m) \\ k_n &= f_k(x_n, n) \\ v_n &= f_v(x_n, n) \\ a_{m,n} &= \frac{\text{exp}(\frac{q_m^{\intercal} k_n}{\sqrt{d}})}{\sum_{j=1}^N \text{exp}(\frac{q_m^{\intercal} k_j}{\sqrt{d}})} \\ o_m &= \sum_{n=1}^N a_{m,n} v_n \end{split}\end{equation} $$ 原始的 transformer 和 bert 这两篇论文中所使用的位置编码都是 "相加" 的方式,即如下公式: > 对于位置编码,常规的做法是在计算 query, key 和 value 向量之前,会计算一个位置编码向量 $p_i$ 加到词嵌入 $x_i$ 上,位置编码向量 $p_i$ 同样也是 $d$ 维向量,然后再乘以对应的变换矩阵 $W$: $$ \begin{equation}f_{\{q,k,v\}}(x_i,i)=W_{\{q,k,v\}}(x_i+p_i)\end{equation} $$ 不过 bert 中的位置编码是可训练的,transformer 中的编码是一种绝对位置编码,公式如下所示: $$ \begin{equation}\begin{split} PE_{(pos, 2i)} &= sin(pos/10000^{2i/d_{model}}) \\ PE_{(pos, 2i+1)} &= cos(pos/10000^{2i/d_{model}}) \end{split}\end{equation} $$ ### 1.2 **绝对位置编码** **绝对位置编码**通过可学习的Positional Embedding来编码位置信息,这种方案直接对不同的位置随机初始化一个postion embedding,然后与word embedding相加后输入模型。postion embedding作为模型参数的一部分,在训练过程中进行更新。比如下面是绝对位置编码的实现: undefined  可以看到每个位置都会被区分开,并且相邻的位置比较接近。这个方案的问题也非常明显,**不具备外推的性质**。长度在预设定好之后就被固定了。 ### 1.3 **正弦编码(Sinusoidal)** 基于Sinusoidal的位置编码最初是由谷歌在论文Attention is All You Need中提出的方案,用于Transformer的位置编码。通过sin和cos函数将位置编码的取值固定在了[-1, 1]之前,能够为模型提供每个token的绝对位置信息,但是为什么不用线性函数?而且这里面的10000是怎么想到的? 谷歌在论文里面给出了解释: - 具有**相对位置表达能力**:Sinusoidal可以学习到相对位置,对于固定位置距离的 $k$,$PE(i+k)$ 可以表示成 $PE(i)$的线性函数。 - 两个**位置向量的内积只和相对位置 k 有关**。即$PE(t+k)\times PE(t) = PE(t)\times PE(t-k)$ - Sinusoidal编码具有**对称性**。 - 随着 $k$ 的增加,内积的结果会直接减少,即会存在**远程衰减**。 选择sin,cos是因为可以表达相对位置,以及具备远程衰减。  随着base的变大,周期会明显变长。正弦和余弦函数的周期性可能导致位置信息的混淆。Transformer选择比较大的base=10000,可能是为了能更好的区分开每个位置。 ### **1.4 问题引出** 像原始的 transformer 和 bert 这两篇论文中所使用的位置编码都是仅从构造 q、k、v 这三个向量的环节考虑,在构造旋转位置编码时加上了计算注意力权重矩阵的过程,该位置编码的原始想法基于:**通过绝对位置编码的方式实现相对位置编码。**这句话对应的公式为: $$ \begin{equation}=g(q,k,m-n)\end{equation} $$ 对上述公式进行求解的过程较为复杂。下面先假设已经给出了答案,验证所给出的答案是否满足上述公式的要求。验证完成之后对旋转位置编码做一些直观的理解。待上面两部分都完成之后,再看如何由上式求解出最终的位置编码方案。 ### 1.5 良好的**位置编码** 一个好的位置编码应该满足以下条件: - 每个位置输出一个唯一的编码 - 具备良好的外推性 - 任何位置之间的相对距离在不同长度的句子中应该是一致的(指如果两个token在句子1中的相对距离为k,在句子2中的相对距离也是k,那么这两个句子中,两个token之间的相关性应该是一致的,即attention_sample1(token1, token2) = attention_sample2(token1, token2))  ## **2、验证答案的正确性** ### **2.1 待证明的问题** 已知如下条件,要求解 $f$ 和 $g$ 函数: $$ \begin{equation}=g(x_m,x_n,m-n)\end{equation} $$ 这里直接给出答案,然后验证该答案的正确性: $$ \begin{equation}\begin{split} f_q(x_m, m) &= (W_q x_m) e^{im\theta} \\ f_k(x_n, n) &= (W_k x_n) e^{in\theta} \\ g(x_m, x_n, m-n) &= Re \Big[(W_qx_m)(W_kx_n)^*e^{i(m-n)\theta}\Big] \end{split}\end{equation} $$ ### **2.2 证明过程** 使用欧拉公式可以将上述公式中的指数形式切换为三角函数形式,欧拉公式如下: $$ \begin{equation}e^{i\theta}=\cos \theta + i \sin\theta\end{equation} $$ 上述公式中的指数形式与三角函数形式切换的公式如下: $$ \begin{equation}\begin{split} e^{im\theta} &= \cos(m\theta) + i \sin(m\theta) \\ e^{in\theta} &= \cos(n\theta) + i \sin(n\theta) \\ e^{i(m-n)\theta} &= \cos((m-n)\theta) + i \sin((m-n)\theta) \end{split}\end{equation} $$ 仅考虑二维的情况,对 $f$ 函数进行变换和化简。其中 $q_m$ 如下所示: $$ \begin{equation}q_m = \begin{pmatrix} q^{(1)}_m \\ q^{(2)}_m \end{pmatrix} = W_q x_m = \begin{pmatrix} W^{(11)}_q & W^{(12)}_q \\ W^{(21)}_q & W^{(22)}_q \end{pmatrix}\begin{pmatrix} x^{(1)}_m \\ x^{(2)}_m \end{pmatrix}\end{equation} $$ 由于是二维的,可以直接将其写为复数形式,即:$q_m^{(1)} + i q_m^{(2)}$。这样$ f$ 函数就变成了纯粹的复数运算了。化简过程如下所示: $$ \begin{equation}f_d(x_m, m)=(W_q x_m) e^{im\theta} = q_m e^{im \theta}\end{equation} $$ $$ \begin{equation}\begin{split} q_m e^{im\theta} &= (q^{(1)}_m + i q^{(2)}_m) * (\cos(m\theta) + i \sin(m \theta)) \\ &=(q^{(1)}_m \cos(m\theta) - q^{(2)}_m \sin(m\theta)) + i(q^{(2)}_m \cos(m\theta) + q^{(1)}_m \sin(m\theta)) \end{split}\end{equation} $$ 再将化简后的 $q_m$ 写回向量形式,如下: $$ \begin{equation}\begin{split} q_m e^{im\theta} &= \begin{bmatrix} q^{(1)}_m \cos(m\theta) - q^{(2)}_m \sin(m\theta) \\ q^{(2)}_m \cos(m\theta) + q^{(1)}_m \sin(m\theta) \end{bmatrix} \end{split}\end{equation} $$ 可以看出这就是一个旋转矩阵,公式如下所示。也就是说:对 $q_m$ 乘上 $e^{im\theta}$ 就等同于对 $q_m$ 左乘上一个旋转矩阵。 $$ \begin{equation}\begin{split} f_d(x_m, m) &= (W_q x_m) e^{im\theta} = q_m e^{im \theta} \\ &= \begin{bmatrix} q^{(1)}_m \cos(m\theta) - q^{(2)}_m \sin(m\theta) \\ q^{(2)}_m \cos(m\theta) + q^{(1)}_m \sin(m\theta) \end{bmatrix} \\ &= \begin{bmatrix} \cos(m\theta) & -\sin(m\theta) \\ \sin(m\theta) & \cos(m\theta) \end{bmatrix}\begin{bmatrix} q^{(1)}_m \\ q^{(2)}_m \end{bmatrix} \end{split}\end{equation} $$ > 上述整个对函数 $f$ 的变形过程其实没有必要,放在这里只是为了加深理解。根据复数域极式下的乘法运算的几何含义可知:两个复数相乘,等于它们的模相乘,幅角相加。所以对向量 $q_m$ 乘上 $e^{im\theta}$ 的几何含义就是:模长不变,幅角向逆时针方向旋转 $m\theta$ 度。 上面求解出了 $f_q$ 的矩阵形式,下面使用同样的方法求解$f_k$ 的矩阵形式,结果如下: $$ \begin{equation}\begin{split} f_k(x_n,n) &= (W_k x_n) e^{in\theta} = k_n e^{in\theta} \\ &= \begin{bmatrix} k_n^{(1)} \cos(n\theta) - k_n^{(2)} \sin(n\theta) \\ k_n^{(2)} \cos(n\theta) + k_n^{(1)} \sin(n\theta) \end{bmatrix} \\ &= \begin{pmatrix} \cos(n\theta) & -\sin(n\theta) \\ \sin(n\theta) & \cos(n\theta) \end{pmatrix}\begin{pmatrix} k^{(1)}_n \\ k^{(2)}_n \end{pmatrix} \end{split}\end{equation} $$ 至此,原始公式中等号左侧的两个就都变形完成了。下面对 $g$ 函数做一下变形。 $$ \begin{equation}g(x_m, x_n, m-n) = Re \Big[(W_qx_m)(W_kx_n)^*e^{i(m-n)\theta}\Big]\end{equation} $$ 其中: $$ \begin{equation}\begin{split} W_q x_m &= q_m = q^{(1)}_m + i q^{(2)}_m \\ W_k x_n &= k_n = k^{(1)}_n + i k^{(2)}_n \\ (W_k x_n)^* &= k_n^* = k^{(1)}_n - i k^{(2)}_n \\ e^{i(m-n)\theta} &= \cos((m-n)\theta) + i \sin((m-n)\theta) \end{split}\end{equation} $$ 代进去继续变形得到: $$ \begin{equation}\begin{split} &\quad g(x_m, x_n, m-n) \\ &= Re \Big[(W_qx_m)(W_kx_n)^*e^{i(m-n)\theta}\Big] \\ &= Re \Big[ \Big(q^{(1)}_m + i q^{(2)}_m \Big) \Big(k^{(1)}_n - i k^{(2)}_n \Big) \Big(\cos((m-n)\theta) + i \sin((m-n)\theta) \Big) \Big]\\ &= Re \Big[ \Big((q^{(1)}_mk^{(1)}_n + q^{(2)}_mk^{(2)}_n) +i(q^{(2)}_mk^{(1)}_n - q^{(1)}_mk^{(2)}_n) \Big) \Big(\cos((m-n)\theta) + i \sin((m-n)\theta) \Big) \Big]\\ &= (q^{(1)}_mk^{(1)}_n + q^{(2)}_mk^{(2)}_n) \cos \big((m-n)\theta\big) - (q^{(2)}_mk^{(1)}_n - q^{(1)}_mk^{(2)}_n) \sin \big((m-n)\theta \big) \end{split}\end{equation} $$ 最后,就是把等号左侧的两个式子相乘得到结果,看起是否和等号右侧部分相同就可以了: $$ \begin{equation}\begin{split} f_q(x_m,m) &= \begin{bmatrix} q^{(1)}_m \cos(m\theta) - q^{(2)}_m \sin(m\theta) \\ q^{(2)}_m \cos(m\theta) + q^{(1)}_m \sin(m\theta) \end{bmatrix} \\ f_k(x_n,n) &= \begin{bmatrix} k_n^{(1)} \cos(n\theta) - k_n^{(2)} \sin(n\theta) \\ k_n^{(2)} \cos(n\theta) + k_n^{(1)} \sin(n\theta) \end{bmatrix} \\ \end{split}\end{equation} $$ $$ \begin{equation}\begin{split} &\quad\\ &= \Big(q^{(1)}_m \cos(m\theta) - q^{(2)}_m \sin(m\theta)\Big)\Big(k_n^{(1)} \cos(n\theta) - k_n^{(2)} \sin(n\theta)\Big) \\ &\quad + \Big(q^{(2)}_m \cos(m\theta) + q^{(1)}_m \sin(m\theta)\Big)\Big(k_n^{(2)} \cos(n\theta) + k_n^{(1)} \sin(n\theta)\Big) \\ &= q^{(1)}_m \cos(m\theta) k^{(1)}_n \cos(n\theta) - q^{(1)}_m \cos(m\theta) k^{(2)}_n \sin(n\theta) \\ &\quad - q^{(2)}_m \sin(m\theta) k^{(1)}_n \cos(n\theta) + q^{(2)}_m \sin(m\theta) k^{(2)}_n \sin(n\theta) \\ &\quad + q^{(2)}_m \cos(m\theta) k^{(2)}_n \cos(n\theta) + q^{(2)}_m \cos(m\theta) k^{(1)}_n \sin(n\theta) \\ &\quad + q^{(1)}_m \sin(m\theta) k^{(2)}_n \cos(n\theta) + q^{(1)}_m \sin(m\theta) k^{(1)}_n \sin(n\theta) \end{split}\end{equation} $$ 使用上三角恒等式,得到: $$ \begin{equation}\begin{split} &\quad\\ &= q^{(1)}_mk^{(1)}_n \Big(\cos(m\theta)\cos(n\theta)+\sin(m\theta)\sin(n\theta) \Big) \\ &\quad + q^{(1)}_mk^{(2)}_n \Big(-\cos(m\theta)\sin(n\theta)+\sin(m\theta)\cos(n\theta) \Big) \\ &\quad + q^{(2)}_mk^{(1)}_n \Big(-\sin(m\theta)\cos(n\theta)+\cos(m\theta)\sin(n\theta) \Big) \\ &\quad + q^{(2)}_mk^{(2)}_n \Big(\sin(m\theta)\sin(n\theta)+\cos(m\theta)\cos(n\theta) \Big) \\ &= q^{(1)}_mk^{(1)}_n\cos((m-n)\theta) + q^{(1)}_mk^{(2)}_n\sin((m-n)\theta) \\ &\quad - q^{(2)}_mk^{(1)}_n\sin((m-n)\theta) + q^{(2)}_mk^{(2)}_n\cos((m-n)\theta) \\ &=(q^{(1)}_mk^{(1)}_n+q^{(2)}_mk^{(2)}_n)\cos((m-n)\theta) + (q^{(1)}_mk^{(2)}_n-q^{(2)}_mk^{(1)}_n)\sin((m-n)\theta) \\ &=(q^{(1)}_mk^{(1)}_n+q^{(2)}_mk^{(2)}_n)\cos((m-n)\theta) - (q^{(2)}_mk^{(1)}_n-q^{(1)}_mk^{(2)}_n)\sin((m-n)\theta) \\ &= g(x_m,x_n,m-n) \end{split}\end{equation} $$ 到此,证明完毕。 ## **3、理解该位置编码在做什么** ### **3.1 完整公式** 上述整个证明过程都是在二维的情况下证明的,需要将其扩展到高维情况。高维情况时以矩阵的形式进行表示,公式如下: $$ \begin{equation}f_{\{q,k\}}(x_m,m)=R^d_{\Theta,m}W_{\{q,k\}}x_m\end{equation} $$ 上面公式中的 $R^d_{\Theta,m}$ 是一个由多个小二维旋转矩阵拼接的大矩阵。如下图所示,左侧的矩阵即为 $R^d_{\Theta,m}$: $$ \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}}\end{equation} $$ 其中 $\theta_i$ 的公式为: $$ \begin{equation}\theta_i = 10000^{-2(i-1)/d} \qquad i=1,2,...,d/2\end{equation} $$ 将 RoPE 应用到 Self-Attention 计算,可以得到**包含相对位置信息的Self-Attetion**: $$ \begin{equation}q_m^T k_n = \left( R_{\Theta,m}^d W_q x_m \right)^T \left( R_{\Theta,n}^d W_k x_n \right) = x_m^T W_q R_{\Theta,n-m}^d W_k x_n\end{equation} $$ 其中 $R_{\Theta,n-m}^d = \left( R_{\Theta,m}^d \right)^T R_{\Theta,n}^d$,由于 $R_{\Theta}^d$ 是一个正交矩阵,它不会改变向量的模长,因此通常来说它不会改变原模型的稳定性。 ### **3.2 直观理解** 下图是旋转位置编码的一个直观理解的图片。下图中的这条样本总共六个token:Enhanced、Transformer、with、Rotary、Position、Embedding,每个 token 对应一个 d 维的向量。把向量中的分量两两分组,对每组分量做一个旋转。 > RoPE 的 self-attention 操作的流程是:对于 token 序列中的每个词嵌入向量,首先计算其对应的 query 和 key 向量,然后对每个 token 位置都计算对应的旋转位置编码,接着对每个 token 位置的 query 和 key 向量的元素按照 **两两一组** 应用旋转变换,最后再计算 query 和 key 之间的内积得到 self-attention 的计算结果。  ### **3.3 旋转的角度大小** 每个 token 的每组分量的旋转角度为 $m\theta_i$,其中 $\theta_i$ 的公式为 $\theta_i = 10000^{-2(i-1)/d}$,下面先分析其增减性。(特别注意这里有两个不同维度的变量,后续的所有优化和改进都是在这两个变量上做文章) - 随着 token 所处的位置 $m$ 的增大,旋转角度增大,旋转速度变快,频率变大; - 随着分量位置 $i$ 的增大,旋转角度变小,旋转速度变慢,频率变小; 对于每个token所处的位置 $m$ 的不同,旋转角度的差异如下图所示:  对于分量位置 $i$ 的不同,旋转角度的差异如下图所示:  ## **4、问题求解** 直接见作者的原始文章,写的非常好:[https://kexue.fm/archives/8265#%E6%B1%82%E8%A7%A3%E8%BF%87%E7%A8%8B](https://kexue.fm/archives/8265#%E6%B1%82%E8%A7%A3%E8%BF%87%E7%A8%8B) 下面补充一些推导过程。 **原文章中公式(6)中的最后一个等号** 由于初始条件中 $f(q,0)=q$、$f(k,0)=k$,所以当 $m=0$ 时,$f(q,m)=R_f(q,m)e^{i\Theta_f(q,m)}=R_f(q,m)$, $$ \begin{equation}f(q,0)f(k,0)=R_f(q,0) R_f(k,0) e^{i\Theta_f(q,0)} e^{i\Theta_f(k,0)} = qk\end{equation} $$ 由复数的极式下向量的乘法可知,$q_k$ 的模就等于 $q$ 的模乘以 $k$ 的模。 **原文章中公式(8)的推导** 已知: $$ \begin{equation}\varphi(m)=\Theta_f(q,m)-\Theta(q) \end{equation} $$ $$ \begin{equation}\varphi(m)=\Theta_f(k,m)-\Theta(k) \end{equation} $$ 简单变换可得: $$ \begin{equation}\Theta_f(q,m)=\varphi(m)+\Theta(q) \end{equation} $$ $$ \begin{equation}\Theta_f(k,m)=\varphi(m)+\Theta(k) \end{equation} $$ 将上述两个式子代入到原文章中公式(5)的第二个式子可得: $$ \begin{equation}\Big(\varphi(m)+\Theta(q)\Big)-\Big(\varphi(m)+\Theta(k)\Big)=\Theta_g(q,k,m-n)\end{equation} $$ 将 $n=m−1$ 代入上式之后,做一个简单的变换就得到原文章中的公式(8)。原文章中的公式(8)的等号右侧里面 $q$ 和 $k$ 都是定值,只有位置 $m$ 和分量的索引 $i$ 是变量。所以等号后侧也是一个定值,所以$\varphi(m)$ 是一个等差数列。 ## **5、远程衰减** ### 5.1 作用和影响 **作用** - **模拟人类注意力机制**:人类在处理信息时,通常会更关注距离较近的内容,而对距离较远的内容关注度逐渐降低。RoPE的长期衰减特性符合这种直觉,使得模型能够更自然地模拟人类的注意力分配。 - **区分不同距离的词序关系**:在自然语言处理中,相隔较远的单词之间的关系通常比相隔较近的单词之间的关系更弱。通过远程衰减特性,RoPE能够使模型更好地理解和区分序列中的词序关系。 - **增强长距离依赖关系的捕获能力**:虽然RoPE的长期衰减会导致远距离位置信息的影响逐渐减弱,但这种特性也有助于模型在处理长序列时更好地关注重要的位置信息。 **影响** - **对长文本建模能力的挑战**:在长文本建模中,RoPE的长期衰减可能导致模型对远距离信息的捕捉能力减弱,从而影响模型的性能。 - **多模态任务中的影响**:在多模态任务中,如视觉语言模型,RoPE的长期衰减可能导致视觉令牌和指令令牌之间的信息流逐渐减弱,从而加剧对象幻觉问题。 ### 5.2 证明过程 可以看到,RoPE形式上和Sinusoidal位置编码有点相似,只不过Sinusoidal位置编码是加性的,而RoPE可以视为乘性的。在 $\theta_i$ 的选择上,我们同样沿用了Sinusoidal位置编码的方案,即 $\theta_i = 10000^{-2i/d}$,它可以带来一定的远程衰减性。 具体证明如下:将 $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]\end{equation} $$ 记$h_i = \boldsymbol{q}_{[2i:2i+1]}\boldsymbol{k}_{[2i:2i+1]}^*, S_j = \sum\limits_{i=0}^{j-1} e^{\text{i}(m-n)\theta_i}$,并约定 $h_{d/2}=0,S_0=0$,那么由[Abel变换(分部求和法)](https://zh.wikipedia.org/wiki/%E5%88%86%E9%83%A8%E6%B1%82%E5%92%8C%E6%B3%95)可以得到: $$ \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)\end{equation} $$ 所以 $$ \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}\end{equation} $$ 因此我们可以考察 $\frac{1}{d/2}\sum\limits_{i=1}^{d/2} |S_i|$ 随着相对距离的变化情况来作为衰减性的体现:  从图中我们可以看到**随着相对距离的变大,内积结果有衰减趋势**的出现。因此,选择 $\theta_i = 10000^{-2i/d}$,确实能带来一定的远程衰减性。论文中还试过以 $\theta_i = 10000^{-2i/d}$ 为初始化,将 $\theta_i$ 视为可训练参数,然后训练一段时间后发现$\theta_i$ 并没有显著更新,因此干脆就直接固定 $\theta_i = 10000^{-2i/d}$ 了。 # **Reference** - [https://kexue.fm/archives/8130](https://kexue.fm/archives/8130) - [https://kexue.fm/archives/8265](https://kexue.fm/archives/8265) - [https://zhuanlan.zhihu.com/p/642884818](https://zhuanlan.zhihu.com/p/642884818) - [https://zhuanlan.zhihu.com/p/667864459](https://zhuanlan.zhihu.com/p/667864459) - [https://zhuanlan.zhihu.com/p/670280576](https://zhuanlan.zhihu.com/p/670280576) # **其他** 该种位置编码的整个求解公式都基于一句话:**通过绝对位置编码的方式实现相对位置编码**。这句话对应的公式为: $$ \begin{equation}=g(q,k,m-n)\end{equation} $$ 这里看一下右半部分求解之后的最终结果(注意该结果仅为理论结果,代码实现中是按照上述公式的左侧部分实现的)。下图是对于整个注意力权重矩阵求解之后的结果,可以看出在最终的结果中仅有 $m−n$ 这一项,不存在单独的 $m$ 或者 $n$,这也就是说最终的注意力权重仅跟两个 token 之间的相对位置有关,与每个 token 的绝对位置是无关的。 ](../images/notion_1837301034.png)
本文结束 感谢您的阅读

