LLM长度外推理论与实践

定义:

长度外推,即免训练长度外推,就是不需要用长序列数据进行额外的训练,只用短序列语料对模型进行训练,就可以得到一个能够处理和预测长序列的模型,即“Train Short, Test Long”。

判断方法:

1.模型在处理长序列时,其损失和困惑度(PPL)是否保持在一个合理的范围。如果这些指标在处理长文本时显著增加或“爆炸”,则表明模型可能在处理长序列时遇到困难,这在实际应用中可能导致性能下降或结果不稳定。相反,如果这些指标平稳,甚至优化,那么模型就表现出了良好的长序列处理能力。

2.通过实际的性能测试。即输入足够长的上下文(Context),让模型生成或预测接下来的文本,然后将模型的输出与真实的答案进行比较。这种评测方式通常涉及使用一些标准化的指标,如BLEU、ROUGE等,来定量衡量模型输出的质量。

在长度外推的同时有没有损失远程依赖的判断方法:

测试不同长度的输入,但专注于相同长度输出部分的性能(如最后一段)。这种方法可以帮助我们理解模型在处理更长的上下文时,是否仍能保持对早期输入部分的语义捕捉,从而不失去对全文意义的控制。

长度外推方法

1.RoPE旋转位置编码

paper

RoPE 是一种在自注意力机制中引入位置信息的方法。它的核心思想是通过旋转变换保留了相对位置信息,同时使用绝对位置编码。

RoPE 具体工作流程:

1 对于输入的词嵌入序列,计算其对应的查询(Query, Q)和键(Key, K)向量。
2 对每个词的位置计算一个旋转矩阵,这个旋转矩阵是基于词的绝对位置编码和一个常数旋转角度生成的。
3 使用这个旋转矩阵对Q和K向量进行变换,这个变换是元素级的,每两个元素(作为一个二维向量)进行一次旋转。
4 然后进行常规的自注意力内积操作,计算Q和K之间的点积,这个过程自然地考虑了词之间的相对位置。

在这里插入图片描述

优势:

1、RoPE不带有显式的远程衰减,这对于旨在Long Context的模型至关重要;
2、RoPE是一种真正的位置编码,通过不同频率的三角函数有效区分了长程和短程,达到了类似层次位置编码的效果,这也是Long
Context中比较关键的一环;
3、RoPE直接作用于Q、K,不改变Attention的形式,与Flash
Attention更契合,更容易Scale Up。

代码实现:
1.https://blog.csdn.net/BIT_666/article/details/133696553
2.https://github.com/JunnYu/RoFormer_pytorch

2.窗口截断

窗口截断是一种常用于处理长序列数据的技术,特别是在训练和推理大型语言模型时。其基本思想是通过限制模型在每个时间步只关注输入序列的一个子集,从而降低计算复杂度和内存需求。这种方法可以在一定程度上帮助模型处理比训练时使用的序列更长的文本。

引入Sliding Window的Attention Mask
Sliding Window
但是强行截断窗口外的注意力,并不满足“不牺牲远程依赖的能力”的原则。因此必须要加上开头的几个token。Λ -Mask。
在这里插入图片描述
原因:

1.开头的几个Token是绝对位置的“锚点”
2.开头的几个Token是注意力的“回收站”

3.位置内插PI

paper
这种方法基于一个假设:模型对于位置信息的学习可以通过线性变换平滑地从训练区间外推到更长的序列。
对于模型仅在较短序列上进行训练的情况,线性插值通过将超出训练长度的位置索引等比例缩小,映射到模型已经学习的位置范围内。例如,如果模型在长度为2048的序列上进行过训练,当需要处理长度为4096的序列时,位置索引将被缩放,使得原先位置0至4096的区间映射到0至2048内。

4.保近压远 Leaky ReRoPE

文章
paper
实现免训练长度外推的要领是“保近压远”,即“保证局部不失真”和“压缩远处不越界”。

实现思路:先设定一个窗口大小w,将相对位置分为两部分,在窗口不改变相对位置实现“局部不失真”,在窗口外使用位置内插实现“远处不越界”。
优势:Leaky ReRoPE和ReRoPE的表现确实都非常好,从Loss来看,它们能做到几乎不损失训练长度内的效果,并且实现了长度外推,且Context越长,Loss越低,说明它们在外推的同时还确实保证了远程依赖。

代码实现:
1.https://github.com/bojone/rerope
2.Self-Extend,增加四舍五入。https://github.com/datamllab/LongLM

5.YaRN

paper
介绍文章

YaRN = NTK-aware + NTK-by-parts + Dynamic NTK

1.“NTK-aware”插值是YaRN方法发展过程中的一个步骤,它解决了RoPE插值过程中可能丢失的高频信息问题,通过不同程度地缩放RoPE的不同频率维度。

2.“NTK-by-parts”插值是YaRN方法中的核心组成部分,它进一步细化了插值策略,特别是在处理不同频率(或波长)的RoPE维度时,以避免丢失相对局部距离信息。

3.“Dynamic NTK”插值是一个与YaRN相关的概念,它通过在模型的不同推理步骤中动态调整插值策略,提供了一种在处理不同长度序列时动态适应的方法。

代码实现:
1.https://github.com/jquesnelle/yarn

长度外推主要面向的需求场景:

  1. 资源限制型需求

    • 场景:这类需求的用户通常没有足够的资源进行长文本的微调训练。他们需要的是从短文本训练的模型直接得到一个可以有效处理长文本的模型。
    • 特点:这种情况下的长度外推效果要求较高,因为用户希望模型能够在没有额外训练数据或计算资源的情况下,直接处理更长的文本序列。
    • 方法:适合于此类需求的技术可能需要采用更高级的模型架构或策略,例如使用没有显式远程依赖损失的长度外推方法(如RoPE),以保证在不进行额外训练的情况下,模型仍能维持对长距离内容的理解和处理能力。
  2. 效率优化型需求

    • 场景:这类需求的用户拥有足够的资源进行长文本的微调,但他们的目标是获得一个更好的初始模型,以此为基础进行进一步的优化和训练,从而快速达到理想的性能水平。
    • 特点:这种情况对模型修改带来的初始性能损失具有较高的容忍度,关键在于能否通过后续的微调迅速恢复并超越原始性能。
    • 方法:位置内插(Position Interpolation, PI)等技术在这里非常适用,因为它们可以提供一个较好的起点,通过相对较短的训练周期即可调整和优化模型以处理长文本。

参考文献:
1.https://kexue.fm/archives/9948
2.https://blog.csdn.net/v_JULY_v/article/details/135072211
3.https://blog.csdn.net/qq_43814415/article/details/136976843

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【论文源码实战】轻量化MobileSAM,分割一切大模型出现,模型缩小60倍,速度提高40倍

前言 MobileSAM模型是在2023年发布的,其对之前的SAM分割一切大模型进行了轻量化的优化处理,模型整体体积缩小了60倍,运行速度提高40倍,但分割效果却依旧很好。 MobileSAM在使用方法上沿用了SAM模型的接口,因此可以与…

Java对象克隆-浅拷贝与深拷贝

目录 1、对象的克隆 1.1 对象的浅拷贝 1.2 对象深拷贝 1、对象的克隆 1.1 对象的浅拷贝 在实际编程过程中,我们常常要遇到这种情况:有一个对象A,在某一时刻A中已经包含了一些有效值,此时可能会需要一个和A完全相同新对象B&am…

论婚恋相亲交友软件的市场前景和开发方案H5小程序APP源码

随着移动互联网的快速发展和社交需求的日益增长,婚恋相亲交友软件小程序成为了越来越多单身人士的选择。本文将从市场前景、使用人群、盈利模式以及竞品分析等多个角度,综合论述这一领域的现状与发展趋势。 一、市场前景 在快节奏的现代生活中&#xf…

得物sign参数逆向分析与Python算法还原

文章目录 1. 写在前面2. 接口分析3. 断点分析4. Python算法还原 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚…

Postman调用OpenApi接口

首先你需要科学上网。。。。。 请求方式:post 请求地址:https://api.openai.com/v1/chat/completions 请求头: Authorization : Bearer key Content-Type : application/json Body : { "messages": [{ "role": &quo…

【论文精读】Bag of Tricks for Image Classification with Convolutional Neural Networks

这篇文章比较早了,2018年的 摘要 最近在图像分类研究方面取得的大部分进展可以归功于训练程序的改进,如数据增强和优化方法的改变。然而,在文献中,大多数改进要么作为实现细节简要提到,要么只在源代码中可见。在本文中…

CV method:最新Backbone---TransNeXt

文章目录 前言一、提出问题二、模型结构1. Pixel-focused Attention(像素聚焦注意力机制)2. Aggregating Diverse Attentions in a Single Mixer Query embedding3. ConvGLU4. 整体模型架构 三、方法论1. PFA设计原理2. Aggregating Diverse Attention原…

前端从零到一搭建脚手架并发布到npm

这里写自定义目录标题 一、为什么需要脚手架?二、前置-第三方工具的使用1. 创建demo并运行-4步新建文件夹 zyfcli,并初始化npm init -y配置入口文件 2.commander-命令行指令3. chalk-命令行美化工具4. inquirer-命令行交互工具5. figlet-艺术字6. ora-lo…

【算法】合并两个有序链表

本题来源---《合并两个有序链表》 题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4] /*** Definition for singl…

C++ - STL详解—vector类

一. vector的概念 向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。 …

win/mac达芬奇19下载:DaVinci Resolve Studio 19

DaVinci Resolve Studio 19 是一款功能强大的视频编辑和调色软件,广泛应用于电影、电视和网络节目的后期制作。这款软件不仅提供了专业的剪辑、调色和音频处理工具,还引入了全新的DaVinci Neural Engine AI工具,对100多项功能进行了大规模升级…

Vue3(五):组件通信详解(九种方法)

主要有九种方法,以下是详细解释及使用方法: 1.props props实现父子间的通信,是使用频率最高的。 (1)父传子:属性值是非函数。 以Father.vue和Child.vue 为例。 父组件中,引入子组件并给子组…

34、链表-合并K个升序链表

思路 1、直接全部放入集合中,然后排序,在进行构造节点返回 2、使用归并排序的方式,两两排序合并,最后合并大的。 3、第三中思路就比较巧妙了,可以使用小根堆,每次弹出堆顶,最小值&#xff0c…

【计算机网络】http协议的原理与应用,https是如何保证安全传输的

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

基于 RT-Thread 的 CMUX 串口多路复用的详细使用

一、CMUX 软件包的介绍 CMUX(Connection Multiplexing ),即连接(串口)多路复用,其功能主要在一个真实的物理通道上虚拟多个通道,每个虚拟通道上的连接和数据通讯可独立进行。  CMUX 软件包常用…

DRF ModelSerializer序列化类

ModelSerializer序列化类 【0】准备 模型表创建 from django.db import modelsclass Book(models.Model):name models.CharField(max_length64, verbose_name书名)price models.DecimalField(max_digits6, decimal_places2, verbose_name价格)publish models.ForeignKey(…

【C++打怪之路】-- C++开篇

🌈 个人主页:白子寰 🔥 分类专栏:C打怪之路,python从入门到精通,魔法指针,进阶C,C语言,C语言题集,C语言实现游戏👈 希望得到您的订阅和支持~ &…

vue-cli2 与vue-cli3,vue2与vue3 初始化项目,本地vue项目,详细解析区别(2024-04-19)

目录 1、区别(vue-cli2 与 vue-cli3 ) 2、例子1(vue2项目) 2.1 版本与命令行 2.2 项目本地截图 2.3 项目文件解析 (1)package.json 文件 (2)webpack.dev.conf.js文件 &#…

[大模型]Qwen-7B-hat Transformers 部署调用

Qwen-7B-hat Transformers 部署调用 环境准备 在autodl平台中租一个3090等24G显存的显卡机器,如下图所示镜像选择PyTorch–>2.0.0–>3.8(ubuntu20.04)–>11.8 接下来打开刚刚租用服务器的JupyterLab,并且打开其中的终端开始环境配置、模型下…

NLP自然语言处理_序章

开一个新篇章,立一个flag,用一段时间来学习一下NLP,涨涨见识。 准备以B站 机器学习算法到transformer神经网络模型应用视频作为入门,此分类专门用于记录学习过程中的知识点以备自用。 一、何为NLP自然语言处理? NLP…