引用:

**Transformer升级之路:1、Sinusoidal位置编码追根溯源 Transformer升级之路:2、博采众长的旋转式位置编码 Transformer升级之路:4、二维位置的旋转式位置编码 Transformer升级之路:17、多模态位置编码的简单思考 “闭门造车”之多模态思路浅谈(三):位置编码**

关于位置编码,不管是最初的 Sinusoidal 还是后面苏剑林的 RoPE 位置编码,都是为了成为”相对位置编码的绝对位置编码”,Sinusoidal 实现了这一点,但做的并不够好。RoPE 很好的弥补了这一部分的问题,但是在多模态的环境中,RoPE 的使用变得更加复杂,因为多模态中位置编码需要满足兼容性、对称性和等价性。

这篇 Blog 会从 Sinusoidal 谈到 RoPE 接着衍生到 2D-RoPE 和 M-RoPE,最后介绍苏神的 RoPE-Tie 和 RoPE-TV,帮助模型构建从一维编码过度到包含时序信息的三维视频位置编码的过程

目录

正弦位置编码 (Sinusoidal Positional Encoding):

Google的那篇《Attention is all you need》中直接提出了 Sinusoidal 位置编码的方式,虽然这是一个绝对位置编码的方式,但是却能够得到相对位置编码信息。

$$ ⁍ $$

其中 $p_{k,2i}, p_{k,2i+1}$ 分别是位置 $k$ 的向量的第 $2ki,2ki+1$ 个分量,$d$ 是向量的维度。设计 Sinusoidal 编码的原因是transformer无法识别位置信息,因为transformer框架具有全对称性的原因,所以要设计一个位置编码,让每个位置的编码向量不同,就能打破这种全对称性。

在泰勒展开式中,我们用 $\tilde{f}$ 来代替 $f$

$$ \tilde{f} \approx f + p_m^\top \frac{\partial f}{\partial x_m} + p_n^\top \frac{\partial f}{\partial x_n} + \frac{1}{2} p_m^\top \frac{\partial^2 f}{\partial x_m^2} p_m + \frac{1}{2} p_n^\top \frac{\partial^2 f}{\partial x_n^2} p_n + p_m^\top \frac{\partial^2 f}{\partial x_m \partial x_n} p_n \quad \underbrace{p_m^\top H_p}_{\text{Hessian}} $$

这个公式表示的是一个函数 $f$ 的近似值,通常用于多变量微积分中的泰勒展开。它通过考虑函数的值及其一阶和二阶导数来近似函数在某个点附近的行为。

组成部分解释:

$$ \begin{align*}f & : \text{原始函数的值。} \\p_m^\top \frac{\partial f}{\partial x_m} & : \text{一阶导数项,表示函数在 } x_m \text{ 方向的变化。} \\p_n^\top \frac{\partial f}{\partial x_n} & : \text{一阶导数项,表示函数在 } x_n \text{ 方向的变化。} \\\frac{1}{2} p_m^\top \frac{\partial^2 f}{\partial x_m^2} p_m & : \text{二阶导数项,表示函数在 } x_m \text{ 方向的曲率。} \\\frac{1}{2} p_n^\top \frac{\partial^2 f}{\partial x_n^2} p_n & : \text{二阶导数项,表示函数在 } x_n \text{ 方向的曲率。} \\p_m^\top \frac{\partial^2 f}{\partial x_m \partial x_n} p_n & : \text{混合二阶导数项,表示函数在 } x_m \text{ 和 } x_n \text{ 方向的交互影响。}\end{align*} $$

这个公式通过考虑函数的值及其一阶和二阶导数,提供了一个在某个点附近的局部近似。这种近似在优化、物理建模和机器学习等领域中非常常见,尤其是在需要评估函数在某个点附近的行为时。第一项跟位置信息无关,第二项到第五项只有单方向的位置信息,所以他们是绝对位置信息,只有最后一项在 m 和 n 的方向上形成了交互,所以是相对位置信息是在这里部分实现的。

然后我们来看他是如何实现相对位置信息的,当 $p_m^\top \mathcal{H} p_n = p_m^\top p_n = \langle p_m, p_n \rangle$ 是两个位置编码的内积时,如果需要这部分实现相对位置信息,那就恒成立一个等式 $\langle p_m, p_n \rangle = g(m - n)$。接着我们利用复数的运算法则,当

$\langle p_m, p_n \rangle = \Re[p_m p_n^]$ 和 $p_m p_n^ = q_{m-n}$ 同时成立时, 其中 $p_n^* \text{ 是 } p_n$的共轭复数,就可以得到