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

news2024/9/24 11:28:30

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

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

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

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

相关文章

Java基础(2)- Java环境

目录 一、jvm和跨平台 二、JDK 和 JRE 三、JDK的下载和安装 四、配置环境变量 一、jvm和跨平台 1.jvm&#xff08;Java虚拟机&#xff09;类似于翻译官&#xff1a;java运行程序的假想计算机&#xff0c;主要运行java程序。 2.跨平台&#xff1a;指不同操作系统。 3.关系…

网上买大流量卡要问哪些问题?几个常见的问与答!

大家都比较关注的几个常见的流量卡问题&#xff0c;答案来喽&#xff01; 这几个问题特别适合刚刚接触流量卡的朋友&#xff0c;如果你在购买流量卡时不知道该了解什么&#xff0c;该向商家问什么的时候&#xff0c;不妨问问这几个问题吧&#xff0c;接下来&#xff0c;这篇文…

python 实现square root平方根算法

square root平方根算法介绍 计算平方根&#xff08;Square Root&#xff09;的算法有多种&#xff0c;这里介绍几种常见的方法&#xff1a; 牛顿迭代法&#xff08;Newton’s Method&#xff09; 牛顿迭代法是一种在实数域和复数域上近似求解方程的方法。对于平方根问题&…

home kit认证

在当今快节奏的生活中&#xff0c;智能家居技术正不断改变我们的居住体验。home kit 将这一领域提升到了全新的高度。它不仅让智能家居设备的管理变得更为简单直观&#xff0c;还通过高水平的安全性和互操作性&#xff0c;为用户提供了无缝的体验。 一、什么是home kit home k…

CentOS7将yum源更换为国内源保姆级教程

在 CentOS 7 系统中更改 YUM 源到国内源可以显著提高软件包的下载速度&#xff0c;因为国内源服务器通常距离中国大陆用户更近。以下是一个详细的步骤来完成这一操作&#xff1a; 步骤 1: 备份原有配置 首先&#xff0c;备份原系统中的 yum 配置文件以防万一&#xff1a; BA…

红黑树模拟实现STL中的map与set——C++

1.红黑树的迭代器 &#xff08;本篇代码基于我写的红黑树的实现这篇博客&#xff09; 迭代器的好处是可以方便遍历&#xff0c;是数据结构的底层实现与用户透明。如果想要给红黑树增加迭代器&#xff0c;需要考虑以下问题&#xff1a; begin()与end()&#xff1a; STL明确规定&…

无人机侦测:光电识别追踪设备(双光)技术详解

无人机侦测中的光电识别追踪设备&#xff08;双光&#xff09;技术&#xff0c;是一种高效且精准的目标识别与追踪手段&#xff0c;特别适用于无人机平台。以下是对该技术的详细解析&#xff1a; 一、技术概述 光电识别追踪设备&#xff08;双光&#xff09;结合了可见光和红…

企业微信iPad协议:自定义接入需求,为行业提供新助力

在当今数字化时代&#xff0c;企业如何有效连接客户、提升营销效率成为了一个重要议题。iPad协议&#xff0c;或称企业微信协议&#xff0c;作为基于微信iPad协议的智能接口服务&#xff0c;优势及其在企业营销中的应用。 什么是iPad协议&#xff1f; iPad协议是一种智能控制…

<数据集>塑料瓶识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;3331张 标注数量(xml文件个数)&#xff1a;3331 标注数量(txt文件个数)&#xff1a;3331 标注类别数&#xff1a;1 标注类别名称&#xff1a;[bottle] 使用标注工具&#xff1a;labelImg 标注规则&#xff1a;对…

Swift concurrency 2 — async await的理解与使用

async / await 将函数标记为async会告诉Swift编译器该函数是异步执行的&#xff0c;是可以挂起的。await关键字标记了这些挂起点。当一个函数在await调用时被挂起时&#xff0c;它所执行的线程可以用来执行其他工作。当等待的工作完成时&#xff0c;运行时可以恢复函数的执行。…

网络实用工具

ping 测试与目标主机的连通性 显示解释www.a.shifen.com (14.215.177.39)ping目标主机的域名和IP&#xff08;ping会自动将域名转换为IP&#xff09;56(84)不带包头的包大小和带包头的包大小icmp_seq1ping序列,从1开始如果数字不是顺序递增即有丢包ttl54数据包剩余生存时间, 默…

Python | Leetcode Python题解之第378题有序矩阵中第K小的元素

题目&#xff1a; 题解&#xff1a; class Solution:def kthSmallest(self, matrix: List[List[int]], k: int) -> int:n len(matrix)def check(mid):i, j n - 1, 0num 0while i > 0 and j < n:if matrix[i][j] < mid:num i 1j 1else:i - 1return num > …

MS sqlserver备份软件 SQLBackupAndFTP

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目…

Linux—— 配置ssl安全证书

一、实验设计 二、实验配置过程 [studentbogon ~]$ su - root Password: [rootbogon ~]# dnf -y install nginx [rootbogon ~]# vim /etc/selinux/config [rootbogon ~]# setenforce 0 [rootbogon ~]# systemctl stop firewalld 清空防火墙规则 [rootbogon ~]# iptables -F ^C…

CHARLS数据库挖掘系列教程(1)---数据库下载

CHARLS 是一项具备中国大陆 45 岁及以上人群代表性的追踪调查&#xff0c;旨在建设一个高质量的公共微观数据库&#xff0c;采集的信息涵盖社会经济状况和健康状况等多维度的信息&#xff0c;以满足老龄科学研究的需要。 为利用国际上最佳的数据采集方式&#xff0c;并确保研究…

YOLOv8实例分割推理流程及Python代码

1.YOLOv8_Seg推理流程 2.YOLOv8_Seg推理代码 3.全部代码 """ yolov8:目标检测推理代码 python """ import torch import cv2 import numpy as np import onnxruntime as ort import os import torch.nn.functional as F def xywh2xyxy(x):"…

【K8S 基本概念】Kubernets的架构和核心概念及集群搭建

一、Kubernets 1.作用&#xff1a;用于自动部署扩展以及管理容器化部署的应用程序&#xff0c;半开源&#xff0c;k8s的底层是基于谷歌go语言开发的&#xff0c;负责自动化运维管理多个容器化的应用的集群&#xff0c;容器编排框架的工具。现在使用的版本1.18-1.24&#xff0c…

开放式耳机怎么戴?佩戴舒适在线的几款开放式耳机分享

开放式耳机的佩戴方式与传统的入耳式耳机有所不同&#xff0c;它采用了一种挂耳式的设计&#xff0c;提供了一种新颖的佩戴体验&#xff0c;以下是开放式耳机的佩戴方式。 1. 开箱及外观&#xff1a;首先&#xff0c;从包装盒中取出耳机及其配件&#xff0c;包括耳机本体、充电…

java-Mybatis框架02

1.#{} 和${}区别 #{} 是占位符&#xff0c;是采用编译方式向sql中传值&#xff0c;可以防止sql注入&#xff0c;如果往sql中传值&#xff0c;使用#{}${} 是将内容直接拼接到sql语句中&#xff0c;一般不用于向sql中传值&#xff0c;一般用于向sql中动态传递列名。区别&#xff…

电控专业课程已开放

凌鸥学园旨在为电机控制爱好者提供学习交流成长平台&#xff0c;缓解电控行业人才缺口扩大趋势&#xff0c;共同打造繁荣行业生态。我们将全面整合LKS MCU相关资料&#xff0c;包括开发环境、应用笔记、教学视频、学习指导等&#xff0c;并设有专业课程。 通过凌鸥学园的专业体…