旋转位置编码

1. Transformer为什么需要位置编码

因为 transformer 结构本身是和位置编码无关的: Y = T ( X ) = F ( A ( X ) ) Y=\Tau(X)=F(A(X)) Y=T(X)=F(A(X)),其中 A ( ) A() A() 是 attention 变换,只进行了矩阵变换,跟位置无关, F ( ) F() F() 是前馈网络变换,也跟位置无关。

高阶语义向量不仅仅是由周围 token 的语义向量组合表达而成,还需要加上每个 token 所处的位置。比如我们在句子前面加上
< c l s > <cls> <cls> 来学习整个句子的语义向量,如果没有位置编码的话下面两个句子 < c l s > <cls> <cls> token 得到的语义向量是完全一样的。

像是 RNN 和 CNN 结构天然就有序列的位置信息。

2. 如何加入位置编码

2.1. 直接修改输入

X i → Q i , K i , V i X_i \to Q_i,K_i,V_i XiQi,Ki,Vi 之前直接加入位置的embedding: X i ′ = X i + P i X'_i = X_i+P_i Xi=Xi+Pi。优点是简单,缺点是外推困难,对于超过序列最大长度的位置无法表示。用在BERT和GPT中。

典型的方式比如自定义绝对位置编码:

在这里插入图片描述

2.2. 修改Attention

从直觉上来说语义信息关注的是不同 token 之间的相对位置信息,上面的绝对位置编码不够直接,所以引入相对位置编码。
在这里插入图片描述
通过 attention 过程引入位置信息说白了就是在计算 token 之间的相关性矩阵时通过引入某种带有位置信息的操作使得算出来的相关性矩阵里带有相对位置信息。

下面从数学的角度和工程的角度来讲解,可以认为是先通过数学推出了用什么函数修改 attention,然后从工程的角度证明这个函数是有效的。

2.2.1 从数学的角度推理

假设我们引入函数 f ( ) f() f(),它有两个参数,一个是 token 的 embedding 信息,一个是这个 token 的位置信息。比如 f ( q , m ) f(q, m) f(q,m),其中 q q q 是 某个token 的 embedding, m m m 是它的位置信息,但是此时 f ( q , m ) f(q, m) f(q,m) 里面是绝对位置信息。Attention 的核心运算是内积,所以我们希望的内积的结果带有相对位置信息,因此假设存在恒等关系(其中 q q q k k k 是两个不同位置的 token 的 embedding, m m m n n n 是对应的位置信息):

在这里插入图片描述

这样的话只要能求解出满足上式的函数 f ( ) f() f() 就可以将相对位置信息在 attention 阶段引入了,只要 f ( ) f() f() 确定了, g ( ) g() g() 也就可以确定了。

要求解一个函数,首先我们可以设定一些简单的,符合直觉的初始条件:

在这里插入图片描述

我们先考虑二维情形,然后借助复数来求解。在复数中有 < q , k > = R e [ q k ∗ ] <q,k>=Re[qk^*] <q,k>=Re[qk] R e [ ] Re[] Re[] 代表复数的实部,所以有:

在这里插入图片描述

其中 f ∗ ( k , n ) f^*(k, n) f(k,n) 表示 f ( k , n ) f(k, n) f(k,n) 的共轭。

简单起见,我们假设存在复数 g ( q , k , m − n ) g(q, k, m-n) g(q,k,mn),使得 f ( q , m ) f ∗ ( k , n ) = g ( q , k , m − n ) f(q, m)f^*(k, n) = g(q, k, m-n) f(q,m)f(k,n)=g(q,k,mn),然后设:

在这里插入图片描述

注: R f ( q , m ) R_{f(q, m)} Rf(q,m) 是复数 f ( q , m ) f(q, m) f(q,m) 的模, Θ f ( q , m ) \Theta_{f(q,m)} Θf(q,m) 是是复数 f ( q , m ) f(q, m) f(q,m) 的辐角,在苏剑林老师的博客里因为排版问题可能会造成误识。

带入式 (4) 中得到:

在这里插入图片描述

详细的推导如下:

f ( q , m ) f ∗ ( k , n ) = R f ( q , m ) e i θ f ( q , m ) R f ( k , n ) e − i θ f ( k , n ) = R f ( q , m ) R f ( k , n ) e i ( θ f ( q , m ) − θ f ( k , n ) ) = g ( q , k , m − n ) = R g ( q , k , m − n ) e i θ g ( q , k , m − n ) f(q, m)f^*(k, n)=R_{f(q, m)}e^{i\theta_{f(q,m)}}R_{f(k, n)}e^{-i\theta_{f(k,n)}}=R_{f(q, m)}R_{f(k, n)}e^{i(\theta_{f(q,m)-\theta_{f(k,n)}})}=g(q, k, m-n)=R_{g(q, k, m-n)}e^{i\theta_{g(q,k,m-n)}} f(q,m)f(k,n)=Rf(q,m)eiθf(q,m)Rf(k,n)eiθf(k,n)=Rf(q,m)Rf(k,n)ei(θf(q,m)θf(k,n))=g(q,k,mn)=Rg(q,k,mn)eiθg(q,k,mn)

对于第一个方程,代入 m = n m=n m=n 得到:

在这里插入图片描述

最后一个等号源于初始条件 f ( q , 0 ) = q f(q,0)=q f(q,0)=q f ( k , 0 ) = k f(k,0)=k f(k,0)=k。我们假设 R f ( q , m ) = ∣ ∣ q ∣ ∣ , R f ( k , m ) = ∣ ∣ k ∣ ∣ R_{f(q, m)}=||q||,R_{f(k,m)}=||k|| Rf(q,m)=∣∣q∣∣,Rf(k,m)=∣∣k∣∣,即不依赖于 m m m(因为我们是要构造出符合假设的函数 f ( ) f() f(),所以无论怎么假设都可以,只要最后能构造出来就行,这样的话假设条件越简单越好)。

公式 (6) 中的第二个等式带入 m = n m=n m=n 得到:

在这里插入图片描述

这里的 Θ q , Θ k \Theta_{q},\Theta_{k} Θq,Θk q , k q,k q,k 本身的辐角,最后一个等号同样源于初始条件。根据上式得到 Θ f ( q , m ) − Θ q = Θ f ( k , m ) − Θ k \Theta_{f(q,m)}-\Theta_{q}=\Theta_{f(k,m)}-\Theta_{k} Θf(q,m)Θq=Θf(k,m)Θk,所以 Θ f ( q , m ) − Θ q \Theta_{f(q,m)}-\Theta_{q} Θf(q,m)Θq 应该是一个只与 m m m 相关,跟 q q q 无关的函数,记为 φ ( m ) \varphi(m) φ(m),即 Θ f ( q , m ) = Θ q + φ ( m ) \Theta_{f(q,m)}=\Theta_{q}+\varphi(m) Θf(q,m)=Θq+φ(m)。接着代入 n = m − 1 n=m-1 n=m1,整理得到:
在这里插入图片描述

可以看到等式的自变量为 m m m,而上述等式右边跟自变量 m m m 无关,是一个常数,所以 φ ( m ) \varphi(m) φ(m) 是一个等差数列,我们假设右端为 θ \theta θ,则 φ ( m ) = m θ \varphi(m)=m\theta φ(m)=mθ(这是推导出函数 f ( ) f() f() 的关键一步)

至此,我们已经得到了二维情况下用复数表示的RoPE:

在这里插入图片描述

其中 q = ∣ ∣ q ∣ ∣ e i Θ q q=||q||e^{i\Theta_q} q=∣∣q∣∣eiΘq

注:这里要特别注意 Θ \Theta Θ θ \theta θ 的区别,前者是个函数,后者是个数.

根据复数乘法的几何意义,该变换实际上对应着向量的旋转,所以我们称之为“旋转式位置编码”,它还可以写成矩阵形式:

在这里插入图片描述

由于内积满足线性叠加性,因此任意偶数维的RoPE,我们都可以表示为二维情形的拼接,即:
在这里插入图片描述

也就是给位置为 m m m 的向量 q q q 乘上矩阵 R m R_m Rm、位置为 n n n 的向量 k k k 乘上矩阵 R n R_n Rn,用变换后的 Q , K Q,K Q,K 序列做 Attention,那么Attention 就自动包含相对位置信息了,因为成立恒等式:

在这里插入图片描述
按照 (12) 展开之后用三角函数即可证明。

值得指出的是, R m R_m Rm 是一个正交矩阵,它不会改变向量的模长,因此通常来说它不会改变原模型的稳定性,但是向量的方向会发生变化,这就是旋转位置编码中旋转的由来。

由于 R m R_m Rm 的稀疏性,所以直接用矩阵乘法来实现会很浪费算力,推荐通过下述方式来实现RoPE:
在这里插入图片描述
其中⊗是逐位对应相乘,即Numpy、Tensorflow等计算框架中的∗运算。从这个实现也可以看到,RoPE可以视为是乘性位置编码的变体。

2.2.2 从工程的角度

在这里插入图片描述
工程上直接用了数学上推出的结论,也就是说 f ( Q , i ) = Q i R ( i ) f(Q,i)=Q_iR(i) f(Q,i)=QiR(i),可以看到上面的数学推理出的式子是 f ( q , m ) = R ( m ) q m f(q,m)=R(m)q_m f(q,m)=R(m)qm,这是因为数学上一般使用矩阵左乘一个列向量,而代码实现的时候一般是矩阵右乘一个行向量,也正是因为这个原因,所以工程上的旋转矩阵为:

在这里插入图片描述
与数学上有区别。

在这里插入图片描述
如果在投影之前做旋转的话就无法在 attention 的时候加上相对位置信息了。
在这里插入图片描述
在这里插入图片描述
在高维空间做旋转可以拆分为在多个二维子空间上左旋转然后拼接起来。

在这里插入图片描述
这里只是设计了一个基准 θ k = 1000 0 − k / d \theta_k=10000^{-k/d} θk=10000k/d,也可以设为其他。一个复数乘以 i i i 就会在复平面上逆时针旋转90°

在这里插入图片描述

在这里插入图片描述
进入·每一层Transformer的时候都会计算一次相对位置编码,不像在绝对位置编码中只在第一层Transformer中添加位置编码,这样的话随着层数的增加相对位置编码的位置信息是一直都很强的。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

这里解释了上一小节中式子 (14) 是怎么来的。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3. 复数相关知识

在这里插入图片描述
在这里插入图片描述

其中 r r r z z z 的模, θ \theta θ z z z 辐角

内积满足线性叠加性:

在这里插入图片描述

在这里插入图片描述

4. 矩阵相关知识

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
正交矩阵:如果: A A T = E AA^T = E AAT=E(E为单位矩阵,AT表示“矩阵A的转置矩阵”。)或 A T A = E A^TA=E ATA=E,则n阶实矩阵A称为正交矩阵。

5. 三角函数

在这里插入图片描述

参考1:Transformer升级之路:2、博采众长的旋转式位置编码

参考2:一文看懂 LLaMA 中的旋转式位置编码

参考3:十分钟读懂旋转编码

参考4:Meta最新模型LLaMA细节与代码详解

参考5:B站视频

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

ssm+vue683基于VUE.js的在线教育系统设计与实现

博主介绍&#xff1a;专注于Java&#xff08;springboot ssm 等开发框架&#xff09; vue .net php phython node.js uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不…

【Wi-Fi】WiFi IEEE 802.11ad(60 GHz Wi-Fi)知识整理

参考链接 【技术规范】详解IEEE 802.11ad&#xff08;60GHz Wi-Fi&#xff09;技术 - 天线设计 - RF技术社区 IEEE 802.11ad Tutorial | WiGig (60 GHz Technology) basics IEEE 802.11ad&#xff08;60 GHz Wi-Fi&#xff09; IEEE 802.11ad是一种无线网络标准&#xff0c…

苹果MacOS最常用快捷键(一)

1、利用find命令查找文件 可参考链接&#xff1a;find使用_mac find命令-CSDN博客文章浏览阅读3.2k次。find 使用_mac find命令https://blog.csdn.net/poinsettia/article/details/129187641 举例&#xff1a; 2、虚拟机系统将Ctrl设置为苹果的Command键 实际上就是将Ctrl键和…

壁纸鸭 1.1 |提供许多优质壁纸,并且支持本地图片像素化

壁纸鸭是一款不错的壁纸软件&#xff0c;提供简单的分类和搜索功能&#xff0c;无需注册登录即可免费使用。壁纸质量较高&#xff0c;支持将本地图片像素化&#xff0c;为用户提供多样化的壁纸选择。 大小&#xff1a;29M 下载地址&#xff1a; 百度网盘&#xff1a;https://…

对于一个需要渲染300帧的动画项目,云渲染要多久

探讨云渲染动画300帧需要多久的问题时&#xff0c;我们今天来从多个角度进行分析&#xff0c;对于一个需要渲染300帧的动画项目&#xff0c;传统的本地渲染方式可能会因为硬件限制而变得耗时且效率低下。幸运的是&#xff0c;【渲染101】云渲染技术的出现为这一问题提供了解决方…

项目活动进度计算题

六个时间参数①最早开始时间ESmax{紧前工作最早完成时间EF}&#xff08;紧前取大&#xff09; 最早完成时间EFES工期&#xff0c;从左→右计算&#xff0c;累加取大 ②最迟完成时间LFmin{紧后工作最迟开始时间LS}&#xff08;紧后取小&#xff09; 最迟开始时间LSLF-工期&am…

如何查看局域网内的浏览记录?总结五种方法,按步操作!一学就会!「管理小白须知」

如何查看局域网内的浏览记录&#xff1f; 你是否也曾为如何有效监控局域网内的浏览记录而苦恼&#xff1f; 监控局域网内电脑的浏览记录是确保员工工作效率、维护网络安全以及规范上网行为的重要手段。 别担心&#xff0c;今天我们就来聊聊这个话题&#xff0c;为你揭秘五种简…

5本地方法接口本地方法栈

什么是本地方法&#xff1f; 简单地讲&#xff0c;一个 Native Method 是一个 Java 调用非 Java 代码的接囗 在定义一个 native method 时&#xff0c;并不提供实现体&#xff08;有些像定义一个 Java interface&#xff09;&#xff0c;因为其实现体是由非 java 语言在外面实…

飞书 富文本(Markdown)

飞书机器人webhook支持Markdown格式&#xff0c;包括表格 表格 |Syntax | Description |\n|-------- | -------- |\n|Header | Title |\n|Paragraph | Text |参考 富文本&#xff08;Markdown&#xff09;

Django Admin

Django Admin模块是Django框架提供的一个功能强大且易于使用的后台管理工具&#xff0c;它允许开发者通过Web界面来管理网站的后台数据和功能。 主要功能和特点 自动生成管理界面&#xff1a;Django Admin模块可以根据模型类&#xff08;Model&#xff09;自动创建表单和列表视…

金华迪加现场大屏互动系统 mobile.do.php 任意文件上传漏洞复现

0x01 产品描述&#xff1a; ‌ 金华迪加现场大屏互动系统‌是由金华迪加网络科技有限公司开发的一款专注于增强活动现场互动性的系统。该系统设计用于提供高质量的现场互动体验&#xff0c;支持各种大型活动&#xff0c;如企业年会、产品发布会、展览展示等。其主要功能包…

中小企业项目管理软件选择指南:最适合你的工具是什么?

选择适合小团队的项目管理工具时&#xff0c;关键是要根据团队规模、工作流程、预算和功能需求来决定。对于小团队&#xff0c;通常需要简洁、易用、低成本的工具&#xff0c;同时能支持任务分配、进度跟踪、文件共享等基本功能。以下是一些适合小团队使用的免费和开源项目管理…

【C++】C++的单例模式、跟踪内存分配的简单方法

二十四、C的单例模式、跟踪内存分配的简单方法 1、C的单例模式 本小标题不是讨论C的语言特性&#xff0c;而是一种设计模式&#xff0c;用于确保一个类在任何情况下都只有一个实例&#xff0c;并提供一个全局访问点来获取这个实例。即C的单例模式。这种模式常用于资源管理&…

VMware的三种网卡模式

VMware的三种网卡模式 1 桥接模式 虚拟机当作一台物理机,直接连接你物理机所连接的路由器 物理机的网段与虚拟机的网段是一致的,并且该网络下的其他主机可以访问你的虚拟机 2 NAT模式 相当于在你的物理机里接了一个路由器,路由器下游接的是虚拟机 物理机的网段与虚拟机的网段是…

办公类提示词(上)——工作计划、工作总结、讲话稿等

什么是提示词&#xff1f; 提示词的英文是Prompt&#xff0c;是你与人工智能&#xff08;AI&#xff09;进行交流的方式。简单来说&#xff0c;提示词就是你给AI的一段文字或问题&#xff0c;AI根据这段文字或问题来生成回应或完成任务。 举个例子&#xff1a;假设你在使用一…

plt中subplot综合实战

目录 背景介绍实战 背景介绍 下面是一份贸易数据&#xff08;Prod_Trade.xlsx&#xff09;&#xff0c;需要多角度针对2012年数据进行报表分析&#xff0c;需使用subplot分格展示。Prod_Trade的数据结构包括 Date,Order_Class,Sales Transport,Trans_Cost, Region ,Category, …

Matlab 基于声学超表面的深亚波长厚度完美吸收体

传统吸声器的结构厚度与工作波长相当&#xff0c;这在低频范围的实际应用中造成了很大的障碍。我们提出了一种基于超表面的完美吸收器&#xff0c;能够在极低频区域实现声波的全吸收。该超表面具有深亚波长厚度&#xff0c;特征尺寸为k223&#xff0c;由穿孔板和卷曲共面气室组…

linux之网络子系统- 内核接收数据包以及相关实际问题

一、相关实际问题 RingBuffer是什么&#xff0c;为什么会丢包网络相关的硬中断、软中断是什么Linux里的ksoftirqd内核线程是干什么的为什么网卡开启多队列能提升网络性能tcpdump是如何工作的iptable/netfilter是在哪一层实现的tcpdump能否抓到被iptable封禁的包网络接收过程中…

QML项目实战:自定义CheckBox

目录 一.添加模块 import QtQuick.Controls 1.2 import QtQuick.Controls.Styles 1.4 import QtGraphicalEffects 1.15 二.自定义CheckBox 1.CheckBox设置 2.勾选框设置 3.标签部分 4. 状态变化处理 5.文本设置 三.效果 1.当enabled为true 2.当enabled为true 3.当…

centos7快速安装sqlserver2019

1、centos7节点安装sqlserver 1.1 下载官网的yum源 curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server-2019.repo1.2 yum安装sqlserver yum install -y mssql-server1.3 启动sqlserver服务&#xff0c;并配置密码、版…