【笔记】大模型长度外推技术 NTK-Aware Scaled RoPE
NTK-Aware Scaled RoPE
- 正弦编码(Sinusoidal)
- 旋转位置编码RoPE
- 编码步骤:
- 旋转位置编码的优势
 
- NTK-Aware Scaled RoPE
- 直接外推
- 线性内插
- 进制转换
- 高频外推、低频内插的理解
- 位置编码
 
- 总结
- 参考:
长度外推技术是自然语言处理(NLP)领域中,特别是在处理长文本数据时,一个重要的研究方向。这项技术旨在使模型能够在较短的上下文窗口上进行训练,并在较长的上下文窗口上进行推理,即处理超出其训练时所见文本长度的序列。
正弦编码(Sinusoidal)
详细介绍:正弦编码(Sinusoidal)
 我们知道正弦编码有以下特点:
- 具有相对位置表达能力:Sinusoidal可以学习到相对位置,对于固定位置距离的k,PE(i+k)可以表示成PE(i)的线性函数。
- 两个位置向量的内积只和相对位置 k 有关。
- Sinusoidal编码具有对称性。
- 随着k的增加,内积的结果会直接减少,即会存在远程衰减。
- 正弦编码不具备外推性。
虽然Sinusoidal只和相对位置有关。但是实际的Attention计算中还需要与attention的权重 W W W相乘,即 P E t T W q T W k P E t + k PE^T_tW^T_qW_kPE_{t+k} PEtTWqTWkPEt+k,这时候内积的结果就不能反映相对位置。
假设位置 m m m的位置编码为 p m p_m pm,位置n的位置编码为 p n p_n pn,如果使用正弦编码,那两个位置之间的 a t t e n t i o n attention attention可以表达为:
  < f q ( x m , m ) , f k ( x n , n ) > = q m k m T = ( x m + p m ) W q W k T ( x n + p n ) T = x m W q W k T x n T + x m W q W k T p n T + p m W q W k T x n T + p m W q W k T p n T (1) <f_q(x_m,m), f_k(x_n, n)> = q_mk^T_m=(x_m+p_m)W_qW^T_k(x_n+p_n)^T=\\x_mW_qW^T_kx^T_n+x_mW_qW^T_kp^T_n+p_mW_qW^T_kx^T_n+p_mW_qW^T_kp^T_n \tag{1} <fq(xm,m),fk(xn,n)>=qmkmT=(xm+pm)WqWkT(xn+pn)T=xmWqWkTxnT+xmWqWkTpnT+pmWqWkTxnT+pmWqWkTpnT(1)
 后面三项都是和绝对位置 m , n m,n m,n有关,无法表达成 m − n m-n m−n的形式,因此需要找到一种位置编码,使得下式成立:
  < f q ( x m , m ) , f k ( x n , n ) > = g ( x m , x n , m − n ) (2) <f_q(x_m,m), f_k(x_n, n)> = g(x_m, x_n, m-n) \tag{2} <fq(xm,m),fk(xn,n)>=g(xm,xn,m−n)(2)
 即接下来要介绍的旋转位置编码。
旋转位置编码RoPE
(详细证明:参考此文),即证明上式(2),以下是二维情况下的一个例子:

 
编码步骤:
- 对于 token 序列中的每个词嵌入向量,首先计算其对应的 query 和 key 向量
- 然后对每个 token 位置都计算对应的旋转位置编码,旋转参考
- 接着对每个 token 位置的 query 和 key 向量的元素按照 两两一组 应用旋转变换
- 最后再计算 query 和 key 之间的内积得到 self-attention 的计算结果

旋转位置编码的优势
- 除了具备标准位置编码的优点外,还具备一定的长度外推能力。
但是实验发现RoPE仍然存在外推问题,即测试长度超过训练长度之后,模型的效果会有显著的崩坏,具体表现为困惑度(Perplexity,PPL)等指标显著上升。
NTK-Aware Scaled RoPE
详细参考:Transformer升级之路:10、RoPE是一种β进制编码
直接外推
直接外推就是在高位扩展,然后通过微调,使模型适应新的位置编码。比如训练长度只有0-999,则需要三维向量(十进制),推理时最大输入长度为0-1999,那就需要在高位增加一维,由于训练时模型没有见过第四维的编码,因此需要经过微调。
线性内插
线性内插是指维数不变,将2000压缩到1000以内,比如通过除以二1601就会变成800.5,个位变成了0.5,就可以用三维表示。原本相邻数字的差距为1,现在是0.5,最后一个维度更加“拥挤”。所以,做了内插修改后,通常都需要微调训练,以便模型重新适应拥挤的映射关系。
进制转换
有没有不用新增维度,又能保持相邻差距的方案呢?有,我们也许很熟悉,那就是进制转换!三个数字的10进制编码可以表示0~999,如果是16进制呢?它最大可以表示 1 6 3 − 1 = 4095 > 1999 16^3-1=4095>1999 163−1=4095>1999所以,只需要转到16进制,如1749变为 [ 6 , 13 , 5 ] [6,13,5] [6,13,5],那么三维向量就可以覆盖目标范围,代价是每个维度的数字从0~9变为0~15。
我们关心的场景主要利用序信息,原来训练好的模型已经学会了 875 > 874 875>874 875>874,而在16进制下同样有 875 > 874 875>874 875>874,比较规则是一模一样的(模型根本不知道你输入的是多少进制)。唯一担心的是每个维度超过9之后(10~15)模型还能不能正常比较,但事实上一般模型也有一定的泛化能力,所以每个维度稍微往外推一些是没问题的。所以,这个转换进制的思路,甚至可能不微调原来模型也有效!另外,为了进一步缩窄外推范围,我们还可以换用更小的 ⌈ x 2000 ⌉ \lceil \sqrt[2000]{x} \rceil ⌈2000x⌉=13进制而不是16进制。
高频外推、低频内插的理解
外推:在数学和统计学中,外推(Extrapolation)指的是利用已有的数据或模型来预测超出已知数据范围的值。在机器学习模型中,外推通常指的是模型在处理其训练时未见过的输入时的能力。
 高频外推:高频外推指的是在模型处理新的、更长的上下文时,对于捕捉快速变化的位置(低位)信息的高频分量,我们希望它们能够继续以原有的变化速率(即频率不变)向外扩展,以保持对短距离依赖关系的捕捉能力。这种外推是必要的,因为在长文本中,短距离的依赖关系仍然需要被准确捕捉,而高频分量正是负责这一任务的。
 内插:在数学和统计学中,内插(Interpolation)指的是利用已知数据点之间的值来估计未知数据点的值。在机器学习模型中,内插通常指的是模型在其训练数据范围内处理输入时的能力。
 低频内插:指的是在模型处理训练数据范围内的位置时,对于捕捉缓慢变化的位置信息的低频分量(高位),通过调整其频率或缩放(频率变小),使其能够平滑过渡并适应不同的位置。这种内插是必要的,因为在长文本中,长距离的依赖关系可能不像短距离那样频繁或显著,但仍需要被模型所理解和捕捉。
位置编码
截图来自:Transformer升级之路:10、RoPE是一种β进制编码

上图(2)式的最低频是 n β d / 2 − 1 \frac{n}{\beta^{d/2-1}} βd/2−1n,引入参数 λ \lambda λ,变为 n ( β λ ) d / 2 − 1 \frac{n}{(\beta\lambda)^{d/2-1}} (βλ)d/2−1n,让它跟内插一样,则:
  n ( β λ ) d 2 − 1 = n / k β d 2 − 1 \frac{n}{(\beta\lambda)^{\frac{d}{2-1}}}=\frac{n/k}{\beta^{\frac{d}{2-1}}} (βλ)2−1dn=β2−1dn/k
 解得 λ = k 2 / ( d − 2 ) \lambda=k^{2/(d-2)} λ=k2/(d−2)。最高频是 n β \frac{n}{\beta} βn,引入\lambda后变为 n β λ \frac{n}{\beta\lambda} βλn,由于 d d d通常很大, λ \lambda λ很接近1,所以它还是接近 n β \frac{n}{\beta} βn,即等价于外推。
总结
直接外推会将外推压力集中在“高位(m较大)”上,而位置内插则会将“低位(m较小)”的表示变得更加稠密,不利于区分相对距离。而NTK-aware Scaled RoPE其实就是进制转换,它将外推压力平摊到每一位上,并且保持相邻间隔不变,这些特性对明显更倾向于依赖相对位置的LLM来说是非常友好和关键的,所以它可以不微调也能实现一定的效果。简单点就是通过进制转换的思想,实现高频外推,低频内插。
(声明:文章主要目的是记录学习,内容大多为各路大神的总结)
参考:
- Transformer升级之路:10、RoPE是一种β进制编码
- 再论大模型位置编码及其外推性(万字长文)
- 一文通透位置编码:从标准位置编码、旋转位置编码RoPE到ALiBi、LLaMA 2 Long(含NTK-aware简介)
- 【笔记】复数基础&&复数相乘的物理意义:旋转+缩放
- 【笔记】LLM位置编码之标准位置编码
相关文章:
 
【笔记】大模型长度外推技术 NTK-Aware Scaled RoPE
NTK-Aware Scaled RoPE 正弦编码(Sinusoidal)旋转位置编码RoPE编码步骤:旋转位置编码的优势 NTK-Aware Scaled RoPE直接外推线性内插进制转换高频外推、低频内插的理解位置编码 总结参考: 长度外推技术是自然语言处理(NLP)领域中&…...
 
前端 eslint 配置,以及在git提交之前自动format
目录 1、配置eslint步骤 1、eslint安装配置步骤 2、配置scripts步骤 3、测试eslint 2、配置git-hook1、安装环境2、最终效果 众所周知,前端项目可以在报很多error的情况下运行。但是良好的代码规范仍然有利于项目的开发维护,这里提供我的规范,…...
 
2024.10.9华为留学生笔试题解
第一题无线基站名字相似度 动态规划 考虑用动态规划解决 char1=input().strip() char2=input().strip() n,m=len(char1),len(char2) dp=[[0]*(m+1) for _ in range(n+1)] #dp[i][j]定义为以i-1为结尾的char1 和以 j-1为结尾的char2 的最短编辑距离 setA = set(wirel@com) set…...
 
利用ADPF性能提示优化Android应用体验
Android Dynamic Performance Framework(ADPF)是google推广的一套用于优化散热以及CPU性能的动态性能框架。本文主要介绍其中的performance hint的部分。 1、为何引入ADPF 我们都知道,在大多数设备上,Android 会动态调整CPU的频率和核心类型。如果work l…...
 
论文阅读 - Pre-trained Online Contrastive Learning for Insurance Fraud Detection
Pre-trained Online Contrastive Learning for Insurance Fraud Detection| Proceedings of the AAAI Conference on Artificial Intelligence 目录 摘要 Introduction Methodology Problem Formulation Pre-trained Model for Enhanced Robustness Detecting Network a…...
 
【最全基础知识2】机器视觉系统硬件组成之工业相机镜头篇--51camera
机器视觉系统中,工业镜头作为必备的器件之一,须和工业相机搭配。工业镜头是机器视觉系统中不可或缺的重要组成部分,其质量和性能直接影响到整个系统的成像质量和检测精度。 目录 一、基本功能和作用 二、分类 1、按成像方式分 2、按焦距分 3、按接口类型分 4、按应用…...
 
虚拟机WIN7安装PADS VX24 出现脚本故障 IPW213
用虚拟机安装WIN7,再开始安装PADS V24出现脚本故障IPW213 有去.NetFramework3.5 仍然没有效果 Download Microsoft .NET Framework 3.5 from Official Microsoft Download Center 最终用360驱动大师检测了下 发现有些必备组件没有安装,安装之后重启。 …...
 
Java正则表达式详解万字笔记内容丰富
正则表达式 1.1 正则表达式的概念及演示 在Java中,我们经常需要验证一些字符串,例如:年龄必须是2位的数字、用户名必须是8位长度而且只能包含大小写字母、数字等。正则表达式就是用来验证各种字符串的规则。它内部描述了一些规则,…...
 
文件属性与目录
⚫ Linux 系统的文件类型; 普通文件:存储数据,如文本文件、可执行文件等。 目录:用于组织文件和其他目录的特殊文件。 符号链接:指向另一个文件或目录的引用,类似于 Windows 中的快捷方式。 硬链接&#x…...
5G 基站SCTP
如何实现SCTP多归属链路对接 文章目录 前言一、SCTP是什么?二、lksctp三.sctp初始化四.绑定本端两个IP 五.与对端建链六.设置主要路径七.设置是否启用心跳八.关于防火墙的配置 总结 …...
 
MFC的SendMessage与PostMessage的区别
一、SendMessage 同步操作: SendMessage 是一个同步函数,它会将消息发送到指定的窗口,并等待该窗口的消息处理过程完成,然后返回。这意味着它会阻塞当前线程,直到消息处理完成。 直接调用: SendMessage 会…...
 
学习虚幻C++开发日志——基础案例(持续更新中)
官方文档:虚幻引擎C编程教程 | 虚幻引擎 5.5 文档 | Epic Developer Community | Epic Developer Community 1.物体上下起伏并旋转 1.1第一种写法 创建一个继承于Actor的类,并为新的Actor命名为FloatingActor,然后点击Create Class 重新…...
 
【CUDA代码实践03】m维网格n维线程块对二维矩阵的索引
文章目录 一、数据存储方式二、二维网格二维线程块三、二维网格一维线程块四、一维网格一维线程块 为了方便下次找到文章,也方便联系我给大家提供帮助,欢迎大家点赞👍、收藏📂和关注🔔!一起讨论技术问题&am…...
VSCode Qt6安装OpenSSL
报错 Could NOT find OpenSSL, try to set the path to OpenSSL root folder in thesystem variable OPENSSL_ROOT_DIR (missing: OPENSSL_CRYPTO_LIBRARYOPENSSL_INCLUDE_DIR SSL Crypto) (Required is at least version "3.0")问题确认 这个错误显示在Windows环境…...
JAVA学习-练习试用Java实现“定义一个用户类,包含用户名和密码”
问题: 定义一个用户类(User),包含用户名(username)和密码(password)属性,提供静态方法验证密码是否有效(长度至少为6),并提供getter和…...
 
大数据之VIP(Virtual IP,虚拟IP)负载均衡
VIP(Virtual IP,虚拟IP)负载均衡是一种在计算机网络中常用的技术,用于将网络请求流量均匀地分散到多个服务器上,以提高系统的可扩展性、可靠性和性能。以下是对VIP负载均衡的详细解释: 一、VIP负载均衡的基…...
 
鸿蒙网络编程系列38-Web组件文件下载示例
1. web组件文件下载能力简介 在本系列的第22篇文章,介绍了web组件的文件上传能力,同样的,web组件也具备文件下载能力,鸿蒙API提供了处理web组件下载事件的委托类型WebDownloadDelegate,该类型包括四个下载事件的回调接…...
 
Cisco Packet Tracer 8.0 路由器的基本配置和Telnet设置
文章目录 构建拓扑图配置IP地址配置路由器命令说明测试效果 构建拓扑图 1,添加2811路由器。 2,添加pc0。 3,使用交叉线连接路由器和pc(注意线路端口)。 4,使用配置线连接路由器和pc(注意线路…...
 
Flink系列之:学习理解通过状态快照实现容错
Flink系列之:学习理解通过状态快照实现容错 状态后端检查点存储状态快照状态快照如何工作?确保精确一次(exactly once)端到端精确一次 状态后端 由 Flink 管理的 keyed state 是一种分片的键/值存储,每个 keyed state…...
 
Linux 读者写者模型
1.背景概念 在编写多线程的时候,有一种情况是十分常见的。那就是,有些公共数据修改的机会比较少。相比较改写,它们读的机会反而高的多。这样就衍生出了读者写者模型,在这个模型中,有两类线程:读者和写者。读…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
 
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
 
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
 
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
 
认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...
MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释
以Module Federation 插件详为例,Webpack.config.js它可能的配置和含义如下: 前言 Module Federation 的Webpack.config.js核心配置包括: name filename(定义应用标识) remotes(引用远程模块࿰…...
 
消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...
【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权
摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题:安全。文章将详细阐述认证(Authentication) 与授权(Authorization的核心概念,对比传统 Session-Cookie 与现代 JWT(JS…...
