旋转位置编码的理解

这里写目录标题

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

当词向量的维度很大时(比如 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.mzph.cn/diannao/63960.shtml

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

相关文章

uni-app之web-view组件 postMessage 通信【跨端开发系列】

🔗 uniapp 跨端开发系列文章:🎀🎀🎀 uni-app 组成和跨端原理 【跨端开发系列】 uni-app 各端差异注意事项 【跨端开发系列】uni-app 离线本地存储方案 【跨端开发系列】uni-app UI库、框架、组件选型指南 【跨端开…

机器学习辅助天线性能极限突破

电磁超构表面与天线技术的结合离不开三个尺度下对三个方面的考虑,即微观的单元、介观的排布、宏观的性能这三个尺度的分析、综合与调控。在单元设计层面,目前主要依靠经验和大规模数值迭代,耗时长、成功率不稳定、通用性较差;在阵…

如何持续优化呼叫中心大模型呼入机器人的性能?

如何持续优化呼叫中心大模型呼入机器人的性能? 原作者:开源呼叫中心FreeIPCC,其Github:https://github.com/lihaiya/freeipcc 持续优化呼叫中心大模型呼入机器人的性能是一个复杂而细致的过程,它涉及到数据、模型结构…

Deveco报错Only files in a module can be previewed

创建工程后需要看看预览的效果,却出现了这个错误 到Index.ets文件下重新构建工程 详细可以查询 鸿蒙报错(Only files in a module can be previewed)

安装Python库

安装Python库 一、pip安装参数--no-deps 更换下载源,一劳永逸 二、conda下载 一、pip安装 换源安装并且信任该下载源 pip install pipenv -i http://pypi.douban.com/simple --trusted-host pypi.douban.com参数 –no-deps ​ 有些 packages 会依赖一些其它的 p…

uniappp配置导航栏自定义按钮(解决首次加载图标失败问题)

1.引入iconfont的图标,只保留这两个文件 2.App.vue引入到全局中 import "./static/fonts/iconfont.css"3.pages.json中配置text为图标对应的unicode {"path": "pages/invite/invite","style": {"h5": {"…

19. 【.NET 8 实战--孢子记账--从单体到微服务】--记账模块--收支记录

在本篇文章中,我们将一起编写孢子记账的收支记录功能(CURD),同样我们只列出一个具体功能的实现,剩下的功能由读者实现。 一、 需求 需求如下: 编号需求说明1新增记录1.记录内容包括转换前金额、转换后金…

ubuntu22.04 使用crash

文章目录 前言一、apt 安装dbgsym vnlinux二、使用.ddeb包安装dbgsym vnlinux三、dbgsym发行版四、crash调试参考资料 前言 最近在适配 ubuntu系统,记录一下其crash的安装。 一、apt 安装dbgsym vnlinux # echo "deb http://ddebs.ubuntu.com $(lsb_release…

Edge SCDN 边缘安全加速有什么用?

Edge SCDN是最新推出的边缘安全加速服务,它是一种融合了安全防护和内容分发加速功能的网络服务技术,通过在网络边缘部署服务器节点,来优化内容的传输和用户的访问体验,同时保障网络安全。 抵御 DDoS 攻击: Edge SCDN …

EDA - Spring Boot构建基于事件驱动的消息系统

文章目录 概述事件驱动架构的基本概念工程结构Code创建事件和事件处理器创建事件总线创建消息通道和发送逻辑创建事件处理器消息持久化创建消息发送事件配置 Spring Boot 启动类测试消息消费运行项目 概述 在微服务架构和大规模分布式系统中,事件驱动架构&#xff…

智能GitHub Copilot副驾驶®提示和技巧

简介 智能 GitHub Copilot 副驾驶 代表了开发者历史上的一个重要里程碑工具。它象征着人工智能辅助编程新时代的开始,它显着提高了开发人员的生产力,提高了代码质量,并且还对开发团队的整体福祉产生了积极影响。随着智能 GitHub Copilot 副驾…

CAD C# 批量替换当前图中块、标注

本案例功能为选择当前文档中一个块(旧块),然后选择新图元(新块),运行插件后新块将替换图中所有的旧块。 效果如下: public static class Class1{//选取对象替换块定义[CommandMethod("TT&…

java 缓存篇2

缓存的部署方式 单机主从哨兵集群 特性主从(Master-Slave)哨兵(Sentinel)集群(Cluster)数据分片不支持不支持支持,基于 slot 进行水平分片高可用性部分支持(手动故障转移&#xff…

SpringBoot快速使用

一些名词的碎碎念: 1> 俩种网络应用设计模式 C/S 客户端/服务器 B/S 浏览器/服务器 俩者对比: 2> 集群和分布式的概念 集群: 分布式: 例子: 一个公司有一个人身兼多职 集群: 招聘N个和上面这个人一样身兼多职 分布式: 招聘N个人,分担上面这个人的工作,进行工作的拆分. 工…

苹果公司即将为iPhone和智能家居改用自主研发的蓝牙和Wi-Fi芯片

美股快讯:苹果公司即将为iPhone和智能家居改用自主研发的蓝牙和Wi-Fi芯片 苹果公司计划从明年开始在其设备上改用国产芯片进行蓝牙和Wi-Fi连接,此举将逐步淘汰目前由博通提供的部分部件。这种代号为Proxima的芯片已经开发了数年,现在计划用于…

Linux 切换用户的两种方法

sudo -su user1 与 su - user1 都可以让当前用户切换到 user1 的身份执行命令或进入该用户的交互式 Shell。但它们在权限认证方式、环境变量继承和 Shell 初始化过程等方面存在一些差异。 权限认证方式 su - user1 su 是 “switch user” 的缩写,默认情况下需要你输…

快速理解分布式事务Seate基本知识

Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata将为用户提供了AT、TCC、SAGA和XA事务模式,为用户打造一站式的分布式解决方案。 一.Seate的三大角色 在 Seata 的架构中,一共有三个角色:…

前端项目初始化搭建(二)

一、使用 Vite 创建 Vue 3 TypeScript 项目 PS E:\web\cursor-project\web> npm create vitelatest yf-blog -- --template vue-ts> npx > create-vite yf-blog --template vue-tsScaffolding project in E:\web\cursor-project\web\yf-blog...Done. Now run:cd yf-…

SQL最佳实践:避免使用COUNT=0

如果你遇到类似下面的 SQL 查询: SELECT * FROM customer c WHERE 0 (SELECT COUNT(*)FROM orders oWHERE o.customer_id c.customer_id);意味着有人没有遵循 SQL 最佳实践。该语句的作用是查找没有下过订单的客户,其中子查询使用了 COUNT 函数统计客…

多模态大模型(二)——用Transformer Encoder和Decoder的方法(BLIP、CoCa、BEiTv3)

文章目录 BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation 理解、生成我都要,一个很有效的、根据图片生成caption的工具1. BLIP的研究动机2. BLIP的模型结构3. CapFilt Model4. BLIP的训练过程 CoCa: C…