当前位置: 首页 > news >正文

【笔记】大模型长度外推技术 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 mn的形式,因此需要找到一种位置编码,使得下式成立:
< 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,mn)(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 1631=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/21n,引入参数 λ \lambda λ,变为 n ( β λ ) d / 2 − 1 \frac{n}{(\beta\lambda)^{d/2-1}} βλd/21n,让它跟内插一样,则:
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}}} βλ21dn=β21dn/k
解得 λ = k 2 / ( d − 2 ) \lambda=k^{2/(d-2)} λ=k2/(d2)。最高频是 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来说是非常友好和关键的,所以它可以不微调也能实现一定的效果。简单点就是通过进制转换的思想,实现高频外推,低频内插。

(声明:文章主要目的是记录学习,内容大多为各路大神的总结)

参考:

  1. Transformer升级之路:10、RoPE是一种β进制编码
  2. 再论大模型位置编码及其外推性(万字长文)
  3. 一文通透位置编码:从标准位置编码、旋转位置编码RoPE到ALiBi、LLaMA 2 Long(含NTK-aware简介)
  4. 【笔记】复数基础&&复数相乘的物理意义:旋转+缩放
  5. 【笔记】LLM位置编码之标准位置编码

相关文章:

【笔记】大模型长度外推技术 NTK-Aware Scaled RoPE

NTK-Aware Scaled RoPE 正弦编码(Sinusoidal)旋转位置编码RoPE编码步骤&#xff1a;旋转位置编码的优势 NTK-Aware Scaled RoPE直接外推线性内插进制转换高频外推、低频内插的理解位置编码 总结参考&#xff1a; 长度外推技术是自然语言处理&#xff08;NLP&#xff09;领域中&…...

前端 eslint 配置,以及在git提交之前自动format

目录 1、配置eslint步骤 1、eslint安装配置步骤 2、配置scripts步骤 3、测试eslint 2、配置git-hook1、安装环境2、最终效果 众所周知&#xff0c;前端项目可以在报很多error的情况下运行。但是良好的代码规范仍然有利于项目的开发维护&#xff0c;这里提供我的规范&#xff0c…...

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 我们都知道&#xff0c;在大多数设备上&#xff0c;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&#xff0c;再开始安装PADS V24出现脚本故障IPW213 有去.NetFramework3.5 仍然没有效果 Download Microsoft .NET Framework 3.5 from Official Microsoft Download Center 最终用360驱动大师检测了下 发现有些必备组件没有安装&#xff0c;安装之后重启。 …...

Java正则表达式详解万字笔记内容丰富

正则表达式 1.1 正则表达式的概念及演示 在Java中&#xff0c;我们经常需要验证一些字符串&#xff0c;例如&#xff1a;年龄必须是2位的数字、用户名必须是8位长度而且只能包含大小写字母、数字等。正则表达式就是用来验证各种字符串的规则。它内部描述了一些规则&#xff0c…...

文件属性与目录

⚫ Linux 系统的文件类型&#xff1b; 普通文件&#xff1a;存储数据&#xff0c;如文本文件、可执行文件等。 目录&#xff1a;用于组织文件和其他目录的特殊文件。 符号链接&#xff1a;指向另一个文件或目录的引用&#xff0c;类似于 Windows 中的快捷方式。 硬链接&#x…...

5G 基站SCTP

如何实现SCTP多归属链路对接 文章目录 ​​前言​​​​一、SCTP是什么&#xff1f;​​​​二、lksctp​​​​三.sctp初始化​​​​四.绑定本端两个IP​​​​ 五.与对端建链​​​​六.设置主要路径​​​​七.设置是否启用心跳​​​​八.关于防火墙的配置​ ​总结​​ …...

MFC的SendMessage与PostMessage的区别

一、SendMessage 同步操作&#xff1a; SendMessage 是一个同步函数&#xff0c;它会将消息发送到指定的窗口&#xff0c;并等待该窗口的消息处理过程完成&#xff0c;然后返回。这意味着它会阻塞当前线程&#xff0c;直到消息处理完成。 直接调用&#xff1a; SendMessage 会…...

学习虚幻C++开发日志——基础案例(持续更新中)

官方文档&#xff1a;虚幻引擎C编程教程 | 虚幻引擎 5.5 文档 | Epic Developer Community | Epic Developer Community 1.物体上下起伏并旋转 1.1第一种写法 创建一个继承于Actor的类&#xff0c;并为新的Actor命名为FloatingActor&#xff0c;然后点击Create Class 重新…...

【CUDA代码实践03】m维网格n维线程块对二维矩阵的索引

文章目录 一、数据存储方式二、二维网格二维线程块三、二维网格一维线程块四、一维网格一维线程块 为了方便下次找到文章&#xff0c;也方便联系我给大家提供帮助&#xff0c;欢迎大家点赞&#x1f44d;、收藏&#x1f4c2;和关注&#x1f514;&#xff01;一起讨论技术问题&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实现“定义一个用户类,包含用户名和密码”

问题&#xff1a; 定义一个用户类&#xff08;User&#xff09;&#xff0c;包含用户名&#xff08;username&#xff09;和密码&#xff08;password&#xff09;属性&#xff0c;提供静态方法验证密码是否有效&#xff08;长度至少为6&#xff09;&#xff0c;并提供getter和…...

大数据之VIP(Virtual IP,虚拟IP)负载均衡

VIP&#xff08;Virtual IP&#xff0c;虚拟IP&#xff09;负载均衡是一种在计算机网络中常用的技术&#xff0c;用于将网络请求流量均匀地分散到多个服务器上&#xff0c;以提高系统的可扩展性、可靠性和性能。以下是对VIP负载均衡的详细解释&#xff1a; 一、VIP负载均衡的基…...

鸿蒙网络编程系列38-Web组件文件下载示例

1. web组件文件下载能力简介 在本系列的第22篇文章&#xff0c;介绍了web组件的文件上传能力&#xff0c;同样的&#xff0c;web组件也具备文件下载能力&#xff0c;鸿蒙API提供了处理web组件下载事件的委托类型WebDownloadDelegate&#xff0c;该类型包括四个下载事件的回调接…...

Cisco Packet Tracer 8.0 路由器的基本配置和Telnet设置

文章目录 构建拓扑图配置IP地址配置路由器命令说明测试效果 构建拓扑图 1&#xff0c;添加2811路由器。 2&#xff0c;添加pc0。 3&#xff0c;使用交叉线连接路由器和pc&#xff08;注意线路端口&#xff09;。 4&#xff0c;使用配置线连接路由器和pc&#xff08;注意线路…...

Flink系列之:学习理解通过状态快照实现容错

Flink系列之&#xff1a;学习理解通过状态快照实现容错 状态后端检查点存储状态快照状态快照如何工作&#xff1f;确保精确一次&#xff08;exactly once&#xff09;端到端精确一次 状态后端 由 Flink 管理的 keyed state 是一种分片的键/值存储&#xff0c;每个 keyed state…...

Linux 读者写者模型

1.背景概念 在编写多线程的时候&#xff0c;有一种情况是十分常见的。那就是&#xff0c;有些公共数据修改的机会比较少。相比较改写&#xff0c;它们读的机会反而高的多。这样就衍生出了读者写者模型&#xff0c;在这个模型中&#xff0c;有两类线程&#xff1a;读者和写者。读…...

接口测试中缓存处理策略

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

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

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

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; 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 -…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...