自2017年发表的“attention is all you need”论文以来,transformer架构一直是自然语言处理(nlp)领域的基石。它的设计多年来基本没有变化,随着旋转位置编码(rope)的引入,2025年标志着该领域的重大发展。
旋转位置嵌
入是最先进的 NLP 位置嵌入技术。大多数流行的大型语言模型(如 Llama、Llama2、PaLM 和 CodeGen)已经在使用它。在本文中,我们将深入探讨什么是旋转位置编码,以及它们如何巧妙地融合绝对位置嵌入和相对位置嵌入的优点。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜
为了理解 RoPE 的重要性,我们首先回顾一下为什么位置编码至关重要。Transformer 模型根据其固有的设计,不会考虑输入标记的顺序。
例如,像“the dog chases the pig ”和“the pig chases the dogs”这样的短语虽然含义不同,但由于它们被视为一组无序的标记,因此被视为无法区分。为了维护序列信息及其含义,需要一个表示来将位置信息集成到模型中。
为了对句子中的位置进行编码,需要使用具有相同维度的向量的另一个工具,其中每个向量代表句子中的一个位置。例如,在句子中的第二个单词指定特定向量。因此,每个句子位置都有其独特的向量。然后通过将单词嵌入与其相应位置的嵌入结合起来,来形成Transformer层的输入。
有两种主要方法来生成这些嵌入:
尽管使用广泛但绝对位置嵌入也并非没有缺点:
相对位置不是关注记在句子中的绝对位置,而是关注记对之间的距离。该方法不会直接向词向量中添加位置向量。而是改变了注意力机制以纳入相对位置信息。
T5(Text-to-Text Transfer Transformer)是一种利用相对位置嵌入的著名模型。T5 引入了一种处理位置信息的微妙方式:
尽管它们在理论上很有吸引力,但相对位置编码得问题很严重
由于这些工程复杂性,位置编码未得到广泛采用,特别是在较大的语言模型中。
RoPE 代表了一种编码位置信息的新方法。传统方法中无论是绝对方法还是相对方法,都有其局限性。绝对位置编码为每个位置分配一个唯一的向量,虽然简单但不能很好地扩展并且无法有效捕获相对位置;相对位置编码关注标记之间的距离,增强模型对标记关系的理解,但使模型架构复杂化。
RoPE巧妙地结合了两者的优点。允许模型理解标记的绝对位置及其相对距离的方式对位置信息进行编码。这是通过旋转机制实现的,其中序列中的每个位置都由嵌入空间中的旋转表示。RoPE 的优雅之处在于其简单性和高效性,这使得模型能够更好地掌握语言语法和语义的细微差别。
旋转矩阵源自我们在高中学到的正弦和余弦的三角性质,使用二维矩阵应该足以获得旋转矩阵的理论,如下所示!
我们看到旋转矩阵保留了原始向量的大小(或长度),如上图中的“r”所示,唯一改变的是与x轴的角度。
RoPE 引入了一个新颖的概念。它不是添加位置向量,而是对词向量应用旋转。旋转角度 (θ) 与单词在句子中的位置成正比。第一个位置的向量旋转 θ,第二个位置的向量旋转 2θ,依此类推。这种方法有几个好处:
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 对 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 这样的方法将有助于构建更先进、更准确、更类人的语言处理系统。
# 旋转矩阵
# 引入了
# 键值
# 所示
# 层中
# 第二个
# 令牌
# 都有
# 是在
# 的是
# 自然语言处理
# palm
# llama
# nlp
# transformer
# pytorch
# 人工智能
# 架构
# 相对定位
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化91478 】
【
技术知识72672 】
【
云计算0 】
【
GEO优化84317 】
【
优选文章0 】
【
营销推广36048 】
【
网络运营41350 】
【
案例网站102563 】
【
AI智能45237 】
相关推荐:
百度浏览器ai助手怎么关闭 百度浏览器ai功能禁用
ChatGPT官方网页端入口 ChatGPT官网快速登录方法
ChatGPT 角色扮演实战:提升沟通技巧与问题解决能力
解锁生成式AI工程师之路:技能、职业发展与未来趋势
Cred.ai信用卡深度评测:信用提升的秘密武器
Google NotebookLM:AI赋能的智能笔记与思维导图工具
ClaudePC端怎么设主题色_ClaudePC端主题设置步骤【教程】
AI简历生成工具有哪些_一键生成专业简历的AI工具推荐
CanvaAI抠图怎么批量处理_CanvaAI批量抠图与团队协作功能【指南】
EdrawMax AI:项目管理和创意专业人士的终极图表工具
AI电子书创作革命:AieBookSuite如何颠覆出版行业
CanvaAI抠图能否保留透明图层_CanvaAI透明图层保留与导出设置【方法】
豆包AI怎么评价回答的好坏_点赞与反馈功能使用教程
斑马AI能否关联学校教材_斑马AI教材同步与版本匹配【技巧】
Gemini 与 Google Drive 结合的文件智能检索
在线歌曲歌词生成器:创意歌词轻松创作指南
Claude如何关闭自动续费_Claude续费关闭方法【方法】
利用AI自动化生成电子书:Make.com的终极教程
探索弦乐器世界:从吉他到卡曼切,乐器全解析
Wix AI:无需代码免费创建专业网站完整指南
利用Gen AI和AI Agent进行软件测试:Ollama本地LLM实践
Napkin AI:AI驱动的文本可视化工具,轻松创建思维导图
tofai登录入口官网 tofai网页版地址链接
3步教你用AI帮你把菜谱转换成详细的烹饪步骤视频脚本
轻松入门:如何创建自己的图像识别模型
AI写作鱼怎么一键生成论文大纲_AI写作鱼大纲生成与逻辑梳理【技巧】
2025年必备:顶级AI工具,赋能您的日常工作和业务流程
LALAL.AI教程:音视频人声分离、降噪终极指南
Claude怎样用提示词控制输出长度_Claude输出长度设置【教程】
Power BI: 如何在 Power Query 中更改数据类型
批改网ai检测工具怎么导出检测结果_批改网ai检测工具报告导出与格式选择【指南】
AI内容审查:谷歌搜索结果是否受到人为干预?
AI赋能建筑合同管理:ChatGPT实用案例深度解析
文本分类:生成模型与朴素贝叶斯算法的全面指南
CharSnap AI:终极角色扮演与群聊平台指南
通义千问怎样优化提示词合需求_通义千问需求契合技巧【步骤】
探索Roblox:虚拟角色定制与互动乐园
苹果手机百度ai怎么关 iPhone百度输入法ai关闭
想做自媒体?教你用AI批量生成视频脚本,实现内容自由
ChatGPT怎样用提示词模拟专家视角_ChatGPT专家视角设置【指南】
Depseek能否批量生成部门总结_Depseek多部门总结批量生成步骤【方法】
ChatGPT怎样一键生成PPT_ChatGPT生成PPT方法【步骤】
Weavernote:AI驱动的知识管理与高效笔记应用
解读 Karan Aujla:如何用音乐连接全球与故土?
使用 ChatGPT 自动生成月度财务分析报告
理论框架写作指南:3步构建研究基石
Fiverr网站审计终极指南:免费工具、SEO技巧和实战案例
AI婴儿播客视频制作终极指南:免费工具与步骤
唐库AI拆书工具如何批量导出笔记_唐库AI拆书工具批量导出与格式转换【方法】
AI时代生存指南:掌握软实力,成为不可替代的人
2024-04-01
南京市珐之弘网络技术有限公司专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。