首页 > 其他分享 >浅谈位置编码(RoPE)(未完待续...)

浅谈位置编码(RoPE)(未完待续...)

时间:2024-03-25 21:27:00浏览次数:23  
标签:... 位置 浅谈 编码 boldsymbol sin RoPE theta +&+

当前版本为本文的尝鲜版,稳定版尚未发布:

位置编码:

https://zhuanlan.zhihu.com/p/454482273
transformer的sin位置编码本身已经包含了相对位置信息,本身就是一种包含相对信息的绝对位置编码。因为它符合一种形式:

\[PE_{t+k}=f(k)\cdot PE(t) \]

而这种编码一种比较尴尬的地方就在于,这仍然是一种绝对位置编码,虽然token之间的位置编码可以互相转换,但是每个token的位置编码还和自己的位置强相关,有点等差数列的意思。(抽象到一维的情况,假如我们使用的位置编码就是一维自然数,那也符合这种形式),所以这仍然是绝对位置编码
希望可以有一种完全的相对位置编码,也就是位置编码在后续的forward中完全不会产生绝对位置的信息。
这里苏剑林给介绍了一下一些位置编码
https://zhuanlan.zhihu.com/p/352898810

ROPE:

以下内容摘编自:十分钟读懂旋转编码(RoPE)
首先,位置编码本身并不一定需要是一个显式的embedding向量,可以是一种“信息”,融入到模型中即可,这是理解RoPE的一个关键点。一般的位置编码是计算一个embedding向量,和正常的word embedding相加。比如:

\[X_{out} = X_{emb} + P_{emb} \tag 1 \]

这里 \(P_{emb}\)是位置编码, \(X_{emb}\)是词嵌入。我们把上式写成:

\[X_{out}=f(X_{emb}) \tag 2 \]

这里的 \(f\)的作用就是”对 \(X_{emb}\)施加位置编码“。因此,位置编码可以视为一种”施加“作用。然后,先说RoPE的位置编码计算方法:对于序列中的第m个token,它的词嵌入为 \(\boldsymbol{x}_m\),计算它的 \(\boldsymbol{q}_m,\boldsymbol{k}_m\):

\[\boldsymbol{q}_m=W_Q\boldsymbol{x}_m \\ \boldsymbol{k}_m=W_K\boldsymbol{x}_m \tag 3\]

然后,对其”施加位置编码信息“:

\[\boldsymbol{qpos}_m=\boldsymbol{R}^\theta_{d,m}\boldsymbol{q}_m=\boldsymbol{R}^\theta_{d,m}W_Q\boldsymbol{x}_m \\ \boldsymbol{kpos}_m=\boldsymbol{R}^\theta_{d,m}\boldsymbol{k}_m=\boldsymbol{R}^\theta_{d,m}W_K\boldsymbol{x}_m \tag 4\]

然后,把 \(\boldsymbol{qpos}_m\)和 \(\boldsymbol{kpos}_m\)当成之前的Query和Key向量进行attention计算即可。这里的 \(\boldsymbol{R}^\theta_{d,m}\)和位置m相关,这样就包含了位置的信息,但是,推导后实际上在后续self-attention计算中和绝对位置是无关的。这个公式可见:R的计算公式

\[\bm{R}^d_{\Theta,m}=\begin{equation}\scriptsize{\underbrace{\begin{pmatrix} \cos m\theta_0 & -\sin+m\theta_0+&+0+&+0+&+\cdots+&+0+&+0+\\+\sin+m\theta_0+&+\cos+m\theta_0+&+0+&+0+&+\cdots+&+0+&+0+\\+0+&+0+&+\cos+m\theta_1+&+-\sin+m\theta_1+&+\cdots+&+0+&+0+\\+0+&+0+&+\sin+m\theta_1+&+\cos+m\theta_1+&+\cdots+&+0+&+0+\\+\vdots+&+\vdots+&+\vdots+&+\vdots+&+\ddots+&+\vdots+&+\vdots+\\+0+&+0+&+0+&+0+&+\cdots+&+\cos+m\theta_{d/2-1}+&+-\sin+m\theta_{d/2-1}+\\+0+&+0+&+0+&+0+&+\cdots+&+\sin+m\theta_{d/2-1}+&+\cos+m\theta_{d/2-1}+\\+\end{pmatrix}}_{\boldsymbol{W}_m}}\end{equation} \]

image

这个可以提前计算好放在那里。至于具体推理,原文知乎已经很清晰了。之后再写。

标签:...,位置,浅谈,编码,boldsymbol,sin,RoPE,theta,+&+
From: https://www.cnblogs.com/wangbingbing/p/18095356

相关文章

  • 浅谈分布式任务调度系统Celery的设计与实现
    Celery是一个简单、灵活且可靠的分布式任务队列,它支持任务的异步执行、进度监控、重试机制等功能。Celery的核心组件包括:Broker:消息中间件,如RabbitMQ。用于任务的发布和订阅。Worker:任务执行者,运行在各个Worker节点上。Client:任务提交者,运行在应用程序中。使用步骤:在......
  • 【PLC学习十一】浅谈西门子PLC的PID控制功能
    【PLC学习十一】浅谈西门子PLC的PID控制功能PID是自动控制中最常见的控制器,那么他在PLC中是如何实现的呢?文章目录【PLC学习十一】浅谈西门子PLC的PID控制功能前言一、PID是什么?二、西门子PID模块1.输入参数CONT_C2.输出参数CONT_C三、CONT_C实际使用1、写一个单独......
  • 浅谈Java中的集合
    下面内容自己结合B站视频写的总结为什么要用集合一般情况下保存多个数据使用的数组,但是数组灵活性不够,有很多不足,如:长度开始时必须指定,而且指定之后不能修改保存的必须为同一类型的元素使用数组进行增删比较麻烦集合1、集合可以根据需要动态增加或减少其大小2、Jav......
  • 实用网站推荐 [持续更新中...]
    实用网站推荐:Sha7博客网站:shadown7z.sdos.top蓝奏云空间站:https://shadow7z.lanzouh.com/b04x2hnvg查找IP网站:www.chaipip.com菜鸟教程:www.runoob.comVivo云服务:cloud.vivo.com视频解析网站:www.hotbox.fun/streaming食物手册:https://cook.yunyouju......
  • Error: Could not find or load main class org.apache.hadoop.hbase.util.GetJavaPro
    Hbase没有将其自身的依赖包添加到classpath配置路径所以才会导致找不到自身主类的报错vim/usr/local/hbase/bin/hbase 在161行出修改CLASSPATH="${HBASE_CONF_DIR}"CLASSPATH=${CLASSPATH}:$JAVA_HOME/lib/tools.jar:/usr/local/hbase/lib/*修改成功后,不再报错......
  • 关于“吉吉巳资源采集站点”的分享,我想说......
    前段时间我分享了一个影视资源采集站,惹来不少“非议”。本来没怎么当回事,可今天无意看了下评论,发现居然还有人出口成脏,真是无语了,为此觉得有必要向那些无聊的“朋友”说点什么......不知道原由的朋友可以先看下我之前分享的这资源采集站:https://blog.csdn.net/YUMENG_FLY/art......
  • SpringBoot读取配置文件@Value || @ConfigurationProperties
    @Value注解优点:简单易用:@Value注解非常简单,适用于读取单个属性或简单的配置。灵活性:可以在任何Spring管理的bean中使用@Value注解,包括普通的bean、控制器、服务等。缺点:缺乏类型安全性:@Value注解不提供类型安全性检查,如果配置值的类型不匹配,只有在运行时才能发......
  • 浅谈Postman与Jmeter的区别、用法
    前阶段做了一个小调查,发现软件测试行业做功能测试和接口测试的人相对比较多。在测试工作中,有高手,自然也会有小白,但有一点我们无法否认,就是每一个高手都是从小白开始的,所以今天我们就来谈谈一大部分人在做的接口测试,小白变高手也许你只差这一次深入了解!接口测试的目的已经是老......
  • 戴尔windows服务器安装双系统报错For a UEFI installation, you must include an EFI
    安装centos7.9的分区时候,提示:ForaUEFIinstallation,youmustincludeanEFISystemPartitiononaGPT-formatteddisk,mountedat/boot/efi网上有好多人说修改bios,用常规的usb去启动,不要UEFI的方式,但我的windows系统已经是GPT格式,且原来就有一个EFI,所以我还是用UEFI的方......
  • 不启动BMIDE,Teamcenter如何查看property的real property name
    问题描述:Teamcenter客户端,查看Item属性,属性名称默认显示的是DisplayName。在各类开发过程中,对属性的操作,需要使用realpropertyname才能进行。开发可能不在server端,没有安装BMIDE,如何在不启动BMIDE情况下,查看其realproperty?解决方案:客户端登录TCEdit-->OptionsO......