旋转位置编码的理解

news2024/12/15 22:02:29

这里写目录标题

高维情况下的旋转位置编码

当词向量的维度很大时(比如 128 维、256 维,甚至 512 维),旋转位置编码仍然可以起作用。接下来,我会一步步解释它是如何在高维空间中工作的,以及如何结合公式来理解。


1. 词向量维度很大的概念

假设我们有一个 4 维的词向量:
v = ( x 1 , y 1 , x 2 , y 2 ) v = (x_1, y_1, x_2, y_2) v=(x1,y1,x2,y2)

对于高维词向量,我们可以将它的维度分成若干组,每组包含两个元素(即一对坐标),然后对每一组应用旋转位置编码。

例子

  • 一个 4 维的向量可以分成两组: ( x 1 , y 1 ) (x_1, y_1) (x1,y1) ( x 2 , y 2 ) (x_2, y_2) (x2,y2)
  • 一个 8 维的向量可以分成四组: ( x 1 , y 1 ) , ( x 2 , y 2 ) , ( x 3 , y 3 ) , ( x 4 , y 4 ) (x_1, y_1), (x_2, y_2), (x_3, y_3), (x_4, y_4) (x1,y1),(x2,y2),(x3,y3),(x4,y4)

2. 旋转位置编码在高维向量上的公式

对于每一组 ( x i , y i ) (x_i, y_i) (xi,yi),我们使用相同的旋转公式:

x i ′ = x i ⋅ cos ⁡ ( θ ) − y i ⋅ sin ⁡ ( θ ) y i ′ = x i ⋅ sin ⁡ ( θ ) + y i ⋅ cos ⁡ ( θ ) \begin{aligned} x_i' &= x_i \cdot \cos(\theta) - y_i \cdot \sin(\theta) \\ y_i' &= x_i \cdot \sin(\theta) + y_i \cdot \cos(\theta) \end{aligned} xiyi=xicos(θ)yisin(θ)=xisin(θ)+yicos(θ)

其中:

  • ( x i , y i ) (x_i, y_i) (xi,yi) 是向量中第 i i i 组的坐标。
  • θ \theta θ 是根据词的位置计算出的旋转角度。

3. 实际例子:4 维词向量

假设我们有一个 4 维的词向量:
v = ( 1 , 0 , 0 , 1 ) v = (1, 0, 0, 1) v=(1,0,0,1)

我们把它分成两组:

  • 第一组: ( 1 , 0 ) (1, 0) (1,0)
  • 第二组: ( 0 , 1 ) (0, 1) (0,1)

假设我们对第 1 个位置的词使用角度 (\theta = 30^\circ),我们来计算旋转后的向量。

第一组 ( 1 , 0 ) (1, 0) (1,0) 的旋转

x 1 ′ = 1 ⋅ cos ⁡ ( 3 0 ∘ ) − 0 ⋅ sin ⁡ ( 3 0 ∘ ) = 0.866 y 1 ′ = 1 ⋅ sin ⁡ ( 3 0 ∘ ) + 0 ⋅ cos ⁡ ( 3 0 ∘ ) = 0.5 \begin{aligned} x_1' &= 1 \cdot \cos(30^\circ) - 0 \cdot \sin(30^\circ) = 0.866 \\ y_1' &= 1 \cdot \sin(30^\circ) + 0 \cdot \cos(30^\circ) = 0.5 \end{aligned} x1y1=1cos(30)0sin(30)=0.866=1sin(30)+0cos(30)=0.5

旋转后的第一组是 ((0.866, 0.5))。

第二组 ((0, 1)) 的旋转

x 2 ′ = 0 ⋅ cos ⁡ ( 3 0 ∘ ) − 1 ⋅ sin ⁡ ( 3 0 ∘ ) = − 0.5 y 2 ′ = 0 ⋅ sin ⁡ ( 3 0 ∘ ) + 1 ⋅ cos ⁡ ( 3 0 ∘ ) = 0.866 \begin{aligned} x_2' &= 0 \cdot \cos(30^\circ) - 1 \cdot \sin(30^\circ) = -0.5 \\ y_2' &= 0 \cdot \sin(30^\circ) + 1 \cdot \cos(30^\circ) = 0.866 \end{aligned} x2y2=0cos(30)1sin(30)=0.5=0sin(30)+1cos(30)=0.866

旋转后的第二组是 ((-0.5, 0.866))。

旋转后完整的 4 维向量

旋转后,我们得到新的 4 维向量:
v ′ = ( 0.866 , 0.5 , − 0.5 , 0.866 ) v' = (0.866, 0.5, -0.5, 0.866) v=(0.866,0.5,0.5,0.866)


4. 更高维的情况

如果词向量是 256 维的,我们可以将它分成 128 组,每组包含两个元素。然后对这 128 组应用相同的旋转公式,使用相同的旋转角度 (\theta),这样整个向量就被编码了位置信息。

为什么要这样分组?
  • 旋转操作只能在二维平面中进行,所以我们把高维向量拆分成多个二维小组,每组分别进行旋转。
  • 这种方法能够让整个高维向量保留位置信息,同时保持向量的结构。

5. 旋转角度 θ \theta θ的计算

对于不同位置的词,旋转角度 θ \theta θ 会根据位置 p p p 和维度索引 i i i来计算。例如:

θ p , i = p ⋅ base 2 i d \theta_{p, i} = p \cdot \text{base}^\frac{2i}{d} θp,i=pbased2i

其中:

  • p p p 是词的位置(比如第 1 个词、第 2 个词等)。
  • base \text{base} base 是一个常数,比如 10000。
  • d d d是词向量的总维度。
  • i i i 是当前维度的索引。

这种方法让不同位置的词向量以不同的角度旋转,确保位置编码在高维空间中有效。


6. 旋转位置编码的优点

  1. 适合高维向量
    通过将高维向量分成多个二维组,旋转位置编码可以轻松应用到高维向量中。

  2. 灵活且连续
    旋转操作是平滑和连续的,可以自然地表示不同位置的变化。

  3. 提升模型效果
    在许多自然语言处理任务中,旋转位置编码比传统的固定位置编码效果更好,尤其是在处理长文本或复杂句子时。


总结

  1. 高维向量 可以分成多个二维组,每组进行旋转。
  2. 旋转公式
    x i ′ = x i ⋅ cos ⁡ ( θ ) − y i ⋅ sin ⁡ ( θ ) y i ′ = x i ⋅ sin ⁡ ( θ ) + y i ⋅ cos ⁡ ( θ ) \begin{aligned} x_i' &= x_i \cdot \cos(\theta) - y_i \cdot \sin(\theta) \\ y_i' &= x_i \cdot \sin(\theta) + y_i \cdot \cos(\theta) \end{aligned} xiyi=xicos(θ)yisin(θ)=xisin(θ)+yicos(θ)
  3. 旋转角度 θ \theta θ 由词的位置和向量的维度共同决定。
  4. 优点:适合高维、灵活、效果好。

这样,模型就能在高维空间中更好地理解词的顺序信息。

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

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

相关文章

论文概览 |《Urban Analytics and City Science》2022.11 Vol.49 Issue.9

本次给大家整理的是《Environment and Planning B: Urban Analytics and City Science》杂志2022年11月第49卷第9期的论文的题目和摘要,一共包括19篇SCI论文! 论文1 On economic and urban growth 经济发展与城市增长 【摘要】 The dominant imperativ…

软件安装不成功,一直出现“chrome_elf.dll丢失”问题是什么原因?“chrome_elf.dll丢失”要怎么解决和预防?

软件安装遇阻:“chrome_elf.dll丢失”问题全解析与解决方案 在软件安装与运行的过程中,我们时常会遇到各式各样的错误提示,其中“chrome_elf.dll丢失”便是较为常见的一种。这个错误不仅阻碍了软件的正常安装,也给用户带来了不小…

04面向对象篇(D4_OOT(D1_OOT - 面向对象测试))

目录 一、 面向对象影响测试 1. 封装性影响测试 2. 继承性影响测试 3. 多态性影响测试 二、 面向对象测试模型 三、 面向对象分析测试 1. 对象测试 2. 结构测试 3. 主题测试 4. 属性和实例关联测试 5. 服务和消息关联测试 四、面向对象设计测试 1. 对认定类测试 …

java之静态变量和方法(类变量、类方法)

1 类变量 1.1 简要介绍 由一个简单的程序引出: public class Example1 {int n;static int num 10; //有 static 修饰//此时 num 即为一个类变量(静态变量),static 表示静态的//这个变量的最大特点是,它会被 Exampl…

朗致面试---IOS/安卓/Java/架构师

朗致面试---IOS/安卓/Java/架构师 一、面试概况二、总结三、算法题目参考答案 一、面试概况 一共三轮面试: 第一轮是逻辑行测,25道题目,类似于公务员考试题目,要求90分钟内完成。第二轮是技术面试,主要是做一些数据结…

五、网络层:控制平面,《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》

目录 一、导论 二、路由选择算法 2.1 路由(route)的概念 2.2 网络的图抽象 2.2.1 边和路由的代价 2.2.2 最优化原则 2.3 路由的原则 2.4 路由选择算法的分类 2.5 link state 算法 2.5.1 LS路由工作过程 2.5.2 链路状态路由选择(lin…

音视频入门基础:MPEG2-TS专题(16)——PMT简介

一、引言 PMT(Program Map Table)与PAT表成对出现,其PID由PAT表给出。通过PMT表可以得到该节目包含的视频和音频信息,从而找到音视频流: 二、PMT表中的属性 根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第79页&#x…

结构变量的占用多少个字节

1、在linux中,这种写法比较清晰 struct gpio_led_data { u8 can_sleep; //如果定义了结构变量,则该成员占用1个字节 u8 blinking; //如果定义了结构变量,则该成员占用1个字节 }; struct gpio_leds_priv { int num_leds; //如…

网页端web内容批注插件:

感觉平时每天基本上90%左右的时间都在浏览器端度过,按理说很多资料都应该在web端输入并且输出,但是却有很多时间浪费到了各种桌面app中,比如说什么notion、语雀以及各种笔记软件中,以及导入到ipad的gn中,这些其实都是浪…

递归问题(c++)

递归设计思路 数列递归 : 如果一个数列的项与项之间存在关联性,那么可以使用递归实现 ; 原理 : 如果一个函数可以求A(n),那么该函数就可以求A(n-1),就形成了递归调用 ; 注意: 一般起始项是不需要求解的,是已知条件 这就是一个典型…

分布式 窗口算法 总结

前言 相关系列 《分布式 & 目录》《分布式 & 窗口算法 & 总结》《分布式 & 窗口算法 & 问题》 参考文献 《【算法】令牌桶算法》 固定窗口算法 简介 固定窗口算法是最简单的流量控制算法。固定窗口算法的核心原理是将系统的生命周期划分为一个个…

Linux shell的七大功能 --- history

1.直接输入“history” 这个命令可以显示出曾经使用过的命令(最近时间的500条) history 2.“history”命令也可以搭配其他命令一起使用。 例:history | grep "vim",找出所有包含“vim”的记录; 也可以搭配…

C# 探险之旅:第九节 - 循环(for):无限循环的魔法轮盘!

嘿,勇敢的探险家们,欢迎回到C#的神秘世界!在这一节里,我们将踏上一场关于循环的奇妙冒险,特别是那个能带我们无限次探险的“for循环”!准备好了吗?让我们一起揭开for循环的神秘面纱,…

基于回溯法解决八皇后问题+以位运算方法优化n皇后问题(算法与数据结构期末设计)

文章目录 基于回溯法解决八皇后问题以位运算方法优化n皇后问题1. 八皇后问题问题描述2.回溯法求八皇后(n皇后)问题①由四皇后问题引入②皇后的占位问题③皇后的放置过程④放置过程中的问题⑤回溯算法核心⑥回溯算法的求解过程⑦验证算法和代码实现LeetCo…

python学opencv|读取图像(九)用numpy创建黑白相间灰度图

【1】引言 前述学习过程中,掌握了用numpy创建矩阵数据,把所有像素点的BGR取值设置为0,然后创建纯黑灰度图的方法,具体链接为: python学opencv|读取图像(八)用numpy创建纯黑灰度图-CSDN博客 在…

若依实现图片上传时自动添加水印

文章目录 总体思路1. 修改通用上传方法2. 去除文件路径前两级目录3. 添加水印方法运行效果总结 为了解决图盗用,并有效保护图片版权,若依项目需要实现一个功能:上传图片时,自动在图片上添加水印。这不仅可以有效防止盗用&#xff…

[C#与C++交互] 跨进程通信NamedPipes

目录 1、前言 2、什么是命名管道? 3、实现步骤 4、示例代码 4.1 C 服务器代码 4.2 C# 客户端代码 5、运行步骤 6、注意事项 7、应用场景 8、优缺点 9、总结 1、前言 在 C# 和 C 应用程序之间进行数据交换时,命名管道(Named Pipes…

ubuntu+ros新手笔记(三)

系统ubuntu22.04 ros2 humble 1. 设置ubuntu终端字体大小 点击Terminal右上角的三条横线—>Preferences—>Unnamed—>Text—>勾选Custom font—>点击右侧的字号(我的显示的是12)—>最下方Size处设置字号大小—>Select—>设置完…

使用echarts实现3d柱状图+折线图

以下代码有问题请直接问国内直连GPT/Claude HTML 需要注意threeDchart一定要设置宽度高度&#xff0c;不然图不显示,然后echarts版本不要太低&#xff0c;不然也不显示 <div id"threeDchart" class"threeDchart"></div>js set3DBarChart2(dat…

蓝桥杯新年题解 | 第15届蓝桥杯迎新篇

蓝桥杯新年题解 | 第15届蓝桥杯迎新篇 2024年的蓝桥杯即将拉开序幕&#xff01;对于许多编程爱好者来说&#xff0c;这不仅是一次展示自我能力的舞台&#xff0c;更是一次学习和成长的机会。作为一名大一新生的小蓝&#xff0c;对蓝桥杯充满了期待&#xff0c;但面对初次参赛的…