🗂️旋转编码(RoPE)
2024-7-18
| 2024-7-19
0  |  阅读时长 0 分钟
type
status
password
date
slug
summary
category
URL
tags
icon
旋转位置编码(Rotary Position Embedding,RoPE)是论文Roformer: Enhanced Transformer With Rotray Position Embedding 提出的一种能够将相对位置信息依赖集成到 self-attention 中并提升 transformer 架构性能的位置编码方式。RoPE 具有更好的外推性,目前是大模型相对位置编码中应用最广的方式之一。
💡
外推性是指大模型在训练时和预测时的输入长度不一致,导致模型的泛化能力下降的问题。例如,如果一个模型在训练时只使用了512个 token 的文本,那么在预测时如果输入超过512个 token,模型可能无法正确处理。这就限制了大模型在处理长文本或多轮对话等任务时的效果。

背景

Transformer的位置编码

  • attention公式
    • 💡
      为什么需要位置编码
      notion image
  • 位置编码
    • 绝对位置编码
      • 其中, 表示单词在句子中的位置, 表示 PE 的维度 (与词 Embedding 一样), 表示偶数的维度, 表示奇数维度 (即 , )。
    • 可学习的位置编码,是一个可以学习的矩阵,

旋转编码 RoPE

原理

💡
RoPE通过绝对位置编码的方式实现相对位置编码,综合了绝对位置编码和相对位置编码的优点。计算相似度的时候,只依赖token向量与token之间的相对位置。

二维推导

此时,只有两个维度。
notion image

扩展到多维

将2维推广到任意维度,可以表示如下:
其中可以表示为任意二维情形的拼接。

RoPE 的高效计算

notion image
由于的稀疏性,所以直接用矩阵乘法来实现会很浪费算力,推荐通过下述方式来实现 RoPE
其中是逐位对应相乘。

原理图解

”Enhanced”的word embedding先乘以得到query和key,这两个向量都是维的。然后把它切分成个二维向量,比如图中最前面绿色的。然后用旋转矩阵得到,这里Enhanced是第一个token,所以。用类似的方法可以得到query和key的第3~4,第5~6,…,第维的向量。也就是图中右边的Position Encoded Query/Key。
notion image
  • 旋转角度 
    • 这里 完全由 Q、K、V 的向量长度 决定,即 dim
  • 位置 Position m:单词对应的位置
  •  Freq 频次矩阵:结合上面的信息,针对一个固定了最长 query 长度 m 和向量维度 d 的 LLM,我们可以提前将其对应的旋转变换矩阵构造完成:
    • 结合 Rd 的变换矩阵,分别执行 cos 和 sin,便可以得到我们计算所需的全位置全维度的变换矩阵。下面看下代码如何实现。

RoPE性质

远程衰减

RoPE(旋转位置编码)的远程衰减性指的是,对于两个词向量,如果它们的相对距离较近,那么它们的注意力分数应该偏高,反之应该偏低。即随着词向量之间相对距离的增大,它们的注意力得分会逐渐衰减。
在RoPE中,作者沿用了Sinusoidal位置编码的方案,即 ,其中  表示词向量的维度。这种方案会带来一定的远程衰减性,使得模型能够更好地捕捉词向量之间的相对位置关系。
notion image
从图中我们可以看到随着相对距离的变大,内积结果有衰减趋势的出现。因此,选择 ,确实能带来一定的远程衰减性。论文中还试过以 为初始化,将 视为可训练参数,然后训练一段时间后发现 并没有显著更新,因此干脆就直接固定了。

RoPE的外推性

RoPE 可以通过旋转矩阵来实现位置编码的外推,即可以通过旋转矩阵来生成超过预期训练长度的位置编码。这样可以提高模型的泛化能力和鲁棒性。

RoPE实验

RoPE 在预训练阶段的实验效果
Stage
Max seq length
Batch size
Training steps
Loss
Accuracy
512
256
200k
1.73
65.0%
1536
256
12.5k
1.61
66.8%
256
256
120k
1.75
64.6%
128
512
80k
1.83
63.4%
1536
256
10k
1.58
67.4%
512
512
30k
1.66
66.2%
从上面可以看出,增大序列长度,预训练的准确率反而有所提升,这体现了 RoPE 具有良好的外推能力
下面是在下游任务上的实验结果:
Model
Validation
Test
BERT-512
64.13%
67.77%
WoBERT-512
64.07%
68.10%
RoFormer-512
64.13%
68.29%
RoFormer-1024
66.07%
69.79%
其中 RoFormer 是一个绝对位置编码替换为 RoPE 的WoBERT模型,后面的参数(512)是微调时截断的maxlen,可以看到 RoPE 确实能较好地处理长文本语义。

RoPE代码实现

Meta 的 LLAMA 和 清华的 ChatGLM 都使用了 RoPE 编码,下面看一下具体实现。
notion image

在LLAMA中的实现

这里举一个例子,假设batch_size=10, seq_len=3, d=8,则调用函数precompute_freqs_cis(d, seq_len)后,生成结果为:

在ChatGLM中的实现

和 LLAMA 的实现方式相差不大。代码如下:

旋转位置嵌入 (ROPE) (labml.ai)

总结

旋转编码 RoPE 具有远程衰减,即随着词向量之间相对距离的增大,它们的注意力得分会逐渐衰减。
旋转编码 RoPE 可以通过旋转矩阵来实现位置编码的外推,即可以通过旋转矩阵来生成超过预训练长度的位置编码。这样可以提高模型的泛化能力和鲁棒性。
旋转编码 RoPE 可以与线性注意力机制兼容,即不需要额外的计算或参数来实现相对位置编码。这样可以降低模型的计算复杂度和内存消耗。这一点是其他混合位置编码方式(如Transformer-XL、XLNet等)所不具备的,因为它们需要额外的计算或参数来实现相对位置编码。

参考

 
  • LLM
  • AlexNet论文翻译——中文版论文阅读:Improving language understanding by generative pre-training
    Loading...
    目录