什么是RoPE-旋转位置编码?

RoPE位置编码是大模型中最常见的位置编码之一。像是谷歌的PaLM和meta的LLaMA等开源大模型都是RoPE位置编码,那么RoPE有什么特点呢?

本文将介绍如下内容:

  • RoPE旋转位置编码概要
  • 什么是位置编码?
  • RoPE及其特点
  • 总结

一、RoPE旋转位置编码概要

本文提出RoPE旋转位置编码方式,其关键思想是将上下文token表示和仅与位置相关的旋转矩阵相乘。RoPE具有良好的外推性和远程衰减的特性,应用到Transformer中体现出较好的处理长文本的能力。此外,RoPE还是目前唯一一种可用于线性Attention的相对位置编码。

中文原文:Transformer升级之路:2、博采众长的旋转式位置编码 - 科学空间|Scientific Spaces

代码地址:https://github.com/ZhuiyiTechnology/roformer

论文地址: ROFORMER: ENHANCED TRANSFORMER WITH ROTARY
POSITION EMBEDDING
在这里插入图片描述

二、什么是位置编码?

我们知道句子中不同词语之前的位置信息十分重要,但是self-attention框架无法直接利用位置信息,因此研究者提出了许多方法将位置信息编码到学习过程中。一是绝对位置编码方法,将位置信息直接加入到输入中;二是相对位置编码方法,研究者通过微调attention的结构,使它具有识别token位置信息的能力。

1、绝对位置编码

绝对位置编码比较简单,研究者一般会将绝对位置信息加到输入中:在输入的第 k k k个向量 x k x_k xk中加入位置向量 p k p_k pk得到 x k + p k x_k+p_k xk+pk,其中 p k p_k pk仅与 k k k相关 。计算 p k p_k pk的方法一般有两种:

训练式:将位置向量设置为可训练的参数,如Bert就将位置向量初始化设为512×768的矩阵,并在训练中更新。但是这种方法有个明显的缺点就是不具备外推性,如果预训练时句子最长设为512,它就无法处理更长的句子了。
编码式:最著名的就是《Attention is all you need》中提出的Sinusoidal位置编码(如下所示, p i , 2 t p_i,2t pi,2t表示位置 k k k的向量的第 2 i 2i 2i个分量, d d d表示向量维度),它显式的编码了位置信息,且具有一定的外推性。
在这里插入图片描述

2、相对位置编码

我们前面讲到相对位置编码是微调Attention矩阵的计算方式,先看看绝对位置编码怎样计算Attention矩阵:
在这里插入图片描述
可以看到计算attention矩阵的过程如公式(1)所示,其中第一项和位置信息无关,第二至四项和位置信息相关。因此研究者通常是直接修改第二至四项的内容,直接在attention矩阵中添加相对位置信息。 常见的有以下几种方法:

XLNET式: 如(2)所示,xlnet将(1)中的二至四项都做了改变,具体的 p n p_n pn替换为了Sinusoidal生成式编码 R ~ n − m \tilde{\mathbb{R}}_{n-m} R~nm,将 p m p_m pm换成了两个可以训练的向量 u , v u,v u,v
在这里插入图片描述
T5式: 如(3)所示,它的作者认为输入和位置间不应过多的交互,因此将第二、三项删除,将第四项都替换为一个可学习的偏执 b m , n b_{m,n} bm,n,这仅仅是在Attention矩阵的基础上加一个可训练的偏置项而已,十分简单。
在这里插入图片描述

DeBerta式: 和T5的构造相反,它舍弃了公式(1)中第四项,保留了第二、三项并将位置信息替换为了相对位置向量 R ~ n − m \tilde{\mathbb{R}}_{n-m} R~nm

在这里插入图片描述

三、RoPE及其特点

Attention的核心运算是内积,所以我们希望经过内积的结果能够带有相对信息。那么我们希望
q m q_m qm k n k_n kn 的内积仅与输入 x m x_m xm x n x_n xn和他们的相对位置 m − n m-n mn有关,那么我们可以假设存在函数 g g g,使得:
在这里插入图片描述

1、RoPE的表示形式

为了方便理解我们可以先考虑二维形式,然后借助复数的运算法则来理解。首先分别用复数的指数形式表示各个向量变化,即有:
在这里插入图片描述

PS1. 向量内积与复数乘积的关系为内积 < i , j > = R e ( i j ∗ ) <i,j>=Re(ij*) <i,j>=Re(ij),其中 R e Re Re表示复数的实部。
PS2. 这个形式证明过程可以参考论文的3.4.1节。但是要注意的是向量内积是标量,而 g ( x m , x n , m − n ) g(x_m,x_n,m-n) g(xm,xnmn)是向量,所以其公式(21) 应改为 q m T k n = < f q ( x , m ) , f k ( m , n ) > = R e [ ( x m , x n . m − n ) ] q^{T}_mk_n=<f_q(x,m),f_k(m,n)>=Re[(x_m,x_n.m-n)] qmTkn=<fq(x,m),fk(m,n)>=Re[(xm,xn.mn)],这样公式(24)才好理解。

q m q_m qm为例,假设 e i m θ e^{im\theta} eimθ表示为模长为1的复数,根据复数乘法的几何意义, ( W q x m ) e i m θ (W_qx_m)e^{im\theta} (Wqxm)eimθ变换实际上对应着向量 W q x m W_qx_m Wqxm的旋转,所以我们称之为“旋转式位置编码”,它还可以写成矩阵形式:
在这里插入图片描述
q m q_m qm为例,考虑多维情况,可以得到旋转式位置编码的一般形式为: q m = R Θ , m d W q x m q_m=R^d_{\Theta,m}W_qx_m qm=RΘ,mdWqxm ,其中:
在这里插入图片描述

PS3. 矩阵 R Θ , m d R^d_{\Theta,m} RΘ,md为正交矩阵,它不会改变向量的模长,因此通常来说它不会改变原模型的稳定性。

2、RoPE的优点
  • 远程衰减: 参考Sinusoidal位置编码形式,RoPE中将 θ i = 1000 0 − 2 i / d \theta_i=10000^{-2i/d} θi=100002i/d,作者并证明了RoPE具有远程衰减的优点,相对距离更大的token之间的联系更少。

  • 可用于线性Attention:Attention的空间和时间复杂度都是 O ( n 2 ) O(n^2) O(n2)级别的, n n n是序列长度,所以 n n n当比较大时Transformer模型的计算量难以承受。因此有研究者提出了线性注意力机制,将复杂度将至 O ( n ) O(n) O(n)。线性注意力机制详见:线性Attention的探索:Attention必须有个Softmax吗? - 科学空间|Scientific Spaces。

    线性注意力机制的表达式为:
    在这里插入图片描述
    其中 φ ( ⋅ ) \varphi(\cdot) φ()为非负函数,像原生注意力中的softmax就位非负函数。因为线性Attention计算方式不一样了,所以前面提到的一些相对位置编码方式都不再适用。

    前面我们提到RoPE是通过旋转输入的方式添加位置信息,并不会改变各个参数的归一化值。因此,我们可以只在分子中将旋转矩阵乘以 φ ( ⋅ ) \varphi(\cdot) φ(),即:
    在这里插入图片描述

四、总结

本文作者详细梳理了位置编码的流派,提出了一种旋转位置编码方式RoPE,并从数学角度证明RoPE带来的诸多优点。RoPE能够应用于线性注意力中,这使得它在不引入爆炸计算量的前提下能够接受更长的输入,这可能是许多大模型都应用RoPE的原因。

参考:
【论文阅读】RoPE为何成为大模型中最常见的位置编码?

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

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

相关文章

书生·浦语大模型实战营作业(四)

基础作业&#xff1a; 构建数据集&#xff0c;使用 XTuner 微调 InternLM-Chat-7B 模型, 让模型学习到它是你的智能小助手&#xff0c;效果如下图所示&#xff0c;本作业训练出来的模型的输出需要将不要葱姜蒜大佬替换成自己名字或昵称&#xff01; 数据集 回答结果 进阶作…

Rsync远程同步,删除大量文件

目录 什么是文本传输&#xff1f; 文件传输工具&#xff1a; Rsync工具介绍 rsync的作用 命令格式 实验配置rsync源服务器 先检查是否有rsync工具 建立/etc/rsyncd.conf 配置文件 为备份账户创建数据文件 给数据文件添加权限 保证所有用户对源目录/var/www/html 都有读…

Android-跨进程

startService和bindService的区别&#xff0c;生命周期以及使用场景 startService&#xff1a; onCreate -> onStartCommand -> onDestory &#xff0c;在多次调用startService的时候&#xff0c;onCreate不重复执行&#xff0c;但是onStartCommand会执行。startService调…

Vulnhub靶机:driftingblues 4

一、介绍 运行环境&#xff1a;Virtualbox 攻击机&#xff1a;kali&#xff08;10.0.2.15&#xff09; 靶机&#xff1a;driftingblues4&#xff08;10.0.2.20&#xff09; 目标&#xff1a;获取靶机root权限和flag 靶机下载地址&#xff1a;https://www.vulnhub.com/entr…

sql | 学生参加各科考试次数

学生表: Students------------------------ | Column Name | Type | ------------------------ | student_id | int | | student_name | varchar | ------------------------ 在 SQL 中&#xff0c;主键为 student_id&#xff08;学生ID&#xff09;。 该表内的每…

Linux|centos7操作系统|VMware虚拟机安装水星免驱USB网卡8188gu记录

引言&#xff1a; 最近对于嵌入式系统比较感兴趣&#xff0c;因此&#xff0c;计划先使用VMware workstation虚拟机试一试Linux系统下的网卡驱动安装 这不试不知道&#xff0c;一试吓一跳&#xff0c;发现Linux下的驱动安装还是比较麻烦的&#xff0c;下面将就本次的Linux系统…

343. 整数拆分(动态规划)

题目&#xff1a; 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n 2 输出: 1 解释: 2 1 1, 1 1 1。 示例 2: 输入: n 10 输出…

设计模式——1_4 外观(Facade)

文章目录 定义图纸一个例子&#xff1a;自动生成一杯茶沏茶的流程组合方式一&#xff1a;直接组合方法二&#xff1a;外观 碎碎念多个外观对象外观和封装外观和单例姑妄言之 定义 为子系统中的一组接口提供一个一致的界面&#xff0c;外观模式定义了一个高层接口&#xff0c;这…

详细探讨mfc140.dll丢失的解决方法,并比较各种方法的优劣

mfc140.dll是Microsoft Foundation Class (MFC) 库中一个重要的DLL文件&#xff0c;它包含了多个执行程序使用的函数和资源。这个库通常用于开发Windows操作系统上的应用程序。但有时会发生mfc140.dll缺失或损坏的错误&#xff0c;导致一些依赖它的应用程序无法运行。今天的这篇…

微信强制分享红包裂变系统源码

源码介绍 微信裂变引流系统源码&#xff1a;高效吸粉&#xff0c;轻松变现 探索这款创新的微信裂变引流系统源码&#xff0c;它将为你的广告推广活动注入强大的动力。凭借其丰富的功能和卓越的性能&#xff0c;它将成为你实现高效引流、粉丝增长和变现转化的强大工具。 该系…

精确掌控并发:固定时间窗口算法在分布式环境下并发流量控制的设计与实现

这是《百图解码支付系统设计与实现》专栏系列文章中的第&#xff08;14&#xff09;篇。点击上方关注&#xff0c;深入了解支付系统的方方面面。 本篇主要介绍分布式场景下常用的并发流量控制方案&#xff0c;包括固定时间窗口、滑动时间窗口、漏桶、令牌桶、分布式消息中间件…

通过开源端点可见性改善网络安全响应

在当今复杂的数字环境中&#xff0c;企业内的许多不同端点&#xff08;从数据中心的服务器到咖啡店的笔记本电脑&#xff09;创建了巨大且多样化的攻击面。每个设备都存在网络安全威胁的机会&#xff0c;每个设备都有其独特的特征和复杂性。攻击者使用的多种攻击媒介不仅是一个…

详解SpringCloud微服务技术栈:强推!源码跟踪分析Ribbon负载均衡原理、Eureka服务部署

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;详解SpringCloud微服务技术栈&#xff1a;认识微服务、服务拆分与远程调用 &#x1f4da;订阅专栏&#xff1a;微服务技术全家桶…

01 SpringMVC的快速理解

1.1 如图所示&#xff0c;SpringMVC负责表述层&#xff08;控制层Controller&#xff09;实现简化&#xff01; SpringMVC的作用主要覆盖的是表述层&#xff0c;例如&#xff1a; 请求映射、数据输入、视图界面、请求分发、表单回显、会话控制、过滤拦截、异步交互、文件上传…

adb 常用命令汇总

目录 adb 常用命令 1、显示已连接的设备列表 2、进入设备 3、安装 APK 文件到设备 4、卸载指定包名的应用 5、从设备中复制文件到本地 6、将本地文件复制到设备 7、查看设备日志信息 8、重启设备 9、截取设备屏幕截图 10、屏幕分辨率 11、屏幕密度 12、显示设备的…

PyTorch损失函数(二)

损失函数 5、nn.L1Loss nn.L1Loss是一个用于计算输入和目标之间差异的损失函数&#xff0c;它计算输入和目标之间的绝对值差异。 主要参数&#xff1a; reduction&#xff1a;计算模式&#xff0c;可以是none、sum或mean。 none&#xff1a;逐个元素计算损失&#xff0c;返…

书生·浦语大模型实战营笔记(四)

Finetune模型微调 直接使用现成的大语言模型&#xff0c;在某些场景下效果不好&#xff0c;需要根据具体场景进行微调 增量预训练&#xff1a;投喂垂类领域知识 陈述形式&#xff0c;无问答&#xff0c;即只有assistant 指令跟随&#xff1a;system-user-assistant XTuner …

树莓派4B-Python-使用PCA9685控制舵机云台+跟随人脸转动

系列文章 树莓派4B-Python-控制舵机树莓派-Pico控制舵机树莓派4B-Python-使用PCA9685控制舵机云台跟随人脸转动&#xff08;本文章&#xff09; 目录 系列文章前言一、SG90s舵机是什么&#xff1f;二、PCA9685与舵机信号线的接线图三、控制SG90s云台&#xff08;也可用来测试舵…

YOLOv5改进 | 主干篇 | 12月最新成果UniRepLknet特征提取网络(附对比试验效果图)

一、本文介绍 本文给大家带来的改进机制是特征提取网络UniRepLknet,其也是发表于今年12月份的最新特征提取网络,该网络结构的重点在于使用Dilated Reparam Block和大核心指导原则,强调了高效的结构进行通道间通讯和空间聚合,以及使用带扩张的小核心进行重新参数化,该网络…

C++输入输出和文件

文章目录 一. 流, 缓冲区和iostream文件二. 使用cout进行输出1. 用cout进行格式化2. 刷新输出缓冲区 三. 使用cin进行输入1. cin>>如何检查输入2. 流状态3. 其他istream类方法 四. 文件输入和输出1. 简单的文件I/O2. 文件模式3. 随机存取4. 内核格式化 To be continue...…