Transformer 位置编码

绝对 & 相对位置编码

绝对位置编码

  • 一般来说,绝对位置编码会加到输入中:在输入的第 k k k 个向量 x k x_k xk 中加入位置向量 p k p_k pk 变为 x k + p k x_k+p_k xk+pk,其中 p k p_k pk 只依赖于位置编号 k k k

  • 训练式 (BERT、GPT). 直接将位置编码当作可训练参数,比如最大长度为 512,编码维度为 768,那么就初始化一个 512 × 768 512×768 512×768 的矩阵作为位置向量,让它随着训练过程更新;缺点是没有外推性,即如果预训练最大长度为 512 的话,那么最多就只能处理长度为 512 的句子
  • 三角式 (Sinusoidal 位置编码).
    { p k , 2 i = sin ⁡ ( k / 1000 0 2 i / d ) p k , 2 i + 1 = cos ⁡ ( k / 1000 0 2 i / d ) \left\{\begin{aligned}&\boldsymbol{p}_{k,2i}=\sin\Big(k/10000^{2i/d}\Big)\\ &\boldsymbol{p}_{k, 2i+1}=\cos\Big(k/10000^{2i/d}\Big) \end{aligned}\right. pk,2i=sin(k/100002i/d)pk,2i+1=cos(k/100002i/d)其中 p k , 2 i , p k , 2 i + 1 p_{k,2i},p_{k,2i+1} pk,2i,pk,2i+1 分别是位置 k k k 的编码向量的第 2 i , 2 i + 1 2i,2i+1 2i,2i+1 个分量, d d d 是位置向量的维度。很明显,三角函数式位置编码的特点是有显式的生成规律,因此可以期望于它有一定的外推性。另外一个使用它的理由是:由于 sin ⁡ ( α + β ) = sin ⁡ α cos ⁡ β + cos ⁡ α sin ⁡ β \sin(\alpha+\beta)=\sin\alpha\cos\beta+\cos\alpha\sin\beta sin(α+β)=sinαcosβ+cosαsinβ 以及 cos ⁡ ( α + β ) = cos ⁡ α cos ⁡ β − sin ⁡ α sin ⁡ β \cos(\alpha+\beta)=\cos\alpha\cos\beta-\sin\alpha\sin\beta cos(α+β)=cosαcosβsinαsinβ,这表明位置 α + β α+β α+β 的向量可以表示成位置 α α α 和位置 β β β 的向量组合,这提供了表达相对位置信息的可能性
  • 递归式. 在输入后面先接一层 RNN,然后再接 Transformer,那么理论上就不需要加位置编码了。同理,我们也可以用 RNN 模型来学习一种绝对位置编码,比如从一个向量 p 0 p_0 p0 出发,通过递归格式 p k + 1 = f ( p k ) p_{k+1}=f(p_k) pk+1=f(pk) 来得到各个位置的编码向量. ICML 2020 的论文《Learning to Encode Position for Transformer with Continuous Dynamical Model》把这个思想推到了极致,它提出了用微分方程(ODE) d p t / d t = h ( p t , t ) dp_t/dt=h(p_t,t) dpt/dt=h(pt,t) 的方式来建模位置编码,该方案称之为 FLOATER,函数 h ( p t , t ) h(p_t,t) h(pt,t) 可以通过神经网络来建模,因此这种微分方程也称为神经微分方程。理论上来说,基于递归模型的位置编码也具有比较好的外推性,同时它也比三角函数式的位置编码有更好的灵活性(比如容易证明三角函数式的位置编码就是 FLOATER 的某个特解)。但是很明显,递归形式的位置编码牺牲了一定的并行性,可能会带速度瓶颈
  • 相乘式. 融合位置编码时使用逐元素乘而非逐元素加

相对位置编码

  • 相对位置并没有完整建模每个输入的位置信息,而是在算 Attention 的时候考虑当前位置与被 Attention 的位置的相对距离,由于自然语言一般更依赖于相对位置,所以相对位置编码通常也有着优秀的表现

  • 经典式. 相对位置编码起源于 Google 的论文《Self-Attention with Relative Position Representations》. 一般认为,相对位置编码是由绝对位置编码启发而来,考虑一般的带绝对位置编码的 Attention:
    { q i =   ( x i + p i ) W Q k j =   ( x j + p j ) W K v j =   ( x j + p j ) W V a i , j =   s o f t m a x ( q i k j ⊤ ) o i =   ∑ j a i , j v j \left\{\begin{aligned} \boldsymbol{q}_i =&\, (\boldsymbol{x}_i + \boldsymbol{p}_i)\boldsymbol{W}_Q \\ \boldsymbol{k}_j =&\, (\boldsymbol{x}_j + \boldsymbol{p}_j)\boldsymbol{W}_K \\ \boldsymbol{v}_j =&\, (\boldsymbol{x}_j + \boldsymbol{p}_j)\boldsymbol{W}_V \\ a_{i,j} =&\, softmax\left(\boldsymbol{q}_i \boldsymbol{k}_j^{\top}\right)\\ \boldsymbol{o}_i =&\, \sum_j a_{i,j}\boldsymbol{v}_j \end{aligned}\right. qi=kj=vj=ai,j=oi=(xi+pi)WQ(xj+pj)WK(xj+pj)WVsoftmax(qikj)jai,jvj我们初步展开 q i k j ⊤ \boldsymbol{q}_i \boldsymbol{k}_j^{\top} qikj
    q i k j ⊤ = ( x i + p i ) W Q W K ⊤ ( x j + p j ) ⊤ = ( x i W Q + p i W Q ) ( W K ⊤ x j ⊤ + W K ⊤ p j ⊤ ) \boldsymbol{q}_i \boldsymbol{k}_j^{\top} = \left(\boldsymbol{x}_i + \boldsymbol{p}_i\right)\boldsymbol{W}_Q \boldsymbol{W}_K^{\top}\left(\boldsymbol{x}_j + \boldsymbol{p}_j\right)^{\top} = \left(\boldsymbol{x}_i \boldsymbol{W}_Q + \boldsymbol{p}_i \boldsymbol{W}_Q\right)\left(\boldsymbol{W}_K^{\top}\boldsymbol{x}_j^{\top} + \boldsymbol{W}_K^{\top}\boldsymbol{p}_j^{\top}\right) qikj=(xi+pi)WQWK(xj+pj)=(xiWQ+piWQ)(WKxj+WKpj)为了引入相对位置信息,Google 把第一项位置信息去掉,第二项位置信息 p j W K \boldsymbol{p}_j \boldsymbol{W}_K pjWK 改为二元位置向量 R i , j K \boldsymbol{R}_{i,j}^{K} Ri,jK,变成
    a i , j = s o f t m a x ( x i W Q ( x j W K + R i , j K ) ⊤ ) a_{i,j} = softmax\left(\boldsymbol{x}_i \boldsymbol{W}_Q\left(\boldsymbol{x}_j\boldsymbol{W}_K +\boldsymbol{R}_{i,j}^K\right)^{\top}\right) ai,j=softmax(xiWQ(xjWK+Ri,jK))以及 o i = ∑ j a i , j v j = ∑ j a i , j ( x j W V + p j W V ) \boldsymbol{o}_i =\sum\limits_j a_{i,j}\boldsymbol{v}_j = \sum\limits_j a_{i,j}(\boldsymbol{x}_j\boldsymbol{W}_V + \boldsymbol{p}_j\boldsymbol{W}_V) oi=jai,jvj=jai,j(xjWV+pjWV) 中的 p j W V \boldsymbol{p}_j\boldsymbol{W}_V pjWV 换成 R i , j V \boldsymbol{R}_{i,j}^{V} Ri,jV
    o i = ∑ j a i , j ( x j W V + R i , j V ) \boldsymbol{o}_i = \sum_j a_{i,j}\left(\boldsymbol{x}_j\boldsymbol{W}_V + \boldsymbol{R}_{i,j}^{V}\right) oi=jai,j(xjWV+Ri,jV)一般还会对相对位置 i − j i-j ij 进行截断:
    R i , j K = p K [ clip ( i − j , p min ⁡ , p max ⁡ ) ] R i , j V = p V [ clip ( i − j , p min ⁡ , p max ⁡ ) ] \begin{aligned} \boldsymbol{R}_{i,j}^{K} = \boldsymbol{p}_K\left[\text{clip}(i-j, p_{\min}, p_{\max})\right]\\ \boldsymbol{R}_{i,j}^{V} = \boldsymbol{p}_V\left[\text{clip}(i-j, p_{\min}, p_{\max})\right] \end{aligned} Ri,jK=pK[clip(ij,pmin,pmax)]Ri,jV=pV[clip(ij,pmin,pmax)]这样一来,只需要有限个位置编码,就可以表达出任意长度的相对位置(因为进行了截断),不管 p K , p V \boldsymbol{p}_K,\boldsymbol{p}_V pK,pV 是选择可训练式的还是三角函数式的,都可以达到处理任意长度文本的需求
  • XLNET 式. 源自 Transformer-XL 的论文《Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context》. 对上述 q i k j ⊤ \boldsymbol{q}_i \boldsymbol{k}_j^{\top} qikj 完全展开可得:
    q i k j ⊤ = x i W Q W K ⊤ x j ⊤ + x i W Q W K ⊤ p j ⊤ + p i W Q W K ⊤ x j ⊤ + p i W Q W K ⊤ p j ⊤ \boldsymbol{q}_i \boldsymbol{k}_j^{\top} = \boldsymbol{x}_i \boldsymbol{W}_Q \boldsymbol{W}_K^{\top}\boldsymbol{x}_j^{\top} + \boldsymbol{x}_i \boldsymbol{W}_Q \boldsymbol{W}_K^{\top}\boldsymbol{p}_j^{\top} + \boldsymbol{p}_i \boldsymbol{W}_Q \boldsymbol{W}_K^{\top}\boldsymbol{x}_j^{\top} + \boldsymbol{p}_i \boldsymbol{W}_Q \boldsymbol{W}_K^{\top}\boldsymbol{p}_j^{\top} qikj=xiWQWKxj+xiWQWKpj+piWQWKxj+piWQWKpjTransformer-XL 的做法很简单,直接将 p j \boldsymbol{p}_j pj 替换为相对位置向量 R i − j \boldsymbol{R}_{i-j} Rij,至于两个 p i \boldsymbol{p}_i pi,则干脆替换为两个可训练的向量 u , v \boldsymbol{u},\boldsymbol{v} u,v
    x i W Q W K ⊤ x j ⊤ + x i W Q W K ⊤ R i − j ⊤ + u W Q W K ⊤ x j ⊤ + v W Q W K ⊤ R i − j ⊤ \boldsymbol{x}_i \boldsymbol{W}_Q \boldsymbol{W}_K^{\top}\boldsymbol{x}_j^{\top} + \boldsymbol{x}_i \boldsymbol{W}_Q \boldsymbol{W}_K^{\top}{\boldsymbol{R}_{i-j}^{\top}} + {\boldsymbol{u}}\boldsymbol{W}_Q \boldsymbol{W}_K^{\top}\boldsymbol{x}_j^{\top} +{\boldsymbol{v}} \boldsymbol{W}_Q \boldsymbol{W}_K^{\top}{\boldsymbol{R}_{i-j}^{\top}} xiWQWKxj+xiWQWKRij+uWQWKxj+vWQWKRij该编码方式中的 R i − j \boldsymbol{R}_{i-j} Rij 没有进行截断,而是直接用了 Sinusoidal 式的生成方案,由于 R i − j \boldsymbol{R}_{i-j} Rij 的编码空间与 x j \boldsymbol{x}_{j} xj 不一定相同,所以 R i − j \boldsymbol{R}_{i-j} Rij 前面的 W K ⊤ \boldsymbol{W}_K^{\top} WK 换了另一个独立的矩阵 W K , R ⊤ \boldsymbol{W}_{K,R}^{\top} WK,R,还有 u W Q {\boldsymbol{u}}\boldsymbol{W}_Q uWQ v W Q {\boldsymbol{v}}\boldsymbol{W}_Q vWQ 可以直接合并为单个 u \boldsymbol{u} u v \boldsymbol{v} v,所以最终使用的式子是
    x i W Q W K ⊤ x j ⊤ + x i W Q W K , R ⊤ R i − j ⊤ + u W K ⊤ x j ⊤ + v W K , R ⊤ R i − j ⊤ \boldsymbol{x}_i \boldsymbol{W}_Q \boldsymbol{W}_K^{\top}\boldsymbol{x}_j^{\top} + \boldsymbol{x}_i \boldsymbol{W}_Q \boldsymbol{W}_{K,R}^{\top}{\boldsymbol{R}_{i-j}^{\top}} + {\boldsymbol{u}}\boldsymbol{W}_K^{\top}\boldsymbol{x}_j^{\top} +{\boldsymbol{v}} \boldsymbol{W}_{K,R}^{\top}{\boldsymbol{R}_{i-j}^{\top}} xiWQWKxj+xiWQWK,RRij+uWKxj+vWK,RRij此外, v j \boldsymbol{v}_j vj 上的位置偏置就直接去掉了,似乎从这个工作开始,后面的相对位置编码都只加到 Attention 矩阵上去,而不加到 v j \boldsymbol{v}_j vj 上去了
  • T5 式. 源自 T5 的论文《Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer》. 它直接将相对位置编码简化为 (去掉了 q i k j ⊤ \boldsymbol{q}_i \boldsymbol{k}_j^{\top} qikj 展开式中的第 2、3 项,只保留第 4 项并替换为相对位置编码)
    x i W Q W K ⊤ x j ⊤ + β i , j \boldsymbol{x}_i \boldsymbol{W}_Q \boldsymbol{W}_K^{\top}\boldsymbol{x}_j^{\top} +{\boldsymbol{\beta}_{i,j}} xiWQWKxj+βi,j包含同样的思想的还有微软在 ICLR 2021 的论文《Rethinking Positional Encoding in Language Pre-training》中提出的 TUPE 位置编码。比较 “别致” 的是,不同于常规位置编码对将 β i , j \boldsymbol{\beta}_{i,j} βi,j 视为 i − j i−j ij 的函数并进行截断的做法,T5 对相对位置进行了一个 “分桶” 处理,即相对位置是 i − j i−j ij 的位置实际上对应的是 f ( i − j ) f(i−j) f(ij) 位置,映射关系如下:
    i − j 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 f ( i − j ) 0 1 2 3 4 5 6 7 8 8 8 8 9 9 9 9 i − j 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ⋯ f ( i − j ) 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 ⋯ \begin{array}{c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c} \hline i - j & 0 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15\\ \hline f(i-j) & 0 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 8 & 8 & 8 & 9 & 9 & 9 & 9 \\ \hline i - j & 16 & 17 & 18 & 19 & 20 & 21 & 22 & 23 & 24 & 25 & 26 & 27 & 28 & 29 & 30 & \cdots\\ \hline f(i-j) & 10 & 10 & 10 & 10 & 10 & 10 & 10 & 11 & 11 & 11 & 11 & 11 & 11 & 11 & 11 & \cdots \\ \hline\end{array} ijf(ij)ijf(ij)00161011171022181033191044201055211066221077231188241198251110826111182711129281113929111493011159这个设计的思路其实也很直观,就是比较邻近的位置(0~7),我们需要比较得精细一些,所以给它们都分配一个独立的位置编码,至于稍远的位置(比如 8~11),我们不用区分得太清楚,所以它们可以共用一个位置编码,距离越远,共用的范围就可以越大,直到达到指定范围再 clip
  • DeBERTa 式. 源自 DeBERTa 的论文《DeBERTa: Decoding-enhanced BERT with Disentangled Attention》. DeBERTa 和 T5 刚刚相反,它扔掉了 q i k j ⊤ \boldsymbol{q}_i \boldsymbol{k}_j^{\top} qikj 展开式中的第 4 项,保留第 2、3 项并且替换为相对位置编码
    q i k j ⊤ = x i W Q W K ⊤ x j ⊤ + x i W Q W K ⊤ R i , j ⊤ + R j , i W Q W K ⊤ x j ⊤ \boldsymbol{q}_i \boldsymbol{k}_j^{\top} = \boldsymbol{x}_i \boldsymbol{W}_Q \boldsymbol{W}_K^{\top}\boldsymbol{x}_j^{\top} + \boldsymbol{x}_i \boldsymbol{W}_Q \boldsymbol{W}_K^{\top}{\boldsymbol{R}_{i,j}^{\top}} +{\boldsymbol{R}_{j,i}} \boldsymbol{W}_Q \boldsymbol{W}_K^{\top}\boldsymbol{x}_j^{\top} qikj=xiWQWKxj+xiWQWKRi,j+Rj,iWQWKxj至于 R i , j \boldsymbol{R}_{i,j} Ri,j 的设计也是像经典式那样进行截断的,没有特别的地方。不过,DeBERTa 比较有意思的地方,是提供了使用相对位置和绝对位置编码的一个新视角,它指出 NLP 的大多数任务可能都只需要相对位置信息,但确实有些场景下绝对位置信息更有帮助,于是它将整个模型分为两部分来理解。以 Base 版的 MLM 预训练模型为例,它一共有 13 层,前 11 层只是用相对位置编码,后面 2 层加入绝对位置信息

旋转式位置编码 (Rotary Position Embedding,RoPE)

  • 一般来说,绝对位置编码具有实现简单、计算速度快等优点,而相对位置编码则直接地体现了相对位置信号,跟我们的直观理解吻合,实际性能往往也更好。由此可见,如果可以通过绝对位置编码的方式实现相对位置编码,那么就是 “集各家之所长”、“鱼与熊掌兼得” 了。而 RoPE 配合 Attention 机制就能达到 “绝对位置编码的方式实现相对位置编码” 的设计,具有比较好的外推性

  • 基本思路. 我们假设通过下述运算来给 q , k \boldsymbol{q},\boldsymbol{k} q,k 添加绝对位置信息
    q ~ m = f ( q , m ) , k ~ n = f ( k , n ) \tilde{\boldsymbol{q}}_m = \boldsymbol{f}(\boldsymbol{q}, m), \quad\tilde{\boldsymbol{k}}_n = \boldsymbol{f}(\boldsymbol{k}, n) q~m=f(q,m),k~n=f(k,n)Attention 的核心运算是内积,所以我们希望的内积的结果带有相对位置信息,因此假设存在恒等关系:
    ⟨ f ( q , m ) , f ( k , n ) ⟩ = g ( q , k , m − n ) \langle\boldsymbol{f}(\boldsymbol{q}, m), \boldsymbol{f}(\boldsymbol{k}, n)\rangle = g(\boldsymbol{q},\boldsymbol{k},m-n) f(q,m),f(k,n)⟩=g(q,k,mn)所以我们要求出该恒等式的一个(尽可能简单的)解
  • 求解过程. 我们先考虑二维情形,然后借助复数来求解。在复数中有 ⟨ q , k ⟩ = Re [ q k ∗ ] \langle\boldsymbol{q},\boldsymbol{k}\rangle=\text{Re}[\boldsymbol{q}\boldsymbol{k}^*] q,k=Re[qk] Re [ ] \text{Re}[] Re[] 代表复数的实部 (这里是把二维向量 ( a , b ) (a, b) (a,b) 看作复数 a + b i a+bi a+bi),所以我们有
    Re [ f ( q , m ) f ∗ ( k , n ) ] = g ( q , k , m − n ) \text{Re}[\boldsymbol{f}(\boldsymbol{q}, m)\boldsymbol{f}^*(\boldsymbol{k}, n)] = g(\boldsymbol{q},\boldsymbol{k},m-n) Re[f(q,m)f(k,n)]=g(q,k,mn)然后我们用复数的指数形式,设
    f ( q , m ) =   R f ( q , m ) e i Θ f ( q , m ) f ( k , n ) =   R f ( k , n ) e i Θ f ( k , n ) g ( q , k , m − n ) =   R g ( q , k , m − n ) e i Θ g ( q , k , m − n ) \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} f(q,m)=f(k,n)=g(q,k,mn)=Rf(q,m)eiΘf(q,m)Rf(k,n)eiΘf(k,n)Rg(q,k,mn)eiΘg(q,k,mn)那么代入方程后就得到方程组
    R f ( q , m ) R f ( k , n ) =   R g ( q , k , m − n ) Θ f ( q , m ) − Θ f ( k , n ) =   Θ g ( q , k , m − n ) \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} Rf(q,m)Rf(k,n)=Θf(q,m)Θf(k,n)=Rg(q,k,mn)Θg(q,k,mn)求解过程还需要一些初始条件,显然我们可以合理地设 R f ( q , 0 ) = ∥ q ∥ , R f ( k , 0 ) = ∥ k ∥ R_f(\boldsymbol{q}, 0)=\|\boldsymbol{q}\|,R_f(\boldsymbol{k}, 0)=\|\boldsymbol{k}\| Rf(q,0)=q,Rf(k,0)=k Θ f ( q , 0 ) = Θ ( q ) , Θ f ( k , 0 ) = Θ ( k ) \Theta_f (\boldsymbol{q}, 0)=\Theta (\boldsymbol{q}),\Theta_f (\boldsymbol{k}, 0)=\Theta (\boldsymbol{k}) Θf(q,0)=Θ(q),Θf(k,0)=Θ(k). 对于第一个方程,代入 m = n m=n m=n 得到
    R g ( q , k , 0 ) = R f ( q , 0 ) R f ( k , 0 ) = ∥ q ∥ ∥ k ∥ 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 Rg(q,k,0)=Rf(q,0)Rf(k,0)=q∥∥k所以现在我们可以很简单地设
    R f ( q , m ) = ∥ q ∥ , R f ( k , m ) = ∥ k ∥ R_f (\boldsymbol{q}, m)=\Vert \boldsymbol{q}\Vert, R_f (\boldsymbol{k}, m)=\Vert \boldsymbol{k}\Vert Rf(q,m)=q,Rf(k,m)=k至于第二个方程,同样代入 m = n m=n m=n 得到
    Θ f ( q , m ) − Θ f ( k , m ) = Θ g ( q , k , 0 ) = Θ f ( q , 0 ) − Θ f ( k , 0 ) = Θ ( q ) − Θ ( k ) \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}) Θf(q,m)Θf(k,m)=Θg(q,k,0)=Θf(q,0)Θf(k,0)=Θ(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) 应该是一个只与 m m m 相关、跟 q \boldsymbol q q 无关的函数,记为 φ ( m ) φ(m) φ(m),即 Θ f ( q , m ) = Θ ( q ) + φ ( m ) \Theta_f (\boldsymbol{q}, m) = \Theta (\boldsymbol{q}) + \varphi(m) Θf(q,m)=Θ(q)+φ(m)接着代入 n = m − 1 n=m−1 n=m1,整理得到
    φ ( m ) − φ ( m − 1 ) = Θ g ( q , k , 1 ) + Θ ( k ) − Θ ( q ) \varphi(m) - \varphi(m-1) = \Theta_g (\boldsymbol{q}, \boldsymbol{k}, 1) + \Theta (\boldsymbol{k}) - \Theta (\boldsymbol{q}) φ(m)φ(m1)=Θg(q,k,1)+Θ(k)Θ(q) { φ ( m ) } \{φ(m)\} {φ(m)} 是等差数列,设右端为 θ θ θ,那么就解得 φ ( m ) = m θ φ(m)=mθ φ(m)=mθ
  • 编码形式. 综上,我们得到二维情况下用复数表示的 RoPE:
    f ( q , m ) = R f ( q , m ) e i Θ f ( q , m ) = ∥ q ∥ e i ( Θ ( q ) + m θ ) = q e i m θ \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(\boldsymbol{q}) + m\theta)} = \boldsymbol{q} e^{\text{i}m\theta} f(q,m)=Rf(q,m)eiΘf(q,m)=qei(Θ(q)+mθ)=qeimθ根据复数乘法的几何意义,该变换实际上对应着向量的旋转,所以我们称之为 “旋转式位置编码”,它还可以写成矩阵形式:
    f ( q , m ) = ( cos ⁡ m θ − sin ⁡ m θ sin ⁡ m θ cos ⁡ m θ ) ( q 0 q 1 ) \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} f(q,m)=(cosmθsinmθsinmθcosmθ)(q0q1)由于内积满足线性叠加性,因此任意偶数维的 RoPE,我们都可以表示为二维情形的拼接,即
    ( cos ⁡ m θ 0 − sin ⁡ m θ 0 0 0 ⋯ 0 0 sin ⁡ m θ 0 cos ⁡ m θ 0 0 0 ⋯ 0 0 0 0 cos ⁡ m θ 1 − sin ⁡ m θ 1 ⋯ 0 0 0 0 sin ⁡ m θ 1 cos ⁡ m θ 1 ⋯ 0 0 ⋮ ⋮ ⋮ ⋮ ⋱ ⋮ ⋮ 0 0 0 0 ⋯ cos ⁡ m θ d / 2 − 1 − sin ⁡ m θ d / 2 − 1 0 0 0 0 ⋯ sin ⁡ m θ d / 2 − 1 cos ⁡ m θ d / 2 − 1 ) ⏟ R m ( q 0 q 1 q 2 q 3 ⋮ q d − 2 q d − 1 ) \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}} Rm cosmθ0sinmθ00000sinmθ0cosmθ0000000cosmθ1sinmθ10000sinmθ1cosmθ1000000cosmθd/21sinmθd/210000sinmθd/21cosmθd/21 q0q1q2q3qd2qd1 Attention 计算可以写为
    ( R m q ) ⊤ ( R n k ) = q ⊤ R m ⊤ R n k = q ⊤ R n − m k (\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} (Rmq)(Rnk)=qRmRnk=qRnmk值得指出的是, R m \boldsymbol{\mathcal{R}}_m Rm 是一个正交矩阵,它不会改变向量的模长,因此通常来说它不会改变原模型的稳定性。由于 R m \boldsymbol{\mathcal{R}}_m Rm 的稀疏性,所以直接用矩阵乘法来实现会很浪费算力,推荐通过下述方式来实现 RoPE:
    ( q 0 q 1 q 2 q 3 ⋮ q d − 2 q d − 1 ) ⊗ ( cos ⁡ m θ 0 cos ⁡ m θ 0 cos ⁡ m θ 1 cos ⁡ m θ 1 ⋮ cos ⁡ m θ d / 2 − 1 cos ⁡ m θ d / 2 − 1 ) + ( − q 1 q 0 − q 3 q 2 ⋮ − q d − 1 q d − 2 ) ⊗ ( sin ⁡ m θ 0 sin ⁡ m θ 0 sin ⁡ m θ 1 sin ⁡ m θ 1 ⋮ sin ⁡ m θ d / 2 − 1 sin ⁡ m θ d / 2 − 1 ) \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}\end{equation} q0q1q2q3qd2qd1 cosmθ0cosmθ0cosmθ1cosmθ1cosmθd/21cosmθd/21 + q1q0q3q2qd1qd2 sinmθ0sinmθ0sinmθ1sinmθ1sinmθd/21sinmθd/21 其中 ⊗ ⊗ 是逐位对应相乘。从这个实现也可以看到,RoPE可以视为是乘性位置编码的变体
  • 远程衰减. 可以看到,RoPE 形式上和 Sinusoidal 位置编码有点相似,只不过 Sinusoidal 位置编码是加性的,而 RoPE 可以视为乘性的。 θ i θ_i θi 的选择上,RoPE 同样沿用了 Sinusoidal 位置编码的方案,即 θ i = 1000 0 − 2 i / d θ_i=10000^{−2i/d} θi=100002i/d,它可以带来一定的远程衰减性。具体证明如下:将 q , k \boldsymbol{q},\boldsymbol{k} q,k 两两分组后,它们加上 RoPE 后的内积可以用复数乘法表示为
    ( R m q ) ⊤ ( R n k ) = Re [ ∑ i = 0 d / 2 − 1 q [ 2 i : 2 i + 1 ] k [ 2 i : 2 i + 1 ] ∗ e i ( m − n ) θ i ] \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} (Rmq)(Rnk)=Re i=0d/21q[2i:2i+1]k[2i:2i+1]ei(mn)θi h i = q [ 2 i : 2 i + 1 ] k [ 2 i : 2 i + 1 ] ∗ , S j = ∑ i = 0 j − 1 e i ( m − n ) θ i 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} hi=q[2i:2i+1]k[2i:2i+1],Sj=i=0j1ei(mn)θi,并约定 h d / 2 = 0 , S 0 = 0 h_{d/2}=0,S_0=0 hd/2=0,S0=0,那么由 Abel 变换(分部求和法)可以得到:
    ∑ i = 0 d / 2 − 1 q [ 2 i : 2 i + 1 ] k [ 2 i : 2 i + 1 ] ∗ e i ( m − n ) θ i = ∑ i = 0 d / 2 − 1 h i ( S i + 1 − S i ) = − ∑ i = 0 d / 2 − 1 S i + 1 ( h i + 1 − h i ) \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) i=0d/21q[2i:2i+1]k[2i:2i+1]ei(mn)θi=i=0d/21hi(Si+1Si)=i=0d/21Si+1(hi+1hi)所以
    ∣ ∑ i = 0 d / 2 − 1 q [ 2 i : 2 i + 1 ] k [ 2 i : 2 i + 1 ] ∗ e i ( m − n ) θ i ∣ =   ∣ ∑ i = 0 d / 2 − 1 S i + 1 ( h i + 1 − h i ) ∣ ≤   ∑ i = 0 d / 2 − 1 ∣ S i + 1 ∣ ∣ h i + 1 − h i ∣ ≤   ( max ⁡ i ∣ h i + 1 − h i ∣ ) ∑ i = 0 d / 2 − 1 ∣ S i + 1 ∣ \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} i=0d/21q[2i:2i+1]k[2i:2i+1]ei(mn)θi = i=0d/21Si+1(hi+1hi) i=0d/21Si+1∣∣hi+1hi(imaxhi+1hi)i=0d/21Si+1因此我们可以考察 1 d / 2 ∑ i = 1 d / 2 ∣ S i ∣ \frac{1}{d/2}\sum\limits_{i=1}^{d/2} |S_i| d/21i=1d/2Si 随着相对距离的变化情况来作为衰减性的体现
    在这里插入图片描述

References

  • 苏剑林. (Feb. 03, 2021). 《让研究人员绞尽脑汁的Transformer位置编码 》[Blog post]. Retrieved from https://kexue.fm/archives/8130
  • 苏剑林. (Mar. 23, 2021). 《Transformer升级之路:2、博采众长的旋转式位置编码 》[Blog post]. Retrieved from https://kexue.fm/archives/8265
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值