掘金 人工智能 15小时前
位置编码RoPE介绍及其优化
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入探讨了Transformer模型中的位置编码技术,从BERT的绝对位置编码出发,分析了其长度外推性不足的问题。随后详细介绍了Transformer引入的正弦曲线位置编码,阐述了其周期性和远程衰减性质。文章重点讲解了旋转位置编码(RoPE)的原理,如何通过旋转矩阵实现相对位置编码,并分析了其多维实现方式及周期性。最后,文章详细介绍了RoPE的多种优化方法,包括位置插值法、NTK感知插值、NTK-by-parts Interpolation、动态NTK感知插值以及YaRN,旨在解决模型长度外推性的挑战,并保持注意力分布的原始特性。

💡 **绝对位置编码的局限性**:BERT等早期模型采用的绝对位置编码,直接将位置信息加到token向量上,虽然简单直观,但存在长度外推性差的问题,即模型难以处理超出训练长度的序列。

🌟 **正弦曲线位置编码的特性**:Transformer提出的正弦曲线位置编码,通过sin和cos函数为每个位置生成独一无二的编码。其周期性和分量间的相对位置关系,使得模型能够感知词语间的距离,并具备一定的远程衰减性质,但仍有改进空间。

🔄 **旋转位置编码(RoPE)的创新**:RoPE巧妙地将绝对位置编码转化为相对位置编码。它通过在词向量的二维或多维表示上应用旋转矩阵,使得向量点积的结果能直接反映词语间的相对位置,有效解决了绝对位置编码的不足。

🚀 **RoPE的优化与长度外推**:为了应对长序列处理的挑战,RoPE发展出多种优化方法,如位置插值法通过缩小旋转弧度来“慢放”向量旋转,NTK感知插值通过调整base值来保留高频信息,以及动态NTK和YaRN等,这些方法旨在提升模型在长序列上的泛化能力,同时尽量减少对原始注意力分布的破坏。

绝对位置编码

传统的BERT中的实现方法,假设模型最大输出长度是512,向量纬度是768,需要先初始化一个512*768的位置编码矩阵。在每个位置,将位置编码直接加到token向量上。

    不具备长度外推性

正弦曲线(Sinusoidal)位置编码PE

是谷歌在Transformer中提出的绝对位置编码, 计算公式如下:

PE(k,2i)=sin(k100002id)PE(k,2i+1)=cos(k100002id)PE(k,2i) = sin(\frac{k}{10000^{\frac{2i}{d}}}) \\ PE(k,2i+1) = cos(\frac{k}{10000^{\frac{2i}{d}}})

其中,d表示向量纬度,k表示第k个位置,2i和2i+1表示位置向量的分量索引,如PE(k,2i)PE(k,2i) 表示位置k向量第2i个分量。

正弦曲线位置编码每个分量都是正弦或者余弦函数,具有周期性。如下图,每个分量都有周期性,而且越靠后的分量,波长越大,频率越低

正弦曲线位置编码还具有远程衰减的性质:对两个相同的词向量,如果他们之间的距离越近,相对位置就越小,则他们的内积分数就越高,反之越小。

旋转位置编码RoPE

实现方法:采用旋转矩阵,当一个二维向量左乘一个旋转矩阵时,该向量即可实现弧度为θ\theta的逆时针旋转。

通过推理也可以得到(m-n)的信号量。

一个例子:

分而治之的思路:我们把高维向量,两两一组,分别旋转

当我们把θ\theta设为1,随机初始化两个向量q和k,将q固定在0位置,k的位置从0开始逐渐增大,依次计算q和k之间的点积。下图中反映了点积的震荡图,最大的问题是:缺乏了远程衰减性!

因此借鉴Sinusoidal位置编码,将每个分组的θ\theta设置为不同的常亮,从而引入远程衰减的性质:

在原始的RoPE中,沿用了Sinusoidal的设置,θ\theta赋值为100002i/d10000^{-2i/d},10000为base,实际上base的值对注意力远程衰减程度有影响:

因此对base数值的研究,与大模型的外推能力有关系,如NTK感知插值、动态NTK感知插值等长度外推方法,本质上都是通过改变base值,影响每个位置对应的旋转角度,进而影响模型的位置编码信息。

每组向量的旋转具有周期性,旋转一周的弧度是2π2\pi,也就是转一圈又会回到原点,所有RoPE中的向量旋转就像时钟一样,具有周期性,如下图1。但是我们发现,越靠后的分组,向量的旋转速度越慢,如下图当位置位于500时,第0组分量已经旋转500弧度了,第8组分量才旋转158弧度。

下面图2展示了上述旋转弧度对应的正弦函数,我们可以直观看到:越靠后的分组,它的旋转速度越慢,正弦函数的周期越大,频率越低。

参考:

    图解RoPE旋转位置编码及其特性

RoPE的优化-位置插值法

做法很直接:缩小每个位置的旋转弧度,让向量旋转的慢一点,每个位置的旋转弧度变为原来的LL\frac{L}{L'} ,长度扩大几倍,旋转弧度就缩小几倍。

如图一,如果训练阶段sentence长度是[0,2048],那么模型只见过[0,2048]的旋转弧度,没见过[2048,4096]的旋转弧度,模型难以理解新的旋转弧度,无法正确引入位置信息,导致模型性能下降。

图3,经过位置插值之后,向量旋转变慢了,周期变大,频率变慢

RoPE优化-NTK感知插值

前面介绍过:位置越靠后的分量旋转速度越慢,频率越低,周期越长,如下图所示:对于第0组分量,在位置7的时候就已经旋转一周了,而对于第64组分量,在位置2047时,其旋转弧度约为0.2,仍然没有旋转1/4周。我们希望这些高频信息。

NTK感知插值做法:对base加一个缩放因子,进行放大保留高频信息,高频分量旋转速度降幅低,低频分量旋转速度降幅高;在高频部分进行外推,低频部分进行内插。

因此,我们将NTK感知插值有效的原因:

    靠前的分组,在训练环节见过非常多的完整的旋转周期,位置信息得到充分训练,具有较强的外推能力。

    靠后的分组,在训练环节无法见到完整的旋转周期,或者见到的非常少,训练不充分,外推性能弱。需要进行位置插值。

RoPE优化-NTK-by-parts Interpolation

做法:不改变高频部分,仅仅缩小低频部分的旋转弧度。

RoPE优化-动态NTK感知插值

做法:推理长度小于等于训练长度时,不进行插值,推理长度大于训练长度时,采用NTK动态插值法动态放大base。

RoPE优化-YaRN

问题:通过NTK办法,本质上都是减小旋转弧度,降低旋转速度,来达到长度外推的能力。这将导致两个位置之间的旋转弧度差距变小,词向量之间的距离比原来更大,点乘更大,这破坏了模型原始注意力分布。

参考:

    详解基于调整RoPE旋转角度的大模型长度外推方法

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

位置编码 Transformer RoPE NLP 长度外推
相关文章