【大模型知识点】位置编码——绝对位置编码,相对位置编码,旋转位置编码RoPE

由于Transformer 中的自注意模块具有置换不变性(不关心输入序列的顺序),因此需要使用位置编码来注入位置信息以建模序列,使模型能够区分不同位置的 token,并捕捉序列的顺序关系。

在介绍一些位置编码方法前,首先说明,一个好的位置编码方法需要具备怎样的特性:

  • 唯一性: 每个位置应该有一个唯一的编码,以确保模型能够区分序列中的不同位置。如果两个位置共享相同的编码,模型将无法区分它们,从而导致混淆

  • ​​连续性: 位置编码应该是连续的,相邻位置的编码应该相似,连续性有助于模型捕捉序列中元素之间的局部依赖关系。如果位置编码在相邻位置之间突变,模型可能难以学习到平滑的序列模式

  • 可扩展性: 位置编码应该能够处理比训练时更长的序列(即具有外推性),例如,Transformer的正弦和余弦位置编码由于其周期性,能够为更长的序列生成合理的编码

  • 捕获相对位置信息: 位置编码应该能够捕获序列中元素之间的相对位置关系(例如,位置5和位置6的编码应该比位置5和位置10的编码更接近)

  • 远程衰减特性: 远程衰减特性是指随着序列中元素之间相对位置的增加,位置编码的内积逐渐减小。这种特性有助于模型区分远距离和近距离的位置关系。这种特性有助于模型专注于更相关的局部信息,同时减少对远距离噪声的敏感性

  • 高效性: 位置编码的计算和存储应该是高效的,尤其是在处理长序列时。复杂的位置编码方法可能会增加计算开销,从而影响模型的训练和推理速度

接下来介绍一些位置编码方法,主要可以分为绝对位置编码相对位置编码

1.绝对位置编码

绝对位置编码是为每个序列中的位置分配唯一的编码,无论它与其他位置的相对关系如何。每个位置的编码是固定的,并与具体的输入数据无关。常见方法有​正弦/余弦编码可学习编码

1)​正弦/余弦编码(Sinusoidal Encoding)​:

首先补充背景知识:

  • 正弦/余弦函数:

  • 波长: 是指函数在一个完整周期内所覆盖的距离或时间间隔

  • 频率: 是指函数在单位时间或单位距离内重复的次数

  • 波长与频率:

使用正弦和余弦函数生成位置编码,公式如下:

i的范围是0~d/2-1

这样编码位置的特点:

  • 低维度(小i)时,波长小,频率大,位置编码随位置 pos 的变化较快,对位置变化非常敏感,适用于捕捉短距离信息,即局部依赖关系

  • 高维度(大i):波长大,频率小,位置编码随位置 pos 的变化较慢(在高维度上,即使 pos 变化很大,因为波长大,即分母大,正弦和余弦的值仍然变化得很缓慢,也就是说两个位置很远(pos相差大)的 token,在高维度的编码仍然可能相似,这种特性使得模型能够利用高维度信息来识别长距离的相似性,并捕捉远距离 token 之间的联系,对于 NLP 任务中需要捕捉长距离依赖的情况(如长句子、长文档的建模)特别有帮助

  • 不同维度(i)的编码具有不同的波长,使得 Transformer 既能关注短距离依赖,又能捕捉长距离信息,兼顾短期记忆和长期记忆

  • 周期性与外推性: 外推性指的是模型能够处理比训练时更长的序列,正弦和余弦函数的周期性特性使得位置编码能够自然地扩展到训练时未见过的序列长度。具体来说,正弦和余弦函数的周期性意味着其值会随着输入位置的增加而重复出现,即使位置索引 pos 超过了训练时的最大值,位置编码仍然能够通过函数的周期性生成有意义的值,这种重复性使得模型能够通过已学习的模式来处理更长的序列,覆盖更长的序列范围

这个编码位置中的10000起什么作用?可以换成别的数字吗?

作用: 调节位置编码的频率范围

10000决定了位置编码的频率范围。较大的值(如10000)会使频率较低,编码变化更平缓,相邻位置的编码差异较小。较小的值(如1000)会使频率较高,编码变化更剧烈,相邻位置的编码差异较大。

10000这个值决定了位置编码函数的波长较大(周期大),频率较低,使得不同位置的编码在向量空间中具有足够的区分性(如果频率较大,位置编码经常出现重复值,则每个位置的编码区分度不够大),10000这个数字的取值规律是: 小的值更适合短序列任务,但小的值在长序列任务中可能会导致位置信息的变化过于频繁和剧烈,大的值适合长序列任务。

2)​可学习编码(Learned Positional Encoding)​

将位置编码向量作为可学习的参数,允许模型根据任务需求自动调整位置表示。与如正弦-余弦编码相比(通过固定的数学公式得到),可学习的位置编码更加灵活,能够根据具体任务和数据集调整位置编码,但缺点是需要学习更多的参数,并且对于不同的任务,模型可能会过拟合于某些特定的位置信息。在训练过程中,模型通过反向传播优化这些位置编码向量,使其能够更好地捕捉任务所需的位置信息。

2.相对位置编码

相对位置编码不是编码绝对位置,而是编码两个位置之间的相对关系,这种方法不必完整建模每个输入的位置信息,而是在算 Attention 的时候考虑当前位置与被 Attention 的位置的相对距离,与绝对位置编码相比,相对位置编码可以推广到比训练序列更长的序列(外推性)

1) Rotary Position Embedding(RoPE)

RoPE以绝对位置编码形式实现的相对位置编码,它通过将一个向量旋转某个角度,为其赋予位置信息。具体操作是对attention中的q, k进行旋转变换,使其自带相对位置信息,然后用更新的q,k向量计算attention,得到的内积就会引入相对位置信息了

RoPE已成为主流选择,代表模型有: LLaMA、PaLM

首先我们说明了RoPE是通过旋转使得向量带有位置信息的,那么我们介绍以下数学上的旋转

此图参考自:图解RoPE旋转位置编码及其特性

根据以上的介绍,我们知道通过旋转可使得向量带有位置信息,那么RoPE怎么将这个思想带入Transformer架构中的呢?对Attention中的q, k进行旋转变换,使其自带相对位置信息,然后用更新的q,k向量attention,得到的内积就会引入相对位置信息了

证明 R m T R n = R m − n {R_m}^TR_n=R_{m-n} RmTRn=Rmn:

你可能会疑问, R m − n R_{m-n} Rmn展开之后应该是 θ m − n \theta_{m-n} θmn,上面的式子是 θ m − θ n \theta_m-\theta_n θmθn,这是一样的吗?有一个结论: R θ 1 R θ 2 = R θ 1 + θ 2 R_{\theta_1}R_{\theta_2}=R_{\theta_1+\theta_2} Rθ1Rθ2=Rθ1+θ2,下面证明:

好的,介绍到这里我们就知道了,RoPE向Q,K引入旋转矩阵 R m R_m Rm R n R_n Rn,使他们带有位置信息,而他们的内积可以用 R m − n R_{m-n} Rmn表示 R m R_m Rm R n R_n Rn的乘积, R m − n R_{m-n} Rmn包含了Q,K的相对位置信息,使得模型能够更好地捕捉序列中元素之间的相对位置关系。现在总结一下:

这里的 θ \theta θ借鉴了transformer中正余弦位置编码的思想:

  • 低维度(小i)时,波长小,频率大,适合捕捉短距离依赖

  • 高维度(大i)时,波长大,频率小,适合捕捉长距离依赖

现在总结RoPE的优点: - ​显式建模相对位置信息:通过旋转矩阵显式地建模相对位置关系
  • ​外推性:能够处理比训练时更长的序列,具有良好的外推性

  • 多尺度位置编码:通过不同维度的旋转角度捕捉不同距离的依赖关系( θ \theta θ

  • 计算高效:旋转矩阵的计算简单高效,不会引入额外的计算负担。

2) Attention with Linear Biases(ALiBi)

ALiBi提出用于提升Transformer的外推性,不向单词embedding中添加位置embedding,而是根据query、key之间的距离给 attention score 加上一个预设好的偏置矩阵(仅需要修改softmax之前的mask矩阵,将偏置矩阵加上去即可,几乎不增加额外开销)。代表模型:BLOOM。

总结:本文介绍了大模型中常见的绝对位置编码和相对位置编码方法,其中RoPE的代码待补充

### Rope绝对位置编码的区别 #### 绝对位置编码的特点 绝对位置编码的优势在于其实现简单并具备良好的可解释性。该方法能为序列中的每一个位置提供独一无二的编码,有助于模型理解输入数据的时间或空间顺序信息[^1]。 然而,在面对长度不固定的序列或是当需要建模非常远的距离之间的依赖关系时,绝对位置编码的效果可能会打折扣。这是因为固定模式下的位置表示难以适应变化多端的实际场景需求,对于超出训练期间遇到的最大序列长度的情况尤其如此。 #### RoPE (Rotary Position Embedding) 的特点 相比之下,RoPE设计之初就考虑到要克服传统静态位置嵌入的一些不足之处。它引入了一种基于旋转机制的位置表征方案,允许更灵活地处理任意长度的输入序列,并且可以更好地捕捉到全局范围内的相互作用而不增加过多参数量。此外,由于采用了循环移位操作来构建相对位置偏置项,这使得即使是在解码阶段也能维持住有效的长期记忆能力[^2]。 具体来说,RoPE通过将正弦波函数应用于不同频率下得到的一系列数值来进行位置编码,这些值会随着所处维度的变化而呈现出特定规律性的波动特性;更重要的是,这样的构造方式让两个词之间不论相隔多少步长都能保持一定意义上的相似度衡量标准——即所谓的“周期性”,进而支持模型学习到更加抽象级别的语义关联结构[^3]。 ### 应用场景对比 - **短文本分类/命名实体识别** 对于这类任务而言,通常涉及较短的句子片段分析,此时采用简单的绝对位置编码已经足以满足大多数情况下对局部上下文感知的需求。因此在这种环境中部署较为轻便高效的解决方案可能是更为合理的选择。 - **机器翻译/对话系统** 当涉及到较长篇幅的文章转换或者是持续交互式的聊天机器人开发,则往往倾向于利用像RoPE这样能够有效应对远程依赖难题的技术手段。因为在这类应用里,维护好长时间跨度内各个部分间的联系显得尤为重要,而这正是RoPE擅长的地方之一。 ```python import torch from transformers import AutoModel, AutoTokenizer tokenizer = AutoTokenizer.from_pretrained('bert-base-uncased') model_with_rope = AutoModel.from_pretrained('facebook/bart-large') # 假设此预训练模型使用了RoPE input_text = "An example sentence to demonstrate the difference between absolute and rotary position embeddings." inputs = tokenizer(input_text, return_tensors="pt") # 使用带有RoPE的模型进行推理 outputs_with_rope = model_with_rope(**inputs) print(outputs_with_rope.last_hidden_state.shape) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值