聊聊大模型位置编码及其外推性

news2024/12/26 13:45:13

format,png

作者 | 王嘉宁 

整理 | NewBeeNLP

https://wjn1996.blog.csdn.net/article/details/131753251

大家好,这里是 NewBeeNLP。

现如今很多大模型都开始支持超过4096长度的推理,例如GPT-4支持超过30k,ChatGLM2-6B也支持最长为32K的文本。但是由于显存资源的限制,这些大模型在真正在训练过程中不一定要训练这么长的文本,通常在预训练时只会设计到4k左右。

因此 如何确保在模型推理阶段可以支持远远超过预训练时的长度 ,是目前大模型的核心问题之一,我们将这一问题归为 大模型的外推性

大模型的外推性目前主要在这两个方面考虑,也是提升最有效的两个角度:

  • 寻找或设计合适的位置编码;

  • 设计局部注意力机制。

本文从这两方面进行深度探讨大模型的位置编码和外推性问题。

一、位置编码基础介绍

对于一个token ,其表征向量记作 ,对于一个句子 则表示为 。那么可以通过一个映射函数将这个句子中的token表征为 :

其中 和 表示第 和第 个token。

1.1 绝对位置编码

在Transformer中,采用正余弦函数来表示绝对位置,公式如下:

这种编码方式又叫做 Sinusoidal编码 。直觉上看,第个位置的表征向量维度是 ,这个向量的奇数位置元素使用余弦值,偶数位置元素使用正弦值。
可视化图如下所示:

9a168cf5d4141f175b5315911cf5b742.png
  • 相邻的位置编码向量很相似,较远的位置编码向量差异很大,说明基于正余弦函数的绝对位置可以表征位置的相关性;

  • 不需要显式地学习位置,提高效率。

最后 映射函数可以定义如下所示。即输入表征为token的表征和其对应的绝对位置表征。

该表征通常是直接将位置表征与Word表征直接相加。

1.2 相对位置编码

(1)显式的相对位置
对于第 和第 个位置的token,其相对位置可以表示为,即两个token之间的相对距离,且由最大最小值做约束(相对位置不能超过最大值或小于最小值)。

因此,相比于绝对位置,相对位置只需要有表征向量即可,即在计算两个token之间的attention值时,只需要在attention计算过程中注入这两个位置对应的相对位置 对应的相对位置表征向量即可:

这样一来,只需要有限个位置编码,就可以表达出任意长度的相对位置(因为进行了截断),不管是选择可训练式的还是三角函数式的,都可以达到处理任意长度文本的需求。

该表征通常是直接将位置表征与Word表征直接相加。
参考论文:《Self-Attention with Relative Position Representations》

(2)Transformer-XL(XLNet)

将第 和第 个位置的QK计算进行了分解。引入了一些可学习的参数:

其中 表示待学习的第 个token的相对位置向量, 表示待学习的第 个token的相对位置向量。通过分解让相对位置注入在attention的计算过程中。

该表征通常是在Attention计算过程中融入绝对位置。

(3)Transformer-XL的改进

第二和第四项使用相对位置表征 来替换绝对位置表征。同时加入新的可训练参数 和 。

该表征方法在T5模型中被首次使用,参考论文:《Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer》

该表征通常是在Attention计算过程中融入相对位置。

(4)可训练偏置项

Transformer-XL中的位置表征是将QK分解为4项,而后面3个够项都有跟位置有关的参数,可以直接将后面的3项之和抽象为一个偏置:

进一步改造还可以得到:

以及:

这三种方法均是对Transformer-XL的表征形式进行改进。

二、RoPE旋转位置编码

RoPE(Rotary Position Embedding)的出发点就是“ 通过绝对位置编码的方式实现相对位置编码 ”,或者可以说是实现 相对位置编码和绝对位置编码的结合

这样做既有理论上的优雅之处,也有实践上的实用之处,比如它可以拓展到线性Attention中就是主要因为这一点。

2.1 复数的引入

假设 和 是对应位置的二维行向量(即每个位置都有两个向量来表征位置),因此这个二维向量可以用复数来代替(包括实部和虚部),因此他们的内积可以作为其对应的Attention值。

内积的计算可以由两个复数实现:,其中 表示共轭复数, 表示取复数中的实部。

两个二维向量的内积,等于把它们当复数看时,一个复数与另一个复数的共轭的乘积的实部。

因此当分别对 和 融入绝对位置时,即得到:

RoPE求解过程推导了如何确定获得每个位置编码是 。

可以发现,当乘以绝对位置 θ和 θ时,等价于复数运算中乘以 θ,即相当于在复数空间中是相对位置 ,这样就巧妙地通过复数运算的形式将绝对位置转换为相对位置。

复数乘法的几何意义是向量的旋转,假设 表示向量 在位置的位置编码,则有:

其中

等价于

后面两项的乘积本质就是向量 (或)的两个二维行向量。

当向量维度为 时( 为偶数),则可以扩展为:

每两个为一组二维向量,一共有 个组合,可以直接拼接作为维度的旋转位置编码。
二维扩展到多维的解读:Transformer升级之路:4、二维位置的旋转式位置编码 - 科学空间|Scientific SpacesTransformer升级之路:6、旋转位置编码的完备性分析 - 科学空间|Scientific Spaces

2.2 RoPE的实现

4945a576482dd5ec67b4610ceb1e436d.png
  • 当输入一个句子“Enhanced Transformer with Rotary Position Embedding”时,首先获得其Query和Key向量q、 k,其对应的维度均为d,然后对于向量中相邻两个元素为一组,可以得到 d/2组(图中左下部分相同颜色的两个元素作为一组,对于每一组,一个文本则可以得到两个行向量);

  • 获得每个词的绝对位置编号(该句子由6个词,位置编号分别为1,2,3,4,5,6),假设取“Enhanced”单词为例,其第一组元素为θ1,位置为 m=1,那么通过旋转位置编码可以的到新的元素值。

  • 所有单词的d/2个组合都按照这种形式进行“旋转”,即可得到新的位置编码(右下角)

RoPE一种线性的实现如下所示:

RoPE的性质

(1)远程衰减

515a29455ea33eb857293ea06e45b74e.png

从图中我们可以可以看到随着相对距离的变大,内积结果有衰减趋势的出现。因此,选择,确实能带来一定的远程衰减性。当然,能带来远程衰减性的不止这个选择,几乎任意的光滑单调函数都可以。如果以为初始化,将θ视为可训练参数,然后训练一段时间后发现θ并没有显著更新,因此干脆就直接固定了。

(2)优势

  1. 用一个旋转矩阵rotation matrix来对绝对位置进行编码,于此同时,meanwhile;

  2. 在自注意力机制中导入显式的位置依赖。

  3. 自由的序列长度;

  4. 随着相对位置的增大,而逐步延缓退化(=衰减)的inter-token dependency;

  5. 用相对位置编码来“武装”线性自注意力。

具体来说,RoPE 使用 旋转矩阵对绝对位置进行编码 ,同时将 显式的相对位置依赖性纳入自注意公式中

【核心的两个点,一个是“旋转矩阵”,一个是“显式的相对位置依赖”】。

三、长文本外推性

外推性 的含义是在长文本表征过程中,如何在训练阶段只需要学习有限的长度,即可以在推理阶段能够延伸长度至若干倍且依然保持不错的性能和效果。

长度外推性是一个训练和预测的长度不一致的问题,主要体现在两个方面:

  • 预测的时候用到了没训练过的位置编码(不论是绝对位置还是相对位置);

  • 预测的时候注意力机制所处理的token数量远超训练时的数量。

解决长文本外推性问题的一个简单有效的方法是Attention Mask,如图所示:

53ff96bd75918374b11835ac7191d4bb.png
  • 通过类似滑动窗口的结构,约束一个每个token只能对局部区域的token计算Attention值,因此对于相对位置大小不会超过窗口大小,解决了第一个问题;

  • Attention只会在窗口内计算,避免了对大量的token的Attention进行加权平均导致最终权重过度“平滑”现象。

在实现过程中,本质上是在计算完之后减去一个矩阵,即 ,其中的形状如下图所示:

f3058e4ca9ea96e687a136eda3ae87b9.png

可以看出,蓝色区域(即滑动窗口内的局部区域)为0,说明保持原始的Attention归一化前的值;其他区域则为一个INT内最大的整数,说明Attention值是一个非常小的数(在softmax归一化后几乎为0)。

3.1 ALIBI

论文:《Train Short, Test Long: Attention with Linear Biases Enables Input Length Extrapolation》

其与上面的思想一样,只是改进了上面的 M矩阵为 λ,即Attention在归一化前的计算为:,其中为超参数,Transformer的多头注意力中的每个头的值可设置不同。矩阵 λ 的形状如下所示:

301190145b02bf4e3e95ad83ac09517a.png

相比于原始的方法,相对距离越长,λ值就越大,越远的位置Attention值被归一化后就约小,相对于“滑动窗口”采用的方法是hard(在窗口内就计算attention,不在窗口内不计算),AIBLI是比较soft的(离得近attention就会比较大,离得远就比较小)。

3.2 KERPLE

论文:《KERPLE: Kernelized Relative Positional Embedding for Length Extrapolation》

其对ALIBI进行了一些改进,引入了两个可学习的参数 和 来“动态”学习局部区域。如下图所示,左侧为原始的,通过引入参数来动态减去AIBLI中的 λ矩阵:

2ef585294498e5dd7fb76bfe166597ef.png

定义了两种模式,分别是power和logarithmic,分别对应没有对数和有对数的形式:

463b3918d00894c5fa16793082f6b5f6.png

在logarithmic模式中, 控制了整体的量,相当于ALIBI中的 , c是一个常数。苏神版简化写作:

540d373e119477478a5ab691faa2204a.png

3.3 Sandwich

论文:《Receptive Field Alignment Enables Transformer Length Extrapolation》

Sandwich与KEPRLE是同一个作者提出的,其对KEPRLE进行了少量改进,即对应的公式改写为:,其中 和 可以使用Sinusoidal编码表示,即:

8f6de321a58c41eca323b427a1e0e614.png

由于Sinusoidal编码在单调性上等价于 ,都是线性递增形式,因此Sandwich只是改头换面了。

3.4 XPOS

论文:《A Length-Extrapolatable Transformer》
参考解读:Transformer升级之路:7、长度外推性与局部注意力

其在RoPE的基础上引入了局部注意力。RoPE的本质是:

其中:

在第2大节中已经介绍了RoPE是通过使用复数来实现绝对位置表示相对位置的。XPOS通过引入一个新的标量 ,即有:

由于RoPE相对位置是 ,而不是 ,因此XPOS约束在了单向Transformer,从而避免了负数出现。

XPOS又设计了一个局部感知的注意力机制Blockwise Causal Attention,进一步提升了局部注意力的性能,提升了长文本的外推性。

四、外推性的其他探索

(1)混合注意力Mask

在解决长文本位置表征时,典型的代表有Transformer-XL、BigBird、LongFormer,他们除了局部注意力机制以外,还引入了随机位置的性质:

f89474ee883cc933a17f260d3a930187.png

如上图,第2张图为局部注意力(滑动窗口),第3章图为有限的全局感知(例如只限制前两个token可以看见所有的token)。而第一张图则是随机mask,以缓解过度hard的局部注意力。三者注意力混合起来后得到第四张图,这也是普遍训练超长文本大模型时采用的方法。

(2)随机位置表征

论文:《Randomized Positional Encodings Boost Length Generalization of Transformers》

fd74c9bda6d6f893270048a5dad8d5ad.png

绝对位置表征时,会存在位置上的OOV问题,随机位置编码则是通过在训练过程中采用如下策略:

0483e74d58b1cc2e76d112ce44d25d47.png

对应的代码也很简单:

def random_position_ids(N, L=2048):
    """从[0, L)中随机不重复挑N个整数,并从小到大排列
    """
    return np.sort(np.random.permutation(L)[:N])

苏神对随机位置编码的新探索:

bea9966b48ad99efcb343e7b30087b56.png

对应的代码为:

def random_position_ids(N):
    """先随机采样n,然后从[0, n]均匀取N个点
    """
    n = sample_from_xxx()
    return np.linspace(0, 1, N) * n

(3) Attention Scale

原始的Attention计算公式为:

只需要简单的改成下面即可:

其中 是训练时的最大长度, 是预测时的位置,通常来说。直觉来看,就是直接在计算时,根据其相对位置来控制Attention的值。当 和距离很远时, 的值会很大,会使得整体Attention归一化后会比较平缓,有助于解决外推性问题。

(4)全局依赖

滑动窗口的方法如果在一层Transformer Layer里看,本质上类似长度为 的N-Gram模型,即如下图所示:

b414ba66eb14717cd8aceb6e8e51522a.png

如果Transformer又 层,那么,从输入层开始,长度为 的窗口内的信息,可以在经过 层之后传给一个更广的区域,区域长度为 ,如下图所示:

994f81793b584c454ae2ede39da88997.png

苏神给出的一种新的想法,就是假设我有层Transformer,则可以在前 层利用这种扩张特性,得到最终 长度的区域后,在最后一层采用上面提到的 logn Attention Scale方法,讲前 层扩张的信息快速在最后一层与所有token进行交互。引入苏神的原文为:

06d3de701a684c19f160e5faf1811740.png

这种局部注意力+Attention Scale的结合也是一种很巧妙的idea。实验也发现这种策略的外推性很惊艳。

一起交流

想和你一起学习进步!『NewBeeNLP』目前已经建立了多个不同方向交流群(机器学习 / 深度学习 / 自然语言处理 / 搜索推荐 / 图网络 / 面试交流 / 等),名额有限,赶紧添加下方微信加入一起讨论交流吧!(注意一定o要备注信息才能通过)

7533dbf37f0a836aac709c755be2ca32.jpeg

ded139ae40b2c976e6834f7ea00c74fd.gif

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

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

相关文章

CentOS7安装时直接跳过了安装信息摘要页面的解决方法

最近在配置Hadoop虚拟机的时候,创建的centos7虚拟机在安装信息摘要时直接自动跳过,直接跳到设置用户名和密码,在重复多次的重新删除安装后发现了问题所在: 在进行到选择操作系统来源时,注意是否出现“该操作系统将使用…

matplotlib设置绘图中文标记

项目场景 使用matplotlib时为图形设置x轴标记,y轴标记,标题默认只能使用英文,当使用中文时会出现以下错误: UserWarning: Glyph 32654 (\N{CJK UNIFIED IDEOGRAPH-7F8E}) missing from current font. 解决方法 在引入matplotl…

成功的硬件公司不仅是产品,更是一种创新文化

目录 内容简介 客户 建立公司,而不仅仅是产品 CSDN学院 作者简介 内容简介 很多时候,你决定去做一件事、一款产品,往往都始于一个想法、一个灵感。 然后,许多硬件创业者会花费数月、甚至是数年的时间来确定并分析他们的想法…

基于ITIL的ITSM工具

随着企业的ITSM(IT服务管理)的逐渐成熟进而深入应用,如果您希望以低成本寻找一款基于ITIL的ITSM管理工具,然后那么卓豪ServiceDesk Plus将是您性价比高的免费ITSM、工单系统选择。因为它提供全面的ITSM和资产管理能力,更重要的是,…

java八股文面试[多线程]——CompletableFuture

1 CompletableFuture介绍 平时多线程开发一般就是使用Runnable,Callable,Thread,FutureTask,ThreadPoolExecutor这些内容和并发编程息息相关。相对来对来说成本都不高,多多使用是可以熟悉这些内容。这些内容组合在一起…

全国唯一一所初试考Java的学校!平均300分拿下

苏州科技大学 考研难度(☆) 内容:23考情概况(拟录取和复试分析)、院校概况、23专业目录、23复试详情、各专业考情分析、各科目考情分析。 正文1187字,预计阅读:3分钟 2023考情概况 苏州科技…

澳大利亚纽扣电池/含纽扣电池商品合规认证详细解答

近期收到很多客户前来咨询亚马逊澳洲站纽扣电池或含纽扣电池商品的合规性认证,和我说我做了认证了,为什么还是审核不通过,审核被拒呢? 一般是两种情况: 一:检测标准没有做对或对亚马逊合规政策的标准有误…

四川玖璨电子商务有限公司:短视频及直播运营

​ 短视频及直播运营是当下最火热的互联网行业之一,它以轻松、有趣的方式改变了人们的生活和娱乐方式。作为一名短视频及直播运营实训学员,我有幸得到了具体的操作指导和实践机会,让我对这个行业有了更深入的了解。 在短视频及直…

怎么激活IDM

IDM是一个下载软件。 激活它需要用到git上面的一个项目,同时网络要能连到github GitHub - lstprjct/IDM-Activation-Script: IDM Activation & Trail Reset Script WINR 输入powershell 输入命令行 iex(irm is.gd/idm_reset) 或者 iwr -useb https://raw.…

numba,一个强大的 python 库

今天给大家分享一个强大的 python 库,numba。 https://github.com/numba/numba Pandas 是 Python 中流行的数据分析库。然而,随着数据集大小的增长,原生 Python 代码对于滚动窗口计算等关键操作可能会变得很慢。这就是 Numba 用武之地。 N…

一种编程语言,

前言:相信看到这篇文章的小伙伴都或多或少有一些编程基础,懂得一些linux的基本命令了吧,本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python:一种编程语言&…

EVE部署

EVE-NG 镜像导入 IOL 镜像位置:/opt/unetlab/addons/iol/bin/ qemu 镜像位置:/opt/unetlab/addons/qemu/ 设备图标位置:/opt/unetlab/html/images/icons/ EVE-NG 懒人版部署

长胜证券:中特估一带一路央国企将见底反转加速

三季度开始龙头成绩将回转加快向上。(1)2022年第三季度基数环比下降,如2022第2/3单季度成绩增速:我国中铁14%/5%、我邦交建10%/-9%、我国铁建8%/-5%、我国中冶14%/-29%、我国化学50%/11%、北方世界38%/-50%、中工世界80%/20%。(2)在手订单增速高于收入增速&#xff…

K210-CanMV IDE开发软件

K210-CanMV IDE开发软件 界面功能简介连接设备临时运行开机运行程序 界面功能简介 区域①菜单栏:操作文件,使用工具等。 区域②快捷按钮:区域①中的文件和编辑中部分功能的快捷方式。 区域③连接设备:连接设备和程序控制按钮。 …

项目(智慧教室)第二部分,人机交互页面实现,

使用软件: 1.BmCvtST.exe 这是stm32Cubemx工程下的带三方软件。存在STemWin中。 作用: 图片变成.c文件格式。 2.CodeBlock 3.模拟器工程(具体请看上一节) 一。emWin环境的搭建 1.codeBlock下载 开源免费。 2.使用stm的C…

【数据分析】用Python秒懂概率分布!(附完整Python代码实现)

本文涉及的概念分布包括: 随机变量(Random Variable) 密度函数(Density Functions) 伯努利分布(Bernoulli Distribution) 二项式分布(Binomial Distribution) 均匀分布(Uniform Distribution) 泊松分布(Poisson Distribution) 正态分布(Normal Distribution) …

飞行动力学 - 第16节-part3-飞机重心范围 之 基础点摘要

飞行动力学 - 第16节-part3-飞机重心范围 之 基础点摘要 1.飞机允许的重心范围2. 重心后限3. 重心前限4. 重心范围与平尾面积的剪刀图5. 参考资料 1.飞机允许的重心范围 从稳定性角度,重心应尽可能位于中性点 N 0 N_0 N0​之前;从操纵性角度&#xff0c…

java八股文面试[数据库]——mysql主从复制

什么是mysql的主从复制? MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点…

SEAN代码(2)

输入image,label分别经过生成器和判别器。 经过生成器计算的是损失和产生的图片。并且在内部损失进行反向传播,优化器进行更新。 在pix2pix_model内部:首先对输入数据进行预处理。 def preprocess_input(self, data):# move to GPU and ch…

【C++进阶(四)】STL大法--list深度剖析list迭代器问题探讨

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习C   🔝🔝 链表list 1. 前言2. list的使用2.1 list的构造函…