深度学习笔记之Transformer——Position Embedding再回首:从公式角度认识位置编码

引言

本节我们将从公式角度重新认识 Transformer \text{Transformer} Transformer中的位置编码相关笔记

回顾: Word2vec \text{Word2vec} Word2vec系列模型

关于 Word2vec \text{Word2vec} Word2vec系列模型,无论是 Skip gram \text{Skip gram} Skip gram还是 CBOW \text{CBOW} CBOW,它们的核心逻辑均在于:通过将中心词与其对应的上下文结果进行绑定,并通过这种关联关系来描述词与词、上下文与上下文之间的关联关系

  • 关于 Skip gram \text{Skip gram} Skip gram优化函数表示如下:
    { J Skip-gram ( θ ) = − 1 T ∑ t = 1 T ∑ i = − C ( ≠ 0 ) C log ⁡ P ( w t + i ∣ w t )   θ ^ = arg ⁡ min ⁡ θ J Skip-gram ( θ ) \begin{cases} \begin{aligned} \mathcal J_{\text{Skip-gram}}(\theta) & = -\frac{1}{\mathcal T} \sum_{t=1}^{\mathcal T} \sum_{i=-\mathcal C(\neq 0)}^{\mathcal C} \log \mathcal P(w_{t+i} \mid w_t) \\ \ \hat{\theta} & = \mathop{\arg\min}\limits_{\theta} \mathcal J_{\text{Skip-gram}}(\theta) \end{aligned} \end{cases} JSkip-gram(θ) θ^=T1t=1Ti=C(=0)ClogP(wt+iwt)=θargminJSkip-gram(θ)
  • 关于 CBOW \text{CBOW} CBOW优化函数表示如下:
    { J CBOW ( θ ) = − 1 T ∑ t = 1 T ∑ i = − C ( ≠ 0 ) C log ⁡ P ( w t ∣ w t + i ) θ ^ = arg ⁡ min ⁡ θ J CBOW ( θ ) \begin{cases} \begin{aligned} \mathcal J_{\text{CBOW}}(\theta) & = -\frac{1}{\mathcal T} \sum_{t=1}^{\mathcal T} \sum_{i=-\mathcal C(\neq 0)}^{\mathcal C} \log \mathcal P(w_t \mid w_{t+i}) \\ \hat{\theta} & = \mathop{\arg\min}\limits_{\theta} \mathcal J_{\text{CBOW}}(\theta) \end{aligned} \end{cases} JCBOW(θ)θ^=T1t=1Ti=C(=0)ClogP(wtwt+i)=θargminJCBOW(θ)

从而它们分别针对 P ( w t + i ∣ w t ) , P ( w t ∣ w t + i ) i ∈ [ − C , C ] ; i ≠ 0 \mathcal P(w_{t+i} \mid w_t),\mathcal P(w_t \mid w_{t+i}) \quad i \in [-\mathcal C,\mathcal C];i \neq 0 P(wt+iwt),P(wtwt+i)i[C,C];i=0进行建模。上面的优化函数并不是语言信息客观存在的描述,而是我们为了简化运算来通过一系列假设构造出的结果。而关于假设: P ( w t − C , ⋯   , w t − 1 , w t + 1 , ⋯   , w t + C ∣ w t ) = ∏ i = − C ( ≠ 0 ) C P ( w t + i ∣ w t ) \begin{aligned}\mathcal P(w_{t-\mathcal C},\cdots,w_{t-1},w_{t+1},\cdots,w_{t+\mathcal C} \mid w_t)= \prod_{i=-\mathcal C(\neq 0)}^{\mathcal C} \mathcal P(w_{t+i} \mid w_{t})\end{aligned} P(wtC,,wt1,wt+1,,wt+Cwt)=i=C(=0)CP(wt+iwt),即在 w t w_t wt给定得条件下,其对应的窗口内上下文信息独立同分布使得 Skip gram,CBOW \text{Skip gram,CBOW} Skip gram,CBOW丢失了序列信息

  • 即便我们‘打乱了’窗口内上下文的顺序,但这对优化函数不产生影响。这与自注意力机制非常相似。
  • 相反,如果对一个真实句子进行遍历,将其窗口内的词打乱顺序,那么该句子的语义信息可能丢失了。

位置编码

位置编码是模型对于位置信息的感知能力。给定如下一段文本 D = { w 1 , w 2 , ⋯   , w T } \mathcal D = \{w_1,w_2,\cdots,w_{\mathcal T}\} D={w1,w2,,wT},观察模型是否能够对该文本的序列信息进行感知。例如: w 1 w_1 w1的后面是 w 2 w_2 w2 w t w_{t} wt的左右两侧分别是 w t − 1 , w t + 1 w_{t-1},w_{t+1} wt1,wt+1

如何判别模型对于序列信息具备感知能力 ? ? ?如果对正确文本序列内的元素进行随机打乱,来观察模型对于各元素的特征表示是否发生变化:

  • 例如: Word2vec \text{Word2vec} Word2vec系列模型。这类结构/模型不具备感知位置信息的能力。
  • 相反,循环神经网络系列模型具有感知位置信息的能力。因为每一时刻 RNN \text{RNN} RNN模型都会设置单独的神经元来存储序列信息。

位置编码这个概念主要是因 Transformer \text{Transformer} Transformer模型而被广为熟知。之所以加上位置编码的核心原因在于:自注意力机制自身并不具备感知位置信息的能力。因而我们采取一些方式,需要让自注意力机制感知到序列信息——加入位置编码

位置编码的主流方案,通常分为 3 3 3种:
本节主要介绍以 Transformer \text{Transformer} Transformer位置编码为代表的绝对位置编码,其他编码方式有机会再介绍。

  • 绝对位置编码 ( Absolute Position ) (\text{Absolute Position}) (Absolute Position)
    绝对位置编码的逻辑在于:既然 Transformer \text{Transformer} Transformer感知不到序列信息,那么就在模型的输入中加入序列信息,从而被模型感知。具体就是在每一个元素的输入中加入关于位置 Embedding \text{Embedding} Embedding信息。

    因而绝对位置编码的关键在于:每一个元素对应位置 Embedding \text{Embedding} Embedding到底是什么

    Transformer \text{Transformer} Transformer中,使用如下公式来描述每个元素对应的位置编码
    其中 k k k表示序列中元素的位置信息;而 2 i , 2 i + 1 2i,2i+1 2i,2i+1则是 k k k位置元素的 d d d维特征表示中的第 2 i , 2 i + 1 2i,2i+1 2i,2i+1维度。
    { P k ; 2 i = sin ⁡ ( k 1000 0 2 i d ) P k , 2 i + 1 = cos ⁡ ( k 1000 0 2 i d ) \begin{cases} \begin{aligned} \mathcal P_{k;2i} = \sin \left(\frac{k}{10000^{\frac{2i}{d}}}\right) \\ \mathcal P_{k,2i+1} = \cos \left(\frac{k}{10000^{\frac{2i}{d}}}\right) \end{aligned} \end{cases} Pk;2i=sin(10000d2ik)Pk,2i+1=cos(10000d2ik)
    BERT \text{BERT} BERT模型 ( Bidirectional Encoder Representation from Transformers,BERT ) (\text{Bidirectional Encoder Representation from Transformers,BERT}) (Bidirectional Encoder Representation from Transformers,BERT)相比于 Transformer \text{Transformer} Transformer人工设置固定的位置信息,它使用 Trainable Embedding \text{Trainable Embedding} Trainable Embedding的方式构造位置编码。即:将位置编码视作可训练的参数矩阵,从而与词向量一起执行端到端的训练

  • 相对位置编码 ( Relative Position ) (\text{Relative Position}) (Relative Position)

  • 旋转位置编码 ( RotatePosition ) (\text{RotatePosition}) (RotatePosition)

Transformer \text{Transformer} Transformer:绝对位置编码

关于 BERT \text{BERT} BERT中的 Trainable Embedding \text{Trainable Embedding} Trainable Embedding,它作为神经网络的输入,通过反向传播模型参数的更新来对位置编码进行表示。其解释性较低(神经网络的通用逼近定理)。因此,这里主要对 Transformer \text{Transformer} Transformer位置编码方式进行描述。

Transformer \text{Transformer} Transformer输入部分,与位置向量相关的部分自然是自注意力机制。它的计算过程表示如下:
这仅是自注意力机制的初始部分——内积的计算过程。
( E i + P i ) T ( W Q ) T W K ( E j + P j ) (\mathcal E_i + \mathcal P_i)^T \mathcal (W_{\mathcal Q})^T \mathcal W_{\mathcal K} (\mathcal E_j + \mathcal P_j) (Ei+Pi)T(WQ)TWK(Ej+Pj)
其中 E i \mathcal E_i Ei表示序列中 i i i个元素的特征表示; P i \mathcal P_i Pi则表示对应的位置信息。其中向量 E i , P i \mathcal E_i,\mathcal P_i Ei,Pi的大小格式相同,并且它们执行的是向量对应元素相加操作。 E j , P j \mathcal E_j,\mathcal P_j Ej,Pj同理。 W Q , W K \mathcal W_{\mathcal Q},\mathcal W_{\mathcal K} WQ,WK则表示 E i + P i \mathcal E_i + \mathcal P_i Ei+Pi转换成对应的 Query,key \text{Query,key} Query,key向量对应的权重信息。将上述公式进行展开,可以得到如下结果:
这里使用 I \mathcal I I替代 ( E i + P i ) T ( W Q ) T W K ( E j + P j ) (\mathcal E_i + \mathcal P_i)^T \mathcal (W_{\mathcal Q})^T \mathcal W_{\mathcal K} (\mathcal E_j + \mathcal P_j) (Ei+Pi)T(WQ)TWK(Ej+Pj)
I = ( E i ) T ( W Q ) T W K E j + ( P i ) T ( W Q ) T W K E j + ( E i ) T ( W Q ) T W K P j + ( P i ) T ( W Q ) T W K P j \mathcal I = (\mathcal E_i)^T (\mathcal W_{\mathcal Q})^T \mathcal W_{\mathcal K} \mathcal E_j + (\mathcal P_i)^T (\mathcal W_{\mathcal Q})^T \mathcal W_{\mathcal K}\mathcal E_j + (\mathcal E_i)^T (\mathcal W_{\mathcal Q})^T \mathcal W_{\mathcal K} \mathcal P_j + (\mathcal P_i)^T (\mathcal W_{\mathcal Q})^T \mathcal W_{\mathcal K} \mathcal P_j I=(Ei)T(WQ)TWKEj+(Pi)T(WQ)TWKEj+(Ei)T(WQ)TWKPj+(Pi)T(WQ)TWKPj

其中:

  • 1 1 1 ( E i ) T ( W Q ) T W K E j (\mathcal E_i)^T (\mathcal W_{\mathcal Q})^T \mathcal W_{\mathcal K} \mathcal E_j (Ei)T(WQ)TWKEj描述了仅包含元素特征表示相关的注意力信息;
  • 2 , 3 2,3 2,3 ( P i ) T ( W Q ) T W K E j ; ( E i ) T ( W Q ) T W K P j (\mathcal P_i)^T (\mathcal W_{\mathcal Q})^T \mathcal W_{\mathcal K}\mathcal E_j; (\mathcal E_i)^T (\mathcal W_{\mathcal Q})^T \mathcal W_{\mathcal K} \mathcal P_j (Pi)T(WQ)TWKEj;(Ei)T(WQ)TWKPj描述了由元素特征表示、位置信息组成的融合注意力信息;
  • 4 4 4 ( P i ) T ( W Q ) T W K P j (\mathcal P_i)^T (\mathcal W_{\mathcal Q})^T \mathcal W_{\mathcal K} \mathcal P_j (Pi)T(WQ)TWKPj描述了仅包含位置特征相关的注意力信息。

我们希望:位置信息相关的函数是一个具备某种规律性的函数。因而我们希望 4 4 4 ( P i ) T ( W Q ) T W K P j (\mathcal P_i)^T (\mathcal W_{\mathcal Q})^T \mathcal W_{\mathcal K} \mathcal P_j (Pi)T(WQ)TWKPj包含 i , j i,j i,j个元素之间的相对位置信息
而第 i , j i,j i,j个元素之间的‘相对位置信息’自然是指它们之间的距离 i − j i-j ij,我们希望 ( P i ) T ( W Q ) T W K P j (\mathcal P_i)^T (\mathcal W_{\mathcal Q})^T \mathcal W_{\mathcal K} \mathcal P_j (Pi)T(WQ)TWKPj是一个关于 i − j i-j ij的函数 G ( i − j ) \mathcal G(i-j) G(ij)
( P i ) T ( W Q ) T W K P j = G ( i − j ) (\mathcal P_i)^T (\mathcal W_{\mathcal Q})^T \mathcal W_{\mathcal K} \mathcal P_j = \mathcal G(i-j) (Pi)T(WQ)TWKPj=G(ij)
并且在上式中 W Q , W K \mathcal W_{\mathcal Q},\mathcal W_{\mathcal K} WQ,WK均是可通过神经网络学习到的参数信息,我们可以将其视作一个未知的常量。因而 ( P i ) T ( W Q ) T \mathcal (P_i)^T(\mathcal W_{\mathcal Q})^T (Pi)T(WQ)T ( P i ) T (\mathcal P_i)^T (Pi)T之间是线性相关关系, W K P j \mathcal W_{\mathcal K}\mathcal P_j WKPj P j \mathcal P_j Pj之间同理。为了简化该问题,我们将这些视作常数系数 W Q , W K \mathcal W_{\mathcal Q},\mathcal W_{\mathcal K} WQ,WK忽略掉,将重点关注在内积 ( P i ) T P j (\mathcal P_i)^T \mathcal P_j (Pi)TPj上面。从而将该内积视作 i − j i-j ij相关的函数 G ′ ( ⋅ ) \mathcal G'(\cdot) G()
( P i ) T P j = G ′ ( i − j ) (\mathcal P_i)^T \mathcal P_j = \mathcal G'(i-j) (Pi)TPj=G(ij)
如果满足该函数,那么在乘以学习好的 W Q , W K \mathcal W_{\mathcal Q},\mathcal W_{\mathcal K} WQ,WK之后,其函数结果依然可以满足 i , j i,j i,j位置元素间的相对位置信息
需要注意的是,函数 G ′ ( i − j ) \mathcal G'(i-j) G(ij)仅与相对位置大小 i − j i-j ij相关,和 i , j i,j i,j的大小均无关。

如何去构造 G ′ ( i − j ) ? \mathcal G'(i-j)? G(ij)? Google \text{Google} Google团队 cos ⁡ \cos cos和差公式中获取到灵感:
这里推荐一个视频:详解 transformer(1)—positional encoding,它使用泰勒公式的角度进行的描述,最后部分没看懂,欢迎小伙伴们一起讨论。
cos ⁡ θ cos ⁡ ϕ + sin ⁡ θ sin ⁡ ϕ = cos ⁡ ( θ − ϕ ) \cos \theta \cos \phi + \sin \theta \sin \phi = \cos(\theta - \phi) cosθcosϕ+sinθsinϕ=cos(θϕ)
该公式的左侧可以描述成点积的形式:
cos ⁡ θ cos ⁡ ϕ + sin ⁡ θ sin ⁡ ϕ = ( cos ⁡ θ , sin ⁡ θ ) ( cos ⁡ ϕ sin ⁡ ϕ ) \cos \theta \cos \phi + \sin \theta \sin \phi = (\cos \theta,\sin \theta)\begin{pmatrix} \cos \phi \\ \sin \phi \end{pmatrix} cosθcosϕ+sinθsinϕ=(cosθ,sinθ)(cosϕsinϕ)
P i = ( cos ⁡ θ i sin ⁡ θ i ) P j = ( cos ⁡ θ j sin ⁡ θ j ) \begin{aligned} \mathcal P_i = \begin{pmatrix} \cos \theta_i \\ \sin \theta_i \end{pmatrix} \quad \mathcal P_j = \begin{pmatrix} \cos \theta_j \\ \sin \theta_j \end{pmatrix}\end{aligned} Pi=(cosθisinθi)Pj=(cosθjsinθj),从而使:
G ′ ( i − j ) = cos ⁡ ( θ i − θ j ) \mathcal G'(i-j) = \cos(\theta_i - \theta_j) G(ij)=cos(θiθj)
但注意: θ i − θ j \theta_i - \theta_j θiθj仅仅是两个角度的差,而不是位置编号的差 i − j i-j ij。因此,为了得到关于 i − j i-j ij的函数,我们需要:
这里的 n n n表示序列长度。
{ θ k = k ⋅ θ 0 k = 1 , 2 , ⋯   , i , ⋯   , j , ⋯   , n cos ⁡ ( θ i − θ j ) = cos ⁡ [ i ⋅ θ 0 − j ⋅ θ 0 ] = cos ⁡ [ ( i − j ) ⋅ θ 0 ] \begin{cases} \theta_k = k \cdot \theta_0 \quad k=1,2,\cdots,i,\cdots,j,\cdots,n \\ \begin{aligned} \cos(\theta_i - \theta_j) & = \cos [i \cdot \theta_0 - j \cdot \theta_0] \\ & = \cos [(i - j) \cdot \theta_0] \end{aligned} \end{cases} θk=kθ0k=1,2,,i,,j,,ncos(θiθj)=cos[iθ0jθ0]=cos[(ij)θ0]
此时,我们回归 Transformer \text{Transformer} Transformer位置编码。令 1 1000 0 2 i d = λ ( i ) \begin{aligned}\frac{1}{10000^{\frac{2i}{d}}} = \lambda(i)\end{aligned} 10000d2i1=λ(i),将上述公式简写成如下形式:
其中 d d d是我们设置的 Embedding \text{Embedding} Embedding维度,是一个超参数,这里视作常数。
{ P k ; 2 i = sin ⁡ ( k 1000 0 2 i d ) = sin ⁡ [ k ⋅ λ ( i ) ] P k ; 2 i + 1 = cos ⁡ ( k 1000 0 2 i d ) = cos ⁡ [ k ⋅ λ ( i ) ] \begin{cases} \begin{aligned} \mathcal P_{k;2i} & = \sin \left(\frac{k}{10000^{\frac{2i}{d}}}\right) = \sin \left[k \cdot \lambda(i)\right] \\ \mathcal P_{k;2i+1} & = \cos \left(\frac{k}{10000^{\frac{2i}{d}}}\right) = \cos \left[k \cdot \lambda(i)\right] \end{aligned} \end{cases} Pk;2iPk;2i+1=sin(10000d2ik)=sin[kλ(i)]=cos(10000d2ik)=cos[kλ(i)]
至此,存在两个位置为 m , n m,n m,n的元素,它们的位置编码 P m , P n \mathcal P_m,\mathcal P_n Pm,Pn表示如下:
对于向量第 0 0 0个位置,只有 i = 0 i=0 i=0 P m ; 2 i \mathcal P_{m;2i} Pm;2i才能得到该位置的结果;第 1 1 1个位置只有 i = 0 i=0 i=0 P m ; 2 i + 1 \mathcal P_{m;2i+1} Pm;2i+1才能得到该位置的结果,以此类推。
P m = ( sin ⁡ [ m ⋅ λ ( 0 ) ] cos ⁡ [ m ⋅ λ ( 0 ) ] sin ⁡ [ m ⋅ λ ( 1 ) ] cos ⁡ [ m ⋅ λ ( 1 ) ] ⋮ ) P n = ( sin ⁡ [ n ⋅ λ ( 0 ) ] cos ⁡ [ n ⋅ λ ( 0 ) ] sin ⁡ [ n ⋅ λ ( 1 ) ] cos ⁡ [ n ⋅ λ ( 1 ) ] ⋮ ) \begin{aligned} \mathcal P_m = \begin{pmatrix} \sin [m \cdot \lambda(0)] \\ \cos [m \cdot \lambda(0)] \\ \sin [m \cdot \lambda(1)] \\ \cos [m \cdot \lambda(1)] \\ \vdots \end{pmatrix} \quad \mathcal P_n = \begin{pmatrix} \sin [n \cdot \lambda(0)] \\ \cos [n \cdot \lambda(0)] \\ \sin [n \cdot \lambda(1)] \\ \cos [n \cdot \lambda(1)] \\ \vdots \end{pmatrix} \end{aligned} Pm= sin[mλ(0)]cos[mλ(0)]sin[mλ(1)]cos[mλ(1)] Pn= sin[nλ(0)]cos[nλ(0)]sin[nλ(1)]cos[nλ(1)]
从而它们的内积结果 ( P m ) T P n (\mathcal P_m)^T \mathcal P_n (Pm)TPn表示为:

  • 将每 2 2 2次线性计算分成一组,就可以得到 cos ⁡ θ cos ⁡ ϕ + sin ⁡ θ sin ⁡ ϕ \cos\theta\cos\phi + \sin\theta\sin\phi cosθcosϕ+sinθsinϕ的格式。
  • 其中 λ ( 0 ) , λ ( 1 ) , ⋯ \lambda(0),\lambda(1),\cdots λ(0),λ(1),均是由超参数构成的常数。
    ( P m ) T P n = ( sin ⁡ [ m ⋅ λ ( 0 ) ] , cos ⁡ [ m ⋅ λ ( 0 ) ] , ⋯   ) ( sin ⁡ [ n ⋅ λ ( 0 ) ] cos ⁡ [ n ⋅ λ ( 0 ) ] ⋮ ) = sin ⁡ [ m ⋅ λ ( 0 ) ] ⋅ sin ⁡ [ n ⋅ λ ( 0 ) ] + cos ⁡ [ m ⋅ λ ( 0 ) ] ⋅ cos ⁡ [ n ⋅ λ ( 0 ) ] ⏟ Group1 + sin ⁡ [ m ⋅ λ ( 1 ) ] ⋅ sin ⁡ [ n ⋅ λ ( 1 ) ] + cos ⁡ [ m ⋅ λ ( 1 ) ] ⋅ cos ⁡ [ n ⋅ λ ( 1 ) ] ⏟ Group2 + ⋯ = cos ⁡ [ ( m − n ) ⋅ λ ( 0 ) ] + cos ⁡ [ ( m − n ) ⋅ λ ( 1 ) ] + ⋯ = ∑ k = 0 d 2 − 1 cos ⁡ [ ( m − n ) ⋅ λ ( k ) ] θ 0 ⇒ λ ( k ) \begin{aligned} (\mathcal P_m)^T \mathcal P_n & = (\sin[m \cdot \lambda(0)],\cos [m \cdot \lambda(0)],\cdots) \begin{pmatrix} \sin [n \cdot \lambda(0)] \\ \cos [n \cdot \lambda(0)] \\ \vdots \end{pmatrix} \\ & = \underbrace{\sin [m \cdot \lambda(0)] \cdot \sin[n \cdot \lambda(0)] + \cos[m \cdot \lambda(0)] \cdot \cos[n \cdot \lambda(0)]}_{\text{Group1}} + \underbrace{\sin [m \cdot \lambda(1)] \cdot \sin[n \cdot \lambda(1)] + \cos[m \cdot \lambda(1)] \cdot \cos[n \cdot \lambda(1)]}_{\text{Group2}} + \cdots \\ & = \cos \left[(m - n) \cdot \lambda(0)\right] + \cos[(m - n) \cdot \lambda(1)] + \cdots \\ & = \sum_{k=0}^{\frac{d}{2}-1} \cos [(m-n) \cdot \lambda(k)] \quad \theta_0 \Rightarrow \lambda(k) \end{aligned} (Pm)TPn=(sin[mλ(0)],cos[mλ(0)],) sin[nλ(0)]cos[nλ(0)] =Group1 sin[mλ(0)]sin[nλ(0)]+cos[mλ(0)]cos[nλ(0)]+Group2 sin[mλ(1)]sin[nλ(1)]+cos[mλ(1)]cos[nλ(1)]+=cos[(mn)λ(0)]+cos[(mn)λ(1)]+=k=02d1cos[(mn)λ(k)]θ0λ(k)

最终将内积结果表示成了若干个不同 θ 0 ( θ 0 = λ ( 0 ) , λ ( 1 ) , ⋯   ) \theta_0(\theta_0 = \lambda(0),\lambda(1),\cdots) θ0(θ0=λ(0),λ(1),)构成的 cos ⁡ [ ( m − n ) ⋅ θ 0 ] \cos [(m-n) \cdot \theta_0] cos[(mn)θ0]的加和形式。

如果从另一个角度认识绝对位置编码:距离为 k k k的两个位置编码 P m \mathcal P_m Pm P m + k \mathcal P_{m+k} Pm+k之间是什么样的关系 ? ? ?
根据初始公式,我们分别描述 P m + k ; 2 i \mathcal P_{m+k;2i} Pm+k;2i P m + k ; 2 i + 1 \mathcal P_{m+k;2i+1} Pm+k;2i+1编码结果
{ P m + k ; 2 i = sin ⁡ [ ( m + k ) ⋅ λ ( i ) ] = sin ⁡ [ m ⋅ λ ( i ) + k ⋅ λ ( i ) ] = sin ⁡ [ k ⋅ λ ( i ) ] ⋅ cos ⁡ [ m ⋅ λ ( i ) ] + cos ⁡ [ k ⋅ λ ( i ) ] ⋅ sin ⁡ [ m ⋅ λ ( i ) ] P m + k ; 2 i + 1 = cos ⁡ [ ( m + k ) ⋅ λ ( i ) ] = cos ⁡ [ m ⋅ λ ( i ) + k ⋅ λ ( i ) ] = cos ⁡ [ k ⋅ λ ( i ) ] ⋅ cos ⁡ [ m ⋅ λ ( i ) ] + sin ⁡ [ k ⋅ λ ( i ) ] ⋅ sin ⁡ [ m ⋅ λ ( i ) ] \begin{cases} \begin{aligned} \mathcal P_{m+k;2i} & = \sin \left[(m+k) \cdot \lambda(i)\right] \\ & = \sin \left[m \cdot \lambda(i) + k \cdot \lambda(i)\right] \\ & = \sin [k \cdot \lambda(i)] \cdot \cos [m \cdot \lambda(i)] + \cos [k \cdot \lambda(i)] \cdot \sin [m \cdot \lambda(i)] \\ \mathcal P_{m+k;2i+1} & = \cos [(m + k) \cdot \lambda(i)] \\ & = \cos [m \cdot \lambda(i) + k \cdot \lambda(i)] \\ & = \cos [k \cdot \lambda(i)] \cdot \cos [m \cdot \lambda(i)] + \sin [k \cdot \lambda(i)] \cdot \sin [m \cdot \lambda(i)] \end{aligned} \end{cases} Pm+k;2iPm+k;2i+1=sin[(m+k)λ(i)]=sin[mλ(i)+kλ(i)]=sin[kλ(i)]cos[mλ(i)]+cos[kλ(i)]sin[mλ(i)]=cos[(m+k)λ(i)]=cos[mλ(i)+kλ(i)]=cos[kλ(i)]cos[mλ(i)]+sin[kλ(i)]sin[mλ(i)]
再将 P m ; 2 i = sin ⁡ [ m ⋅ λ ( i ) ] ; P m ; 2 i + 1 = cos ⁡ [ m ⋅ λ ( i ) ] \mathcal P_{m;2i} = \sin [m \cdot \lambda(i)];\mathcal P_{m;2i+1} = \cos [m \cdot \lambda(i)] Pm;2i=sin[mλ(i)];Pm;2i+1=cos[mλ(i)]代入上式:
{ P m + k ; 2 i = sin ⁡ [ k ⋅ λ ( i ) ] ⋅ P m ; 2 i + 1 + cos ⁡ [ k ⋅ λ ( i ) ] ⋅ P m ; 2 i P m + k ; 2 i + 1 = cos ⁡ [ k ⋅ λ ( i ) ] ⋅ P m ; 2 i + 1 + sin ⁡ [ k ⋅ λ ( i ) ] ⋅ P m ; 2 i \begin{cases} \mathcal P_{m+k;2i} = \sin [k \cdot \lambda(i)] \cdot \mathcal P_{m;2i+1} + \cos [k\cdot \lambda(i)] \cdot \mathcal P_{m;2i} \\ \mathcal P_{m+k;2i+1} = \cos [k \cdot \lambda(i)] \cdot \mathcal P_{m;2i+1} + \sin [k \cdot \lambda(i)] \cdot \mathcal P_{m;2i} \end{cases} {Pm+k;2i=sin[kλ(i)]Pm;2i+1+cos[kλ(i)]Pm;2iPm+k;2i+1=cos[kλ(i)]Pm;2i+1+sin[kλ(i)]Pm;2i
根据上面的 Group \text{Group} Group描述,可以将 ( P m + k ; 2 i P m + k ; 2 i + 1 ) \begin{pmatrix} \mathcal P_{m+k;2i} \\ \mathcal P_{m+k;2i+1}\end{pmatrix} (Pm+k;2iPm+k;2i+1) ( P m ; 2 i P m ; 2 i + 1 ) \begin{pmatrix}\mathcal P_{m;2i} \\ \mathcal P_{m;2i+1}\end{pmatrix} (Pm;2iPm;2i+1)之间的关系可描述为如下形式:
( P m + k ; 2 i P m + k ; 2 i + 1 ) = [ cos ⁡ [ k ⋅ λ ( i ) ] sin ⁡ [ k ⋅ λ ( i ) ] − sin ⁡ [ k ⋅ λ ( i ) ] cos ⁡ [ k ⋅ λ ( i ) ] ] ( P m ; 2 i P m ; 2 i + 1 ) \begin{pmatrix} \mathcal P_{m+k;2i} \\ \mathcal P_{m+k;2i+1}\end{pmatrix} = \begin{bmatrix} \cos [k \cdot \lambda(i)] \quad \sin [k \cdot \lambda(i)] \\ -\sin [k \cdot \lambda(i)] \cos[k \cdot \lambda(i)] \end{bmatrix} \begin{pmatrix}\mathcal P_{m;2i} \\ \mathcal P_{m;2i+1}\end{pmatrix} (Pm+k;2iPm+k;2i+1)=[cos[kλ(i)]sin[kλ(i)]sin[kλ(i)]cos[kλ(i)]](Pm;2iPm;2i+1)

这意味着:不同位置元素对应的位置编码中,其对应每一组维度之间可通过线性计算进行表示
不可否认的是,这种编码方式确实描述了 i − j i-j ij这个相对位置信息,但是它同样存在缺陷:它没有办法描述 P i , P j \mathcal P_i,\mathcal P_j Pi,Pj之间的顺序关系。例如: P i \mathcal P_i Pi P j \mathcal P_j Pj的前面(后面),它无法描述出来。

相关参考:
位置编码 Positional Encoding \text{Positional Encoding} Positional Encoding
Transformer的位置编码(Position Encoding)进展梳理
详解 transformer(1)—positional encoding

07-11 17:25