当前位置: 首页 > news >正文

【笔记】LLM位置编码之标准位置编码

起源

由于原始的transformer模型不包含递归和卷积,为了使模型利用序列的顺序,原文在input embeddings 上加入了“位置编码”,位置编码的维度和input embeddings的维度 d m o d e l d_{model} dmodel一样大,所以两者可以相加。加入位置编码的位置如下图所示:
在这里插入图片描述

原理

使用不同频率的正弦和余弦函数:
在这里插入图片描述
其中 p o s pos pos是token在序列中的位置, i i i是维度,也就是说,位置编码的每一个维度对应于一个正弦波,波长从 2 π 2\pi 2π 10000 10000 10000 × 2 π \times 2\pi ×2π形成几何级数。偶数用 s i n sin sin,单数用 c o s cos cos
(下图展示位置编码的细节,来源在这)
在这里插入图片描述

证明:对于任何固定的偏移量 k k k P E p o s + k PE_{pos+k} PEpos+k可以表示为 P E p o s PE_{pos} PEpos的线性函数。

P E ( p o s + k , 2 i ) = sin ⁡ ( p o s + k 1000 0 2 i d ) = sin ⁡ ( p o s 1000 0 2 i d + k 1000 0 2 i d ) PE(pos+k, 2i) = \sin\left(\frac{pos+k}{10000^{\frac{2i}{d}}}\right) = \sin\left(\frac{pos}{10000^{\frac{2i}{d}}} + \frac{k}{10000^{\frac{2i}{d}}}\right) PE(pos+k,2i)=sin(10000d2ipos+k)=sin(10000d2ipos+10000d2ik) P E ( p o s + k , 2 i + 1 ) = cos ⁡ ( p o s + k 1000 0 2 i d ) = cos ⁡ ( p o s 1000 0 2 i d + k 1000 0 2 i d ) PE(pos+k, 2i + 1) = \cos\left(\frac{pos+k}{10000^{\frac{2i}{d}}}\right) = \cos\left(\frac{pos}{10000^{\frac{2i}{d}}} + \frac{k}{10000^{\frac{2i}{d}}}\right) PE(pos+k,2i+1)=cos(10000d2ipos+k)=cos(10000d2ipos+10000d2ik)根据三角函数的和角公式:
sin ⁡ ( a + b ) = sin ⁡ a cos ⁡ b + cos ⁡ a sin ⁡ b \sin(a + b) = \sin a \cos b + \cos a \sin b sin(a+b)=sinacosb+cosasinb cos ⁡ ( a + b ) = cos ⁡ a cos ⁡ b − sin ⁡ a sin ⁡ b \cos(a + b) = \cos a \cos b - \sin a \sin b cos(a+b)=cosacosbsinasinb因此可以得到
P E ( p o s + k , 2 i ) = sin ⁡ ( p o s 1000 0 2 i d ) cos ⁡ ( k 1000 0 2 i d ) + cos ⁡ ( p o s 1000 0 2 i d ) sin ⁡ ( k 1000 0 2 i d ) PE(pos+k, 2i) = \sin\left(\frac{pos}{10000^{\frac{2i}{d}}}\right) \cos\left(\frac{k}{10000^{\frac{2i}{d}}}\right) + \cos\left(\frac{pos}{10000^{\frac{2i}{d}}}\right) \sin\left(\frac{k}{10000^{\frac{2i}{d}}}\right) PE(pos+k,2i)=sin(10000d2ipos)cos(10000d2ik)+cos(10000d2ipos)sin(10000d2ik)

P E ( p o s + k , 2 i + 1 ) = cos ⁡ ( p o s 1000 0 2 i d ) cos ⁡ ( k 1000 0 2 i d ) − sin ⁡ ( p o s 1000 0 2 i d ) sin ⁡ ( k 1000 0 2 i d ) PE(pos+k, 2i + 1) = \cos\left(\frac{pos}{10000^{\frac{2i}{d}}}\right) \cos\left(\frac{k}{10000^{\frac{2i}{d}}}\right) - \sin\left(\frac{pos}{10000^{\frac{2i}{d}}}\right) \sin\left(\frac{k}{10000^{\frac{2i}{d}}}\right) PE(pos+k,2i+1)=cos(10000d2ipos)cos(10000d2ik)sin(10000d2ipos)sin(10000d2ik)线性函数的形式
可以看到 P E ( p o s + k , 2 i ) PE(pos+k, 2i) PE(pos+k,2i) P E ( p o s + k , 2 i + 1 ) PE(pos+k, 2i + 1) PE(pos+k,2i+1) 的结果都是 P E ( p o s ) PE(pos) PE(pos) sin ⁡ ( k 1000 0 2 i d ) \sin\left(\frac{k}{10000^{\frac{2i}{d}}}\right) sin(10000d2ik) cos ⁡ ( k 1000 0 2 i d ) \cos\left(\frac{k}{10000^{\frac{2i}{d}}}\right) cos(10000d2ik) 的线性组合。由于 sin ⁡ ( k 1000 0 2 i d ) \sin\left(\frac{k}{10000^{\frac{2i}{d}}}\right) sin(10000d2ik) cos ⁡ ( k 1000 0 2 i d ) \cos\left(\frac{k}{10000^{\frac{2i}{d}}}\right) cos(10000d2ik) 是固定值,所以我们可以将它们视为常数,从而使得整个表达式变成了 P E ( p o s ) PE(pos) PE(pos) 的线性函数。

得出结论:
对于任何固定的偏移量 k k k,都有:
P E p o s + k = f ( P E p o s ) PE_{pos+k} = f(PE_{pos}) PEpos+k=f(PEpos)其中 f f f 是一个线性函数。这证明了在 Transformer 的位置编码中,相对位置 P E p o s + k PE_{pos+k} PEpos+k 可以表示为 P E p o s PE_{pos} PEpos 的线性函数。

计算 P E p o s + k 与 P E p o s PE_{pos+k} 与PE_{pos} PEpos+kPEpos的内积

Dot ( P E p o s , P E p o s + k ) = ∑ i = 0 d / 2 − 1 P E ( p o s , 2 i ) ⋅ P E ( p o s + k , 2 i ) + P E ( p o s , 2 i + 1 ) ⋅ P E ( p o s + k , 2 i + 1 ) \text{Dot}(PE_{pos}, PE_{pos+k}) = \sum_{i=0}^{d/2-1} PE(pos, 2i) \cdot PE(pos+k, 2i) + PE(pos, 2i + 1) \cdot PE(pos+k, 2i + 1) Dot(PEpos,PEpos+k)=i=0d/21PE(pos,2i)PE(pos+k,2i)+PE(pos,2i+1)PE(pos+k,2i+1)
将内积展开为:
Dot ( P E p o s , P E p o s + k ) = ∑ i = 0 d / 2 − 1 [ sin ⁡ ( p o s 1000 0 2 i d ) sin ⁡ ( p o s + k 1000 0 2 i d ) + cos ⁡ ( p o s 1000 0 2 i d ) cos ⁡ ( p o s + k 1000 0 2 i d ) ] \text{Dot}(PE_{pos}, PE_{pos+k}) = \sum_{i=0}^{d/2-1} \left[ \sin\left(\frac{pos}{10000^{\frac{2i}{d}}}\right) \sin\left(\frac{pos+k}{10000^{\frac{2i}{d}}}\right) + \cos\left(\frac{pos}{10000^{\frac{2i}{d}}}\right) \cos\left(\frac{pos+k}{10000^{\frac{2i}{d}}}\right) \right] Dot(PEpos,PEpos+k)=i=0d/21[sin(10000d2ipos)sin(10000d2ipos+k)+cos(10000d2ipos)cos(10000d2ipos+k)]
根据 sin ⁡ ( a ) sin ⁡ ( b ) + cos ⁡ ( a ) cos ⁡ ( b ) = cos ⁡ ( a − b ) \sin(a) \sin(b) + \cos(a) \cos(b) = \cos(a - b) sin(a)sin(b)+cos(a)cos(b)=cos(ab)可得:
Dot ( P E p o s , P E p o s + k ) = ∑ i = 0 d / 2 − 1 cos ⁡ ( p o s + k 1000 0 2 i d − p o s 1000 0 2 i d ) = ∑ i = 0 d / 2 − 1 cos ⁡ ( k 1000 0 2 i d ) \text{Dot}(PE_{pos}, PE_{pos+k}) = \sum_{i=0}^{d/2-1} \cos\left(\frac{pos+k}{10000^{\frac{2i}{d}}} - \frac{pos}{10000^{\frac{2i}{d}}}\right)= \sum_{i=0}^{d/2-1} \cos\left(\frac{k}{10000^{\frac{2i}{d}}}\right) Dot(PEpos,PEpos+k)=i=0d/21cos(10000d2ipos+k10000d2ipos)=i=0d/21cos(10000d2ik)

结论

  • k k k 较小时,内积值较大,表示 P E p o s + k PE_{pos+k} PEpos+k P E p o s PE_{pos} PEpos 的相似度较高,相对位置较近。
  • k k k 较大时,内积值减小,表示相似度降低,相对位置较远。
  • c o s ( k ) = c o s ( − k ) cos(k)=cos(-k) cos(k)=cos(k),因此该方法无法区别方向。

通俗理解

参考文章
最简单直观的加入位置信息的方式就是使用1,2,3,4,…直接对句子进行位置编码(one-hot)。用二进制转化举个例子:
在这里插入图片描述
上表中维度0,维度1,维度2,维度3拼成的数字就是该位置对应的二进制表示。可以看到每个维度(每一列)其实都是有周期的,并且周期是不同的。具体来说,每个比特位的变化率都是不一样的,越低位的变化越快(越往右边走,变化频率越快),红色位置0和1每个数字会变化一次,而黄色位,每8个数字才会变化一次。这样就能够说明使用多个周期不同的周期函数组成的多维度编码和递增序列编码其实是可以等价的。这也回答了为什么周期函数能够引入位置信息。

同样的道理,不同频率的sin正弦函数和cos余弦函数组合,通过调整三角函数的频率,可以实现这种低位到高位的变化,这样就能把位置信息表示出来。

缺点

  • 位置编码是固定的,无法根据具体任务进行调整。
  • 固定的位置编码对序列长度有限制。在处理长序列时,正弦和余弦函数的频率可能不足以捕捉所有的位置信息,导致信息丢失。
  • 位置编码在训练阶段是静态的。这意味着在训练时确定的位置编码不适用于后续推理时的输入,尤其是推理序列长度大于训练序列长度。

相关文章:

【笔记】LLM位置编码之标准位置编码

标准位置编码 起源原理证明:对于任何固定的偏移量 k k k, P E p o s k PE_{posk} PEposk​可以表示为 P E p o s PE_{pos} PEpos​的线性函数。计算 P E p o s k 与 P E p o s PE_{posk} 与PE_{pos} PEposk​与PEpos​的内积结论 通俗理解缺点 起源 由…...

环 境 配 置

01 Ubuntu18.04中QT环境 1. 下载安装包 官网 http://download.qt.io/archive/qt/5.9/5.9.1/qt-opensource-linux-x64-5.9.1.run 国内镜像服务器 ​https://mirrors.tuna.tsinghua.edu.cn/qt/archive/qt/5.9/5.9.1/qt-opensource-linux-x64-5.9.1.run QQ群 ...... 2. 安装 把下载…...

理解dbt artifacts及其实际应用

dbt是数据分析领域的一种变革性工具,它使数据专业人员能够对仓库中的数据进行转换和建模。它的强大功能之一是生成dbt artifacts:dbt运行的结构化输出,提供对dbt项目及其操作的深入了解。 dbt 构件介绍 dbt构件是每次dbt运行时生成的JSON文…...

100种算法【Python版】第15篇——KMP算法

本文目录 1 算法原理1.1 部分匹配表2 实现步骤3 示例说明4 python实例5 算法应用领域1 算法原理 KMP(Knuth-Morris-Pratt)算法是一种用于高效字符串匹配的算法。它通过预处理模式字符串,构建一个部分匹配表(前缀函数),以避免重复比较,从而提高匹配效率。KMP 算法通过利…...

【软件工程】软件项目管理/工程项目管理复习资料

第一章 软件项目管理概述习题 一. 填空题 实现项目目标的制约因素有( 项目范围 )、( 成本 )、( 进度计划 )、( 客户满意度 )等。 项目管理( 启动过程组 )、…...

C语言基础题(大合集2)

1. 时间转换 给定秒数 --> 输出秒数 转化成 时/分/秒 //时间转换 //给定秒数 --> 转换成 小时/分/秒 int main() {//输入int seconds 0;int h 0;//小时int m 0;//分钟int s 0;//秒scanf("%d", &seconds);//计算h seconds / 60 / 60;m seconds / 60…...

Stable Diffusion视频插件Ebsynth Utility使用方法

在Stable Diffusion中安装完Ebsynth Utility后,就可以开始试用了。 启动Stable Diffusion后,出面画面: 1、步骤1:视频分帧及生成蒙板帧 填入工程目录,选择上传所用的视频文件:注意对目录命名的要求-不能有…...

Ubuntu忘记密码

如果你忘记了WSL(Windows Subsystem for Linux)中Linux发行版的密码,可以按照以下步骤来重置密码: 一、对于Ubuntu或Debian等基于Debian的发行版(以Ubuntu为例) 关闭WSL实例(如果正在运行&…...

使用Python实现深度学习模型:智能极端天气事件预测

极端天气事件,如暴雨、台风和热浪,往往会对人类社会和自然环境产生深远的影响。近年来,气象数据和深度学习技术的发展使得智能预测极端天气成为可能。通过训练深度学习模型,我们可以建立一个自动化的预测系统,从大量的历史气象数据中学习并预测未来的极端天气事件。这篇文…...

cJson函数解析

获取json版本号 CJSON_PUBLIC(const char*) cJSON_Version(void);设置自定义内存分配函数 CJSON_PUBLIC(void) cJSON_InitHooks(cJSON_Hooks* hooks);解析 JSON 字符串并将其转换为 cJSON 数据结构 CJSON_PUBLIC(cJSON *) cJSON_Parse(const char *value);用于解析指定长度的…...

基于SSM+微信小程序的跑腿平台管理系统(跑腿3)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM微信小程序的跑腿平台管理系统实现了管理员、接单员及用户三个角色。 1、管理员实现了首页、个人中心、管理员管理、基础数据管理、接单详情、跑腿任务管理等。 2、接单员实现了…...

mit6824-02-Lab1:MapReduce分布式实现

文章目录 写在前面总体思路分析代码实现参考链接 写在前面 具体上次写6824的第一篇文章已经过去了快一个月,上次学习了MapReduce论文相关理论后一直没有继续写代码实现,自己一边要搞论文没有整块时间实现,这两天抽写了相关代码,算…...

【NOIP普及组】 装箱问题

【NOIP普及组】 装箱问题 💐The Begin💐点点关注,收藏不迷路💐 有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0&…...

Flutter主题最佳实践

Styling your Flutter app not only makes it visually appealing but also enhances the user experience. Flutter offers a robust theming system that helps you maintain consistency and customize your app’s look and feel. 设计 Flutter 应用程序的风格不仅能使其在…...

计算机网络:网络层 —— IPv4 数据报的首部格式

文章目录 IPv4数据报的首部格式IPv4数据报分片生存时间 TTL字段协议字段首部检验和字段 IPv4数据报的首部格式 IPv4 数据报的首部格式及其内容是实现 IPv4 协议各种功能的基础。 在 TCP/IP 标准中,各种数据格式常常以32比特(即4字节)为单位来描述 固定部分&#x…...

MySQL 之 索引

索引 概述 是帮助MySQL高效获取数据的数据结构,在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在数据结构上实现高效查找算法,这种…...

手动探针台的用途及组成部分

探针台系统分为手动探针台与自动探针台,以下我们主要分析手动探针台。 探针台用途: 手动探针台又称探针测试台主要用途是为半导体芯片的电参数测试提供一个测试平台,探针台可吸附多种规格芯片,并提供多个可调测试针以及探针座&am…...

❤️算法笔记❤️-(每日一刷-5、最长回文串)

文章目录 题目思路解答 题目 给你一个字符串 s,找到 s 中最长的 回文 子串。 示例 1: 输入:s "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。示例 2: 输入&#xf…...

nginx 路径匹配,关于“/“对规则的影响

1、基本规则 假如后端实际地址为: http://127.0.0.1:8080/api/user/getById?id123 则: 1)通过nginx转发,使用http://127.0.0.1/api/user/getById?id123访问 server {listen 80;server_name 127.0.0.1;location /api…...

安全知识见闻-网络安全热门证书

一、OSCP(Offensive Security Certified Professional) 1. 证书介绍 2.考点 3.部分考试要求 4.练习方法 二、OSEP(Offensive Security Exploit Developer) 1.证书介绍 2.考点 3.练习方法 三、CISSP(Certified lnformation Systems Security Professional&a…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...