变压器网络中位置余弦编码背后的直觉是什么?

机器算法验证 自然语言 词嵌入 嵌入 机器翻译
2022-04-03 00:21:22

我不明白如何将余弦编码/函数添加到词向量嵌入的每个维度,使网络能够“理解”每个词在句子中的位置。

它背后的直觉是什么?将这些值添加到词嵌入中对我来说似乎有点违反直觉,它们是两个非常不同的东西。

是否对单个示例没有意义,但是为数千/数百万个输入句子一遍又一遍地添加相同的值将使网络能够将其分离?

本质上,句子中不同位置的同一个词会有略微不同的嵌入,这就是网络能够捕获位置信息的地方?在我看来,连接余弦嵌入而不是添加它会更直观。

非常感谢

1个回答

在位置编码中,您使用不同的频率波对维度进行编码。连同一个位置(在这个波上),这为您提供了与每个输入相对应的编码。随后将编码添加到输入中。

这个过程改变了两个嵌入向量之间的角度。假设您的单词嵌入了一个向量:e1,e2,,ed. 如果没有位置编码,那么无论单词在句子中的位置如何,同一单词的嵌入向量之间的角度将始终为 0。

现在,您使用位置编码更改向量p1,p2,,pdp1,p2,,pd对于同一个词的句子中的两个不同位置。现在角度变为:

cos(α)=i=1d(ei+pi)(ei+pi)(j=1d(ej+pj)2)(j=1d(ej+pj)2)

根据位置的不同,角度或多或少地偏离零。

为什么不串联?串联不仅仅是改变角度。它将使距离正交维度。在上面的过程中,我们正在改变向量:也许,以不同的方式缩放它们的尺寸。这有效地改变了它们的长度和角度。