初级版本在这:绝对位置编码、相对位置编码、旋转位置编码分别是什么,他们的优缺点是
什么是:长度外推能力
答:长度外推能力(Length Extrapolation Ability)**是指模型在训练时使用的序列长度与测试时使用的序列长度不一致的情况下,依然能够保持良好性能的能力。具体来说,如果模型在训练时使用的是较短的序列(例如长度为 512),但在测试时需要处理更长的序列(例如长度为 1024 或更长),模型是否能够有效地处理这些更长的序列。
1. 绝对位置编码(Absolute Positional Encoding)
绝对位置编码为序列中的每个位置分配一个唯一的编码,通常与输入嵌入相加。
典型实现:
-
正弦余弦编码(Transformer 原始论文):
P E ( p o s , 2 i ) PE_{(pos, 2i)} PE(pos,2i) = sin ( p o s 1000 0 2 i d model ) \sin\left(\frac{pos}{10000^{\frac{2i}{d_{\text{model}}}}}\right) sin(10000dmodel2ipos)
P E ( p o s , 2 i + 1 ) PE_{(pos, 2i+1)} PE(pos,2i+1) = cos ( p o s 1000 0 2 i d model ) \cos\left(\frac{pos}{10000^{\frac{2i}{d_{\text{model}}}}}\right) cos(10000dmodel2ipos)
其中:- p o s pos pos 是位置索引
- i i i 是维度索引
- d model d_{\text{model}} dmodel 是模型嵌入维度
-
可学习的位置编码:
为每个位置分配一个可学习的向量,通过训练优化。
优势:
- 简单直观:直接为每个位置分配唯一的编码。
- 无参(正弦余弦):正弦余弦编码不需要额外参数,计算高效。
- 可扩展性(正弦余弦):可以外推到比训练时更长的序列。
缺点:
- 无法建模相对位置:绝对位置编码无法直接捕捉元素之间的相对关系。
- 长度限制(可学习编码):可学习的位置编码只能处理训练时见过的最大序列长度。
2. 相对位置编码(Relative Positional Encoding)
相对位置编码关注序列中元素之间的相对距离,而不是绝对位置。
典型实现:
-
Shaw et al. (2018):
在注意力分数中引入相对位置偏置:
t e x t A t t e n t i o n ( Q , K , V ) = Softmax ( Q K T + B d k ) text{Attention}(Q, K, V) = \text{Softmax}\left(\frac{QK^T + B}{\sqrt{d_k}}\right) textAttention(Q,K,V)=Softmax(dkQKT+B)
其中 B B B 是一个与相对位置相关的偏置矩阵。 -
T5 相对位置编码:
使用固定的偏置项表示相对位置。
优势:
- 捕捉相对关系:更适合需要建模元素之间相对位置的任务(如机器翻译)。
- 长度外推:相对位置编码通常对序列长度的变化更鲁棒。
- 任务性能提升:在许多任务中(如文本生成、翻译),相对位置编码表现更好。
缺点:
- 实现复杂:需要在注意力机制中显式引入相对位置信息,计算开销较大。
- 需要预定义最大距离:某些实现需要预先定义最大相对距离,限制了外推能力。
3. 旋转位置编码(Rotary Positional Encoding, RoPE)
旋转位置编码是一种新兴的位置编码方法,广泛应用于大模型(如LLaMA、GPT-NeoX)。
实现方式:
- 通过旋转矩阵将位置信息注入到查询(Query)和键(Key)中:
t e x t R o P E ( x , p o s ) = x ⋅ ( cos ( p o s θ i ) − sin ( p o s θ i ) sin ( p o s θ i ) cos ( p o s θ i ) ) text{RoPE}(x, pos) = x \cdot \begin{pmatrix} \cos(pos \theta_i) & -\sin(pos \theta_i) \\ \sin(pos \theta_i) & \cos(pos \theta_i) \end{pmatrix} textRoPE(x,pos)=x⋅(cos(posθi)sin(posθi)−sin(posθi)cos(posθi))
其中:- x x x 是输入向量
- p o s pos pos 是位置索引
- θ i \theta_i θi 是频率参数
优势:
- 显式建模相对位置:通过旋转操作,RoPE 能够显式地捕捉相对位置信息。
- 长度外推:对长序列的外推性能较好,适合处理超长序列。
- 计算高效:与相对位置编码相比,RoPE 的计算开销较低。
- 无需额外参数:RoPE 是无参的,类似于正弦余弦编码。
缺点:
- 实现复杂:需要对模型进行修改,引入旋转操作。
- 理论理解难度较高:相比绝对位置编码,RoPE 的理论基础较复杂。
对比总结
特性 | 绝对位置编码 | 相对位置编码 | 旋转位置编码(RoPE) |
---|---|---|---|
核心思想 | 为每个位置分配唯一编码 | 建模元素之间的相对位置 | 通过旋转操作注入位置信息 |
实现复杂度 | 简单 | 较复杂 | 较复杂 |
计算开销 | 低 | 较高 | 中等 |
长度外推能力 | 有限(可学习编码)或较好(正弦) | 较好 | 非常好 |
是否建模相对位置 | 否 | 是 | 是 |
是否需要额外参数 | 无(正弦余弦)或有(可学习) | 是 | 无 |
适用场景 | 通用任务 | 需要相对位置的任务(如翻译) | 长序列任务(如文档生成、代码) |
选择建议
-
绝对位置编码:
- 适合通用任务,尤其是序列长度较短或不需要显式建模相对位置的任务。
- 如果追求简单性和计算效率,可以选择正弦余弦编码。
-
相对位置编码:
- 适合需要建模相对位置的任务(如机器翻译、文本生成)。
- 如果任务对相对位置敏感,且计算资源充足,可以选择相对位置编码。
-
旋转位置编码(RoPE):
- 适合长序列任务(如文档生成、代码生成)。
- 如果任务需要较强的长度外推能力,且对相对位置敏感,可以选择 RoPE。
更具象解释为什么RoPE的外推能力好:
1. RoPE 的核心思想
RoPE 通过“旋转”向量的方式,把位置信息巧妙地融入模型中。具体来说:
- 对于每个位置,RoPE 会对输入向量做一个“旋转”操作。
- 这个旋转操作既能表示绝对位置,也能表示相对位置。
2. 为什么 RoPE 外推能力强?
(1)旋转操作是连续的
- RoPE 的旋转操作是平滑的、连续的,就像画一个圆圈一样,没有断点。
- 即使序列长度变长,旋转操作依然可以自然地生成合理的位置信息。
(2)不需要额外参数
- RoPE 不需要额外的参数来学习位置信息,而是直接用数学公式计算。
- 这意味着它不会受到训练时序列长度的限制,可以处理更长的序列。
(3)显式建模相对位置
- RoPE 不仅能表示绝对位置,还能直接表示两个位置之间的相对距离。
- 这种设计让它对长序列更鲁棒,因为相对距离比绝对位置更容易外推。
(4)多频率信息
- RoPE 使用了不同频率的旋转操作,可以捕捉不同尺度的位置关系(比如局部和全局)。
- 这种多频率特性让它更适合处理长序列。
3. 相对位置编码的局限性
- 传统的相对位置编码通常需要额外的参数(比如偏置矩阵),这些参数只能在训练时学习到特定范围内的位置信息。
- 当序列长度超出训练范围时,模型可能无法正确处理位置信息。
- 相对位置编码通常需要预先定义最大距离,限制了它的外推能力。
4. 简单比喻
- 相对位置编码:就像用尺子量距离,但尺子长度有限,超出范围就量不了了。
- RoPE:就像用圆规画圆,无论画多大,圆规都能继续画下去,没有长度限制。
总结
RoPE 的外推能力更强,是因为:
- 它的旋转操作是连续的、平滑的。
- 它不需要额外参数,直接用数学公式计算位置信息。
- 它显式地建模了相对位置,适合处理长序列。
- 它使用了多频率信息,能捕捉不同尺度的位置关系。
相比之下,传统的相对位置编码受限于参数和最大距离,外推能力较弱。