本题使用动态 NTK 缩放算法调整 RoPE 的基频,再对向量中每组相邻维度进行二维旋转。
首先根据当前序列长度 T 和原始预训练长度 L 计算缩放因子:
s=max(1,LT)Dynamic NTK-aware Scaled RoPE 根据当前输入的实际序列长度 T 调整旋转位置编码(RoPE)的基频,实现动态位置内插。
动态缩放因子:s=max(1,LT),其中 T 为当前序列长度,L 为模型原始预训练长度。
基频(Base)变换:将原始基频 b 变换为 b′=b⋅sD/(D−2),其中 D 为编码维度。
旋转频率计算:位置 m 在第 i 对维度索引上的旋转角频率 θm,i=m⋅(b′)−2i/D
RoPE 计算:对每对维度 (d,d+1) 做旋转变换 xd′=xd∗cos(θ)−xd+1∗sin(θ),xd+1′=xd∗sin(θ)+xd+1∗cos(θ)
实现时请使用 float64 位精度。
第 1 行:T,L,D,b,m,其中 T 为当前序列长度,L 为模型原始预训练长度,D 为编码维度,b 为原始基频,m 为当前位置
第 2 行:当前序列在位置 m 处的向量 x,长度为 D
应用旋转位置编码后的结果,输出保留 4 位小数,不足 4 位小数的补 0
输入
368 276 16 1450.9560044215173 209
-1.8728 1.3494 1.2030 -0.5053 -1.0223 -0.4466 1.5474 0.0967 0.0820 -2.1588 0.9543 0.0011 -0.0810 0.4860 -0.0258 0.2101
输出
-1.1873 -1.9795 0.3002 -1.2698 -1.0961 -0.2079 1.3933 -0.6801 -2.1600 0.0418 -0.2163 0.9295 -0.3734 0.3215 -0.0806 0.1957
输入
20 10 16 100.0 12
1.0 0.0 -1.0 0.5 0.3 -0.2 1.0 0.0 -1.0 0.5 0.3 -0.2 1.0 0.0 -1.0 0.5
输出
0.8439 -0.5366 -0.9001 0.6631 -0.2941 0.2085 -0.0147 0.9999 -1.0526 -0.3769 0.3549 -0.0634 0.9781 0.2080 -1.0476 0.3907
说明
根据输入的信息,当前输入序列长度为 20,超出了模型的原始预训练长度 10,因此需要进行动态位置内插。
已知输入中第 12 位的向量为 [1.0,0.0,…,0.5],长度为 16,现对其做基频变换 100⇒100∗(20/10)(16/14)≈220.8 后应用 RoPE 算法,即可得到旋转后的最终结果 [0.8439,−0.5366,…,0.3907]
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册