什么是大模型的位置编码Position Encoding?

news2024/9/25 17:11:08

1. 什么是位置编码

位置编码(Positional Encoding)是一种在处理序列数据时,用于向模型提供序列中每个元素位置信息的技术。

在自然语言处理(NLP)中,尤其是在使用Transformer模型时,位置编码尤为重要,因为Transformer模型本身并不包含处理序列顺序的机制。

位置编码的主要目的是让模型能够区分输入序列中词的顺序,从而更好地理解句子的结构和含义。

请添加图片描述

2. 好的位置编码

  • 为每个位置输出唯一的编码;
  • 不同长度的句子之间,任何两个位置之间的差值应该保持一致;
  • 编码值应该是有界的;
  • 具备远程衰减的特性

位置编码的远程衰减性是指随着序列中元素之间相对位置的增加,位置编码对模型性能的影响逐渐减弱的特性。这种特性在理论上对于Transformer模型是有益的,因为它可以模拟人类在处理长文本时注意力逐渐分散的现象

3. 位置编码的种类

位置编码通常分为两种类型:绝对位置编码和相对位置编码。

绝对位置编码:

这是最常见的一种位置编码方法,其核心思想是在每个输入序列的元素上添加一个位置向量,以表示该元素在序列中的具体位置。这个位置向量通常通过正弦和余弦函数生成,具有周期性,能够捕捉序列中的相对位置信息 。

相对位置编码:

这种编码方式侧重于考虑元素之间的距离信息。在自注意力机制中,通过加入位置偏置项,使模型能够感知到元素间的相对位置关系。常见的相对位置编码方法包括Sinusoidal Positional Encoding和Learned Positional Encoding,前者通过不同频率的正弦和余弦函数来计算位置编码,后者则是通过学习得到的参数来计算位置编码

4. 绝对位置编码的实现

绝对位置编码的实现通常采用正弦和余弦函数的组合,这种编码方式最早由Vaswani等人在《Attention is All You Need》中提出,被广泛应用于Transformer模型中。

绝对位置编码的实现通常涉及以下步骤:

4.1. 生成位置向量:

为序列中的每个位置生成一个位置向量。这个向量通常具有与模型的词嵌入维度相同的大小。

4.2 使用正弦和余弦函数:

绝对位置编码的计算公式如下:
对于每个位置 pos 和每个维度索引 i,计算正弦和余弦函数的值:
P E ( p o s , 2 i ) = s i n ( p o s / 1000 0 ( 2 i / d m o d e l ) ) PE(pos, 2i) = sin( pos / 10000^{(2i / d_{model})}) PE(pos,2i)=sin(pos/10000(2i/dmodel))
P E ( p o s , 2 i + 1 ) = c o s ( p o s / 1000 0 ( 2 i + 1 / d m o d e l ) ) PE(pos, 2i+1) = cos( pos / 10000^{(2i+1 / d_{model})}) PE(pos,2i+1)=cos(pos/10000(2i+1/dmodel))
其中,

  • PE 表示位置编码(Positional Encoding);
  • pos 是词在序列中的位置;
  • d_model 是模型的维度大小;

4.3. 添加到词嵌入:

将计算得到的位置向量添加到相应的词嵌入向量中。这样,每个词的嵌入不仅包含了语义信息,还包含了位置信息。

4.4. 训练模型:

在训练过程中,模型将学习如何利用这些位置编码来更好地理解序列数据。

绝对位置编码的设计允许模型捕捉序列中的相对位置信息,这对于理解语言结构和执行如机器翻译、文本摘要等任务至关重要。通过这种方式,Transformer模型能够区分相同词在不同位置的不同含义,从而提高模型的性能和准确性。

5.绝对位置编码FAQ

请添加图片描述

Q1:为什么是三角函数?

A1:正弦和余弦函数是周期性函数,可以捕捉序列中元素之间的相对位置信息。这种函数的周期性特征使得模型能够更好地理解序列中元素的位置关系,从而提高模型的性能和准确性。

Q2:为什么要除以10000?

A2:除以10000是为了缩放位置编码的值,使其在不同位置之间具有一定的差异性。这样,模型可以更好地区分不同位置的元素,通过调整10000这个缩放因子,可以控制模型对不同位置之间距离的敏感性。较小的缩放因子会使得位置编码对距离更敏感,而较大的缩放因子则使得模型对更广泛的位置范围敏感。

Q3:为什么要使用正弦和余弦函数交替?

A3:正弦和余弦函数交替使用是为了使位置编码具有不同的周期性特征。这样,模型可以更好地捕捉序列中元素之间的相对位置信息,从而提高模型的性能和准确性。

6. 相对位置编码

相对位置编码不是为序列中的每个位置分配一个固定的位置向量,而是在计算注意力权重时考虑了元素之间的相对位置关系。
请添加图片描述

相对位置编码的关键特点包括:

  • 相对位置敏感性:编码方式允许模型在计算注意力分数时,不仅考虑元素之间的相互作用,还考虑它们之间的相对位置。
  • 动态计算:相对位置编码通常是动态计算的,这意味着它们会根据输入序列中元素的实际相对位置来生成编码。
  • 注意力机制的扩展:在自注意力机制中,通常会向计算的注意力分数中添加一个与相对位置相关的偏置项,这个偏置项可以是基于相对位置的函数。
  • 多种实现方式:相对位置编码有多种实现方式,例如使用预先定义的相对位置矩阵、通过可训练的参数学习相对位置编码,或者使用其他复杂的函数来捕捉元素之间的相对距离。
  • 提高模型性能:通过考虑元素之间的相对位置,相对位置编码可以帮助模型更好地捕捉序列数据中的模式和依赖关系,从而提高模型在某些任务上的性能。
  • 适用于长序列:相对位置编码特别适合处理长序列,因为它允许模型在不考虑序列绝对位置的情况下,通过相对位置关系来理解序列结构。

7.外推性

位置编码的外推性是指模型在处理推理阶段比训练阶段更长的序列时,如何有效地扩展其位置编码以保持性能。
请添加图片描述

在大模型中,由于显存资源的限制,通常在预训练时设计的最大序列长度有限,例如4k左右,但推理时可能需要处理更长的序列,如32K的文本。因此,设计合适的位置编码对于提升模型在更长序列上的外推性至关重要。

8.旋转位置编码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函数就是:
请添加图片描述

9. 从二维到多维

在二维场景下,我们引入了复平面,是为了使用欧拉公式获取漂亮的数学特性,来简化过程。但是在多维场景下,我们可以直接使用矩阵的特性,来简化过程。将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中,有一个直观的图
请添加图片描述

10.总结

旋转位置编码由苏剑林大神设计,其引入数学中最美丽的公式-欧拉公式。

大家可以关注他的博客《科学空间》https://kexue.fm/, 会学到很多东西。

后面我会专门讲欧拉公式和RoPE的设计思路。

参考

[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/2077697.html

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

相关文章

科讯档案管理系统存在SQL注入漏洞(0day)

漏洞描述 安徽科迅教育装备20年来来始终坚持智慧校园集成方案产品的开发和部署应用,我们有完善的智慧校园和数字校园建设方案,根据不同的学校不同的实际情况量身定做系统集成方案。产品主要是为了实现校园的智慧网络、智慧OA、智慧教学、智慧学习、数字医…

【系统架构设计师-2018年】综合知识-答案及详解

文章目录 【第1题】【第2~3题】【第4题】【第5~6题】【第7题】【第8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16~17题】【第18~21题】【第22题】【第23题】【第24题】【第25题】【第26题】【第27~28题】【第29~30题】【第31题】【第32~3…

在 Debian 上安装 IntelliJ IDEA 笔记

在 Debian💩 上安装 IntelliJ IDEA 💡 笔记 下载安装 JDK17安装 IntelliJ IDEA Community添加桌面启动项(快捷方式) 参考资料 下载 两个包已经下好了,一个JDK17,一个IntelliJ IDEA Community 使用 wget ur…

UE4 BuildCookRun中的Archive的含义

在UE4中,Archive、Cook、Stage、Package、Build的次序是怎么样的? 整体打包过程如下: Build -> Cook-> Stage -> Package -> Archive。其中,Archive 的含义是从Staged目录中拷贝文件到一个额外的目录即Archive目录。被称为“归档…

【2024-2025源码+文档+调试讲解】微信小程序的民宿预订系统springboot

摘要 随着网络科技的不断发展以及人们经济水平的逐步提高,网络技术如今已成为人们生活中不可缺少的一部分,而微信小程序是通过计算机技术,针对用户需求开发与设计,该技术尤其在各行业领域发挥了巨大的作用,有效地促进…

银河麒麟服务器中检查板卡速度和带宽是否降低

银河麒麟服务器中检查板卡速度和带宽是否降低 1. 查找板卡BUS ID2. 检查速度和带宽信息3. 解读结果结论 💖The Begin💖点点关注,收藏不迷路💖 在银河麒麟高级服务器操作系统中,快速检查板卡(如网卡、显卡等…

CSS“叠叠乐”——WEB开发系列16

在现代前端开发中,CSS 是控制网页外观和布局的核心工具。随着项目的复杂化和样式规则的增加,CSS 层叠(cascade)变得更加重要。为了更好地管理和控制样式规则的应用,CSS 引入了层叠层(cascade layers&#x…

C# 获取文件、文件夹和驱动器的信息详解与示例

文章目录 二、获取文件夹信息三、获取驱动器信息四、示例:文件、文件夹和驱动器信息工具五、异常处理六、总结 在C#中,文件、文件夹和驱动器是文件系统操作的基本元素。了解如何获取这些元素的信息对于开发文件处理和管理工具至关重要。本文将详细介绍如…

JAVA基础:文件字符流

目录 前言 文件字符流的创建 文件字符流的使用 前言 上一篇我们知道了如果在使用输入流读取数据时,数据中含有中文就会出现乱码的情况,这时就要使用字节字符转换流这个过程流来处理一下,针对这种情况我们可以直接使用文件字符流来读取数据…

计算机毕业设计hadoop++hive微博舆情预测 微博舆情分析 微博推荐系统 微博预警系统 微博数据分析可视化大屏 微博情感分析 微博爬虫 知识图谱

1.selenium爬取微博热搜、文章、评论数据存入mysql数据库,对评论lstm情感分析模型建模分析; 2.使用mapreduce对mysql中微博数据清洗,转为.csv文件上传hdfs文件系统; 3.使用hive建库建表,导入.csv数据集; 4.一半指标hive_sql进行离…

3_1_PID控制原理

自从计算机进入控制领域以来,用数字计算机代替模拟计算机调节器组成计算机控制系统,不仅可以用软件实现PID控制算法,而且可以利用计算机的逻辑功能,使PID控制更加灵活。数字PID控制在生产过程中是一种最普遍采用的控制方法&#x…

AI-Talk开发板外设测试

一、说明 需要先测试各外设的功能正常,再开发正式应用。SDK提供了两个测试工程,测试工程A和测试工程B。 二、测试工程 1、多模态开发板硬件检测工程A 检测的模块包括: - 摄像头 - 显示屏 - 触摸屏 - USB口(csk_usb)…

张宇36讲+1000题重点强化!保100冲120速刷攻略

如果你选择考研时全程跟随张宇的课程,基础阶段使用《张宇30讲》,强化阶段跟着《张宇36讲》,并且还要完成《张宇1000题》,那么你的任务量将非常大。尤其是今年,张宇老师的课程体系发生了重大调整: 张宇老师…

【字符串连接】输入两个字符串,将其进行连接然后输出

输入两个字符串&#xff0c;将其进行连接然后输出 使用C语言代码实现&#xff0c;具体代码&#xff1a; #include<stdio.h>int main(){char str1[100],str2[100];int i0,j0;printf("请输入第一个字符串:");scanf("%s",&str1);printf("请输…

SSRF漏洞与redis未授权访问的共同利用

1.利用靶场Pikachu来认识SSRF漏洞 1.什么是SSRF SSRF漏洞允许攻击者通过向服务器发起请求来伪造请求。这种漏洞的核心在于攻击者能够控制服务器向任意目标地址发起请求&#xff0c;而这些请求通常是攻击者无法直接从客户端发起的。 简单来说&#xff0c;假设你的网站有一个功能…

代谢组数据分析(十九):随机森林构建代谢组预后模型

介绍 建立胃癌(GC)预后模型时,从队列3中的181名患者中,使用右删失结果数据进行了随机分层抽样,分为训练数据集(n = 121)和测试数据集(n = 60)。训练了一个包含1000棵树的随机生存森林(RSF)模型,根据它们基于排列的特征重要性来选择突出的特征。通过再次训练随机生…

探索c++中的类型转化

文章目录 相关引入c中的转化机制const_castreinterpret_caststatic_castdynamic_cast 其他 相关引入 C语言中的类型转换: 有相关性的类型之间才能转换: 非相关性不能转换: c中的转化机制 const_cast 去掉常量属性 指针相同, 值不相同, 本质是编译器对这个常属性的a做了…

关键点检测——HRNet原理详解篇

&#x1f34a;作者简介&#xff1a;秃头小苏&#xff0c;致力于用最通俗的语言描述问题 &#x1f34a;专栏推荐&#xff1a;深度学习网络原理与实战 &#x1f34a;近期目标&#xff1a;写好专栏的每一篇文章 &#x1f34a;支持小苏&#xff1a;点赞&#x1f44d;&#x1f3fc;、…

pycharm2024.1.1配置已有的pytorch环境

在pycharm中也可以创建jupyter notebook. 本人最近尝试了2024.2.0.1和2024.1.1&#xff0c;这两种的配置方式略有不同。本文介绍2024.1.1版本的配置方法 新建一个项目 注意这里选择自定义环境和选择现有&#xff0c;并类型是conda 路径选择 这里的路径是我安装的conda目录的S…

甄选范文“NoSQL数据库技术及其应用”,软考高级论文,系统架构设计师论文

论文真题 随着互联网web2.0网站的兴起,传统关系数据库在应对web2.0 网站,特别是超大规模和高并发的web2.0纯动态SNS网站上已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。 NoSQL(Not only SQL )的产生就是为了解…