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

位置向量(准确说应该叫 "位置编码")的设计特别巧妙,既能让模型区分词的顺序,又能适应任意长度的句子,还不增加太多计算量。它是 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个词)的位置向量
相关推荐
fengliaoai1 天前
DeepSeek搞了个DSpark,AI直接进入“秒回时代”,你还在傻等?
大模型
aqi002 天前
15天学会AI应用开发(九)利用Chroma持久化向量数据
人工智能·python·大模型·ai编程·ai应用
aqi008 天前
15天学会AI应用开发(八)使用向量数据库实现RAG功能
人工智能·python·大模型·ai编程·ai应用
aqi009 天前
15天学会AI应用开发(七)有了大模型为什么还要引入RAG
人工智能·python·大模型·ai编程·ai应用
vivo互联网技术11 天前
CVPR 2026 | 全新强化学习框架 BeautyGRPO:重塑真实人像
算法·大模型·cvpr·影像
AndrewHZ12 天前
【LLM技术全景】大模型能力探秘:In-Context Learning与思维链(CoT)
人工智能·语言模型·大模型·llm·cot·思维链·icl
Vergelight12 天前
实战拆解|三类RAG架构差异:朴素、进阶、多轮RAG落地选型指南
架构·大模型·aigc·agent·ai产品经理·转行·ai后台设计
问道飞鱼12 天前
【大模型相关】意图识别实现方案行业分析报告
大模型·意图识别
DogDaoDao12 天前
【GitHub】CL4R1T4S:AI 系统提示词的透明革命
人工智能·python·ai·大模型·github·ai agent·cl4r1t4s