当前位置: 首页 > 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…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...

深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向

在人工智能技术呈指数级发展的当下,大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性,吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型,成为释放其巨大潜力的关键所在&…...

Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解

文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一:HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二:Floyd 快慢指针法(…...