LLM上下文长度扩展方案:Position Interpolation

文章目录

  • 前言
  • 1. 预备知识
  • 2. PI
  • 3. 实验

前言

在这里插入图片描述
题目: Extending Context Window of Large Language Models via Positional Interpolation
论文地址:Extending Context Window of Large Language Models via Positional Interpolation

1. 预备知识

由于PI是基于旋转位置编码RoPE进行改进,而RoPE几乎是现在主流大模型的标配,因此在这一部分简单介绍一下RoPE。这部分没有太多的推理过程,网上相关的推导有很多,这里就不重复了。

RoPE的本质是想基于绝对位置来编码相对位置。具体来说,RoPE首先通过一个变换函数来对query和key向量进行变换:
在这里插入图片描述
然后再计算二者间的内积:
在这里插入图片描述
RoPE试图找到一种变换来让最终计算的内积中包含两个位置之间的相对距离 m − n m - n mn。RoPE提出的解决方案是:
在这里插入图片描述
具体来说,针对 m m m位置的向量 x m x_m xm,其变换方式为:
在这里插入图片描述
其中 θ i = b − 2 ( i − 1 ) / d ( b = 10000 ,   i = 1 , 2 , 3 , . . . , d / 2 ) \theta_i = b^{-2(i - 1) / d}(b=10000,~i=1,2,3,...,d/2) θi=b2(i1)/d(b=10000, i=1,2,3,...,d/2)。最后,变换后的两个向量求内积然后取实部即为注意力计算结果。

在代码编写过程中,实际使用的计算方式为:
在这里插入图片描述

2. PI

假设模型当前能够接受的最大长度为 L L L。事实上,RoPE是可以处理超过训练时长度的输入,也就是直接扩大可处理的长度,然后不做任何处理,即直接外推。然而,由于模型在训练期间从未见过长度超过 L L L的输入,因此当输入长度大于 L L L时,模型性能将急剧下降。

一些论文提出可以通过给模型喂一些长度大于 L L L的输入来微调模型,进而逐步将原始窗口长度扩大。实验结果如下:
在这里插入图片描述
实验结果证明,即使经过10000多个step的训练后,窗口长度增加的幅度仍然特别小,有效上下文窗口的增加幅度仅从2048增加到2560,这种代价是不可接受的

为了解决这个问题,Position Interpolation被提出。PI的思想很简单:假设当前长度 L = 2048 L=2048 L=2048,虽然 f ( x m , m ) f(x_m, m) f(xm,m)中的位置索引不能超过2048,但 m m m可以为小数,于是PI提出可以将超出预设长度 L L L的位置通过缩放因子缩放到 L L L以内。令扩充后的长度为 L ′ L^{'} L,则缩放因子被定义为 S = L ′ L S=\frac{L^{'}}{L} S=LL

接着,PI将RoPE的变换函数改写为以下方案:
f ′ ( x m , m ) = f ( x m , m S ) f^{'}(x_m, m) = f(x_m, \frac{m}{S}) f(xm,m)=f(xm,Sm)

值得注意的是,重新调整位置索引的方法不会引入额外的权重参数,也不会以任何方式修改模型架构。这使得它在实际应用中具有很强的适应性,属于即插即用的框架。在调整位置编码方式后,PI需要进一步使用 L ′ L^{'} L长度内的样本对模型进行简单少量微调以达到最佳性能。

3. 实验

作者将LLaMA-7B, LLaMA-13B, LLaMA-33B和LLaMA-65B从2048的原始长度扩充16倍到32768。PI微调1000步,直接外推则是微调10000步。

部分实验结果如下:
在这里插入图片描述
可以发现相比于直接外推,PI能在更短的微调步骤下实现更低的困惑度。

此外,作者还研究了PI微调步数和困惑度之间的关系:
在这里插入图片描述
实验结果表明,直接将模型不微调从2048扩充4倍到8192,模型也能保持较好的性能,并且在微调200步后性能显著提升

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/719099.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

打造工业操作系统开源开放体系

我国制造业具有细分行业、领域众多,产品丰富,制造模式多样等特点,围绕以工业操作系统为核心的工业软件赋能体系建设,离不开平台运营商、工业软件开发商、系统服务商、科研机构、工业企业等多方联合参与。聚众同行、聚力创新&#…

MySQL约束详解:构建数据完整性基石

目录 MySQL约束1.1 约束1.1 数据类型1.2 主键约束[重要]1.3 自增约束1.4 唯一约束1.5 非空约束1.6 默认值代码演示 1.7 外键约束[了解]思维导图最后 MySQL约束 MySQL作为广泛使用的开源关系型数据库管理系统,其强大的数据约束功能对于维护数据的一致性和准确性至关…

宋仕强论道之华强北假货

宋仕强论道之华强北假货,在华强北野蛮生长猥琐发育的那些年假货一度泛滥,就电子元器件来说,就有翻新(拆机)货、散新货、换标货、虚标货、也国产替代白牌货等几种主要的类型。今天我们来分析华强北假货初探之散新货&…

Windows环境部署MySQL_8.4.0 LTS的部署安装、验证连接以及卸载全过程实操手册

前言: 什么是 MySQL MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于Oracle 公司。MySQL 是一种关系型数据库管理系统,关系型数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内&am…

IT入门知识第四部分《数据库》(4/10)

目录 1. 数据库基础 1.1 数据库的定义 1.2 数据库的关键概念 数据模型 数据库架构 数据库操作语言(DML 和 DDL) 总结 2. 关系型数据库 2.1 MySQL MySQL 的历史和特点 MySQL 的安装和配置 MySQL 的基本操作 2.2 PostgreSQL PostgreSQL 的特…

LabVIEW利用旋转编码器脉冲触发数据采集

利用旋转编码器发出的脉冲控制数据采集,可以采用硬件触发方式,以确保每个脉冲都能触发一次数据采集。本文提供了详细的解决方案,包括硬件连接、LabVIEW编程和触发设置,确保数据采集的准确性和实时性。 一、硬件连接 1. 旋转编码…

Linux搭建我的世界乌托邦探险之旅3.2整合包服务端,Minecraft开服教程

Linux服务器使用MCSM10 搭建 我的世界 乌托邦探险之旅3.2 整合包 服务端 的教程,Minecraft整合包开服教程。 大型养老探险整合包:乌托邦探险之旅3.2,探索上千种结构,造访丰富的自然群系,欣赏生动的生物动画&#xff0…

Android如何简单快速实现RecycleView的拖动重排序功能

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 要实现这个拖动重排序功能,主要是用到了RecycleView的ItemTouchHelper类 首先是定义一个接口 interface ItemTouchHelperAdapter …

MVC 框架安全

在现代 Web 开发中,使用 MVC 架构是一种流行的做法。MVC 是 Model-View-Controller 的缩写,它将 Web 应用分为三层,View 层负责用户视图、页面展示等工作;Controller 负责应 用的逻辑实现,接收 View 层传入的用户请求&…

代码随想录算法训练营第三十九天| 416. 分割等和子集

416. 分割等和子集 - 力扣&#xff08;LeetCode&#xff09; class Solution {public boolean canPartition(int[] nums) {int sum 0;for (int i0;i<nums.length;i){sum nums[i];}if(sum%2!0){return false;}int weight sum /2;// int[][] dp new int[nums.length][weig…

软件测试-第1章-绪论

目录 1.1软件危机和软件生存期 &#xff08;1&#xff09;软件危机 &#xff08;2&#xff09;软件生存周期 1.2软件测试的意义 1.3什么是软件测试 &#xff08;1&#xff09;软件测试的定义 &#xff08;2&#xff09;软件测试的范围 1.4怎样认识软件测试 1&#xff…

【包管理】Node.JS与Ptyhon安装

文章目录 Node.JSPtyhon Node.JS Node.js的安装通常包括以下几个步骤&#xff1a; 访问Node.js官网&#xff1a; 打开Node.js的官方网站&#xff08;如&#xff1a;https://nodejs.org/zh-cn/download/&#xff09;。 下载安装包&#xff1a; 根据你的操作系统选择对应的Node…

Go语言RPC开发深度指南:net/rpc包的实战技巧和优化策略

Go语言RPC开发深度指南&#xff1a;net/rpc包的实战技巧和优化策略 概览理解net/rpc的核心概念RPC的基本原理net/rpc的工作模式关键特性 快速开始准备RPC服务和客户端的基础环境构建一个基础的RPC服务端构建一个基础的RPC客户端 开发一个实际的RPC服务设计服务接口实现服务客户…

《Windows API每日一练》4.5 GDI映射模式

上一节讲述设置绘图模式时&#xff0c;包括设置背景模式、混合模式&#xff0c;还有一个就是映射模式。本节我们将详细讲述映射模式。 本节必须掌握的知识点&#xff1a; 设备坐标和逻辑坐标 视口和窗口 MM_TEXT映射模式 度量映射模式 自定义映射模式 第27练&#xff1a;GDI映…

打破安全设备孤岛,多源威胁检测与响应(XDR)如何构建一体化安全防线

在数字化和信息化迅猛发展的当下&#xff0c;安全设备孤岛现象成为网络安全治理中的一大挑战。在多元化的市场环境中&#xff0c;不同厂商的安全设备因数据格式与系统兼容性的差异&#xff0c;导致信息流通受阻、共享困难&#xff0c;形成孤立的安全防线。 安全设备孤岛现象不仅…

重构大学数学基础_week05_雅各比矩阵与雅各比行列式

这周来讲一下雅各比矩阵和雅各比行列式。 多元函数的局部线性属性 首先我们来回顾一下向量函数&#xff0c;就是我们输入一个向量&#xff0c;输出也是一个向量&#xff0c;我们假设现在有一个向量函数 这个函数意思就是在说&#xff0c;我们在原来的平面上有一个向量(x,y),经…

小米手机怎么用代理换ip:步骤详解与实用指南

在数字化时代&#xff0c;网络安全与隐私保护日益受到重视。对于小米手机用户而言&#xff0c;使用代理换IP已成为提升网络安全性、访问特定网站或绕过地域限制的有效手段。本文将详细介绍如何在小米手机上设置代理以更换IP地址&#xff0c;帮助用户更好地保护个人信息和享受更…

openEuler 24.03 LTS - 华为欧拉开源版(华为 RHEL 兼容发行版)

openEuler 24.03 LTS - 华为欧拉开源版&#xff08;华为 RHEL 兼容发行版&#xff09; 华为红帽企业 Linux 兼容发行版 请访问原文链接&#xff1a;https://sysin.org/blog/openeuler/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sy…

6.17 作业

使用qt实现优化自己的登录界面 要求&#xff1a; 1. qss实现 2. 需要有图层的叠加 &#xff08;QFrame&#xff09; 3. 设置纯净窗口后&#xff0c;有关闭等窗口功能。 4. 如果账号密码正确&#xff0c;则实现登录界面关闭&#xff0c;另一个应用界面显示。 第一个源文件 …

【Netty】nio处理acceptreadwrite事件

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;Netty ⛺️稳中求进&#xff0c;晒太阳 1.处理accept 1.1客户端代码 public class Client {public static void main(String[] args) {try (Socket socket new Socket("localhost…