搜索
首页科技周边人工智能大语言模型中常用的旋转位置编码RoPE详解:为什么它比绝对或相对位置编码更好?

自2017年发表的“Attention Is All You Need”论文以来,Transformer架构一直是自然语言处理(NLP)领域的基石。它的设计多年来基本没有变化,随着旋转位置编码(RoPE)的引入,2022年标志着该领域的重大发展。

旋转位置嵌入是最先进的 NLP 位置嵌入技术。大多数流行的大型语言模型(如 Llama、Llama2、PaLM 和 CodeGen)已经在使用它。在本文中,我们将深入探讨什么是旋转位置编码,以及它们如何巧妙地融合绝对位置嵌入和相对位置嵌入的优点。

大语言模型中常用的旋转位置编码RoPE详解:为什么它比绝对或相对位置编码更好?

位置编码的需求

为了理解 RoPE 的重要性,我们首先回顾一下为什么位置编码至关重要。Transformer 模型根据其固有的设计,不会考虑输入标记的顺序。

例如,像“the dog chases the pig ”和“the pig chases the dogs”这样的短语虽然含义不同,但由于它们被视为一组无序的标记,因此被视为无法区分。为了维护序列信息及其含义,需要一个表示来将位置信息集成到模型中。

绝对位置编码

为了对句子中的位置进行编码,需要使用具有相同维度的向量的另一个工具,其中每个向量代表句子中的一个位置。例如,在句子中的第二个单词指定特定向量。因此,每个句子位置都有其独特的向量。然后通过将单词嵌入与其相应位置的嵌入结合起来,来形成Transformer层的输入。

有两种主要方法来生成这些嵌入:

  1. 从数据中学习:在这里,位置向量是在训练过程中学习的,就像其他模型参数一样。我们为每个位置(例如从 1 到 512)学习一个唯一的向量。这引入了一个限制——最大序列长度受到限制。如果模型仅学习到位置 512,则它无法表示比该位置更长的序列。
  2. 正弦函数:此方法涉及使用正弦函数为每个位置构建唯一的嵌入。尽管这种构造的细节很复杂,但它本质上为序列中的每个位置提供了独特的位置嵌入。实证研究表明,从数据中学习和使用正弦函数可以在现实世界模型中提供相当的性能。

绝对位置编码的局限性

尽管使用广泛但绝对位置嵌入也并非没有缺点:

  1. 有限序列长度:如上所述,如果模型学习到某个点的位置向量,它本质上不能表示超出该限制的位置。
  2. 位置嵌入的独立性:每个位置嵌入都是独立于其他位置嵌入的。这意味着在模型看来,位置 1 和 2 之间的差异与位置 2 和 500 之间的差异相同。但是其实位置 1 和 2 应该比位置 500 相关性更密切,位置 500  距离明显更远。这种相对定位的缺乏可能会阻碍模型理解语言结构的细微差别的能力。

相对位置编码

相对位置不是关注记在句子中的绝对位置,而是关注记对之间的距离。该方法不会直接向词向量中添加位置向量。而是改变了注意力机制以纳入相对位置信息。

T5(Text-to-Text Transfer Transformer)是一种利用相对位置嵌入的著名模型。T5 引入了一种处理位置信息的微妙方式:

  • 位置偏移的偏差: T5 使用偏差(浮点数)来表示每个可能的位置偏移。例如,偏差 B1 可能表示任意两个相距一个位置的标记之间的相对距离,无论它们在句子中的绝对位置如何。
  • 自注意力层中的集成:该相对位置偏差矩阵被添加到自注意力层中的查询矩阵和关键矩阵的乘积中。这确保了相同相对距离的标记始终由相同的偏差表示,无论它们在序列中的位置如何。
  • 可扩展性:该方法的一个显着优点是其可扩展性。它可以扩展到任意长的序列,这比绝对位置嵌入有明显的优势。

相对位置编码的局限性

大语言模型中常用的旋转位置编码RoPE详解:为什么它比绝对或相对位置编码更好?

尽管它们在理论上很有吸引力,但相对位置编码得问题很严重

  1. 计算效率低下:必须创建成对的位置编码矩阵,然后执行大量张量操作以获得每个时间步的相对位置编码。特别是对于较长的序列。这主要是由于自注意力层中的额外计算步骤,其中位置矩阵被添加到查询键矩阵中。
  2. 键值缓存使用的复杂性:由于每个附加令牌都会改变每个其他令牌的嵌入,这使得 Transformer 中键值缓存的有效使用变得复杂。使用 KV 缓存的一项要求是已经生成的单词的位置编码, 在生成新单词时不改变(绝对位置编码提供)因此相对位置编码不适合推理,因为每个标记的嵌入会随着每个新时间步的变化而变化。

由于这些工程复杂性,位置编码未得到广泛采用,特别是在较大的语言模型中。

旋转位置编码 (RoPE)?

RoPE  代表了一种编码位置信息的新方法。传统方法中无论是绝对方法还是相对方法,都有其局限性。绝对位置编码为每个位置分配一个唯一的向量,虽然简单但不能很好地扩展并且无法有效捕获相对位置;相对位置编码关注标记之间的距离,增强模型对标记关系的理解,但使模型架构复杂化。

RoPE巧妙地结合了两者的优点。允许模型理解标记的绝对位置及其相对距离的方式对位置信息进行编码。这是通过旋转机制实现的,其中序列中的每个位置都由嵌入空间中的旋转表示。RoPE 的优雅之处在于其简单性和高效性,这使得模型能够更好地掌握语言语法和语义的细微差别。

旋转矩阵源自我们在高中学到的正弦和余弦的三角性质,使用二维矩阵应该足以获得旋转矩阵的理论,如下所示!

大语言模型中常用的旋转位置编码RoPE详解:为什么它比绝对或相对位置编码更好?

我们看到旋转矩阵保留了原始向量的大小(或长度),如上图中的“r”所示,唯一改变的是与x轴的角度。

RoPE 引入了一个新颖的概念。它不是添加位置向量,而是对词向量应用旋转。旋转角度 (θ) 与单词在句子中的位置成正比。第一个位置的向量旋转 θ,第二个位置的向量旋转 2θ,依此类推。这种方法有几个好处:

  1. 向量的稳定性:在句子末尾添加标记不会影响开头单词的向量,有利于高效缓存。
  2. 相对位置的保留:如果两个单词在不同的上下文中保持相同的相对距离,则它们的向量将旋转相同的量。这确保了角度以及这些向量之间的点积保持恒定

RoPE 的矩阵公式

大语言模型中常用的旋转位置编码RoPE详解:为什么它比绝对或相对位置编码更好?

RoPE的技术实现涉及到旋转矩阵。在 2D 情况下,论文中的方程包含一个旋转矩阵,该旋转矩阵将向量旋转 Mθ 角度,其中 M 是句子中的绝对位置。这种旋转应用于 Transformer 自注意力机制中的查询向量和键向量。

对于更高维度,向量被分成 2D 块,并且每对独立旋转。这可以被想象成一个在空间中旋转的 n 维。听着这个方法好好像实现是复杂,其实不然,这在 PyTorch 等库中只需要大约十行代码就可以高效的实现。

import torch import torch.nn as nn  class RotaryPositionalEmbedding(nn.Module): def __init__(self, d_model, max_seq_len): super(RotaryPositionalEmbedding, self).__init__()  # Create a rotation matrix. self.rotation_matrix = torch.zeros(d_model, d_model, device=torch.device("cuda")) for i in range(d_model): for j in range(d_model): self.rotation_matrix[i, j] = torch.cos(i * j * 0.01)  # Create a positional embedding matrix. self.positional_embedding = torch.zeros(max_seq_len, d_model, device=torch.device("cuda")) for i in range(max_seq_len): for j in range(d_model): self.positional_embedding[i, j] = torch.cos(i * j * 0.01)  def forward(self, x): """Args:x: A tensor of shape (batch_size, seq_len, d_model). Returns:A tensor of shape (batch_size, seq_len, d_model)."""  # Add the positional embedding to the input tensor. x += self.positional_embedding  # Apply the rotation matrix to the input tensor. x = torch.matmul(x, self.rotation_matrix)  return x

大语言模型中常用的旋转位置编码RoPE详解:为什么它比绝对或相对位置编码更好?

为了旋转是通过简单的向量运算而不是矩阵乘法来执行。距离较近的单词更有可能具有较高的点积,而距离较远的单词则具有较低的点积,这反映了它们在给定上下文中的相对相关性。

大语言模型中常用的旋转位置编码RoPE详解:为什么它比绝对或相对位置编码更好?

使用 RoPE 对 RoBERTa 和 Performer 等模型进行的实验表明,与正弦嵌入相比,它的训练时间更快。并且该方法在各种架构和训练设置中都很稳健。

最主要的是RoPE是可以外推的,也就是说可以直接处理任意长的问题。在最早的llamacpp项目中就有人通过线性插值RoPE扩张,在推理的时候直接通过线性插值将LLAMA的context由2k拓展到4k,并且性能没有下降,所以这也可以证明RoPE的有效性。

代码如下:

import transformers  old_init = transformers.models.llama.modeling_llama.LlamaRotaryEmbedding.__init__ def ntk_scaled_init(self, dim, max_position_embeddings=2048, base=10000, device=None): #The method is just these three linesmax_position_embeddings = 16384a = 8 #Alpha valuebase = base * a ** (dim / (dim-2)) #Base change formula old_init(self, dim, max_position_embeddings, base, device)   transformers.models.llama.modeling_llama.LlamaRotaryEmbedding.__init__ = ntk_scaled_init

总结

旋转位置嵌入代表了 Transformer 架构的范式转变,提供了一种更稳健、直观和可扩展的位置信息编码方式。

RoPE不仅解决了LLM context过长之后引起的上下文无法关联问题,并且还提高了训练和推理的速度。这一进步不仅增强了当前的语言模型,还为 NLP  的未来创新奠定了基础。随着我们不断解开语言和人工智能的复杂性,像 RoPE 这样的方法将有助于构建更先进、更准确、更类人的语言处理系统。

以上是大语言模型中常用的旋转位置编码RoPE详解:为什么它比绝对或相对位置编码更好?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:51CTO.COM。如有侵权,请联系admin@php.cn删除
AI内部部署的隐藏危险:治理差距和灾难性风险AI内部部署的隐藏危险:治理差距和灾难性风险Apr 28, 2025 am 11:12 AM

Apollo Research的一份新报告显示,先进的AI系统的不受检查的内部部署构成了重大风险。 在大型人工智能公司中缺乏监督,普遍存在,允许潜在的灾难性结果

构建AI测谎仪构建AI测谎仪Apr 28, 2025 am 11:11 AM

传统测谎仪已经过时了。依靠腕带连接的指针,打印出受试者生命体征和身体反应的测谎仪,在识破谎言方面并不精确。这就是为什么测谎结果通常不被法庭采纳的原因,尽管它曾导致许多无辜者入狱。 相比之下,人工智能是一个强大的数据引擎,其工作原理是全方位观察。这意味着科学家可以通过多种途径将人工智能应用于寻求真相的应用中。 一种方法是像测谎仪一样分析被审问者的生命体征反应,但采用更详细、更精确的比较分析。 另一种方法是利用语言标记来分析人们实际所说的话,并运用逻辑和推理。 俗话说,一个谎言会滋生另一个谎言,最终

AI是否已清除航空航天行业的起飞?AI是否已清除航空航天行业的起飞?Apr 28, 2025 am 11:10 AM

航空航天业是创新的先驱,它利用AI应对其最复杂的挑战。 现代航空的越来越复杂性需要AI的自动化和实时智能功能,以提高安全性,降低操作

观看北京的春季机器人比赛观看北京的春季机器人比赛Apr 28, 2025 am 11:09 AM

机器人技术的飞速发展为我们带来了一个引人入胜的案例研究。 来自Noetix的N2机器人重达40多磅,身高3英尺,据说可以后空翻。Unitree公司推出的G1机器人重量约为N2的两倍,身高约4英尺。比赛中还有许多体型更小的类人机器人参赛,甚至还有一款由风扇驱动前进的机器人。 数据解读 这场半程马拉松吸引了超过12,000名观众,但只有21台类人机器人参赛。尽管政府指出参赛机器人赛前进行了“强化训练”,但并非所有机器人均完成了全程比赛。 冠军——由北京类人机器人创新中心研发的Tiangong Ult

镜子陷阱:人工智能伦理和人类想象力的崩溃镜子陷阱:人工智能伦理和人类想象力的崩溃Apr 28, 2025 am 11:08 AM

人工智能以目前的形式并不是真正智能的。它擅长模仿和完善现有数据。 我们不是在创造人工智能,而是人工推断 - 处理信息的机器,而人类则

新的Google泄漏揭示了方便的Google照片功能更新新的Google泄漏揭示了方便的Google照片功能更新Apr 28, 2025 am 11:07 AM

一份报告发现,在谷歌相册Android版7.26版本的代码中隐藏了一个更新的界面,每次查看照片时,都会在屏幕底部显示一行新检测到的面孔缩略图。 新的面部缩略图缺少姓名标签,所以我怀疑您需要单独点击它们才能查看有关每个检测到的人员的更多信息。就目前而言,此功能除了谷歌相册已在您的图像中找到这些人之外,不提供任何其他信息。 此功能尚未上线,因此我们不知道谷歌将如何准确地使用它。谷歌可以使用缩略图来加快查找所选人员的更多照片的速度,或者可能用于其他目的,例如选择要编辑的个人。我们拭目以待。 就目前而言

加固芬特的指南 - 分析Vidhya加固芬特的指南 - 分析VidhyaApr 28, 2025 am 09:30 AM

增强者通过教授模型根据人类反馈进行调整来震撼AI的开发。它将监督的学习基金会与基于奖励的更新融合在一起,使其更安全,更准确,真正地帮助

让我们跳舞:结构化运动以微调我们的人类神经网让我们跳舞:结构化运动以微调我们的人类神经网Apr 27, 2025 am 11:09 AM

科学家已经广泛研究了人类和更简单的神经网络(如秀丽隐杆线虫中的神经网络),以了解其功能。 但是,出现了一个关键问题:我们如何使自己的神经网络与新颖的AI一起有效地工作

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具