首页 > 其他分享 >大模型基础组件 - 位置编码

大模型基础组件 - 位置编码

时间:2025-01-05 19:00:59浏览次数:3  
标签:编码 模型 位置 RoPE 序列 相对 组件

为什么需要位置编码

自注意力机制没有顺序感知:Transformer 模型中的自注意力(Self-Attention)机制计算的是输入序列中所有位置的元素之间的关系,而这些关系仅仅依赖于元素的内容,而不考虑它们在序列中的顺序。例如,模型并不能自动地识别“第一个词”和“最后一个词”之间的顺序关系。这意味着,如果没有额外的信息,模型不能知道一个词在句子中的位置。

需要显式的位置信息:为了让 Transformer 理解序列中的顺序,必须通过引入位置编码将位置信息显式地注入到模型的输入中。位置编码为每个输入的词或标记添加一个表示其在序列中位置的向量,从而使模型能够在计算注意力时考虑到词语之间的相对顺序。

相对位置编码

相对位置编码是为了克服绝对位置编码的一些不足之处,特别是在处理长序列时,绝对位置编码可能难以有效捕捉序列中不同位置元素之间的相对依赖关系

相对位置编码不仅考虑元素的绝对位置,还考虑元素之间的相对位置。它描述的是两个词之间的距离或相对位置,而不仅仅是它们在序列中的具体位置。

相对位置编码的特点

  • 相对位置编码关注的是元素之间的相对距离。例如,模型需要知道词 A 和词 B 之间的距离是多少,而不是它们在序列中的具体位置。
  • 在实现中,相对位置编码通常会影响自注意力机制中的查询、键值对(Query, Key, Value)之间的关系,使得模型能在计算注意力时考虑到两个词之间的相对距离。

绝对位置编码

绝对位置编码的目标是为每个位置生成一个固定的向量,这个向量是与位置本身直接相关的,表示序列中每个元素的具体位置。绝对位置编码通常是与词嵌入(Word Embedding)相加的,形成输入到 Transformer 模型中的最终向量。

绝对位置编码的特点

  • 每一个位置都有一个唯一的编码,表示该位置在整个序列中的绝对位置
  • 它不表示相对位置,仅仅表示单个词的位置

训练式

直接将位置编码当成是可学习参数,不用刻意去设计什么。

这种方法的缺点是没有外推性,即如果训练的序列长度最大是512的话,那么最多就只能处理512的句子,因为其他的模型没有学过。

三角式

旋转位置编码RoPE

RoPE是通过绝对位置编码的方式实现相对位置编码。

旋转位置编码(RoPE)利用旋转矩阵的两个性质:加法性质R(x) R(y) = R(x+y) 和对称性质 R(x) = R(-x),并将旋转矩阵扩展到高维空间。在注意力(attention)计算阶段,RoPE 根据每个位置的位置信息,对 Query 和 Key 向量进行旋转,从而将相对位置关系嵌入到注意力机制中。

旋转矩阵的性质:

将旋转矩阵的性质扩展到高维空间,每一个位置都会对应一个这样的矩阵:

RoPE使用的是基于正弦和余弦函数的旋转矩阵,这些旋转矩阵是确定性的,m是位置,d是位置编码向量的维度,一般也就是词嵌入的维度,f是频率。这里不涉及任何需要训练的参数,只是与位置相关的数学函数。因此,RoPE并不引入任何新的可学习参数 。

计算过程可以参考:你还不懂旋转位置编码吗?_哔哩哔哩_bilibili

外推性

上文中经常提到外推性,这里解释一下,外推性指的是位置编码在超出训练时序长度的数据时,是否能够有效地适应和推断新的、未知的序列长度或位置关系。

上文中提到的训练式就基本没有外推性,一旦超过最长的位置编码,模型就不知道这些位置的编码形式,可能会进行随机初始化。

三角式和RoPE编码方式外推性则比较好,因为这两个编码方式都只依赖正余弦函数,序列变长也更容易做扩展。

参考

https://spaces.ac.cn/archives/8130

https://zhuanlan.zhihu.com/p/359502624

标签:编码,模型,位置,RoPE,序列,相对,组件
From: https://blog.csdn.net/weixin_41931540/article/details/144859442

相关文章

  • 4.3 C++对象模型和this指针
    4.3.1成员变量和成员函数分开存储只有非静态成员变量才属于类的对象上1.空对象占用的内存空间为1,为了区分空对象占用的位置2.非静态成员变量占用4个内存空间,属于类的对象上的3.静态成员变量static不占对象空间,不属于类的对象上的4.函数不占对象空间,所有函数共享一个......
  • 【零基础到精通】AI大模型技术基础学习路线:掌握必备能力,轻松成为大模型专家!
    “**大模型技术的基础学习,是未来在大模型领域能否站稳脚跟的关键**”随着大模型技术的发展,越来越多的人开始进入大模型领域,但大模型作为一门技术,因此它的本质上是一个工具,因此这也让学习大模型有了不同的学习方向。从工具的角度来看,学习一个工具主要有两个方向,一个是使......
  • 为什么要把数据模型分为:Entity,DTO,Response,Request呢?具体有什么作用呢
    开发中,我们通常把数据模型分为几个部分,探讨下他们具体都有那些作用。1.Entity(实体)实体类代表数据库表结构,与数据库表一一对应。//例如User.cspublicclassUser:BaseEntity{publicstringUsername{get;set;}publicstringPassword{get;set;}/......
  • 大模型agent开发之给agent增加记忆的方法
    增加memory的方法给langchain的内置agent增加memory,本方法首先通过ConversationBufferMemory实例化并传递到initialize_agent的memory参数中,从而实现对话记忆的功能,还使用MessagePlaceHolder,该方法可以将memory的key传递到提示词模版中,提升agent记忆能力。fromlangchain......
  • 自学资料 - Dalle2模型 - 文生图技术
    Dalle2模型-论文中为unCliP目录Dalle2模型-论文中为unCliP1.Dalle2的引言2.GAN模型优缺点优点缺点3.AE和DAE(denoisingAE)原理共同点4.VAE(变分自编码器)优点5.VQVAE(向量自编码器)原理优点6.Dalle模型原理7.Diffusion模型模型更新过程优点缺点:8.Dalle2......
  • 基于SMO+PLL滑膜观测器、MARS模型参考自适应观测器二合一的simulink仿真模型
      一、在永磁同步电机滑模观测器控制中,转子的位置和转速信息与反动电势密切相关。滑模观测器控制基本设计思路是:利用永磁同步电机的电压、电流信息,通过永磁同步电机数学模型,估算出电机在两相静止坐标系中的反电动势信息,估算出转子位置与转速,分别将其反馈给矢量控制的电流环......
  • 基于simulink的HSMO高阶滑膜观测器仿真模型
     一、引言高阶滑模观测器(HSMO)‌是一种基于滑模变结构理论的观测器,主要用于实时估计电机转子的位置和速度。它通过设计合适的滑模面和控制器,能够在电机运动过程中实现快速而准确的转子位置和速度估计‌。工作原理高阶滑模观测器的工作原理基于滑模控制理论,通过设计特定的滑......
  • DeepSurv:Cox比例风险深度神经网络模型(神经网络+疾病预后模型)
    DeepSurv,一个Cox比例风险深度神经网络和先进的生存分析方法,用于模拟患者的预后变量(协变量)与治疗效果之间的相互作用。一、Cox比例风险模型当下,医学研究者使用生存模型来评估预后变量在如死亡或癌症复发等结果中的重要性。一个常用且标准的生存模型是Cox比例风险模型 (CPH......
  • Vue传递数据 子组件给父组件
    一、proprs父组件定义方法->传给子组件(子组件props接收)->子组件通过触发事件给父组件传递的方法赋值->父组件的方法获得值父组件定义方法methods:{getSchoodata(value){this.crossData=value}},父组件(定义方法)传递给子组件<SchoolData:getSch......
  • 在vue3中setup是如何获得组件实例的?
    在Vue3中,setup函数是在组件初始化阶段调用的,它提供了一个响应式的环境来设置组件的初始状态和逻辑。然而,setup函数本身并不直接提供组件实例。在setup函数内部,你无法直接访问到完整的组件实例,因为在这个阶段,组件实例还没有完全创建。不过,Vue3提供了一个getCurrentInsta......