【NLP高频面题 - LLM架构篇】旋转位置编码RoPE如何进行外推?

【NLP高频面题 - LLM架构篇】旋转位置编码RoPE如何进行外推?

重要性:★★★ 💯


NLP Github 项目:


调整旋转角提升外推效果

位置线性内插(Position Interpolation,PI)

RoPE 位置线性内插(base和位置线性内插的效果对比):

关于"位置线性内插(Position Interpolation)"方法的图示说明。对于预训练2048长度,外推4096长度:

左上角图示

  • 这部分是LLM 预训练的长度。
  • 蓝色点代表输入的位置索引,它们都在0到2048的范围内,即预训练范围内。
  • 这意味着给模型提供的输入序列长度没有超过它预训练时的最大长度。

右上角图示

  • 这部分展示了所谓的"长度外推"(Extrapolation)情况。
  • 在这种情况下,模型被要求处理位置索引超出2048的情况,直到4096(由红色点表示)。
  • 这些位置对于模型来说是"未见过的",因为在预训练时它们并没有涉及。
  • 当模型遇到这种更长的输入序列时,其性能可能会受到影响,因为它没有被优化来处理这种情况。

左下角图示

  • 这部分展示了"位置线性内插"方法的应用。
  • 为了解决模型处理更长序列时的问题,研究者们提出了一个策略:将位置索引本身进行下采样或缩放
  • 具体来说,他们将原本在[0, 4096]范围内索引(由蓝色和绿色点表示)缩放到[0, 2048]的范围内。
  • 通过这种方式,所有的位置索引都被映射回了模型预训练时的范围内,从而帮助模型更好地处理这些原本超出其处理能力的输入序列。

RoPE位置编码:

可以看出,在外推(Extrapolation)时,红色点超出了预训练时的位置编码。

为了解决这个问题,位置线性内插的核心思想是通过缩放位置索引 ,使得模型能够处理比预训练时更长的序列,而不损失太多性能。

微调少量长文本,位置线性内插就能推理长文本:

NTK-Aware Scaled RoPE

位置线性内插虽然效果不错,但是插值方法是线性的,这种方法在处理相近的token时可能无法准确区分它们的顺序和位置。因此,研究者提出了一种非线性的插值方案,它改变RoPE的base而不是比例,从而改变每个RoPE维度向量与下一个向量的"旋转"速度。

新的方法被称为"NTK-Aware Scaled RoPE",它允许LLaMA模型在无需任何微调且困惑度降低到最小的情况下扩展上下文长度。这种方法基于Neural Tangent Kernel(NTK)理论和RoPE插值进行改进。

可以看到,公式(15)只是对base进行了放大,但是实验效果却非常好。为什么会取得这样的效果?

为了解开这个谜底,我们需要理解RoPE的构造可以视为一种 𝛽 进制编码 ,在这个视角之下,NTK-aware Scaled RoPE可以理解为对进制编码的不同扩增方式

进制和维度

模型和优化器都不容易分辨相邻的数字。总的来说,基于梯度的优化器只能处理好不大不小的输入,太大太小都容易出问题。

将3位整数n以一个三维向量[a,b,c]来输入,a,b,c分别是n的百位、十位、个位。这样,我们既缩小了数字的跨度,又没有缩小相邻数字的差距,代价是增加了输入的维度------刚好,神经网络擅长处理高维数据。

如果想要进一步缩小数字的跨度,我们还可以进一步缩小进制的基数,如使用8进制、6进制甚至2进制,代价是进一步增加输入的维度。

进制转换

有没有不用新增维度,又能保持相邻差距的方案呢?有,就是进制转换。

刚才说到,我们关心的场景主要利用序信息,原来训练好的模型已经学会了875 > 874,而在16进制下同样有875 > 874,比较规则是一模一样的(模型根本不知道你输入的是多少进制)。唯一担心的是每个维度超过9之后(10~15)模型还能不能正常比较,但事实上一般模型也有一定的泛化能力,所以每个维度稍微往外推一些是没问题的。所以,这个转换进制的思路,甚至可能不微调原来模型也有效!

另外,为了进一步缩窄外推范围,我们还可以换用更小的13进制而不是16进制。这个进制转换的思想,实际上就对应着前面的NTK-aware scaled RoPE。

位置编码

位置n的旋转位置编码(RoPE),本质上就是数字n的β进制编码

由于位置编码更依赖于序信息,而进制转换基本不改变序的比较规则,所以NTK-aware Scaled RoPE在不微调的情况下直接扩大base,也能在更长Context上取得不错的效果。

NTK-Aware Scaled RoPE和RoPE β进制的关系

提出者基于NTK相关结果的直觉,推导了NTK-aware Scaled RoPE。假设要扩大k倍范围表示,根据NTK-Aware Scaled RoPE,高频外推、低频内插

如果从前面的进制转换的角度分析 ,直接外推会将外推压力集中在"高位(m较大)"上,而位置内插则会将"低位(m较小)"的表示变得更加稠密,不利于区分相对距离。而NTK-aware Scaled RoPE其实就是进制转换,它将外推压力平摊到每一位上,并且保持相邻间隔不变,这些特性对明显更倾向于依赖相对位置的LLM来说是非常友好和关键的,所以它可以不微调也能实现一定的效果。

位置插值和NTK-Aware Scaled RoPE的实验效果:

不同插值方法的效果(这里的scale是指位置插值中扩大的倍数k,alpha是指NTK中的lambda参数或者是公式(15)中的alpha参数)

再看一下苏神的实验结论(表中的数据表示准确率),当 k = 8时,结论如下:

测试长度 512(训练) 4096(外推)
Baseline 49.91% 23.16%
PI-RoPE(位置线性内插) 49.91% 13.54%
NTK-RoPE 49.41% 39.27%

上面的结论是没有经过长文本微调的结果,其中Baseline就是外推,PI(Positional Interpolation)就是Baseline基础上改内插,NTK-RoPE就是Baseline基础上改NTK-aware Scaled RoPE。

从表中我们得出以下结论:

1、直接外推的效果不大行

2、内插如果不微调,效果也很差

3、NTK-RoPE不微调就取得了不错的外推结果


NLP 大模型高频面题汇总

NLP基础篇
【NLP 面试宝典 之 模型分类】 必须要会的高频面题
【NLP 面试宝典 之 神经网络】 必须要会的高频面题
【NLP 面试宝典 之 主动学习】 必须要会的高频面题
【NLP 面试宝典 之 超参数优化】 必须要会的高频面题
【NLP 面试宝典 之 正则化】 必须要会的高频面题
【NLP 面试宝典 之 过拟合】 必须要会的高频面题
【NLP 面试宝典 之 Dropout】 必须要会的高频面题
【NLP 面试宝典 之 EarlyStopping】 必须要会的高频面题
【NLP 面试宝典 之 标签平滑】 必须要会的高频面题
【NLP 面试宝典 之 Warm up 】 必须要会的高频面题
【NLP 面试宝典 之 置信学习】 必须要会的高频面题
【NLP 面试宝典 之 伪标签】 必须要会的高频面题
【NLP 面试宝典 之 类别不均衡问题】 必须要会的高频面题
【NLP 面试宝典 之 交叉验证】 必须要会的高频面题
【NLP 面试宝典 之 词嵌入】 必须要会的高频面题
【NLP 面试宝典 之 One-Hot】 必须要会的高频面题
...
BERT 模型面
【NLP 面试宝典 之 BERT模型】 必须要会的高频面题
【NLP 面试宝典 之 BERT变体】 必须要会的高频面题
【NLP 面试宝典 之 BERT应用】 必须要会的高频面题
...
LLMs 微调面
【NLP 面试宝典 之 LoRA微调】 必须要会的高频面题
【NLP 面试宝典 之 Prompt】 必须要会的高频面题
【NLP 面试宝典 之 提示学习微调】 必须要会的高频面题
【NLP 面试宝典 之 PEFT微调】 必须要会的高频面题
【NLP 面试宝典 之 Chain-of-Thought微调】 必须要会的高频面题
...
相关推荐
沐欣工作室_lvyiyi4 分钟前
基于单片机的无线水塔监控系统设计(论文+源码)
人工智能·stm32·单片机·嵌入式硬件·单片机毕业设计
野蛮的大西瓜15 分钟前
BigBlueButton视频会议 vs 华为云会议的详细对比
人工智能·自动化·音视频·实时音视频·信息与通信·视频编解码
红色的山茶花31 分钟前
YOLOv9-0.1部分代码阅读笔记-dataloaders.py
笔记·深度学习·yolo
Leoysq1 小时前
深度学习领域的主要神经网络架构综述
深度学习·神经网络·架构
野蛮的大西瓜1 小时前
文心一言对接FreeSWITCH实现大模型呼叫中心
人工智能·机器人·自动化·音视频·实时音视频·文心一言·信息与通信
lover_putter2 小时前
ai学习报告:训练
人工智能·学习
Srlua2 小时前
基于预测反馈的情感分析情境学习
人工智能·python
这个男人是小帅2 小时前
【AutoDL】通过【SSH远程连接】【vscode】
运维·人工智能·pytorch·vscode·深度学习·ssh
野蛮的大西瓜2 小时前
BigBlueButton视频会议 vs 钉钉视频会议系统的详细对比
人工智能·自然语言处理·自动化·音视频·实时音视频·信息与通信·视频编解码
四口鲸鱼爱吃盐3 小时前
Pytorch | 利用MI-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击
人工智能·pytorch·python