大模型用到的位置编码汇总(面试)

不同于RNN、CNN等模型,对于Transformer模型来说,位置编码的加入是必不可少的,因为纯粹的Attention模块是无法捕捉输入顺序的,即无法区分不同位置的Token。为此我们大体有两个选择:想办法将位置信息融入到输入中,这构成了绝对位置编码的一般做法;想办法微调一下Attention结构,使得它有能力分辨不同位置的Token,这构成了相对位置编码的一般做法。

绝对位置编码

1、训练式
学习的位置编码(Learned Position Embeddings):
相比于固定的正弦余弦编码,学习的位置编码是通过训练过程自动学习的。
每个位置编码是模型的参数之一,通过梯度下降等优化算法进行优化。
这种方法在某些任务中可能优于固定的正弦余弦编码,尤其是在位置信息对于任务非常重要时。

2、三角式
正弦和余弦函数编码(Sinusoidal Position Encoding):

Transformer模型中最初采用的方法。
对于每个位置i和每个维度d,使用正弦和余弦函数交替地生成位置编码,其中波长形成一个几何级数。
公式如下:
在这里插入图片描述

3、递归式

原则上来说,RNN模型不需要位置编码,它在结构上就自带了学习到位置信息的可能性(因为递归就意味着我们可以训练一个“数数”模型),因此,如果在输入后面先接一层RNN,然后再接Transformer,那么理论上就不需要加位置编码了。

4、相乘式

相对位置编码

1、Transformer中的相对位置编码:
Google的研究者在Transformer模型中引入了一种相对位置表示方法,允许模型利用头(head)间不同的位置信息。这种方法计算自注意力时,不仅考虑了键(Key)和查询(Query)的标准相互作用,还引入了基于它们之间距离的成分。
该方法使用可学习的位置向量来表示不同位置之间的距离,通过修改自注意力机制来整合这些相对位置向量。

2、自适应相对位置编码(T5):
在自注意力的计算中,根据元素间的相对距离动态调整注意力权重。这种方式不需要为每个可能的位置对预设一个位置向量,而是通过函数(如可训练的参数化函数)动态生成位置信息。
例如,T5模型采用了一种简化的相对位置编码,它在模型的每一层都重新计算位置信息,从而使模型能够更灵活地适应不同的上下文需求。

3、基于内容的相对位置编码:
在某些变体中,位置信息可以直接与输入元素的内容(如单词的嵌入)结合,以决定注意力分配。这种方法尝试模拟人类在处理信息时如何基于内容和上下文(而不仅仅是固定的模板)来调整对信息的关注。

4、DeBERTa的相对位置编码

DeBERTa模型使用了一种特殊的相对位置编码,这种编码不仅编码元素间的相对距离,还编码了它们的方向(即前向或后向)。这允许模型更精确地理解词语间的前后关系,提高了对长距离依赖关系的捕捉能力。具体来说,模型为每对词汇分别计算两个不同的位置分数:
在这里插入图片描述

5、XLNet的相对位置编码
在每次预测时,XLNet会随机排列输入序列的顺序,并试图预测缺失的部分。这种方法自然地要求模型理解和编码元素之间的相对位置信息。XLNet中的相对位置编码被集成到其双流注意力结构中,其中一个流处理内容信息,另一个流专注于预测任务。相对位置编码帮助模型理解序列中词与词之间的相对距离和方向。
相对位置信息被直接用于调整注意力分数,模型不仅考虑内容的相似性,还考虑了词汇在序列中的相对位置,使得预测更加准确。

其它位置编码

1、CNN式
虽然“CNN式”不是一个标准术语,但在位置编码的语境下,我们可以推测这指的可能是在基于卷积神经网络(CNN)的模型中如何处理位置信息。

  • 添加位置信息层:在输入层或卷积层中,可以添加额外的位置编码层,使得每个词或字符的位置信息可以通过额外的通道输入到网络中。
  • 通过卷积结构固有地处理位置信息:由于卷积操作本身就是局部的并且保持空间关系,它自然地包含了一种隐式的位置感知能力。

2、复数式
复数式位置编码(Complex Number Positional Encoding)是一种在处理序列数据时使用复数(实部和虚部)来编码位置信息的方法。这种方法的基本思想是:

  • 使用复数的性质:复数可以在其相位和幅度中编码信息,这使得复数特别适合于同时表示位置的大小和方向。

  • 相位作为位置信息:复数的相位可以被用来编码相对位置信息,其中相位的变化可以表示元素间的位置变化。

RoPE 融合式(Rotary Position Embedding)

融合式位置编码,特别是在自然语言处理中被称为Rotary Position Embedding (RoPE),它将位置信息与每个词的表示融合在一起,具体通过旋转变换实现。这种方法的核心在于:
Rotary Position Embedding(RoPE)是一种相对较新的位置编码技术,它在自然语言处理和其他序列模型中用于增强模型对位置信息的处理能力。RoPE 的核心思想是将位置信息直接融合进每个词元的表示中,而这一过程是通过旋转变换来实现的。这种方法特别适用于基于 Transformer 的模型,可以有效改善这些模型在处理长序列时的性能。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

长度外推问题

什么是?

大模型的外推性问题是指大模型在训练时和预测时的输入长度不一致,导致模型的泛化能力下降的问题。在目前的大模型中,一般指的是超出预训练设置的上下文长度时,依旧保持良好推理效果的能力。

解决方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenHarmony轻量系统开发【12】OneNET云接入

12.1 OneNET云介绍 通常来说,一个物联网产品应当包括设备、云平台、手机APP。我将在鸿蒙系统上移植MQTT协议、OneNET接入协议,实现手机APP、网页两者都可以远程(跨网络,不是局域网的)访问开发板数据,并控制…

ActiveMQ 05 高级使用

Active MQ 05 高级使用 queue browser 可以查看队列中的消息而不消费,没有订阅的功能 JMSCorrelationID 用于消息之间的关联,给人一种会话的感觉 http://activemq.apache.org/how-should-i-implement-request-response-with-jms.html JMSReplyTo …

codeforce #925 (div3) 题解

D. Divisible Pairs 给出数组 a a a,如果二元组 ( i , j ) (i,j) (i,j)满足 a i a j m o d x 0 & & a i − a j m o d y 0 a_i a_j mod x 0 \&\& a_i - a_j mod y 0 ai​aj​modx0&&ai​−aj​mody0,则beauty。其中 i &…

SpringBoot整合消息中间件(ActiveMQ,RabbitMQ,RocketMQ,Kafka)

消息中间件 消息消息队列JMS AMQPMQTTKafka Spring整合消息队列模拟消息队列的工作流程Spring整合ActiveMQSpring整合RabbitMQ直连交换机模式主题交换机模式 Spring整合RocketMQSpring整合kafka 消息 消息的发送方:生产者 消息的接收方:消费者 同步消息…

vite - WebAssembly入门

1. 初始化 vite 项目 1.1 安装 nvm(可选) brew update brew install nvm在 ~/.zshrc 添加 export NVM_DIR~/.nvm source $(brew --prefix nvm)/nvm.sh执行如下命令 source ~/.zshrc1.2 安装 node nvm install nodenvm ls -> …

1260. 二维网格迁移

1260. 二维网格迁移 原题链接:完成情况:解题思路:参考代码:错误经验吸取 原题链接: 1260. 二维网格迁移 https://leetcode.cn/problems/shift-2d-grid/description/ 完成情况: 解题思路: 这…

android不同版本(支持>10)获取当前连接的wifi名称

1、AndroidManifest.xml 配置权限 <uses-permission android:name"android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name"android.permission.CHANGE_NETWORK_STATE" /> <uses-permission android:name&q…

磁盘管理和文件系统

一.磁盘基础 1.磁盘结构 &#xff08;1&#xff09;物理结构&#xff1a; 盘片&#xff1a;硬盘有多个盘片&#xff0c;每盘片2面 磁头&#xff1a;每面一个磁头 &#xff08;2&#xff09;硬盘的数据结构 扇区&#xff1a;盘片被分为多个扇形区域&#xff0c;每个扇区存…

山姆·奥特曼是如何成为亿万富豪的?

2017年夏天&#xff0c;Superhuman公司首席执行官拉胡尔沃拉&#xff08;Rahul Vohra&#xff09;开始疯狂向投资者一一发消息&#xff0c;缘由是他的初创公司尝试了谷歌浏览器Chrome的一项即将推出的更新。由于一个看似无害的代码更改&#xff0c;Superhuman的智能电子邮件服务…

Jackson 2.x 系列【23】注解内省 AnnotationIntrospector

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Jackson 版本 2.17.0 源码地址&#xff1a;https://gitee.com/pearl-organization/study-jaskson-demo 文章目录 1. 前言2. AnnotationIntrospector3. JacksonAnnotationIntrospector4. Annotati…

SQL12 获取每个部门中当前员工薪水最高的相关信息

题目&#xff1a;获取每个部门中当前员工薪水最高的相关信息 注意了&#xff0c;这道题目&#xff0c;分组函数只能查出来&#xff1a;每个部门的最高薪水&#xff0c;group by dept_no &#xff0c;根据部门分组&#xff0c;绝对不能group by dept_no,emp_no&#xff0c;不能…

【刷题笔记】第二天

一道图论相关的题目 3108. 带权图里旅途的最小代价 结论&#xff1a; 做与运算&#xff0c;结果不会大于当前值&#xff0c;也就是说与运算只能导致结果不变或越来越小&#xff0c;所以要使得边的and值最小&#xff0c;就是把每一个联通块的所有边都and一遍。 方法1&#xf…

Vue项目实战:基于用户身份的动态路由管理

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

201403-3 命令行选项

100分 #include <bits/stdc.h> using namespace std;int main() {string line;cin >> line;map<char, bool> dct; // true:带参数 false:不带参数for (int i 0; i < line.size(); i){if (line[i] ! :){dct.insert(pair<char, bool>(line[i], fals…

ubuntu 23.10.1 mysql 安装

注&#xff1a;请进入root用户模式下操作&#xff0c;若没有&#xff0c;输入命令前加上sudo 1、更新软件包列表 apt update2、安装最新版的Mysql服务器 apt install mysql-server -y如果不加-y 会在安装过程中&#xff0c;系统将提示你设置MySQL的root密码。确保密码足够强…

职场成长之路:如何规划与实现

在职场中&#xff0c;每个人都希望实现自己的职业目标和成长。然而&#xff0c;职场成长并非一蹴而就&#xff0c;需要有明确的规划和方法。本文将探讨如何在职场中规划与实现成长&#xff0c;帮助您迈向成功之路。 一、明确职业目标 1. 自我认知&#xff1a;了解自己的兴趣、…

C语言双向链表

1. 链表的分类 链表的种类很多&#xff0c;主要由三个要素决定&#xff1a;是否带头&#xff0c;单向还是双向&#xff0c;是否循环。 根据这三个要素的组合&#xff0c;共可得到8&#xff08;2*2*2&#xff09;种链表 而我们常用的链表有两种&#xff1a; 1. 单链表&#xf…

鸿蒙原生应用元服务-访问控制(权限)开发Stage模型向用户申请授权

一、向用户申请授权 当应用需要访问用户的隐私信息或使用系统能力时&#xff0c;例如获取位置信息、访问日历、使用相机拍摄照片或录制视频等&#xff0c;应该向用户请求授权。这需要使用 user_grant 类型权限。在此之前&#xff0c;应用需要进行权限校验&#xff0c;以判断当前…

02_按键控制LED

按键控制LED 按键控制LED 按键控制LED while (1){//按键控制LEDif(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_5)GPIO_PIN_RESET)//读取PC5引脚状态&#xff0c;即检测按键是否按下{while(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_5)GPIO_PIN_RESET);//松手检测HAL_GPIO_WritePin(GPIOA,GPIO_PI…

【JavaWeb】Day45.Mybatis——入门程序

什么是MyBatis? MyBatis是一款优秀的持久层框架&#xff0c;用于简化JDBC的开发。 &#xff08;持久层&#xff1a;指的是就是数据访问层(dao)&#xff0c;是用来操作数据库的。&#xff09; &#xff08;框架&#xff1a;是一个半成品软件&#xff0c;是一套可重用的、通用…