从欧拉公式的美到旋转位置编码RoPE

2024-08-28 10:52

本文主要是介绍从欧拉公式的美到旋转位置编码RoPE,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

也许你在某些场合听说过欧拉公式,也许你干脆对数学不感冒。机缘巧合下,你点开了这篇文章,大致浏览了下然后关闭,继续为自己的工作学习忙碌。这不妨碍你暂停忙碌的脚步,欣赏她的美。
若干年后,你应该不曾记得看过这篇文章,但你会记得数学界有一个很美的公式。

1. 欧拉公式和欧拉恒等式

请添加图片描述

欧拉公式(Euler’s formula)是复分析领域的公式,它将三角函数与复指数函数关联起来,因其提出者莱昂哈德·欧拉而得名。欧拉公式提出,对任意实数 x,都存在:
e i x = cos ⁡ ( x ) + i sin ⁡ ( x ) e^{ix} = \cos(x) + i\sin(x) eix=cos(x)+isin(x)
其中 e是自然对数的底数,i是虚数单位,而 cos和 sin则是余弦、正弦对应的三角函数,参数 x则以弧度为单位。

这是一个非常美丽的公式,它将三角函数,指数函数,复数联系在了一起,是数学中的一颗明珠。

欧拉恒等式(Euler’s identity)是欧拉公式的一个特例,当 x = π 时,欧拉公式变为:
e i π + 1 = 0 e^{i\pi} + 1 = 0 e+1=0
这个公式被认为是数学中最美丽的公式之一,它将五个最重要的数学常数联系在了一起:0、1、e、i和π。

非常感谢苏剑林大神将这么漂亮公式引入到了位置编码的设计中,大家可以关注他的博客《科学空间》https://kexue.fm/, 可以学到很多东西。

2. 预备知识

为了看懂RoPE,我们需要了解一些预备知识,包括:
1)欧拉公式
2)复数/复平面
3)三角函数的几个公式

重要!!! 在你深入大量公式之前,先要了解:

  • 复平面和欧拉公式的引入,只是为了简化计算过程;
  • 欧拉公式经常在数学、物理和工程领域被如此广泛应用;
  • 整个证明过程,先考虑词向量为二维,再利用矩阵的特性轻松拓展到多维;
  • 在证明二维场景的时候,引入复平面,原因是可以这样可以使用欧拉公式获取漂亮的数学特性,来简化过程。

3. 旋转位置编码RoPE

Rotation Position Encoding

RoPE提出为了能利用上 token 之间的相对位置信息,假定 query 向量 q m q_m qm 和 key 向量 k n k_n kn之间的内积操作可以被一个函数 g g g表示,该函数 g g g的输入是词嵌入向量 x m x_m xm x n x_n xn 和它们之间的相对位置 m − n m-n mn

请添加图片描述

大胆假设,小心求证。 现在我们的目标就是找到一个合适的函数 g g g,使得 g ( x m , x n , m − n ) g(x_m, x_n, m-n) g(xm,xn,mn)能够捕捉到词向量之间的相对位置信息。

RoPE提出,在词向量是二维的情况下,将平面转化为复平面,如果我们按照如下的方式定义函数 f f f,则可以找到对应的 g g g

请添加图片描述

R e Re Re指的是复数的实数部分,更近一步,我们可以将函数 f f f定义为:

请添加图片描述

这边,不就是原来的query矩阵乘上了一个旋转矩阵吗?也就是说,加上 m m m这个位置信息后,如果使用RoPE的设计方案,就相当于将原query矩阵进行了旋转。这就是旋转的由来。

同理, f K f_K fK可以表示为:

请添加图片描述

那么,对应的 g g g函数就是:

请添加图片描述

4. 从二维到多维

在二维场景下,我们引入了复平面,是为了使用欧拉公式获取漂亮的数学特性,来简化过程。但是在多维场景下,我们可以直接使用矩阵的特性,来简化过程。将2维的RoPE推广到多维的RoPE,只需要将2维的RoPE的旋转矩阵 R R R替换为多维的旋转矩阵 R R R即可。
请添加图片描述

因为内积满足线性叠加性质,所以任意偶数维的RoPE都可以表示为二维情形拼接而成的形式。

请添加图片描述

即是在原来的 q ∗ k q*k qk矩阵的基础上,加上了一个旋转矩阵 R θ , m d R^d_{\theta,m} Rθ,md,这就是RoPE的设计思路。

在原始paper中,有一个直观的图
请添加图片描述

5.RoPE的证明

注意,现在的证明是建立在二维的基础上,二维可以用上一节的矩阵特性推广到多维。
二维的情况下,形式上我们将其转化为复平面。

按照RoPE的设计,编码后的 q , v q,v q,v和内积 < q , v > <q,v> <q,v>的形式是:
请添加图片描述

为什么上述公式满足:

请添加图片描述

首先,我们看到欧拉公式
e i x = cos ⁡ ( x ) + i sin ⁡ ( x ) e^{ix} = \cos(x) + i\sin(x) eix=cos(x)+isin(x)
则有:

请添加图片描述

我们看query矩阵,可以看到:
请添加图片描述

其中 W q W_q Wq是二维矩阵, x m x_m xm是二维向量,其乘积是一个二维向量,这边我们用 q m q_m qm表示。 q m ( 1 ) q^{(1)}_m qm(1), q m ( 2 ) q^{(2)}_m qm(2)分别表示第一维和第二维。
请添加图片描述

我们这时,需要将 q m q_m qm转化为复数形式,即将这个二维平面放到复平面上,复平面的实部是第一维(x轴),虚部是第二维(y轴)。
请添加图片描述

这时,我们可以将 f q ( x m , m ) f_q(x_m,m) fq(xm,m)表示为:
请添加图片描述

这就是两个复数的积(将复数带入)

请添加图片描述

经过简单的展开:

请添加图片描述

再重新从复平面回到实数二维平面,我们可以将上述公式表示为:

请添加图片描述

事实上这就是没有位置信息的query向量乘上了一个旋转矩阵,这就是RoPE的设计思路。

请添加图片描述

同理,我们可以得到key向量的RoPE形式:

请添加图片描述

最后,我们可以得到RoPE的内积形式:

请添加图片描述

总结

RoPE非常巧妙的借助复平面和欧拉公式,将位置信息编码到了query和key向量中,使得模型能够利用上token之间的相对位置信息。RoPE的设计思路是将query和key向量进行旋转,这就是旋转的由来。

参考

[1] 十分钟读懂旋转编码(RoPE)

[2] 让研究人员绞尽脑汁的Transformer位置编码

[3] Transformer升级之路:2、博采众长的旋转式位置编码

[4] Transformer学习笔记一:Positional Encoding(位置编码)

[5] RoFormer: Enhanced Transformer with Rotary Position Embedding

[6] GitHub: LLMForEverybody

这篇关于从欧拉公式的美到旋转位置编码RoPE的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1114563

相关文章

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

poj 2187 凸包or旋转qia壳法

题意: 给n(50000)个点,求这些点与点之间距离最大的距离。 解析: 先求凸包然后暴力。 或者旋转卡壳大法。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <s

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

POJ1269 判断2条直线的位置关系

题目大意:给两个点能够确定一条直线,题目给出两条直线(由4个点确定),要求判断出这两条直线的关系:平行,同线,相交。如果相交还要求出交点坐标。 解题思路: 先判断两条直线p1p2, q1q2是否共线, 如果不是,再判断 直线 是否平行, 如果还不是, 则两直线相交。  判断共线:  p1p2q1 共线 且 p1p2q2 共线 ,共线用叉乘为 0  来判断,  判断 平行:  p1p

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk

form表单提交编码的问题

浏览器在form提交后,会生成一个HTTP的头部信息"content-type",标准规定其形式为Content-type: application/x-www-form-urlencoded; charset=UTF-8        那么我们如果需要修改编码,不使用默认的,那么可以如下这样操作修改编码,来满足需求: hmtl代码:   <meta http-equiv="Conte

Linux Centos 迁移Mysql 数据位置

转自:http://www.tuicool.com/articles/zmqIn2 由于业务量增加导致安装在系统盘(20G)磁盘空间被占满了, 现在进行数据库的迁移. Mysql 是通过 yum 安装的. Centos6.5Mysql5.1 yum 安装的 mysql 服务 查看 mysql 的安装路径 执行查询 SQL show variables like

PDFQFZ高效定制:印章位置、大小随心所欲

前言 在科技编织的快节奏时代,我们不仅追求速度,更追求质量,让每一分努力都转化为生活的甜蜜果实——正是在这样的背景下,一款名为PDFQFZ-PDF的实用软件应运而生,它以其独特的功能和高效的处理能力,在PDF文档处理领域脱颖而出。 它的开发,源自于对现代办公效率提升的迫切需求。在数字化办公日益普及的今天,PDF作为一种跨平台、不易被篡改的文档格式,被广泛应用于合同签署、报告提交、证书打印等各个