【大模型上下文长度扩展】RoFormer:一种结合了旋转位置编码(RoPE)的Transformer模型

RoFormer:一种结合了旋转位置编码(RoPE)的Transformer模型

    • 提出背景
    • 旋转位置编码(RoPE)
      • 旋转矩阵
      • 子问题1: 位置信息编码的需求
      • 子问题2: 序列长度的灵活性
      • 子问题3: 线性自注意力与相对位置编码的整合
    • RoPE的创新性
      • 绝对位置编码的限制
      • 相对位置编码的复杂性
      • RoPE的改进

 


提出背景

论文:https://arxiv.org/pdf/2104.09864.pdf

代码:https://huggingface.co/docs/transformers/model_doc/roformer

 
尽管 Transformer 性能卓越,处理文本中的位置信息仍是一个挑战,尤其是在长文本和需要精细位置感知的场景中。

为了克服这一限制,研究者们提出了RoFormer,一种结合了旋转位置编码(RoPE)的Transformer模型,旨在更有效地整合位置信息以提高模型对长文本的处理能力。

传统的 Transformer 模型虽然在语言理解方面取得了巨大成功,但其原生的位置编码机制存在一定的局限性。具体来说,它们往往无法充分捕捉长距离依赖关系,尤其是当文本长度超出模型预设的最大长度时。

此外,这些模型对于词序的敏感性不足(没顺序),限制了它们在某些任务上的性能。

RoFormer通过引入Rotary Position Embedding(RoPE)来解决上述问题。

RoPE的核心思想是使用旋转矩阵来编码单词在句子中的位置,既考虑了绝对位置,也考虑了单词之间的相对位置。

这种方法的优势在于它提供了一种动态的方式来表示位置关系,使模型能够更精确地理解词序和词间依赖关系。

孩子们站成一圈玩传球游戏,每个孩子在接球后转身一周再传球,我们可以形象地理解RoPE的工作原理。

在NLP中,这相当于通过旋转矩阵来“旋转”词向量,从而编码位置信息。

这种旋转不仅标记了每个词的绝对位置,还通过相对旋转方式捕捉了词与词之间的相对位置信息。

 

旋转位置编码(RoPE)

旋转位置编码(RoPE)的具体实现依赖于数学上的旋转矩阵概念来编码单词在句子中的位置。

旋转矩阵

在二维空间中,一个点可以通过旋转矩阵进行旋转。

如果我们有一个点的坐标 ( (x, y) ),并希望将其绕原点旋转一个角度 θ \theta θ,我们可以使用旋转矩阵:

[ R ( θ ) = [ cos ⁡ ( θ ) − sin ⁡ ( θ ) sin ⁡ ( θ ) cos ⁡ ( θ ) ] ] [ R(\theta) = \begin{bmatrix} \cos(\theta) & -\sin(\theta) \\ \sin(\theta) & \cos(\theta) \end{bmatrix} ] [R(θ)=[cos(θ)sin(θ)sin(θ)cos(θ)]]

将这个矩阵与点的坐标相乘,就得到了旋转后的新坐标。

在这里插入图片描述
这些嵌入通过依赖于单词在序列中位置(m 或 n)的旋转矩阵进行旋转,这种旋转编码了相对位置信息。

通过预设常数角度(θ)的旋转矩阵得出旋转后的查询向量( f q f_q fq)和键向量( f k f_k fk)。

这样,每个词向量就被赋予了一个独特的“旋转”,反映了它在句子中的位置。

 

通用形式:
在这里插入图片描述
将这一概念扩展到更高维空间(d 维),适用于NLP中使用的实际词嵌入。

定义了任何偶数维度d的旋转矩阵( R Θ d , m R^d_Θ,m RΘd,m),它在高维空间的子空间中应用旋转。

展示了RoPE在自注意力机制中的应用,修改了计算注意力分数( q m q_m qm 转置乘以 k n k_n kn)的方式,以包含单词位置的影响。

 

在Transformer模型中实际实现旋转位置编码:
在这里插入图片描述
显示了查询/键向量(X1, X2)的原始位置。

然后通过角度 m θ 1 mθ1 mθ1 旋转,代表将位置信息嵌入到查询/键中。

带有旋转位置编码的增强型 Transformer 被描述,其中的块表示通过各自的位置嵌入转换的查询/键向量。

 

RoPE不仅编码了单词的绝对位置,还通过这种旋转机制,使模型能够捕捉到单词之间的相对位置信息。

当计算两个词向量的注意力时,这种相对旋转影响了它们的内积,从而影响了模型对这两个单词关系的理解。

这种方法特别适合于处理那些对位置敏感的任务,如语言理解和机器翻译,因为它允许模型更精确地捕捉和利用文本中的位置信息。

这种方法的优雅之处在于,它通过数学上简洁的旋转操作,实现了对位置信息的高效编码和利用,从而提高了NLP模型的性能和理解能力。

 


子问题1: 位置信息编码的需求

  • 具体问题: 现有的Transformer模型在处理自然语言时,对词序(即单词在句子中的位置)的敏感性不足,因为它们本质上是位置不变的(position-agnostic)。这限制了模型捕捉词与词之间依赖关系的能力,尤其是在长距离依赖的场景中。
  • 解决方法: 引入Rotary Position Embedding (RoPE)。
  • 为什么用这个解法: RoPE通过使用旋转矩阵编码绝对位置信息,并在自注意力机制中整合显式的相对位置依赖性,来解决位置信息编码的需求。
  • 这种方法的特征是能够同时考虑到位置的绝对和相对信息,使得模型更好地理解词序和词间依赖关系。
  • 例子: 例如,在处理长句子时,RoPE能够让模型辨识出句子开头的主题词与句尾的动词之间的长距离依赖关系,相比传统的位置编码方法,RoPE提供了更精确的位置信息处理能力。

子问题2: 序列长度的灵活性

  • 具体问题: 传统的位置编码方法通常依赖于预定义的固定长度,这限制了模型处理不同长度序列的能力。
  • 解决方法: RoPE的设计允许序列长度灵活性。
  • 为什么用这个解法: 由于RoPE是通过旋转矩阵来编码位置信息,这种方法自然地支持不同长度的序列,而无需调整编码策略。
  • 这使得RoFormer能够适应不同长度的文本输入,提高了模型的通用性和灵活性。
  • 例子: 当处理用户生成内容如评论或帖子时,这些文本的长度差异较大,RoPE允许RoFormer模型无需任何修改即可有效处理这些不同长度的输入。

子问题3: 线性自注意力与相对位置编码的整合

  • 具体问题: 传统的位置编码方法不适合于线性自注意力架构,因为它们通常通过向上下文表示中添加位置编码来工作,这在线性化处理时效率不高。
  • 解决方法: RoPE支持在线性自注意力中整合相对位置编码。
  • 为什么用这个解法: RoPE通过在自注意力计算中直接使用旋转矩阵,使得位置信息的编码与自注意力计算紧密结合,从而使得线性自注意力机制能够有效地利用位置信息。
  • 这种方法提高了计算效率,并使得模型能够在处理长序列时保持高性能。
  • 例子: 在处理大规模文本数据集时,RoPE使RoFormer能够更高效地计算自注意力,特别是在需要快速处理大量数据的在线学习场景中,这种效率的提高尤为重要。

通过这种拆解,我们可以看到RoFormer及其核心创新—Rotary Position Embedding—是如何

针对特定的问题提出解决方案,并根据这些问题的特征来设计这些解决方案的。每个解决方案都针对Transformer模型在处理自然语言任务时遇到的具体挑战,通过提高位置信息的编码效率和准确性来提升模型性能。

 

RoPE的创新性

绝对位置编码的限制

  • 具体问题: 传统的绝对位置编码方法(如通过可训练的向量或者使用正弦波函数生成的位置向量)将位置信息直接加到上下文表示中,这种方法虽然能够提供位置信息,但它限制了模型对序列长度的灵活性,并可能不适用于所有的自注意力结构。
  • 解决方法: 使用正弦波函数生成的位置向量。
  • 为什么用这个解法: 正弦波函数生成的位置向量不依赖于序列的最大长度,从而提供了一种相对更灵活的方式来编码位置信息。
  • 这种方法通过对位置进行编码,而不是直接添加到上下文表示中,可以间接地提供位置信息。
  • 例子: Vaswani et al. (2017) 提出的正弦波位置编码方法,通过生成每个位置的唯一正弦和余弦编码,使得模型能够区分不同位置的词汇,同时保持了对不同长度序列的适应性。

相对位置编码的复杂性

  • 具体问题: 早期的相对位置编码方法尝试通过修改自注意力机制来直接加入相对位置信息,但这些方法往往增加了模型的复杂性,并且在实现时需要对距离进行裁剪或使用不同的投影矩阵来区分单词或位置对,这限制了模型的泛化能力和效率。
  • 解决方法: 分解注意力得分计算,将相对位置信息作为自注意力计算的一部分。
  • 为什么用这个解法: 通过分解注意力得分计算并引入相对位置信息,可以在不显著增加计算复杂性的前提下,有效地模拟单词之间的相对距离。
  • 这种方法允许模型在保持高效计算的同时,更好地理解文本中词汇的相对位置关系。
  • 例子: Shaw et al. (2018) 提出的方法,通过为每对单词引入可训练的相对位置向量,使得模型能够根据单词之间的相对距离调整其注意力权重,从而更准确地捕捉句子内部的结构关系。

RoPE的改进

  • 具体问题: 尽管绝对和相对位置编码方法各有优势,但它们通常独立使用,且直接加到上下文表示中,这可能不利于捕捉复杂的位置依赖性,特别是在线性自注意力架构中。
  • 解决方法: Rotary Position Embedding(RoPE)。
  • 为什么用这个解法: RoPE通过将位置信息以旋转矩阵的形式编码,能够同时考虑绝对和相对位置信息,并在自注意力计算中直接使用这些信息。
  • 这种方法不仅保持了对序列长度的灵活性,还使模型能够更准确地理解和利用位置信息,特别是在处理长序列时。
  • 例子: RoPE的使用允许RoFormer模型在不牺牲计算效率的情况下,有效地处理长文本数据,并在多个长文本分类基准数据集上展示出优于传统Transformer模型的性能。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CRNN介绍:用于识别图中文本的深度学习模型

CRNN:用于识别图中文本的深度学习模型 CRNN介绍:用于识别图中文本的深度学习模型CRNN的结构组成部分工作原理 CRNN结构分析卷积层(Convolutional Layers)递归层(Recurrent Layers)转录层(Transc…

恒创科技:怎么看云主机的性价比

随着云计算技术的不断发展,云主机已经成为越来越多企业和个人用户的首选计算资源。然而,在选择云主机时,性价比是一个非常重要的考虑因素。那么,怎么看云主机的性价比呢? 通常来说,云主机的成本主要包括硬…

相机图像质量研究(10)常见问题总结:光学结构对成像的影响--光圈

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结:光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结:光学结构对成…

MySQL数据库基础第四篇(多表查询与事务)

文章目录 一、多表关系二、多表查询三、内连接查询四、外连接查询五、自连接查询六、联合查询 union, union all七、子查询1.标量子查询2.列子查询3.行子查询4.表子查询 八、事务八、事务的四大特性九、并发事务问题十、事务隔离级级别 在这篇文章中,我们将深入探讨…

MySQL篇之定位与优化MySQL慢查询

一、如何定位慢查询 1.方案一:开源工具 调试工具:Arthas。 运维工具:Prometheus 、Skywalking。 2.方案二:MySQL自带慢日志 慢查询日志记录了所有执行时间超过指定参数(long_query_time,单位:…

SpringIOC之support模块ReloadableResourceBundleMessageSource

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

【分布式】雪花算法学习笔记

雪花算法学习笔记 来源 https://pdai.tech/md/algorithm/alg-domain-id-snowflake.html概述 雪花算法是推特开源的分布式ID生成算法,以划分命名空间的方式将64位分割成多个部分,每一个部分代表不同的含义,这种就是将64位划分成不同的段&…

armbian ddns

参考https://mp.weixin.qq.com/s/0Uu_nbGH_W6vAYHPH4kHqg Releases jeessy2/ddns-go GitHub mkdir -p /usr/local/ddns-go cd /usr/local/ddns-gowget https://github.com/jeessy2/ddns-go/releases/download/v6.1.1/ddns-go_6.1.1_freebsd_armv7.tar.gztar zxvf ddns-go_…

Unity2D 学习笔记 0.Unity需要记住的常用知识

Unity2D 学习笔记 0.Unity需要记住的常用知识 前言调整Project SettingTilemap相关(创建地图块)C#脚本相关程序运行函数private void Awake()void Start()void Update() Collider2D碰撞检测private void OnTriggerStay2D(Collider2D player)private void…

DevOps落地笔记-20|软件质量:决定系统成功的关键

上一课时介绍通过提高工程效率来提高价值交付效率,从而提高企业对市场的响应速度。在提高响应速度的同时,也不能降低软件的质量,这就是所谓的“保质保量”。具备高质量软件,高效率的企业走得更快更远。相反,低劣的软件…

idea自带的HttpClient使用

1. 全局变量配置 {"local":{"baseUrl": "http://localhost:9001/"},"test": {"baseUrl": "http://localhost:9002/"} }2. 登录并将结果设置到全局变量 PostMapping("/login")public JSONObject login(H…

前端文件下载的多种方式

前端文件下载的多种方式。 前言a标签下载a标签常用属性介绍- target,href,download。 window.location.href下载window.open下载iframe 下载动态生成a标签下载文件url下载文件流下载blob文件流转换常用类型 使用 streamSaver 看实时下载进度 前言 如果我…

spring boot(2.4.x之前版本)和spring cloud项目中自动装配的监听执行顺序

目录 扫描 org.springframework.context.ApplicationListener 指定的类 内置的监听 spring boot 中的监听 spring boot autoconfigure 中的监听 spring boot context 中的监听 将加载的监听进行排序 spring boot 中的监听 spring boot context 中的监听 监听执行 监听…

讲讲GPT-4模型中13万亿个token的故事

Token从字面意思上看是游戏代币,用在深度学习中的自然语言处理领域中时,代表着输入文字序列的“代币化”。那么海量语料中的文字序列,就可以转化为海量的代币,用来训练我们的模型。这样我们就能够理解“用于GPT-4训练的token数量大…

Java stream 流的基本使用

Java stream 的基本使用 package com.zhong.streamdemo.usestreamdemo;import jdk.jfr.DataAmount; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.util.ArrayList; import java.util.Comparator; import java.util.Li…

springboot165科研工作量管理系统的设计与实现

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

notepad++成功安装后默认显示英文怎么设置中文界面?

前几天使用电脑华为管家清理电脑后,发现一直使用的notepad软件变回了英文界面,跟刚成功安装的时候一样,那么应该怎么设置为中文界面呢?具体操作如下: 1、打开notepad软件,点击菜单栏“Settings – Prefere…

LLaMA 入门指南

LLaMA 入门指南 LLaMA 入门指南LLaMA的简介LLaMA模型的主要结构Transformer架构多层自注意力层前馈神经网络Layer Normalization和残差连接 LLaMA模型的变体Base版本Large版本Extra-Large版本 LLaMA模型的特点大规模数据训练 LLaMA模型常用数据集介绍公共数据来源已知的数据集案…

LeetCode1365之切披萨的方案数(相关话题:二维前缀和,动态规划)

题目描述 给你一个 rows x cols 大小的矩形披萨和一个整数 k ,矩形包含两种字符: A (表示苹果)和 . (表示空白格子)。你需要切披萨 k-1 次,得到 k 块披萨并送给别人。 切披萨的每一刀&#xf…

Zoho Mail企业邮箱商业扩展第1部分:入门

今天让我们来认识一下王雪琳,她是一位独立经营的营销咨询机构的个体企业家。在开始自己的事业之前,她进行了广泛的市场调研,明确了自己的业务定位,并全力以赴地投入到了自己的企业中。 一、创业背景 王雪琳的营销业务主要集中在…