深度学习笔记之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=1∑Ti=−C(=0)∑ClogP(wt+i∣wt)=θ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=1∑Ti=−C(=0)∑ClogP(wt∣wt+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+i∣wt),P(wt∣wt+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(wt−C,⋯,wt−1,wt+1,⋯,wt+C∣wt)=i=−C(=0)∏CP(wt+i∣wt),即在 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} wt−1,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 i−j,我们希望
( 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的函数
G ( i − j ) \mathcal G(i-j) G(i−j)。
( 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(i−j)
并且在上式中 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 i−j相关的函数 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′(i−j)
如果满足该函数,那么在乘以学习好的 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′(i−j)仅与相对位置大小
i − j i-j i−j相关,和
i , j i,j i,j的大小均无关。
如何去构造 G ′ ( i − j ) ? \mathcal G'(i-j)? G′(i−j)? 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′(i−j)=cos(θi−θj)
但注意: θ i − θ j \theta_i - \theta_j θi−θj仅仅是两个角度的差,而不是位置编号的差 i − j i-j i−j。因此,为了得到关于 i − j i-j i−j的函数,我们需要:
这里的
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⋅θ0−j⋅θ0]=cos[(i−j)⋅θ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[(m−n)⋅λ(0)]+cos[(m−n)⋅λ(1)]+⋯=k=0∑2d−1cos[(m−n)⋅λ(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[(m−n)⋅θ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 i−j这个相对位置信息,但是它同样存在缺陷:它没有办法描述 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