【大模型上下文长度扩展】位置内插 PI:基于Positional Interpolation扩大模型的上下文窗口

本文主要是介绍【大模型上下文长度扩展】位置内插 PI:基于Positional Interpolation扩大模型的上下文窗口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

位置内插 PI:基于Positional Interpolation扩大模型的上下文窗口

      • 如何在不牺牲性能或从头训练的情况下,扩展大型语言模型的上下文窗口以处理长文档或长对话?

 


论文:https://arxiv.org/pdf/2306.15595.pdf

 

这篇论文介绍了一种名为位置插值(Position Interpolation, PI)的方法。

旨在扩展基于 RoPE 的预训练大型语言模型的上下文窗口大小,解决的核心问题是如何有效且高效地扩展模型的上下文理解能力,以便处理需要长上下文的任务。

比如长文档摘要、语言建模等,而不需要从头开始训练模型以支持更大的上下文窗口,这在资源和时间上都是非常昂贵的。

 

如何在不牺牲性能或从头训练的情况下,扩展大型语言模型的上下文窗口以处理长文档或长对话?

流程顺序:

  1. 子问题:需要扩展模型上下文窗口的动机是什么?

    • 解法:识别长上下文任务的需求 - 如长文档摘要、语言建模等。
    • 例子:想象一篇科学论文的长篇摘要,这需要模型理解并生成超出其预训练上下文限制的内容。
  2. 子问题:直接外推位置编码在长上下文任务中存在哪些问题?

    • 解法:分析外推的局限性 - 直接外推导致性能不稳定。
    • 例子:在尝试生成论文的摘要时,直接外推位置编码会导致注意力分数异常升高,从而无法生成连贯的文本。
  3. 子问题:如何在不重新训练模型的情况下有效地扩展上下文窗口?

    • 解法:位置插值(PI)方法 - 通过线性下调位置索引,而不是外推。
    • 例子:采用PI,模型可以将原本的[0, 4096]位置范围内的位置信息“压缩”到[0, 2048]内,使得模型可以处理更长的文本,就像处理2048个令牌一样有效。

在这里插入图片描述

预训练的Llama模型在处理2048个上下文窗口长度时的旋转位置嵌入(RoPE)的正常使用情况。

蓝色点表示预训练范围内的位置索引,而红色点表示在4096范围内未见过的位置索引(超出预训练范围的位置)。

下方展示了位置插值的结果,其中位置索引被缩小了一半(f(x, m) = f(x, m/2)),即将原本的[0, 4096]范围的位置索引映射到[0, 2048]范围内,以适应模型的预训练范围。

这张图说明了位置插值如何通过对输入位置的缩放,使得模型能够处理超出其原始训练范围的输入,而不需要对模型架构进行改动,只通过重新调整位置索引来达成。

如果原始上下文窗口是2048,目标窗口是4096,那么所有位置索引都会被除以2。

位置2048在位置插值后会被处理为1024(即 2048 / 2 = 1024)。

这样处理之后,新的序列的每个位置(不论是原始的还是新增的)都有了一个唯一的、缩放后的位置索引。

一些位置编码方法,如三角函数位置编码或一些变体的旋转位置编码(RoPE),可以在非整数(除以二后变成小数)位置上计算。

这些方法可以将连续的位置信息映射到高维空间,以保持位置的相对关系,即使这些位置是通过插值得到的。

在位置插值中,我们不会直接在位置索引中引入小数点,而是通过调整位置编码函数来处理可能出现的小数位置,以便模型可以连续地处理位置信息,从而适应更长的输入序列。
 

在新的上下文窗口大小上对模型进行微调,以帮助模型适应位置插值所带来的变化。微调通常是在一个大型的文本语料库上进行,例如Pile数据集。

  1. 子问题:位置插值方法的效率和有效性如何验证?

    • 解法:经验验证和微调成本分析 - 使用少量的微调步骤。
    • 选择一个大型的文本数据集,如Pile数据集,用于微调模型。
    • 例子:LLaMA 7B模型使用PI扩展到32768上下文窗口后,在Pile数据集上仅需1000步微调,就能显著改善性能。
  2. 子问题:位置插值扩展后的模型在原始上下文窗口大小的基准任务上表现如何?

    • 解法:在原始上下文窗口大小进行基准评估 - 对比原始模型和扩展模型的性能。
    • 例子:经过PI扩展到8192的模型,在2048的原始上下文窗口的基准任务上只表现出最多2%的性能下降。
  3. 子问题:扩展后的模型在实际上下文中的有效性如何衡量?

    • 解法:通过通行密钥检索任务测试有效上下文窗口 - 检查模型是否能够恢复长文档中的隐含信息。
    • 例子:经过PI的模型能够在一篇长文档中成功恢复隐藏的随机通行密钥,表明其有效上下文窗口至少与通行密钥所在位置一致。

通过位置插值方法,可以有效地扩展预训练模型的上下文窗口,而无需进行资源密集型的重新训练。

通过微调来进一步优化模型,使其在长文档摘要等任务中具备更强的性能,即使在超出原始训练限制的上下文中也能保持稳定性和效率。

 

这篇关于【大模型上下文长度扩展】位置内插 PI:基于Positional Interpolation扩大模型的上下文窗口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/686747

相关文章

Windows的CMD窗口如何查看并杀死nginx进程

《Windows的CMD窗口如何查看并杀死nginx进程》:本文主要介绍Windows的CMD窗口如何查看并杀死nginx进程问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows的CMD窗口查看并杀死nginx进程开启nginx查看nginx进程停止nginx服务

Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析

《Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析》InstantiationAwareBeanPostProcessor是Spring... 目录一、什么是InstantiationAwareBeanPostProcessor?二、核心方法解

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)

《如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)》:本文主要介绍如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)问题,具有很好的参考价值,希望对大家有所帮助,如有... 目录先在你打算存放的地方建四个文件夹更改这四个路径就可以修改默认虚拟内存分页js文件的位置接下来从高级-

PyCharm如何更改缓存位置

《PyCharm如何更改缓存位置》:本文主要介绍PyCharm如何更改缓存位置的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录PyCharm更改缓存位置1.打开PyCharm的安装编程目录2.将config、sjsystem、plugins和log的路径

使用WPF实现窗口抖动动画效果

《使用WPF实现窗口抖动动画效果》在用户界面设计中,适当的动画反馈可以提升用户体验,尤其是在错误提示、操作失败等场景下,窗口抖动作为一种常见且直观的视觉反馈方式,常用于提醒用户注意当前状态,本文将详细... 目录前言实现思路概述核心代码实现1、 获取目标窗口2、初始化基础位置值3、创建抖动动画4、动画完成后

Java实现按字节长度截取字符串

《Java实现按字节长度截取字符串》在Java中,由于字符串可能包含多字节字符,直接按字节长度截取可能会导致乱码或截取不准确的问题,下面我们就来看看几种按字节长度截取字符串的方法吧... 目录方法一:使用String的getBytes方法方法二:指定字符编码处理方法三:更精确的字符编码处理使用示例注意事项方

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI