前言
Transformer模型在进行数据处理时与传统的RNN系列算法不同,不再按照时间步进行相应特征的抽取,而是采用Attention机制。由于Attention机制在处理数据时无法捕捉到信息的输入顺序,为了能够了解对应的输入顺序,在Transformer当中通常需要加入位置编码。常见的位置编码可以分为绝对位置编码、相对位置编码及其他位置编码。
一、绝对位置编码
所谓的绝对位置编码是将对应的位置信息融入到输入信息当中,这种编码方式相对而言是较为简单的一种,但是绝对位置编码也有不少的变体,常见的有如下几种不同的形式。
- 训练式
不需要特意去设计什么,而是直接将位置编码当作可训练参数,让它随着训练过程更新。使用这种位置编码的模型有BERT、GPT等模型。这种方式的缺点是没有外推性,即所处理的文本长度不能超过预训练阶段规定的最大长度。但是可以通过层次分解的方式,可以使得绝对位置编码能外推到足够长的范围,因此外推性也不是绝对位置编码的明显缺点。 - 三角函数式
三角函数式位置编码,一般称为Sinusoidal位置编码,是Transformer论文中提出的一种位置编码方式,是通过如下公式来对位置信息进行相关的表述。
P E ( p o s , 2 i ) = s i n ( p o s / 1000 0 2 i / d m o d e l ) P E ( p o s , 2 i + 1 ) = c o s ( p o s / 1000 0 2 i / d m o d e l ) PE_{(pos, 2i)} = sin(pos/10000^{2i/d_{model}})\\ PE_{(pos, 2i+1)} = cos(pos/10000^{2i/d_{model}}) PE(pos,2i)=sin(pos/100002i/dmodel)PE(pos,2i+1)=cos(pos/100002i/dmodel)
三角函数位置编码具有显式的生成规律,因此具有一定的外推性。同时由于三角函数的和差公式可以表明位置 α + β \alpha + \beta α+β的向量可以表示成位置 α \alpha α和位置 β \beta β的向量组合,提供了表达相对位置信息的可能性。但是这种位置编码方式应用得不多。 - 递归式
RNN在进行编码过程中不需要位置编码,因为它在结构上自带了学习到位置信息的可能性,如果在输入后面先接一层RNN,然后再接Transformer,那么理论上就不需要添加位置编码了。同理可以通过使用RNN模型来学习一种绝对位置编码,从一个向量出发,然后通过递归的格式来得到每个位置的编码向量。ICML2020的论文《Learning to Encode Position for Transformer with Continuous Dynamical Model》利用了这个思想,提出了微分方程(ODE) d p t d t = h ( p t , t ) \frac{\mathrm{d} p_{t} }{\mathrm{d} t} = h(p_{t} , t) dtdpt=h(pt,t)的方式来建模位置编码,该方案被称为FLOATER。FLOATER也属于递归模型,函数 h ( p t , t ) h(p_{t} , t) h(pt,t)可以通过神经网络来建模,因此这种微分方程也称为神经微分方程。
基于递归模型的位置编码具有较好的外推性,同时比三角函数式的位置编码有更好的灵活性。但递归形式的位置编码牺牲了一定的并行性,可能会带来速度瓶颈。 - 相乘式
输入数据与位置编码的组合方式通常是相加,通过相乘的方式进行是否能够达到更好的效果,目前暂无相应的文献能够证明,对应的内容可以参照《中文语言模型研究:(1) 乘性位置编码》
二、相对位置编码
相对位置并没有完整建模每个输入的位置信息,而是在计算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 T ) o i = ∑ j a i , j v j \left\{\begin{matrix} 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} = softmax(q_{i}k_{j}^{T}) \\ o_{i} = \sum_{j}a_{i,j}v_{j} \end{matrix}\right. ⎩ ⎨ ⎧qi=(xi+pi)WQkj=(xj+pj)WKvj=(xj+pj)WVai,j=softmax(qikjT)oi=∑jai,jvj
其中softmax对j那一维归一化,这里的向量都是指行向量。将 q i k j T q_{i}k_{j}^{T} qikjT展开
q i k j T = ( x i + p i ) W Q W K T ( x j + p j ) T = ( x i W Q + p i W Q ) ( W K T x j T + W K T p j T ) q_{i}k_{j}^{T} = (x_i + p_i)W_QW_K^T(x_j+p_j)^T = (x_iW_Q+p_iW_Q)(W_K^Tx_j^T + W_K^Tp_j^T) qikjT=(xi+pi)WQWKT(xj+pj)T=(xiWQ+piWQ)(WKTxjT+WKTpjT)
为了引入相对位置信息,将第一项位置去掉,第二项 P j W K P_jW_K PjWK改为二元位置向量 R i , k K R_{i, k}^K Ri,kK,变成
a i , j = s o f t m a x ( x i W Q ( x j W K + R i , j K ) T ) a_{i,j} = softmax(x_iW_Q(x_jW_K+R_{i,j}^K)^T) ai,j=softmax(xiWQ(xjWK+Ri,jK)T)
以及 o i = ∑ j a i , j v j = ∑ j a i , j ( x j W V + p j W V ) o_i = \sum_ja_{i,j}v_j=\sum_ja_{i,j}(x_jW_V+p_jW_V) oi=∑jai,jvj=∑jai,j(xjWV+pjWV)中的 p j W V p_jW_V pjWV换成 R i , j V R_{i,j}^V Ri,jV
o i = ∑ j a i , j ( x j W V + R i , j T ) o_i=\sum_ja_{i,j}(x_jW_V + R_{i,j}^T) oi=j∑ai,j(xjWV+Ri,jT)
所谓的相对位置就是将本来依赖于二元坐标 ( i , j ) (i,j) (i,j)的向量 R i , j K , R i , j V R_{i,j}^K, R_{i,j}^V Ri,jK,Ri,jV,改为只依赖于相对距离 i − j i-j i−j,并且通常来说会进行截断,以适应不同的距离
R i , j K = p K [ c l i p ( i − j , p m i n , p m a x ) ] R i , j V = p V [ c l i p ( i − j , p m i n , p m a x ) ] R_{i,j}^K=pK[clip(i-j, p_{min}, p_{max})]\\ R_{i,j}^V=pV[clip(i-j, p_{min}, p_{max})] Ri,jK=pK[clip(i−j,pmin,pmax)]Ri,jV=pV[clip(i−j,pmin,pmax)]
这样一来,只需要有限个位置编码,就可以表达出任意长度的相对位置(因为进行了截断),不管 p K , p V pK,pV pK,pV是选择可训练式的还是三角函数式的,都可以达到处理任意长度文本的需求。 -
XLNET式
XLNET式位置编码其实源自Transformer_XL的论文,在使用了Transformer_XL架构的XLNET模型在一定程度上超过了BERT后,Transformer_XL才算广为人知,因此这种位置编码通常也被冠以XLNET之名。
XLNET式位置编码源于对 q i k j T q_ik_j^T qikjT的完全展开:
q i k j T = x i W Q W J T x j T + x j W Q W K T p j T + p i W Q W K T x j T + p i W Q W K T p j T q_ik_j^T=x_iW_QW_J^Tx_j^T + x_jW_QW_K^Tp_j^T + p_iW_QW_K^Tx_j^T + p_iW_QW_K^Tp_j^T qikjT=xiWQWJTxjT+xjWQWKTpjT+piWQWKTxjT+piWQWKTpjT
Transformer_XL是直接将 p j p_j pj替换为相对位置向量 R i − j R_{i-j} Ri−j,至于两个 p i p_i pi,则干脆替换为两个可训练的向量 u , v u, v u,v:
x i W Q W K T x j T + x j W Q W K T R i − j T + u W Q W K T x j T + v W Q W K T R i − j T x_iW_QW_K^Tx_j^T + x_jW_QW_K^TR_{i-j}^T + uW_QW_K^Tx_j^T + vW_QW_K^TR_{i-j}^T xiWQWKTxjT+xjWQWKTRi−jT+uWQWKTxjT+vWQWKTRi−jT
该编码格式并没有像经典的相对位置那样进行截断,而是直接使用了Sinusoidal式的生成方案,由于 R i − j R_{i-j} Ri−j的编码空间与 x i x_i xi不一定相同,所以 R i − j R_{i-j} Ri−j前面的 W K T W_K^T WKT换成了另一个独立的矩阵 W K , R T W_{K,R}^T WK,RT,还有 u W Q uW_Q uWQ、 v W Q vW_Q vWQ可以直接合并成单个 u u u, v v v,所以最终使用的式子是:
x i W Q W K T x j T + x j W Q W K T R i − j T + u W K T x j T + v W Q W K , R T R i − j T x_iW_QW_K^Tx_j^T + x_jW_QW_K^TR_{i-j}^T + uW_K^Tx_j^T + vW_QW_{K,R}^TR_{i-j}^T xiWQWKTxjT+xjWQWKTRi−jT+uWKTxjT+vWQWK,RTRi−jT
此外, v j v_j vj的位置偏置就直接去掉了,即直接令 o i = ∑ j a i , j x j W V o_i=\sum_ja_{i, j}x_jW_V oi=∑jai,jxjWV。从这个工作开始,后面的相对位置编码都只加到Attention矩阵上,而不加到 v j v_j vj上去了。 -
T5式
T5式位置编码出自论文《Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer》,里面使用了一种更简单的相对位置编码,思路依然源自 q i k j T q_ik_j^T qikjT展开式,如果非要分析每一项的含义,可以分别理解为"输入-输入",“输入-位置”,“位置-输入”,“位置-位置"四项注意力的组合。如果认为输入信息与位置信息应该是独立(解耦)的,那么它们就不应该有过多的交互,所以"输入-位置”,"位置-输入"两项Attention可以删掉,而 p i W Q W K T p j T p_iW_QW_K^Tp_j^T piWQWKTpjT实际上只是一个只依赖于 ( i , j ) (i,j) (i,j)的标量,因此可以直接将它作为参数训练出来,即简化为
x i W Q W K T x j T + β i , j x_iW_QW_K^Tx_j^T +\beta_{i,j} xiWQWKTxjT+βi,j
简单来说就是在Attention矩阵的基础上加一个可训练的偏置项而已,跟XLNET式位置编码一样,在 v j v_j vj上的位置偏置则直接被去掉了,包含同样是想的还有微软在ICLR2021的论文《Rethinking Positional Encoding in Language Pre-training》中提出的TUPE位置编码。
不同于常规位置编码将 β i , j \beta_{i,j} βi,j视为 i − j i-j i−j的函数并进行截断的做法,T5对相对位置进行了一个“分桶”操作,即相对位置是 i − j i-j i−j的位置实际上对应的是 f ( i − j ) f(i-j) f(i−j)位置,映射关系如下i − j i-j i−j 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 f ( i − j ) f(i-j) f(i−j) 0 1 2 3 4 5 6 7 8 9 9 9 9 9 9 i − j i-j i−j 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 f ( i − j ) f(i-j) f(i−j) 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 这个设计的思路其实很直观,就是比较邻近的位置需要比较得精细一些,所以给它们都分配一个独立的位置编码;至于稍远的位置就不用区分得太清楚,所以可以共用一个位置编码,距离越远,公用的范围就可以越大,直到达到制定范围在clip。
-
DeBERTa式
DeBERTa式位置编码是DeBERTa原始论文《DeBERTa: Decoding-enhanced BERT with Disentangled Attention》提出来的,这篇论文的主要改进也是在位置编码上,同样还是从 q i k j T q_ik_j^T qikjT展开式出发,T5是去掉了第2、3项,只保留了第4项并替换为相对位置编码,而DeBERTa则刚刚相反,它扔掉了第4项,保留第2、3项并替换为相对位置编码:
q i k j T = x i W Q W K T x j T + x j W Q W K T R i , j T + R j , i W Q W K T x j T q_ik_j^T=x_iW_QW_K^Tx_j^T + x_jW_QW_K^TR_{i,j}^T+R_{j,i}W_QW_K^Tx_j^T qikjT=xiWQWKTxjT+xjWQWKTRi,jT+Rj,iWQWKTxjT
DeBERTa提供了使用相对位置和绝对位置编码的一个新视角,它指出NLP的大多数任务都只需要相对位置信息,但确实有些场景下绝对位置信息更有帮助,于是它将整个模型分为两部分来理解。以Base版的MLM预训练模型为例,它一共有13层,前11层只是用相对位置编码,这部分称为Encoder,后面2层加入绝对位置信息,这部分称为Decoder,还弄了个简称EMD(Enhancde Mask Decoder);至于下游任务的微调阶段,则是使用前11层的Encoder加上1层的Decoder来进行。
三、其他位置编码
除了上面的绝对位置编码和相对位置编码以外,还有一些其他用来表示位置编码的方法,常见的有如下几种。
- CNN式
虽然将CNN应用于NLP的经典工作《Convolutional Sequence to Sequence Learning》中加入了位置编码,但一般的CNN尤其是图像领域中的CNN模型都是没有另外添加位置编码的。ICLR2020的一篇论文《How Much Position Information Do Convolutional Neural Networks Encode?》给出了相应的答案:CNN模型的位置信息是Zero-Padding泄露的。
在CNN网络中,为了使得卷积编码过程中的feature保持一定的大小,通常会对输入padding一定的0,而这篇论文显示这个操作导致模型有能力识别位置信息。也就是说,卷积核的各项异性固然重要,但是最根本的是zero padding(零填充)的存在,因此实际上提取的是当前位置与padding边界的相对距离。不过这个能力依赖于CNN的局部性,向Attention这种全局的无先验结构并不适用。 - 复数式
复数式位置编码是一种比较独特的位置编码方案,来自于ICLR2020的论文《Encoding word order in complex embeddings》。论文的主要思想是结合复数的性质以及一些基本原理,推导出了它的位置编码形式(Complex Order)为:
[ r j , 1 e i ( w j , 1 k + θ j , 1 ) , . . . , r j , 2 e i ( w j , 2 k + θ j , 1 ) , . . . , r j , d e i ( w j , d k + θ j , d ) ] [r_{j,1}e^{i(w_{j,1}k+\theta_{j,1})}, ...,r_{j,2}e^{i(w_{j,2}k+\theta_{j,1})}, ..., r_{j,d}e^{i(w_{j,d}k+\theta_{j,d})} ] [rj,1ei(wj,1k+θj,1),...,rj,2ei(wj,2k+θj,1),...,rj,dei(wj,dk+θj,d)]
这里的 i i i是虚数单位, j j j代表某个词, k k k代表该词所在的位置,而
r j = [ r j , 1 , r j , 2 , . . . , r j , d ] w j = [ w j , 1 , w j , 2 , . . . , w j , d ] θ j = [ θ j , 1 , θ j , 2 , . . . , θ j , d ] r_j = [r_{j,1}, r_{j,2}, ..., r_{j,d}]\\ w_j = [w_{j,1}, w_{j,2}, ..., w_{j,d}]\\ \theta_j = [\theta_{j,1}, \theta_{j,2}, ..., \theta_{j,d}] rj=[rj,1,rj,2,...,rj,d]wj=[wj,1,wj,2,...,wj,d]θj=[θj,1,θj,2,...,θj,d]
代表词 j j j的三组向量,即每个词有三组跟位置无关的词向量(可以按照某种形式进行参数共享,使它退化为两组甚至一组),然后跟位置k相关的词向量就按照是上述公式运算。这种方法最独特的就是将对应的词向量直接用于复数模型,也就是说它走的是一条复数模型路线,不仅仅输入的Embedding层是复数的,里面的每一层Transformer都是复数的。 - 融合式(旋转位置编码,RoPE)
RoPE旋转位置编码是一种比较巧妙的相对位置编码,可以将绝对位置编码和相对位置编码融于一体。正是因为这种设计使其成为了可以用于线性Attention的相对位置编码。这种编码方式的出发点是“通过绝对位置编码的方式实现相对位置编码”,这样做既有理论上的优雅之处,也有实践上的实用之处。对应的实现过程如下:
先假设 q m , k n q_m, k_n qm,kn是所在位置分别为 m , n m,n m,n的二维行向量,既然是二维,那么就可以将它当做复数来运算。由于Attention关键之处在于向量的内积,用复数表示为:
< q m , k n > = R e [ q m , k n ∗ ] v <q_m, k_n>=Re[q_m, k_n^*]v <qm,kn>=Re[qm,kn∗]v
其中 ∗ ^* ∗是共轭复数,右端的乘法是普通的复数乘法, R e [ ] Re[] Re[]表示取结果的实部,也就是说两个二维向量的内积,等于把它们当做复数来看,一个复数与另一个复数的共轭的乘积实部。
如果将 q m , k n q_m, k_n qm,kn分别乘以 e i m θ , e i n θ e^{im\theta}, e^{in\theta} eimθ,einθ变成 q m e i m θ , k n e i n θ q_me^{im\theta}, k_ne^{in\theta} qmeimθ,kneinθ,那么就相当于给它们配上了绝对位置编码(因为显式地依赖绝对位置编码 m , n m,n m,n),然后放到内积里面会得到
< q m e i m θ , k n e i n θ > = R e [ ( q m e i m θ ) ( k n e i n θ ) ∗ ] = R e [ q m k n ∗ e i ( m − n ) θ ] <q_me^{im\theta}, k_ne^{in\theta}> = Re[(q_me^{im\theta})(k_ne^{in\theta})^*] = Re[q_mk_n^*e^{i(m-n)\theta}] <qmeimθ,kneinθ>=Re[(qmeimθ)(kneinθ)∗]=Re[qmkn∗ei(m−n)θ]
因为内积只依赖于相对位置 m − n m-n m−n,因此这就巧妙地将绝对位置与相对位置融合在一起了。这一块并没有Complex Order那么“疯狂”,上述运算本质上还是在实数范畴内的,只不过是借助了复数来完成了某些推导而已。由上述结果可知,对于位置为 n n n的二维实数向量 [ x , y ] [x,y] [x,y],我们把它当做复数来运算,乘以 e i n θ e^{in\theta} einθ,得到恒等式
( x + y i ) e i n θ = ( x c o s n θ − y s i n n θ ) + i ( x s i n n θ + y c o s n θ ) (x+yi)e^{in\theta} = (x cos n\theta - y sin n\theta) + i (x sin n\theta + y cos n\theta) (x+yi)einθ=(xcosnθ−ysinnθ)+i(xsinnθ+ycosnθ)
这意味着通过
( x y ) → ( x c o s n θ − y s i n n θ x s i n n θ + y c o s n θ ) = ( x y ) c o s n θ + ( − y x ) s i n n θ \binom{x}{y} \to \binom{x cos n\theta - y sin n\theta }{x sin n\theta + y cos n\theta} = \binom{x}{y}cos n\theta + \binom{-y}{x}sin n\theta (yx)→(xsinnθ+ycosnθxcosnθ−ysinnθ)=(yx)cosnθ+(x−y)sinnθ
来赋予 [ x , y ] [x,y] [x,y]绝对位置信息,那么在Attention运算的时候也等价于相对位置编码,如果是多于二维的向量,可以考虑每两维为一组进行同样的运算,每一组的 θ \theta θ可以不一样。这样一来,就可以得到一种融绝对位置与相对位置于一体的位置编码方案,从形式上看它有点像乘性的绝对位置编码,通过在 q , k q,k q,k中实行该位置编码,那么效果就等价于相对位置编码。如果需要显式的绝对位置信息,则可以在 v v v上也实行这种位置编码。总的来说,通过相应的操作,可以达到绝对位置编码的效果,也能达到相对位置的效果。 - ALiBi(Attention with Linear Biases)
ALiBi可以用来解决训练推理文本长度不一致的情况。这一块不直接输入position Embedding,而是在 Q K T QK^T QKT计算时加入一个偏置,这个偏置就包含了Q和K的元素相对位置。对应的比较粗暴,是直接作用在attention score中,给 attention score加上一个预设好的偏置矩阵,相当于q和k相对位置差1就加上一个-1的偏置,相当于假设两个token距离越远那么相互贡献也就越低。具体的形式如下图
其中ALiBi位置编码是不需要通过训练的,给定的预设矩阵中还会乘上 m m m的调节因子, m m m的预设与attention的头数有关,是2的指数差值。论文中也尝试将 m m m作为学习参数,但是并没有获得更好的效果。
ALiBi位置编码的外推性比旋转位置编码(RoPE)要好一些,RoPE也是基于正余弦三角式位置编码改进融入相对位置信息,但是正余弦三角式位置编码外推性缺点也很明显,看起来是不需要训练就可以直接得推演无限长度位置编码,但是忽略了一点就是周期性函数必须进行位置衰减,到远处的位置信息趋于直线震荡,基本很难有位置信息区分了,所以外推性比训练时的好不了多少,旋转位置编码基于此改进的自然也是如此。
ALiBi相当于在k和q向量内积上加入分数上的偏置,来体现出位置差异性,针对远距离衰减问题,则是通过softmax函数特性进行差异软放大,将token之间的此位置差异性拉大,避免远距离时被衰减无限接近于0,因为直接作用在attention分数上,拉大远距离内机制,在训练的时候带来的位置差异性减少的问题会大大缓解,从而获得更远距离的外推性能。
四、长度外推问题
大模型的外推性问题是指大模型在训练时和预测时的输入长度不一致,导致模型的泛化能力下降的问题。目前在大模型中一般指的是超过预训练设置的上下文长度时,依旧保持良好推理效果的能力。 常见的解决方法有
- 进制表示
可以将一个整数 n n n以一个三维向量 [ a , b , c ] [a, b, c] [a,b,c]来输入, a , b , c a,b,c a,b,c分别是 n n n的百位、十位、个位。这样既可以缩小数字的跨度,有没有缩小相邻数字的差距,代价是增加了输入的维度,而神经网络恰好非常擅长处理高维数据。如果想要进一步缩小数字的跨度,可以进一步缩小进制的基数,如使用8进制、6进制甚至是2进制,代价是进一步增加了输入的维度。 - 直接外推
如果原来的位置编码是采用三维向量表示,而当使用三维向量无法表示对应数据时可以对其维度进行增加,这样就可以有效处理相关内容。因此可以提前多预留几个维度,在训练阶段设为0,推理阶段直接改为其他数字,这就是外推(Extrapolation)。具体的图示如下
然而,训练阶段预留的维度一直是0,如果推理阶段改为其他数字,效果不一定会很好。因为模型对没有训练过的情况不一定具有适应能力。也就是说,由于某些维度的训练数据不充分,所以直接进行外推通常会导致模型的性能严重下降。 - 线性内插
将外推可以改为内插(Interpolation),即将对应的数据进行压缩。比如通过除以2,这样就可以将1749变成874.5,然后转为三维向量[8,7,4.5]输入到原来的模型中。从绝对数值来看,新的 [ 7 , 4 , 9 ] [7,4,9] [7,4,9]实际上对应的是1498,是原来对应的2被,映射方式不一致;从相对数值来看,原本相邻数字的差距为1,现在是0.5,最后一个维度更加“拥挤” 。所以在做了内插修改后,通常都需要进行微调训练,以便模型重新适应拥挤的映射关系。
不过,内插方案也不尽完美,当处理范围进一步增大时,相邻差异则更小,并且这个相邻差异变小集中在个位数,剩下的百位、十位还是保留了相邻差异为1。即内插方法使得不同维度的分别情况不一样,每个维度变得不对等起来,模型进一步学习难度也更大。 - 进制转换
进制转换可以在既不新增维度,又能保持相邻差距的情况下来实现外推功能。三个数字的十进制编码可以表示0-999。16进制最大可以表示 6 3 − 1 = 4095 > 999 6^3-1=4095>999 63−1=4095>999。所以只需要转到16进制,如1749变为[6,13,5],那么三维向量就可以覆盖目标范围,代价是每个维度的数字从 0-9变为0-15。
这种外推方式可以在不进行微调的情况下就增加外推的范围。
为了做到长度外推性,需要解决两个主要问题:- 预测时位置编码的外推:没见过的就无法保证很好的泛化,不尽学习式位置编码如此;像正弦位置编码、RoPE也有这样的问题,他们自身虽然不用学习,但是会影响上层参数的学习;
- 预测时序列更长,导致注意力相比训练时更分散:序列长度增大意味着attention分布的熵增大了,注意力更分散了。
总结
前文对Transformer中常见的位置编码进行了相关的总结,主要包含了绝对位置编码、相对位置编码及其他相关的位置编码,同时对Transformer编码中涉及到的长度外推相关内容进行了对应的总结。