关于RoPE及其Scaling的学习
RoPE (旋转位置编码) 核心原理总结:
就是将 d维向量两两分组,形成 d/2 个二维子向量。,构成一个旋转矩阵,将m位置的x向量乘以这个矩阵,将位置编码自然地融入进qk相乘的结果中。将RoPE(x,m)与RoPE(y,n)相乘,此时结果仅和m,n之差有关,两者距离越小结果越大,也就说明两者关联越紧密,从而将位置编码自然的融入qk相乘结果中(相当于向量内积的思想)
我自己的一个误区:
我很长一段时间把RoPE当成一个圆一样的向量内积,以为会转回来导致首尾关联较大,实际上是d维向量,每两个维度组成一个平面,共d/2个平面,向量在这么多个平面上旋转,根本转不回来
NTK-Aware Scaling
在 RoPE 中,每个维度都有一个旋转频率θ_i。如果直接增加序列长度(例如从 2048 扩展到 8192),最直观的办法有两种,但都有缺陷: 直接外推:强行让位置 m 往后排到 8192。结果:模型没见过这么大的角度,会“头晕”,表现直接崩掉。 线性插值 (Linear Interpolation):把 8192 个位置“挤”进原先 2048 的角度空间里。结果:位置分得太细,分辨率下降,记不住短距离的细节。 2. NTK-Aware Scaling 的构思 它的核心思想是:高频维度(代表细节)不缩放,低频维度(代表整体)多缩放。 它利用了NTK理论中的一个直觉:神经网络学习不同频率特征的速度和精度是不一样的。 高频部分(θ 较大):负责区分邻近的 Token(谁是第 1 个,谁是第 2 个)。如果这部分被压缩了,模型就分不清“我爱你”和“你爱我”了。 低频部分(θ 较小):负责感知长距离的粗略位置(比如第一段和第十段的关系)。这部分对精度的要求没那么高
我最后是这样理解的:
我的理解是类似于MoE一样,token分给了不同频率的平面,高频平面负责分析邻近关系,低频平面负责分析全局,最后汇。但是与MoE不同,所有的平面都参与了贡献








