· 模型原理

位置编码:让注意力理解 Token 在序列中的位置

从 X = E + P 走到 RoPE:为什么 Self-Attention 天生看不见顺序,位置信息又如何只靠点积留下相对距离。

模型原理 · 图文笔记
16:53原片时长
12内容页
0官方章节 / CC 字幕
10重绘矢量图
主线:Self-Attention 对输入做任何位置置换,分数矩阵只是跟着换行换列,数值一个不变——它天生看不见顺序。位置编码要做的就是把这个缺失的维度补回去:先用「加法」把位置向量并进输入,再用「旋转」把位置搬进 Q·K 内部,让注意力分数天然只依赖相对距离。

01 问题:看得见 Token,看不见顺序

RNN 逐步传递隐状态,前一个位置的 h 传给后一个位置,顺序被写进计算过程本身,代价是 N 步只能串行。Transformer 让每个 Token 的 Query 与所有 Key 算匹配分数、再汇总 Value,任意两个 Token 都能同时处理——并行换来的效率,成本就是顺序在计算里彻底消失了。

图 1 · RNN 的串行链与 Self-Attention 的全连接矩阵
RNN 的串行链 vs Self-Attention 的全连接RNN:顺序天然存在h0x₀h1x₁h2x₂h3x₃隐状态逐位往下传:谁先谁后被写进计算过程本身,所以每一步都无法并行,但也天然带着顺序。代价:N 步必须串行,长序列无法并行展开。Self-Attention:顺序缺失x₀x₀x₁x₁x₂x₂x₃x₃每个格子 = 两个 Token 向量的相似度任意两格都能同时算,N×N 全部并行。但分数只和向量内积有关:score(i,j) = ⟨qᵢ, kⱼ⟩,与 i、j 无关交换任意两个 Token 的位置,分数矩阵只是跟着换行换列,数值一个都不变 —— 它无法区分「先来」和「后到」。结论:Self-Attention 看得见有哪些 Token,看不见它们以什么顺序出现。

换个角度看同一件事:把输入序列的顺序整体打乱,Self-Attention 的输出只会跟着打乱,数值一个不变。模型对顺序等变(equivariant),换个说法就是——它对顺序不敏感。对一个需要理解语序的模型来说,这等于少了一整维信息。

把 dog bites man 里 dog 和 man 换个位置,三个 Token 一个没变,含义却正好反过来。这就是问题的最小可复现例子。

图 2 · 同一组 Token、不同顺序,语义反转
同一组 Token,只交换位置,含义完全相反dog位置 0bites位置 1man位置 2狗咬人语义:A 作用于 Bman位置 0bites位置 1dog位置 2人咬狗语义:B 作用于 AAttention 能知道:序列里出现了 dog、bites、man(三个向量都在)Attention 不会知道:谁在 bites 之前、谁在之后 —— 因为分数只比较向量,不比较下标位置信息必须在进入第一层 Self-Attention 之前就补进表示里。
16:53片长
12内容页
1013s时间轴总长
5.789秒 / 帧

02 加法入场:Xᵢ = Eᵢ + Pᵢ

Embedding 负责表示「这是什么 Token」,位置编码负责表示「它出现在第几个位置」,两者相加后一起送进模型。同一个 dog 放在位置 0 和位置 2,得到的 X 就不同,后续生成的 Q、K、V 也随之改变——Attention 这才同时拿到了语义与顺序。

Xᵢ = Embedding(xᵢ) + PositionalEncoding(i)  Xdog,0 = Edog + P₀ ≠ Xdog,2 = Edog + P₂

为什么不拼接?拼接看起来更直观,代价是每个 Token 的向量维度翻倍:位置和语义各占一半维度,生成 Q/K/V 的参数矩阵跟着变宽,参数量与计算量一起上涨。相加保持 N × d_model 的形状不变,后续的 Transformer Block 可以原样接收。被叠进同一个向量里的两类信息,后续的线性映射仍然可以按训练需要自行组合。

图 3 · 拼接与相加的维度代价(按 d_model = 512 示例)
为什么用相加而不是拼接:交给后面的维度成本030060090012001024拼接 X = [E ; P]512相加 X = E + P拼接把向量长度翻倍,Q/K/V 的参数矩阵随之变宽;相加保持 N × d_model 不变,后续 Block 原样接收。示例按 d_model = 512 计。

03 为什么位置不能直接用 0, 1, 2, 3

最直接的想法是把编号复制到每个维度:Pᵢ = [i, i, …, i]。看起来能用,但三个问题随之而来。

图 4 · 顺序编号的三个问题
把位置直接写成 0, 1, 2, 3 会撞上的三堵墙1模式过于单薄所有维度加上同一个数 i,不同位置之间只有整体大小的差别,没有可利用的位置模式。2数值无界序列越长编号越大,没有上界;归一化到 0~1 又要预先定死一个最大长度。3距离用不上6 − 3 = 3 对人很明显,但 Attention 不会主动做减法,它只接收向量再线性映射与点积。要的不是「编号」,而是维度固定、数值有界、且方便模型读出相对关系的向量。

所以目标很明确:要一个维度固定、数值有界,而且方便模型读出相对关系的位置向量。原片在这里把问题收敛成一句话——如何根据一个位置编号,生成维度固定、数值有界、并且方便模型利用位置关系的向量。后面两种方案(正余弦编码、RoPE)都是对这句话的不同回答。

04 正余弦编码:把位置写成一排快慢不同的波

论文的做法是让位置向量的维度两两一组,每组用一种频率:偶数维写 sin,奇数维写 cos,i 既是分组序号,也是频率编号。

PE(pos, 2i) = sin( pos / 100002i/d_model )  PE(pos, 2i+1) = cos( pos / 100002i/d_model )

以 d_model = 8、pos = 3 为例,四组分母分别是 1、10、100、1000,一个 8 维位置向量就这样被算出来。

图 5 · d_model = 8、pos = 3 时前 8 维的完整取值
d_model = 8、pos = 3 时,前 8 维是怎么算出来的分组分母 D = 10000^{2i/d}角度 pos / D写入向量的两个数第 0 组 → 第 0、1 维10000^(2i/8) = 13 / 1 = 3sin = +0.1411 cos = -0.9900第 1 组 → 第 2、3 维10000^(2i/8) = 103 / 10 = 0.3sin = +0.2955 cos = +0.9553第 2 组 → 第 4、5 维10000^(2i/8) = 1003 / 100 = 0.03sin = +0.0300 cos = +0.9996第 3 组 → 第 6、7 维10000^(2i/8) = 10003 / 1000 = 0.003sin = +0.0030 cos = +1.0000偶数维写 sin、奇数维写 cos,两两一组共用同一个分母 D。

i 越大,分母越大,pos 每增加 1 带来的角度变化就越小——分组本质上是在决定这一组的「快慢」。

图 6 · 四组不同频率的正弦波:位置每前进一格,各维走出的角度完全不同
分组 = 频率:i 越大分母越大,波动越慢-1.0-0.50.00.51.00102030405060位置 pos(同一维度上,波随位置前进)取值D = 1(i = 0,高频)D = 10(i = 1)D = 100(i = 2)D = 1000(i = 3,低频)高频维度:每隔几个位置就转完一圈能分辨相邻位置,走远了数值会重叠。低频维度:相邻位置几乎看不出差别要走很多个位置才转一圈,负责区分远处。多组频率叠在一起,近处和远处的尺度才都能被区分开。

高频维度每隔几个位置就转完一圈,能分辨相邻位置,但走远了数值会重叠;低频维度相邻位置几乎看不出差别,要走很多个位置才转一圈,专门负责区分远处。两组频率搭配起来,近处和远处的尺度才都能被区分开。

05 一个意外收获:点积只剩下相对距离

Attention 真正想知道的是「两个 Token 相隔多远」,而不是「它排第几个」。它不会主动拿位置编号做减法,但一定会做点积——把位置 pos 与 pos+k 的编码点乘,用积化和差展开,pos 就被干净地消掉了。

图 7 · 从 sin·sin + cos·cos 到 Σcos(k/Dᵢ) 的四步
点积为什么只剩下相对距离 k单个维度sin(pos/D)·sin((pos+k)/D)+ cos(pos/D)·cos((pos+k)/D)积化和差= cos( (pos+k−pos)/D )= cos(k / D)对全部维度求和P_pos · P_pos+k= Σᵢ cos(k / Dᵢ)结论pos 被彻底消掉只剩距离 k这份「点积只由距离决定」的性质,正是正余弦编码最值钱的地方。但注意:它成立的前提是位置只以 P 的形式加在输入上(后面 RoPE 会换一种更彻底的写法)。

06 RoPE:把相对距离直接放进 Q·K

既然目标只是相对距离,就不必先造一个位置向量、再费劲让它在点积里抵消掉。RoPE 换掉了位置的入口:不加位置向量,而是在 Q、K 生成之后,按 Token 的位置把它们旋转一个角度。

图 8 · 位置信息在哪一步进入计算:绝对位置编码 vs RoPE
位置信息在哪一步进入计算:两种做法绝对位置编码:先加法,再一起送进 Q / K / VToken xᵢ查表得 Eᵢ+ Pᵢ位置向量线性层生成 Q, K, VQ · K分数里掺进位置位置和语义在进层之前就被绑成一个向量,两者无法分开。→ 「点积只看距离」不再有保证RoPE:不加位置向量,直接在 Q / K 上旋转Token xᵢ查表得 Eᵢ线性层生成 q, k按位置 m 旋转相邻两维一组Q · K分数里只剩相对角位置不进入向量内容,只改变方向;点积时共同的旋转角互相抵消。→ 相对距离「必然出现」同一页给出的三点理由:相对性是自带的、代价极低(不增加参数)、已成为主流方案。

具体做法是把 Query 的相邻两个维度当成一个二维向量,按位置 m 给每组算一个旋转角度,这一组两维乘上旋转矩阵即可。

[ q₁′, q₂′ ]ᵀ = [ [cos θₘ, −sin θₘ], [sin θₘ, cos θₘ] ] · [ q₁, q₂ ]ᵀ

图 9 · 一组相邻维度就是一个二维平面,位置决定旋转角度
一组相邻维度 = 一个二维平面,位置 = 旋转角度q₁q₂θₘqq′位置越靠后 → θₘ 越大;不同维度用不同频率 → 覆盖不同距离范围。每组相邻两维乘一个旋转矩阵q₁′ = cos θₘ · q₁ − sin θₘ · q₂q₂′ = sin θₘ · q₁ + cos θₘ · q₂① 角度由位置决定:位置越靠后,旋转越大。② 每组的频率不同:高频抓近处,低频抓远处。③ Key 做同样的旋转:两者方向可比,点积才能对齐。旋转发生在 Q、K 生成之后,位置因此不进入向量内容,只进入「两者的夹角差」。

Query 和 Key 各自旋转之后,做点积时共同的旋转角互相抵消,分数只受距离 k 影响。这一步的差别值得强调:旋转发生在 Q、K 生成之后,所以位置信息根本没有进入向量内容,它只改变了 Q 与 K 之间的夹角差——「相对距离」从一个可以被学出来的性质,变成了一件在计算结构上必然成立的事。这一页给了三个理由:相对性是自带的(不用指望模型自己学出来)、代价极低(维度不变、不增加参数)、以及已经是主流大模型普遍采用的位置编码方案。

07 小结:补上 Attention 唯一缺的那一维

模型看到的不再只是 dog,而是「位于第 i 个位置的 dog」。位置编码补上的,正是 Attention 唯一看不见的那一维。

图 10 · 全片 12 个内容页的位置与时间轴
全片结构与时间轴(共 12 个内容页)00:00看不见顺序01:32同样三个词02:18相加入场03:16相加 vs 拼接04:03不用编号06:10正余弦编码08:29频率分层09:50点积只剩距离11:28RoPE12:49旋转怎么做13:18进入关系计算15:14总结16:18下一讲预告前 6 分钟解决「为什么需要位置」,中段给公式,最后 3 分钟落到 RoPE 与相对距离。时间来自分镜帧号换算(s/帧 ≈ 5.789),非官方章节,误差约 ±5 秒。
Xᵢ = Eᵢ + Pᵢ入场方式
sin / cos正余弦编码
Σcos(k/Dᵢ)点积只剩距离
RoPE主流方案

下一讲是 Encoder 工作流程:Embedding、位置编码、注意力、多头注意力、Add & Norm、FFN 这些零件,如何拼成一整块 Encoder。

三个容易记错的地方
  • 位置编码加在 Embedding 上,不代表位置信息只影响第一层——它顺着残差流一路往下传。
  • 「点积只由距离决定」是 d_model 维两两配对求和之后的结果(Σcos(k/Dᵢ)),不是单个维度的结论。
  • RoPE 不是正余弦编码的等价改写。它把位置的作用点从输入搬到了注意力内部:位置不再进入向量内容,只进入 Q、K 的夹角差。
取材与还原方式(可核对)
  • 原片 view_points 为空:没有官方章节;CC 字幕数为 0,画面底部带 UP 主自制的硬字幕。骨架因此靠分镜雪碧图逐帧还原。
  • 雪碧图 200 个槽位,逐帧亮度统计显示第 175–199 帧为纯黑填充(最低 15 帧字节完全相同),内容帧共 175 帧,据此取 s/帧 = 1013 ÷ 175 ≈ 5.789,未使用官方章节点校准,时间戳误差约 ±5 秒。
  • 页面标题与要点从幻灯片画面读取;分镜单帧为 480×270,个别小字按上下文补全,非逐字引用,措辞以原片含义为准。
  • 全部 10 张配图为按内容重绘的矢量 SVG:无位图、无 CDN、断网可回看,可无损缩放。
  • 官方 AI 总结接口需登录(返回 -101 账号未登录),未采用;弹幕与评论区未提供可用时间轴。
  • 数据抓取时间:2026-09-22。

出处:哔哩哔哩《位置编码:让注意力理解 Token 在序列中的位置》,UP 主 谦行AIing,所属合集《深度学习》,时长 16:53。

本笔记为个人学习用途的结构化整理与图解重绘,未使用原视频画面;原片允许转载(no_reprint = 0),转载或引用请注明原作者与出处。

分享:
返回文章列表

相关文章

全部文章 »

前向传播与反向传播概述

微调场景下的前向产物、反向传播机制,以及冻结参数与 LoRA 等不同策略对反向计算图的实际影响。