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

为什么词嵌入可以和位置编码相加

一、引言

一个非常朴素的直觉是:

词嵌入是语义,位置编码是词的位置。这两者本身是不同的量纲,就跟身高和体重一样,他们之间有关系,而且我们可以找到他们之间的关系,比如BMI,但是直接把身高(cm)和体重(kg)加起来,就很奇怪了

所以在回答这个问题之前,我们必须先看看‘位置’这个信息是如何被编码的。

我们要找一个位置信息,要保证两个点

  • 位置唯一,这样不会混淆
  • 不能过大,不然位置的数值会把词嵌入的信息给淹没或者毫无贡献

二、正余弦编码

$$PE_{(pos,2i)} = \sin\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right)$$ $$PE_{(pos,2i + 1)} = \cos\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right)$$

- $pos$:词的绝对位置,表示第几个词。

- $i$:代表编码向量的维度索引。这意味着一个位置编码向量 $PE$ 的不同维度上,应用着不同的计算方式。范围是 $d_{\text{model}}/2$ 到 $0$ 之间。

- $d_{\text{model}}$:词嵌入的维度,例如512维。

这个公式的意思可以概括为:用两个有界的函数,通过控制token在不同维度的波长,从而实现高中低维度的数值变化快慢,进而实现向量的不同维度上编码从细到粗粒度的位置信息,共同构成完整的位置表示

三、正余弦编码的特性

3.1 有界性

如果我们直接0,1,2,3,...这样持续的表示位置,很快就会出现位置的值和向量的值差距过大而失去信息。所以我们的位置必须有边界,但是又能同时表示足够的长度。

正弦和余弦函数的值域永远被限制在 [-1, 1] 之间。这就保证了位置编码永远不会因为数值过大而‘淹没’语义信息。它从数学上保证了‘位置’这个信息的‘体重’不会无限增长。

3.2 唯一性和周期性

绝对位置信息

为了明白沿着编码维度单调降低的频率与绝对位置信息的关系,让我们打印出0, 1, . . . , 7的二进制表示形式。正如所看到的,每个数字、每两个数字和每四个数字上的比特值[0,1]在第一个最低位、第二个最低位和第三个最低位上分别交替。
for i in range(8):print(f'{i}的二进制是:{i:>03b}')
0的二进制是:000
1的二进制是:001
2的二进制是:010
3的二进制是:011
4的二进制是:100
5的二进制是:101
6的二进制是:110
7的二进制是:111
在二进制表示中,较高比特位的交替频率低于较低比特位,与下面的热图所示相似,只是位置编码通过使用三角函数在编码维度上降低频率。由于输出是浮点数,因此此类连续表示比二进制表示法更节省空间。
P = P[0, :, :].unsqueeze(0).unsqueeze(0)
d2l.show_heatmaps(P, xlabel="Col (encoding dim)",ylabel='Row (position)', figsize=(3.5, 4), cmap='Blues')

image

 相对位置信息

为什么需要cos,这涉及到这个公式的另一个特性,就是相对位置的表示能力。

除了捕获绝对位置信息之外,上述的位置编码还允许模型学习得到输入序列中相对位置信息。这是因为对于任何确定的位置偏移\(\delta\),位置\(i + \delta\)处的位置编码可以线性投影位置\(i\)处的位置编码来表示。
这种投影的数学解释是,令\(\omega_j = 1/10000^{2j/d}\),对于任何确定的位置偏移\(\delta\),\((10.6.2)\)中的任何一对\((p_{i,2j}, p_{i,2j+1})\)都可以线性投影到$(p_{i+\delta,2j}, p_{i+\delta,2j+1})$:

$ \[\begin{bmatrix} \cos(\delta\omega_j) & \sin(\delta\omega_j) \\ -\sin(\delta\omega_j) & \cos(\delta\omega_j) \end{bmatrix} \begin{bmatrix} p_{i,2j} \\ p_{i,2j+1} \end{bmatrix} = \begin{bmatrix}
\cos(\delta\omega_j)\sin(i\omega_j) + \sin(\delta\omega_j)\cos(i\omega_j) \\
-\sin(\delta\omega_j)\sin(i\omega_j) + \cos(\delta\omega_j)\cos(i\omega_j)
\end{bmatrix} \\
=
\begin{bmatrix}
\sin((i + \delta)\omega_j) \\
\cos((i + \delta)\omega_j)
\end{bmatrix} \\
=
\begin{bmatrix}
p_{i+\delta,2j} \\
p_{i+\delta,2j+1}
\end{bmatrix},
\] $
\(2 \times 2\)投影矩阵不依赖于任何位置的索引\(i\)。

http://www.hskmm.com/?act=detail&tid=23712

相关文章:

  • 【比赛记录】2025CSP-S模拟赛57
  • 实用指南:软件设计师——04 操作系统
  • 20251001国庆模拟
  • 线段树合并 [POI 2011] ROT-Tree Rotations
  • CSS的选择器 - 指南
  • C# Net9的模块初始化器(Module Initializer)
  • 离线轻量大模型,Ollama部署到docker方法
  • 应用拓扑讲义整理 Chapter 6. 单纯复形(Simplicial Complexes)
  • 完整教程:华为麒麟9010、9020、9030、9040系列芯片的性能参数及其与高通芯片的对比
  • AQS(ReentrantLock)源码浅析
  • 05. 事件处理
  • 总结问题2 软工10.3
  • BPL包无法调试的问题
  • 信息科学与数据分析:真正的区别是什么?
  • 最短路练习
  • 杂题,为什么博客的标题必须互异
  • 学习笔记:压位高精
  • 吉司机 + 历史和练习
  • 近期杂题,怎么重名了
  • vp 记录 edu 181
  • 状压 DP
  • 近期杂题
  • 学习笔记:分拆数与 Ferrers 图
  • DDP 与全局平衡二叉树
  • 并查集 D. Shark [Codeforces Round 484(Div. 2)]
  • 实用指南:Spark核心技术解析:从RDD到Dataset的演进与实践
  • 随笔0
  • 加密算法基本原理、特点及采用场景
  • Hackersdaddy ROUGE CTF 2025 完整解题记录
  • AI元人文系列:透明推理者——下一代大模型架构设计