【笔记】大模型长度外推技术 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.背景概念 在编写多线程的时候,有一种情况是十分常见的。那就是,有些公共数据修改的机会比较少。相比较改写,它们读的机会反而高的多。这样就衍生出了读者写者模型,在这个模型中,有两类线程:读者和写者。读…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...