第2章 大模型基础原理

第6节:Position Encoding位置编码——Transformer为什么需要“知道谁在前、谁在后”?

《Agent开发工程师成长指南》系列教程 - 从大模型底层原理,走向 Agent 工程实践


一、为什么 Transformer 需要位置编码?

在前面的章节中,我们已经知道:

Transformer 的核心能力来自 Self-Attention

Attention 可以让模型判断:

哪些 Token 和当前 Token 更相关?

例如:

我 喜欢 吃 苹果

Attention 可以计算:

“吃” → “苹果”      高相关
“喜欢” → “苹果”    高相关
“我” → “苹果”      低相关

但这里存在一个非常关键的问题:

Attention知道“谁和谁相关”,却天然不知道“谁在前、谁在后”。

例如:

我 爱 中国

和:

中国 爱 我

两个句子包含完全相同的三个 Token。

如果只看 Token 集合:

我
爱
中国

它们没有任何区别。

但是语义完全不同。

因此 Transformer 必须额外获得一种信息:

我     → Position 0
爱     → Position 1
中国   → Position 2

这就是:

Position Encoding / Position Embedding(位置编码)


二、Attention为什么“不认识顺序”?

这是理解位置编码最重要的基础。

假设输入:

A B C D

Transformer 首先把它们转换成:

A → Embedding
B → Embedding
C → Embedding
D → Embedding

然后进行:

Self-Attention

Attention主要计算:

Q × Kᵀ

得到:

Token之间的相关性

问题来了。

如果把:

A B C D

换成:

D C B A

Attention 本身并没有天然携带:

A是第一个Token
B是第二个Token
C是第三个Token

因此:

Transformer需要人为加入位置信息。


三、Position Encoding是什么?

一句话:

Position Encoding就是给每一个Token附加一个“位置身份证”。

例如:

Token       Position

我          0
喜欢        1
人工智能    2
技术        3

模型最终看到的并不是单纯的:

Token Embedding

而是:

Token Embedding
        +
Position Encoding
        ↓
Transformer

因此可以理解为:

Embedding告诉模型“这个Token是什么”,Position Encoding告诉模型“这个Token在哪里”。


四、Token Embedding + Position Encoding

这是 Transformer 最重要的输入结构之一。

例如:

我       喜欢       AI

↓         ↓         ↓

Token    Token     Token
Embedding Embedding Embedding

+         +         +

Position Position  Position
Encoding Encoding  Encoding

↓         ↓         ↓

最终输入向量

可以抽象成:

X = Token Embedding + Position Encoding

最终:

X
↓
Multi-Head Attention
↓
Feed Forward
↓
Transformer Layer
↓
……

所以:

位置编码不是 Transformer 的“附加装饰”,而是让 Transformer 理解语言顺序的重要机制。


五、最早的经典方案:Sinusoidal Position Encoding

Transformer 原论文提出了一种非常经典的方法:

Sinusoidal Positional Encoding

中文:

正弦位置编码

它使用:

sin
cos

函数生成位置向量。

核心思想:

不同位置:

Position 0
Position 1
Position 2
Position 3
……

产生不同的数学模式。

例如:

Position 0 → [sin(...), cos(...), sin(...), cos(...)]
Position 1 → [sin(...), cos(...), sin(...), cos(...)]
Position 2 → [sin(...), cos(...), sin(...), cos(...)]

每个位置:

都有独特的向量。


六、为什么使用Sin和Cos?

这不是为了数学炫技。

它有一个非常重要的特点:

不同位置之间存在规律性的关系。

例如:

Position 10
Position 11
Position 12

它们的编码:

不是完全随机。

而是:

连续变化

因此模型能够学习:

位置10和位置11比较接近

位置10和位置1000距离很远

这种结构。

换句话说:

位置编码不仅告诉模型“我在哪”,还让模型能够学习“我和另一个Token距离多远”。


七、另一种方法:Learned Position Embedding

除了固定的 Sin/Cos。

还有一种方式:

让模型自己学习位置向量。

例如:

Position 0 → P0
Position 1 → P1
Position 2 → P2
Position 3 → P3
……

这些向量:

不是人工计算。

而是:

随着模型训练一起学习出来。

最终:

Token Embedding
+
Learned Position Embedding

形成:

Transformer输入

八、Sinusoidal vs Learned Position Embedding

两种方法可以简单理解为:

对比SinusoidalLearned
位置向量数学公式生成模型训练得到
是否训练
灵活性较高较强
长度外推理论上更方便受训练长度限制
经典代表TransformerBERT等模型

但是:

现代大模型。

又出现了:

RoPE


九、现代大模型为什么大量使用RoPE?

RoPE:

Rotary Position Embedding

中文:

旋转位置编码

目前很多主流大语言模型架构都采用或基于类似思想的位置编码机制。

例如:

LLaMA系列
Qwen系列
DeepSeek系列

等模型架构中,都可以看到 RoPE 或相关旋转位置编码思想。

它和传统位置编码最大的不同:

它不是简单把位置向量加到Token Embedding上,而是通过“旋转”Q、K向量,让Attention天然感知相对位置信息。


十、RoPE到底在做什么?

可以把它简单理解成:

Token

↓

生成 Q / K

↓

根据 Token 所处位置

↓

对 Q / K 进行不同角度的旋转

↓

计算 Attention

例如:

Token A
Position = 1
        ↓
Q/K旋转 θ₁

Token B
Position = 2
        ↓
Q/K旋转 θ₂

两个 Token 之间的:

相对位置

就会体现在:

Q 与 K 的关系

之中。


十一、为什么RoPE特别适合Attention?

这是 RoPE 最关键的地方。

传统方式:

Token Embedding
       +
Position Encoding
       ↓
Attention

RoPE:

Token
 ↓
Q / K
 ↓
根据位置旋转
 ↓
Attention

因此:

位置信息直接进入Attention计算过程。

这使得模型能够更自然地理解:

谁在前面?

谁在后面?

两个Token相距多远?

两个Token之间的相对位置关系是什么?

十二、绝对位置 vs 相对位置

位置编码还有一个非常重要的分类:

Absolute Position

告诉模型:

这个Token在第10位。

例如:

Token A → Position 10

Relative Position

告诉模型:

Token A和Token B相距5个位置。

例如:

A ← 5个Token → B

对于自然语言来说:

相对位置往往更加重要。

因为很多语言关系:

不是:

“这个词是第几个?”

而是:

“这个词距离另一个词有多远?”

这也是:

RoPE非常重要的原因之一。


十三、位置编码与长Context有什么关系?

这也是 Agent 开发工程师必须关注的问题。

假设:

模型训练:

最大长度:4K

现在却要求:

输入:128K

这时候:

位置编码就会遇到:

位置外推问题。

简单理解:

模型原来只学习过:

Position 0 ~ 4095

现在突然要求:

Position 0 ~ 128000

模型:

可能无法很好理解:

超出训练范围的位置关系。

因此:

长Context不仅仅是“把窗口做大”。

还需要解决:

Position Encoding
+
Attention
+
KV Cache
+
训练策略

等一系列问题。


十四、为什么位置编码对Agent非常重要?

Agent并不是只处理一句话。

一次完整 Agent 执行可能包含:

System Prompt

↓

User Prompt

↓

历史对话

↓

Memory

↓

RAG结果

↓

Tool调用结果

↓

Agent规划

↓

中间推理信息

↓

最终回答

最终可能形成:

几十K Token

甚至:

100K+

这时候:

Token的位置关系变得非常重要。

例如:

System Prompt
        ↓
User需求
        ↓
RAG知识
        ↓
Tool结果
        ↓
历史对话
        ↓
最终问题

模型需要知道:

哪些内容距离当前问题更近?

哪些内容是早期上下文?

哪些内容是最新信息?

这就是:

Position Encoding在Agent中的实际价值。


十五、Position Encoding与RAG

RAG同样存在:

Query

↓

检索

↓

Top-K Documents

↓

拼接Context

↓

LLM

例如:

System Prompt
+
用户问题
+
Document 1
+
Document 2
+
Document 3
+
Document 4

这些内容:

不仅需要:

语义相关。

还需要:

位置合理。

例如:

用户问题

↓

最相关文档

↓

次相关文档

↓

补充文档

通常比:

大量无关内容

↓

用户问题

↓

关键文档

更加容易让模型正确利用上下文。

因此:

RAG优化不仅是Embedding和Vector DB的问题,也是Context Position设计的问题。


十六、Position Encoding对Agent开发工程师意味着什么?

开发 Agent 时:

你通常:

不会:

手动编写RoPE

但你必须:

理解:

Context为什么有顺序?

为什么RAG文档不能无脑堆?

为什么System Prompt需要合理布局?

为什么长Context可能出现性能下降?

为什么Context Window扩大不等于理解能力无限扩大?

这些问题:

最终都与:

Token
Attention
Position Encoding
Context

有关。

这就是:

大模型底层原理 → Agent工程实践

之间真正的连接。


十七、Position Encoding完整知识链

把本节内容串起来:

Token
  ↓
Token Embedding
  ↓
“我是谁?”
  ↓
+
Position Encoding
  ↓
“我在哪里?”
  ↓
Q / K / V
  ↓
Attention
  ↓
理解Token之间的关系
  ↓
Transformer
  ↓
上下文理解
  ↓
LLM
  ↓
Agent

可以用一句非常简单的话记忆:

Embedding解决“是什么”,Position Encoding解决“在哪里”,Attention解决“和谁有关”。

这三者:

共同构成:

Transformer理解语言的重要基础。


十八、Agent开发工程师需要掌握到什么程度?

至少需要理解:

✅ 为什么 Transformer 需要位置编码

✅ Attention为什么天然缺少顺序信息

✅ Token Embedding 与 Position Encoding 的区别

✅ Sinusoidal Position Encoding

✅ Learned Position Embedding

✅ Absolute Position 与 Relative Position

✅ RoPE 的基本原理

✅ RoPE为什么适合现代LLM

✅ Position Encoding与长Context的关系

✅ Position Encoding对RAG和Agent的影响

不要求:

能够:

手写完整RoPE实现。

但必须:

能够从工程角度理解它为什么存在,以及它解决什么问题。


十九、面试题

问题1:为什么Transformer需要Position Encoding?

参考答案:

因为Self-Attention本身主要计算Token之间的相关性,并不会天然记录Token在序列中的绝对位置和顺序关系。Position Encoding为Token加入位置信息,使模型能够理解词语的先后关系和距离关系。


问题2:Token Embedding和Position Encoding有什么区别?

参考答案:

Token Embedding表示Token的语义特征,回答“这个Token是什么”;Position Encoding表示Token在序列中的位置,回答“这个Token在哪里”。两者共同构成Transformer的输入表示。


问题3:什么是RoPE?

参考答案:

RoPE即Rotary Position Embedding,是一种旋转位置编码方法。它通过根据Token位置对Q、K向量进行旋转,将位置信息融入Attention计算,使模型能够更自然地建模相对位置信息。


问题4:为什么长Context会给Position Encoding带来挑战?

参考答案:

模型训练时通常存在一定的上下文长度范围。当推理时的Context明显超过训练长度,模型可能遇到位置外推问题,导致对远距离Token之间关系的建模能力下降。因此长Context不仅需要扩大Context Window,还涉及位置编码、Attention和训练策略等问题。


问题5:Position Encoding为什么和RAG有关?

参考答案:

RAG会把检索到的多个文档拼接到Context中。文档在Context中的位置会影响模型对其信息的利用,因此RAG不仅要关注Embedding相似度和检索质量,也需要合理设计Context组织和信息排序。


本节总结

Position Encoding解决的是Transformer中的一个基础问题:

模型如何知道Token的顺序?

Token Embedding告诉模型:

“我是什么。”

Position Encoding告诉模型:

“我在哪里。”

Attention告诉模型:

“我和谁有关。”

从最初的Sinusoidal Position Encoding,到Learned Position Embedding,再到现代大模型广泛采用的RoPE,位置编码不断演进。

对于Agent开发工程师来说,真正需要理解的不是复杂的数学公式,而是:

位置编码最终决定了模型如何理解Context中的空间关系,而Context又是Agent的核心运行环境。

因此:

Token → Embedding → Position Encoding → Attention → Context → Agent

是一条非常重要的底层技术链。

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐