这是最近一段很棒的 Youtube 视频,它深入介绍了位置嵌入,并带有精美的动画:
Transformer 神经网络视觉指南 -(第 1 部分)位置嵌入
让我们尝试理解计算位置嵌入的公式的“sin”部分:
这里“pos”指的是“单词”在序列中的位置。P0指的是第一个词的位置embedding;“d”表示单词/令牌嵌入的大小。在此示例中,d=5。最后,“i”指的是嵌入的 5 个单独维度中的每一个维度(即 0、1、2、3、4)
虽然“d”是固定的,但“pos”和“i”会变化。让我们尝试理解后两者。
“pos”
如果我们绘制一条正弦曲线并改变“pos”(在 x 轴上),您将在 y 轴上得到不同的位置值。因此,具有不同位置的单词将具有不同的位置嵌入值。
但有一个问题。由于“sin”曲线间隔重复,您可以在上图中看到,P0 和 P6 具有相同的位置嵌入值,尽管位于两个非常不同的位置。这就是方程中“i”部分发挥作用的地方。
“i”
如果改变上面等式中的“i”,您将得到一堆频率不同的曲线。读取不同频率下的位置嵌入值,结果会在 P0 和 P6 的不同嵌入维度上给出不同的值。
加上这个位置编码,会破坏原来的“特征表达”里面的数据含义吗?
- 空间编码是以加法的方式直接加入到初始表达中,不改变原始表达的值。
- 初始表达代表每个关节的抽象特征,空间编码代表每个关节的空间位置信息。两者在语义上是不同的,直接加法不会使原表达失效。
- 加法之后,初始表达中关键点自己的特征被保留了下来,同时新增了空间位置的先验信息。
- 对注意力机制来说,有了空间位置编码,可以更区分不同关键点的表示,也更容易学习空间结构。