Qwen2-VL 在架构上的另一重要创新则是多模态旋转位置嵌入(M-ROPE)。传统的旋转位置嵌入只能捕捉一维序列的位置信息,而 M-ROPE 通过将原始旋转嵌入分解为代表时间、高度和宽度的三个部分,使得大规模语言模型能够同时捕捉和整合一维文本序列、二维视觉图像以及三维视频的位置信息。这一创新赋予了语言模型强大的多模态处理和推理能力,能够更好地理解和建模复杂的多模态数据。(截取自Qwen2-VL官网)Multimodal Rotary Position Embedding
RoPE 的关键在于通过绝对位置编码(通过旋转矩阵赋予绝对角度)来实现相对位置编码(通过QK向量乘积获得相对角度)。

具体来说,将位置编码表示为二维空间中的旋转操作。对于一个二维向量 x=(a,b),将其绕原点旋转 m 弧度后,可以表示为矩阵乘法 R(m) * x,其中旋转矩阵 R(m) 的形式如下:
$$ R(m) = \begin{bmatrix} \cos(m) & -\sin(m) \\ \sin(m) & \cos(m) \end{bmatrix} $$
当旋转矩阵相乘时候,有如下推导:
$$ R(m)^TR(n)=R(-m)R(n)=R(n-m) $$
即两个位置m和n的旋转矩阵相乘后,结果仅依赖于它们的相对位置(n - m),这是 ROPE 能够捕捉相对位置信息的核心数学依据。
将上述数学依据和注意力机制结合,在自注意力机制中,查询向量q_m和键向量k_n会被旋转矩阵旋转,得到绝对位置编码:
$$ q_m^{rot}=R(m)q_m, k_n^{rot}=R(n)k_n $$
然后计算向量点积得到相对位置信息:
$$ (q_m^{rot})^Tk_n^{rot}=q_m^TR(m)^TR(n)k_n=q_m^TR(n-m)k_n $$

1D的RoPE可以用下面的公式来编码,一个emb向量中有多个维度,两两一组进行旋转:

m代表pos_id,旋转弧度theta随着维度下标变化而变化:
$$ \theta_i=1/10000^{2i/dim} $$
为了方便代码编写,可以换一种旋转分组,之前是相邻的两个维度逻辑上组成一个小向量旋转,现在是间隔dim/2 的两个维度逻辑上组成一个小向量进行旋转: