多模态大模型位置编码梳理笔记(二):DeepSeek位置编码,位置编码长度外推

【如果笔记对你有帮助,欢迎关注&点赞&收藏,收到正反馈会加快更新!谢谢支持!】

上期笔记:

多模态大模型位置编码梳理笔记(一):绝对位置编码(正弦,可学习),相对位置编码(XL, T5, RoPE, ALiBi)-CSDN博客

一、DeepSeek 位置编码

  • 前情提要:
    • 绝对位置编码:将位置编码加到输入上(在Attention前添加)
    • 相对位置编码:在Attention的计算过程中添加query,key上
  • 动机:因为DeepSeek对query和key做了压缩,直接在压缩后的qk上添加RoPE相对位置编码不能反应原始相对位置关系  →  解耦RoPE策略
  • 具体方法:将query和key(每个头)拆分成两部分:
    • q^Ck^C 储存大部分的业务信息,会被压缩
    • q^Rk^R 储存位置信息,不经过压缩,直接加入RoPE:其中 k^R 所有头共享的同一个,q^R每个头单独生成
    • 在推理时不需要对Key进行位置编码的计算,只需要缓存c^{KV}
      KV Cache = c^{KV}(语义内容) + k^R(共享位置)
  • Attention计算流程:c^{KV} 通过投影矩阵还原key和value,key拼接k^Rc^Q 通过投影矩阵还原q^C 和 经过RoPE处理的q^R拼接 → MHA计算

    (图来源:2万字长文!从Transformer到DeepSeek位置编码,全面了解「大模型位置编码」!

二、位置编码长度外推

2.0 Intro

  • 为什么需要位置编码长度外推?训练模型时,通常使用固定长度的序列;推理的时候可能会遇到更长的序列,原来位置编码的长度不够用
  • 直接外推:如果是十进制表示,7 6 5 (训练1-999长度) → 1 7 6 5 (1-1999长度),增加一维
    • 方法:提前预留多位 0(训练阶段,如变成 0 7 6 5),推理的时候 改成其他数字
    • 问题:模型训练的时候没见过,直接外推会导致模型的性能严重下降
  • 线性内插:
    • 方法:1 7 6 5 → 8 8 2.5 (依然保持三维),需要重新微调训练,来适应新的映射关系
    •  问题:小时通常出现在个位,分布密集;十位百位等依然是间距为1的分布,模型难学习
  • 进制转换
    • 方法:将十进制转化成十六进制(比较规则和十进制一样,模型可以看懂大小关系)

2.1 RoPE的位置编码外推

  • RoPE的特点:低维度具有更快的旋转(高频,可以捕捉局部细节),高维度具有更慢的旋转(低频,对应长距离依赖)
  • RoPE直接外推的问题:
    • 训练长度的RoPE位置编码是在一个正余弦函数周期内的,直接外推会让额外的长度进入另一个周期 → 长距离的位置编码和训练数据的位置编码非常不同【出现较大的Attention分数
  • RoPE位置内插(PI):
    • PI之后需要微调 → 改善困惑度(能够更准确地预测下一个token)
    • 问题:
      • 局部失真:对整个序列的位置进行线性缩放,绝对差值​​从 1 缩小到了 1/k,旋转的角度 ​​也按比例缩小了 k 倍,相对位置关系被“挤压”得太小、太模糊
      • ​高频信息的损失:削弱了模型对​​细微位置变化(即近距离 tokens)的感知和区分能力​
      • 动态缩放的缺乏:缩放因子 k 是固定死的,无法适应不同长度的序列需求
  • NTK-Aware 插值:
    • 非线性插值方法,对 RoPE 进行高频外推和低频内插
    • 即不同维度频率进行不同程度的缩放(减少高频和增加低频)来将插值密度分散到多个维度
  • NTK-by-parts 插值:
    • 不改变高频部分,仅缩小低频部分的旋转弧度。而且强加两个阈值来限制缩放比例高于和低于某些维度
  • Dynamic NTK 插值:
    • 对不同的推理长度进行插值的动态调整
    • 推理长度小于等于训练长度时,不进行插值;推理长度大于训练长度时,进行NTK-Aware 插值 → 在推理过程中动态调整缩放因子 s
  • YaRN (Yet another RoPE entensioN method)
    •  温度系数修正注意力分布 softmax(q_m^Tk_n/t\sqrt{d_k}) + NTK-by-parts 插值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值