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

位置向量(准确说应该叫 "位置编码")的设计特别巧妙,既能让模型区分词的顺序,又能适应任意长度的句子,还不增加太多计算量。它是 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个词)的位置向量
相关推荐
患得患失9494 小时前
【NestJS】class-transformer什么用
transformer·nestjs
小新学习屋6 小时前
大模型-智能体-【篇四: Agent GPT 、AgentTuning、LangChain-Agent】
gpt·langchain·大模型·智能体
攻城狮7号7 小时前
OpenAI 的 Sora 2来了:一场创意革命与失控的狂欢
人工智能·大模型·openai·ai视频·sora 2
文火冰糖的硅基工坊9 小时前
[人工智能-大模型-15]:大模型典型产品对比 - 数字人
人工智能·大模型·大语言模型
盼小辉丶10 小时前
PyTorch实战(9)——从零开始实现Transformer
pytorch·深度学习·transformer
viperrrrrrrrrr712 小时前
milvus向量数据库
数据库·大模型·llm·milvus
文火冰糖的硅基工坊12 小时前
[人工智能-大模型-9]:大模型十大应用场景和对应的代表性的产品?
服务器·人工智能·大模型
GPUStack12 小时前
0.9B PaddleOCR-VL 登顶 SOTA!GPUStack 高效推理部署实战指南
大模型·ocr·paddleocr·多模态模型·模型推理
KG_LLM图谱增强大模型1 天前
整合知识图谱与大语言模型:下一代药物发现的革命性技术
大模型·知识图谱·graphrag·医药·知识图谱增强大模型