旋转位置编码 RoPE
paperreading
本文字数:835 字 | 阅读时长 ≈ 3 min

旋转位置编码 RoPE

paperreading
本文字数:835 字 | 阅读时长 ≈ 3 min

transformer 的 attention 机制本身是不带有位置信息的,因此对于文本序列,attention 机制本身就会丢失掉原文当中的序列信息,造成信息缺失,影响到模型的效果表达

在了解旋转位置编码的优势之前,我们从其他位置编码开始看起

绝对位置编码

绝对位置编码有两个典型,一个是 Bert,另外一个是 Vanilla transformer

1. Bert

Bert 中采用的是绝对位置编码,非常简单粗暴,既然 attention 无法识别位置信息,那我们就在输入当中显式加入一个序列位置信号,让模型自己去学习这个序列位置信号的分布

class BertEmbeddings(nn.Module):
    """Construct the embeddings from word, position and token_type embeddings."""

    def __init__(self, config):
        super().__init__()
        self.word_embeddings = nn.Embedding(config.vocab_size, config.hidden_size, padding_idx=config.pad_token_id)
        self.position_embeddings = nn.Embedding(config.max_position_embeddings, config.hidden_size)  # 可学习的绝对位置编码

    def forward(self, sequence, segment_label):
        pos1 = self.word_embeddings(sequence)
        pos2 = self.position_embeddings(sequence)
        x = pos1 + pos2
        return x

我们可以看到这个绝对位置编码就是初始化了一个 Embedding 层,假设模型支持的最大输入长度为 512,编码维度为 768,则这个位置编码层的参数为: 512×768,每一行就是表示一个位置编码,模型反向传播时,来更新、学习位置编码,在获取 word_embeddings 之后,简单的将其和 position_embeddings 相加即可

优点: 各个位置都会被区分开,并且相邻的位置比较接近。
缺点: 不具备外推的性质。长度在预设定好之后就被固定了

2. Vanilla transformer

又称 Sinusoidal,即正弦编码

Bert 的位置编码是可以训练的,Vanilla transformer(来自 Attention is all you need)不行,是提前预定好的三角函数,出发点参考了三角函数的性质,如下

$$
\begin{aligned}
PE_{(pos,2i)} &= sin(\frac{pos}{10000^{\frac{2i}{d_{model}}}}) \
PE_{(pos,2i+1)} &= cos(\frac{pos}{10000^{\frac{2i}{d_{model}}}})
\end{aligned}
$$

其中,pos表示第pos个位置,i是维度,2i, $2i+1\in [0, d)$,表示position embedding当中某一个具体维度上的值,将值限制在[-1, 1]之间

这样的情况下位置表征就是先验确定的了,我们无需交由模型进行额外地拟合,而且长度使用上也更加自由,基本没有长度限制,但是代价就是给模型增加了人工的先验限制,学习到的embedding特征不但要满足token本身的信息表征,还要满足三角函数形式的数据分布表达,收缩了解空间的表达域

优点: 具有相对位置表达能力,。两个位置向量的内积只和相对位置k有关。Sinusoidal编码具有对称性。随着k的增加,内积的结果会直接减少,即会存在远程衰减。

相对位置表达能力

Sinusoidal可以学习到相对位置,对于固定位置距离的k,PE(i+k)可以表示成PE(i)的线性函数,例如

$$
\begin{aligned}
& PE_{(pos,2i)} = sin(pos\times \omega_{2i}) \
& PE_{(pos,2i+1)} = cos(pos\times \omega_{2i}) \
& \omega_{2i} = \frac{1}{10000^{\frac{2i}{d_{model}}}}
\end{aligned}
$$

https://www.zhihu.com/question/450936573/answer/1797187035
https://mengbaoliang.cn/archives/58129/
https://blog.csdn.net/codename_cys/article/details/124652508
https://blog.csdn.net/weixin_43646592/article/details/130924280

相对位置编码

4月 06, 2025
3月 10, 2025
12月 31, 2024