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

【基础理论】位置向量|位置编码学习笔记

位置向量(准确说应该叫 “位置编码”)的设计特别巧妙,既能让模型区分词的顺序,又能适应任意长度的句子,还不增加太多计算量。它是 2017 年 Transformer 那篇经典工作里提出的,背后是谷歌的一个研究团队(Vaswani 等人),能想出用正弦余弦函数生成位置信息,确实很有洞察力~

一、先明确:位置向量的核心作用——给“词向量”加“顺序标签”

Transformer处理文本时,会把句子里的所有词并行计算(同时处理“我”“喜欢”“猫”),但这样会丢失“词的顺序信息”(比如分不清“我喜欢猫”和“猫喜欢我”)。

位置向量的作用就是:给每个词的“词嵌入向量”(比如512维)补充“位置信息”,让模型知道“哪个词在前、哪个词在后”。
关键前提:位置向量的维度必须和词嵌入向量一致(比如词嵌入是512维,位置向量也得是512维)——只有维度相同,才能直接“相加”(不是拼接),既保留词的语义,又加上位置信息。

二、位置向量的“样子”:两个核心特征

位置向量没有“固定不变的数字”,但有固定的维度结构可预测的数值规律,我们从这两点拆解“长什么样”。

1. 维度结构:和词嵌入向量完全一致(常用512维)

无论句子里的词在“第几个位置”(比如第1个词、第10个词、第100个词),它的位置向量维度都和“词嵌入向量的维度(d_model)”保持一致:

  • 若d_model=512(日常最常用的设置):每个位置的位置向量都是 512维(一串512个数字);
  • 若d_model=128(小模型常用):每个位置的位置向量都是 128维

举个直观例子:
句子“我喜欢猫”有3个词,分别在“位置1”“位置2”“位置3”,每个词的位置向量都是512维,形状如下(用“[数字1, 数字2, …, 数字512]”表示):

  • 位置1的位置向量:[a₁, a₂, a₃, …, a₅₁₂]
  • 位置2的位置向量:[b₁, b₂, b₃, …, b₅₁₂]
  • 位置3的位置向量:[c₁, c₂, c₃, …, c₅₁₂]

核心:不同位置的向量,维度相同,但里面的数字不同(以此区分位置)。

2. 数值规律:按“周期性”变化(不用记公式,看规律)

位置向量的数值是通过“正弦(sin)和余弦(cos)函数”生成的,但不用纠结复杂公式,重点理解**“不同位置的向量,数值有固定变化规律,且每个位置的向量都是唯一的”**:

  • 对于位置向量的“偶数维度”(比如第2维、第4维、第6维…):用正弦函数生成,周期随维度增大而变长;
  • 对于位置向量的“奇数维度”(比如第1维、第3维、第5维…):用余弦函数生成,周期同样随维度增大而变长。
用“简化例子”看数值规律(d_model=4,小维度更易理解)

假设d_model=4(位置向量是4维),我们看“位置1”“位置2”“位置3”的位置向量数值(数字仅为示例,体现规律):

位置编号位置向量(4维)数值规律说明
位置1[sin(1), cos(1), sin(1×4), cos(1×4)]第1维(奇数):sin(1);第2维(偶数):cos(1);第3维(奇数):sin(4);第4维(偶数):cos(4)
位置2[sin(2), cos(2), sin(2×4), cos(2×4)]位置变2,“括号里的数”也变2,数值随位置递增而变化
位置3[sin(3), cos(3), sin(3×4), cos(3×4)]同理,位置3对应“括号里的数=3”,数值继续变化
关键观察:
  • 同一维度(比如第1维):不同位置的数值不同(sin(1)≠sin(2)≠sin(3)),能区分“位置1/2/3”;
  • 同一位置(比如位置1):4个维度的数值组合是唯一的([sin(1),cos(1),sin(4),cos(4)]),不会和其他位置重复;
  • 周期变化:维度越大,“括号里的乘数”越大(比如第3维乘数是4,第1维是1),数值变化周期越长,能覆盖“很长的句子”(哪怕句子有1000个词,也能生成唯一的位置向量)。

三、位置向量的“使用方式”:和词嵌入向量“直接相加”

位置向量不是“单独用”,而是和词嵌入向量结合后,作为Transformer的最终输入:
最终输入向量 = 词嵌入向量 + 位置向量

用简化例子(d_model=4)看结合过程:

  1. 词嵌入向量(比如“喜欢”的向量):[0.2, 0.5, -0.1, 0.3];
  2. 位置向量(“喜欢”在位置2):[sin(2), cos(2), sin(8), cos(8)] ≈ [0.909, 0.416, 0.989, -0.145];
  3. 相加后的最终输入向量:[0.2+0.909, 0.5+0.416, -0.1+0.989, 0.3+(-0.145)] ≈ [1.109, 0.916, 0.889, 0.155]。

为什么相加不是拼接? 因为相加能在“不增加维度”的前提下,把位置信息融入词向量——如果拼接,维度会变成512+512=1024,会增加后续计算量,且不符合Transformer的输入设计。

四、核心总结:位置向量的3个关键“样子”特征

  1. 维度固定匹配:和词嵌入向量的维度(d_model)完全一致(常用512维),确保能直接相加;
  2. 数值唯一且有规律:每个位置的向量数值都是唯一的,通过“正弦/余弦的周期性变化”生成,能清晰区分“第1个词、第2个词…第N个词”;
  3. 与词嵌入结合使用:不是单独存在,而是和词嵌入向量相加,形成“带位置信息的词向量”,作为Transformer的输入基础。

不用记生成公式! 只需记住:位置向量的核心是“给词加顺序标签”,维度和词嵌入一致,数值能区分不同位置,通过相加融入即可。

附:简化可视化

假设d_model=4,句子长度=3,位置向量的“样子”可简化为下表(数值为近似值,体现规律):

位置编号位置向量(4维)对应“词+位置”示例
1[0, 1, 0, 1]“我”(第1个词)的位置向量
2[0.909, 0.416, 0.989, -0.145]“喜欢”(第2个词)的位置向量
3[0.141, -0.989, -0.757, -0.654]“猫”(第3个词)的位置向量
http://www.dtcms.com/a/507499.html

相关文章:

  • 基于8051+PROTEUS仿真实例006-单只数码管循环显示0~9
  • 如何解决 pip install -r requirements.txt 子目录可编辑安装缺少 pyproject.toml 问题
  • C# 里的 KeyValuePair<TKey, TValue>
  • Speckit 简明教程
  • 明知手机忘带却不着急回去拿,因为可以远程控制
  • 深入理解 CSS 表格布局:table-layout 的秘密与实战详解(附费用报销单案例)
  • rsync+sersync实现数据实时双向同步
  • ppt模板去哪个网站下载德州核酸检测最新公告
  • 迅为RK3568开发板OpenHarmony系统南向驱动开发手册-UART应用开发编译源码
  • java面试-0216-HashMap和LinkedHashMap、TreeMap、HashTable√、ConcurrentHashMap区别?
  • 【文献分享】KADAIF:一种针对复杂微生物组数据的异常检测方法
  • React Native开发AndroidIOS流程完整指南
  • 身份证实名认证接口在金融领域的应用:筑牢风控第一道防线
  • 视频图像数据接入指南
  • STM32H743-ARM例程24-USB_MSC
  • asp网站防注入代码有源码搭建网站难不难
  • go语言每日3题
  • Mysql 坏表修复
  • 烟台专业网站建设湘潭网页设计
  • 网站按抓取手机软件贵阳wordpress 编程模式
  • Rust 结构体
  • 【2026计算机毕业设计】基于Springboot的微信小程序的古诗词在线学习系统
  • 基于微信小程序的运动康复中心预约系统的设计与实现(SpringBoot+Vue+Uniapp)
  • 微信小程序中使用 Vant Weapp 组件库
  • JAVA无人共享台球杆台球柜系统球杆柜租赁系统源码支持微信小程序
  • c 网站开发程序员网站建设 收费明细
  • dockerfile中CMD和ENTRYPOINT指令
  • 用服务器自建一套无界白板 + 文档协作平台 —— Affine
  • docker可视化面板portainer忘记密码的解决方案
  • Spring 4.1新特性:深度优化与生态整合