RoPE旋转位置编码图形化理解

news2024/11/15 3:34:38

很多博文用公式描述RoPE的作用,看来看去还是似懂非懂,本文用图形的方式形象化的展示RoPE的作用;

首先,RoPE的核心思想是通过绝对位置编码的方式实现相对位置编码,本文主要围绕下图进行介绍;
在这里插入图片描述
假设一个序列 s = [ s 1 , s 2 , . . . , s 100 ] s = [s_1, s_2, ...,s_{100}] s=[s1,s2,...,s100](为了直观,这里取1作为起始位置,以下同理),要计算第100个位置上的注意力,需要得到 q 100 ∗ [ k 1 , k 2 , . . . , k 100 ] q_{100}*[k_1, k_2, ...,k_{100}] q100[k1,k2,...,k100],由于是自注意力,这里的 q 100 = k 100 q_{100}=k_{100} q100=k100,如果是常规的绝对位置编码,这里的 q = q 词嵌入 + q 绝对位置嵌入 q=q_{词嵌入}+q_{绝对位置嵌入} q=q词嵌入+q绝对位置嵌入 k k k也相同;

在RoPE中,取 q = q 词嵌入 q=q_{词嵌入} q=q词嵌入,同时假设隐层维度是768,则 q 100 = [ q 100 , 1 , q 100 , 2 , . . . , q 100 , 768 ] q_{100}=[q_{100,1},q_{100,2}, ...,q_{100,768}] q100=[q100,1,q100,2,...,q100,768],因为在RoPE中相当于是二维旋转编码,所以两个两个进行旋转计算,先取 q 100 = [ q 100 , 1 , q 100 , 2 ] q_{100} = [q_{100,1},q_{100,2}] q100=[q100,1,q100,2],同理 k 1 至 k 100 k_1至k_{100} k1k100也只取前两维。

假设这100个词的词嵌入都相等(为了更明显的看出旋转位置带来的差异,后面再解释词嵌入的差异)。由于这里只取二维,所以可以表示成向量的形式,假设所有的词嵌入都用图中A向量表示。

现在每个词嵌入都需融入一个绝对位置嵌入,融入的方式不是常规的与词嵌入相加,而是进行旋转,旋转角度为 i θ i\theta iθ θ \theta θ用一个固定的角度表示, i i i代表当前的位置下标。比如序列 s 1 s_1 s1旋转 θ \theta θ角得到图中B向量, s 10 s_{10} s10旋转 10 ∗ θ 10*\theta 10θ角得到图中C向量, s 100 s_{100} s100旋转 100 ∗ θ 100*\theta 100θ角得到图中D向量。这里旋转之后也带来了余弦相似度的变化, q 100 ∗ k 100 q_{100}*k_{100} q100k100时相似度为1,结果完全是词嵌入之间的相似度, q 100 ∗ k 10 q_{100}*k_{10} q100k10时则带来了 90 ∗ θ 90*\theta 90θ角度相似度的差异。所以可以说通过绝对位置编码的方式实现了相对位置编码

下面再说词嵌入的差异,正常来讲每个token的词嵌入是不一样的,但这是词嵌入本身就带有的差异,RoPE只是在词嵌入基础上增加了位置上的差异,所以是合理的。

由于内积带有线性叠加性,图中多个两维处理之后可以直接叠加到一起,所以原理是相同的。

讲RoPE公式的博文已经很多了,这里就不列公式了,想看公式了解细节的可以移步其他博文。

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

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

相关文章

第二章 Android 基础--开发基础

文章目录 1.使用真机调试运行2.Android开发涉及的编程语言3.工程目录结构4.编译配置文件 build.gradle5.清单文件6.界面显示与逻辑处理7.Activity创建与跳转8.练习题 本专栏主要在B站学习视频: B站Android视频链接 本视频范围:P9—P16 工程结构、设计规…

redis数据类型和数据结构你了解吗 学习总结篇!

大家好,我是三叔,很高兴这期又和大家见面了,一个奋斗在互联网的打工人。 这期给大家讲一下关于 Redis 数据类型和数据结构的区别,很多读者包括笔者自己,早期也是傻傻分不清。备注:部分图片借鉴小林哥&…

计数排序

计数排序 排序步骤 1、以最大值和最小值的差值加一为长度创建一个新数组 2、将索引为0对应最小值,索引为1对应最小值1,索引为2对应最小值2,以此类推,将索引对应最小值到最大值之间所有的值 3、遍历一遍,遇到一个数字…

hcip第一天——复习静态路由习题

目录 1.绘制拓扑及划分网段 2.配置 1.lsw1 2.lsw2 3.R1 4.R2 5.R3 6.R4 7.R5 8.R6 9.部分pc 10.部分测试 要求 1.绘制拓扑及划分网段 2.配置 1.lsw1 2.lsw2 3.R1 4.R2 5.R3 6.R4 7.R5 8.R6 9.部分pc 10.部分测试

SpringBoot【原理分析、YAML文件、SpringBoot注册web组件】(二)-全面详解(学习总结---从入门到深化)

目录 SpringBoot原理分析_核心注解 YAML文件_配置文件介绍 YAML文件_自定义配置简单数据 YAML文件_自定义配置对象数据 YAML文件_自定义配置集合数据 YAML文件_读取配置文件的数据 使用ConfigurationProperties读取 YAML文件_占位符的使用 YAML文件_配置文件存放位置及优…

react+unittest+flask 接口自动化测试平台

目录 1 前言 2 框架 2-1 框架简介 2-2 框架介绍 2-3 框架结构 3 平台 3-1 平台组件图 1 新建用例 2 生成测试任务 3 执行并查看测试报告 3-2 用例管理 3-2-1 用例设计 3-3 任务管理 3-3-1 创建任务 3-3-2 执行任务 3-3-3 测试报告 3-3-4 邮件通知 1 前言 在现…

【电路原理学习笔记】第3章:欧姆定律:3.4 电阻的计算

第3章:欧姆定律 3.4 电阻的计算 电阻相关欧姆定律公式: R V I R\frac{V}{I} RIV​ 【例3-16】在图3-13所示的电路中,电阻为多少时,电池的电流才为3.08A? 【答】 R V I 12 V 3.08 A 3.90 Ω R\frac{V}{I}\frac{1…

AI大模型的现状与发展

AI大模型的现状与发展 😇博主简介:我是一名正在攻读研究生学位的人工智能专业学生,我可以为计算机、人工智能相关本科生和研究生提供排忧解惑的服务。如果您有任何问题或困惑,欢迎随时来交流哦!😄 ✨座右铭…

leetcode 108. 将有序数组转换为二叉搜索树

2023.7.16 由数组构造二叉搜索树地问题,本题可以借鉴从中序与后序遍历序列构造二叉树 这道题,这类题本质就是寻找分割点,分割点作为当前节点,然后递归左区间和右区间。 下面直接看代码: class Solution { public:Tree…

电子器件系列43:贴片led、发光二极管

干货!发光二极管的全面解读 二极管、发光二极管参数详解_sam-zy的博客-CSDN博客 对几个型号的贴片led进行参数解读: ols-330 特性: 带镜头,从PCB背面安装 视角40 贴片1206 尺寸:3.2(长)x1.6(宽)x1.9(高)mm …

明代元素时装小姐姐【InsCode Stable Diffusion美图活动一期】

一、 Stable Diffusion 模型在线使用地址:https://inscode.csdn.net/inscode/Stable-Diffusion 二、模型版本及相关配置: 模型:chilloutmix_NiPrunedFp32Fix Lora:hanfu_ming 采样迭代步数(steps): 40 采样…

故障排错篇之OSPF协议

一、OSPF邻居建立不成功 1、从理论上判断问题的所在 1.1、检查邻居两端的接口物理和协议状态是否UP,状态是否稳定,接口是否有丢包,两边互ping大包是否能通 若物理接口不Up或是不稳定(有振荡现象),请排查…

NodeJS 文件操作封装 ②①

文章目录 前言导入模块创建文件递归删除文件&文件夹下载写入图片根据URL路劲返回Base64图片链接根据URL路劲异步返回Base64图片链接封装代码暴露模块总结 ⡖⠒⠒⠒⠤⢄⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸ ⠀⠀⠀⡼⠀⠀⠀⠀ ⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢶⣲⡴⣗⣲⡦…

【java爬虫】使用selenium获取某宝联盟淘口令

上一篇文章我们已经介绍过使用selenium获取优惠券基本信息的方法 (15条消息) 【java爬虫】使用selenium爬取优惠券_haohulala的博客-CSDN博客 本文将在上一篇文章的基础上更进一步,获取每个优惠券的淘口令,毕竟我们只有复制淘口令才能在APP里面获取优惠…

Appium python 框架

目录 前言 流程 结构 具体说说 run.py 思路 其他模块 前言 Appium是一个开源的移动应用自动化测试框架,它允许开发人员使用多种编程语言(包括Python)来编写自动化测试脚本。Appium框架提供了一套API和工具,可以与移动设备进…

C语言——指针详解(初阶)

轻松学会C语言指针 前言:一、指针是什么?1.1 指针是什么?1.2 指针变量1.3 总结 二、指针和指针类型2.1指针-整数2.2 指针的解引用 三、野指针3.1野指针的成因3.2如何避免野指针 四、指针运算4.1 指针-整数4.2指针-指针4.3指针的关系运算 五、…

【学会动态规划】不同路径(5)

目录 动态规划怎么学? 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后: 动态规划怎么学? 学习一个算法没有捷径,更何况是学习动态规划, 跟我…

Delete `␍`eslint(prettier/prettier)报错的终极解决方案

1.背景 在进行代码仓库clone打开后,vscode报错全屏的 Delete ␍eslint(prettier/prettier)问题 2. 解决方案: 1.vscode直接转化 好处:直接转化当前页面的报错 坏处:每个界面都需要来一遍 2.设置git配置 好处:一…

竞赛信息管理系统——SSM

目录 一、项目简介 二、前置配置 1、创建数据库 2、编写application.yml文件 三、公共基础类 1、自定义登录拦截器类 2、自定义拦截规则 3、统一数据返回类 4、统一异常处理类 5、工具类 a、密码工具类 b、时间工具类 6、全局变量 四、用户模块 1、定义…