RoPE论文阅读笔记

news/2024/12/12 14:34:54/文章来源:https://www.cnblogs.com/lipoicyclic/p/18602438

复数几何意义:https://zhuanlan.zhihu.com/p/646598747

https://zhuanlan.zhihu.com/p/359502624

Motivation & Abs

作者提出了旋转位置编码( Rotary Position Embedding, RoPE) 的新方法来有效利用位置信息。RoPE使用旋转矩阵对绝对位置进行编码,同时在自注意公式中纳入了明确的相对位置依赖性。RoPE 实现了序列长度的灵活性、随着相对距离的增加而衰减的标记间依赖性,以及为线性自注意力配备相对位置编码的能力。

Background

\(\mathbb{S}_N=\{w_i\}_{i=1}^N\)为N个输入token构成的序列,对应的word embedding表示为\(\mathbb{E}_N=\{\textbf{x}_i\}_{i=1}^N\),其中\(\textbf{x}_i\in \mathbb{R}^d\)为d维的词嵌入,不包含任何的位置信息。自注意力首先将位置信息引入词嵌入,之后将其变为q、k、v:

\(\textbf{q}_m=f_q(\textbf{x}_m, m),\textbf{k}_n=f_k(\textbf{x}_n,n),\textbf{v}_n=f_v(\textbf{x}_n,n)\),其中\(\textbf{q}_m,\textbf{k}_n,\textbf{v}_n\)通过\(f\)函数引入了\(m\)\(n\)的位置信息。

自注意力计算:

截屏2024-12-11 14.44.09

现有的基于transformer的位置编码方法旨在找到一个合适的函数\(f\)

Method

Formulation

基于 Transformer 的语言建模通常通过自注意机制来利用单个标记的位置信息。\(\textbf{q}_m^{\top}\textbf{k}_n\)通常支持在不同位置的token之间进行信息的传递。想要引入相对位置信息,需要一个函数\(g\)计算\(\textbf{q}_m\)\(\textbf{k}_n\)的内积,函数的输入为\(\textbf{x}_m\)\(\textbf{x}_n\)以及其相对位置\(m - n\)

\(⟨f_q(\textbf{x}_m,m),f_k(\textbf{x}_n,n⟩=g(\textbf{x}_m,\textbf{x}_n,m-n)\)

最终目标是找到一种等效的编码机制来求解\(f_q(\textbf{x}_m,m)\)以及\(f_k(\textbf{x}_n,n)\)以符合上述关系。

Rotary position embedding

作者首先分析了\(d=2\)时的一个简单例子。这种情况下,作者使用了向量在2D平面的几何性质以及其复数性质从而证明我们想要的解为:

\[f_q(\textbf{x}_m,m)=(\textbf{W}_q\textbf{x}_m)e^{im\theta} \\ f_k(\textbf{x}_n,n)=(\textbf{W}_k\textbf{x}_n)e^{in\theta} \\ g(\textbf{x}_m,\textbf{x}_n,m-n)={\rm Re}[(\textbf{W}q\textbf{x}_m)(\textbf{W}_k\textbf{x}_n)^*e^{i(m-n)\theta} \]

其中\({\rm Re}[\cdot]\)为复数的实部,\((\textbf{W}_k\textbf{x}_k)^*\)\((\textbf{W}_k\textbf{x}_k)\)的共轭复数,\(\theta\in \mathbb{R}\)为预设的非零常数。通过矩阵乘法表示:

截屏2024-12-11 15.13.08

其中\((\textbf{x}_m^{(1)},x_m^{(2)})\)为2D平面的坐标。具体来说,其实就是将通过\(W\)变换后的embedding旋转其位置索引的角度倍数。

为了将上述算法扩展为更一般的形式(\(x_i\in\mathbb{R}^d\)\(d\)为偶数),作者将\(d\)维空间分成了两个大小为\(d/2\)的子空间,利用内积的线性性对其进行组合:

\(f_{\{q,k\}}(\textbf{x}_m,m)=\textbf{R}^d_{\Theta,m}\textbf{W}_{\{q,k\}}\textbf{x}_m\),其中:

截屏2024-12-11 15.28.52

\(\textbf{R}^d_{\Theta,m}\)为旋转矩阵,\(\Theta=\{\theta_i=10000^{-2(i-1)/d},i\in [1,2,...,d/2]\}\)

截屏2024-12-11 15.37.56

内积变为:

\(\textbf{q}_m^{\top} \textbf{k}_n=(\textbf{R}^d_{\Theta,m}\textbf{W}_q\textbf{x}_m)^{\top}(\textbf{R}^d_{\Theta,n}\textbf{W}_k \textbf{x}_n)=\textbf{x}^{\top}\textbf{W}_q\textbf{R}^d_{\Theta,n-m}\textbf{W}_k\textbf{x}_n\)

值得注意的是\(\textbf{R}_{\Theta}^d\)是一个正交矩阵,保证了编码位置信息过程中的稳定性(正交矩阵不会改变位置信息的相对关系?)。

Properties of RoPE

Long-term decay

\(\theta_i=10000^{-2i/d}\)可以保证睡着相对位置距离的增加,内积逐渐衰减。

RoPE with linear attention

自注意力可以用更一般的形式重写:

截屏2024-12-11 16.01.33

原始 self-attention 应该计算每对 token 的 query 和 key 的内积,引入了二次复杂度。线性注意力可以表示为:

截屏2024-12-11 16.05.19

复杂度为\(O(n\times d^2)\)。引入RoPE:

截屏2024-12-11 16.07.43

Computational efficient realization of rotary matrix multiplication

截屏2024-12-12 00.33.49

代码实现

TODO

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024-12-12 Respeak 4mic 安装在Raspberry Debian 12 bookworm

2024-12-12 Respeak 4mic 安装在Raspberry Debian 12 bookworm 官方驱动不支持后续的linux内核,旧版本不太好用,所以不能用官方的版本驱动大致步骤可以参照官网1. 驱动安装 先查看内核 是6.6 uname -r sudo apt-get update git clone https://github.com/HinTak/seeed-voicec…

【推荐算法】单目标精排模型——Wide Deep

key word: Google应用商店 Motivation: 作者认为一个好的推荐模型需要包含memorization和generalization。memorization主要负责记忆法频繁出现的特征项;generalization主要负责挖掘新的特征组合;截至2016年,作者认为目前的基于神经网络的推荐模型会过度泛化并推荐相关性较…

纷享销客荣获2024产业互联网百强“千峰奖”

12月6日,亿邦产业互联网峰会“2024产业互联网”千峰奖正式揭晓。本届千峰奖以“供应链变革与AI落地”为主题,聚焦数字供应链、产业数字科技、数智品牌三大细分赛道。 纷享销客作为国内领先的数字化营销技术提供商,凭借扎实的基本面、资本的高度认可、良好的商业价值获得评审…

转载:【AI系统】内存分配算法

本文将介绍 AI 编译器前端优化部分的内存分配相关内容。在 AI 编译器的前端优化中,内存分配是指基于计算图进行分析和内存的管理,而实际上内存分配的实际执行是在 AI 编译器的后端部分完成的。本文将包括三部分内容,分别介绍模型和硬件的内存演进,内存的划分与复用好处,节…

蓝桥杯嵌入式模板创建(STM32 CubeMx简单使用教程)

本人在备赛22年第十二届蓝桥杯嵌入式时所记录的笔记,可能有错漏,欢迎指出问题。当时使用的开发板为蓝桥杯新板STM32G431RBT6,实际上使用STM32F103芯片也可以通过STM32CubeMX快速上手HAL库编程蓝桥杯嵌入式新板模板创建&简单经验分享补充在最前: 以下原文是22年还未毕业…

安川机器人U轴减速机 HW9381465-C维修具体细节

安川机器人U轴减速机 HW9381465-C的维修是一个相对复杂的过程,涉及到多个部件的检查、维修和更换。以下是一些具体细节: 1、故障诊断:对安川机器人U轴减速机 HW9381465-C进行彻底的检查,以确定故障的具体位置和原因。可能出现故障的部件包括齿轮、轴承、油封和润滑系统等…

RNN模型的训练和推理以及成员推断攻击的实现

循环神经网络(RNN) 2024年7月20日更新 在此教程中,我们将对循环神经网络RNN模型及其原理进行一个简单的介绍,并实现RNN模型的训练和推理,目前支持MNIST、FashionMNIST和CIFAR-10等数据集,并给用户提供一个详细的帮助文档。同时,本项目还将实现循环神经网络的模型成员推理攻…

《Django 5 By Example》阅读笔记:p493-p520

《Django 5 By Example》学习第 17 天,p493-p520 总结,总计 28 页。 一、技术总结 1.internationalization(国际化) vs localization(本地化) (1)18n,L10n,g11n 以前总觉得这两个缩写好难记,今天仔细看了下维基百科,"i18n" 中的 i 代表 “internationalization…

图模型的训练和推理以及成员推理攻击的实现

graph_model 2024年10月14日更新 在此教程中,我们将对深度学习中的图模型及其原理进行一个简单的介绍,并实现一种图模型的训练和推理,至少支持三种数据集,目前支持数据集有:Cora、CiteSeer、PubMed等,并给用户提供一个详细的帮助文档。 目录 基本介绍目前存在的问题 现有…

一套以用户体验出发的.NET8 Web开源框架

前言 今天大姚给大家分享一套以用户体验出发的.NET8 Web开源框架:YiFramework。 项目介绍 YiFramework是一个基于.NET8 + Abp.vNext + SqlSugar 的DDD领域驱动设计后端开源框架,前端使用Vue3,项目架构模式三层架构\DDD领域驱动设计,内置RBAC权限管理、BBS论坛社区系统 以用…

链表的一步步实现(需有一部分c语言基础)【缓慢更新中

链表的一步步实现(需有一部分c语言基础) (由于本人上课实在没学懂链表的具体实现步骤,于是写下这篇博客记录学习过程,有兴趣的新手也可以跟着学习 1.认识链表的结构&创建简单静态链表并输出数据 Q:什么是链表? A:链表是由一系列节点组成,每个节点包含两个域,一个…

VGGNet模型的训练和推理

VGGNet 2024年5月10日更新 在此教程中,我们将对VGGNet模型及其原理进行一个简单的介绍,并实VGGNet模型的训练和推理,目前支持数据集有:MNIST、fashionMNIST、CIFAR10等,并给用户提供一个详细的帮助文档。 目录 基本介绍VGGNett描述 创新点 网络结构 VGGNet的特点VGGNet实现…