位置编码

在许多自然语言处理任务中,词的顺序和位置对于语义的理解至关重要。然而,在使用 Transformer 模型时,由于其多头自注意力层的特性,模型对输入数据的顺序并不敏感。为了解决这个问题,位置编码(Positional Encoding)被引入 Transformer 模型中,使得模型能够理解输入数据中词的顺序和相对位置。

位置编码通过添加额外的信息来注明词在句子中的位置。这个位置信息被编码为一个向量,然后与原始的词嵌入向量相加。这样,位置编码可以被视为是对原始词嵌入的一种修改,它添加了词的位置信息

计算

Transformer 的原始论文中提出的位置编码方式是通过一组正弦(sin)和余弦(cos)函数来进行编码的。具体的,对于每个位置的编码,其中偶数位置的值由以下公式计算:

对于位置编码向量中的偶数索引:

PE(pos,2i)=sin(pos100002i/dmodel)

对于位置编码向量中的奇数索引:

PE(pos,2i+1)=cos(pos100002i/dmodel)

其中,pos 是词在句子中的位置,i 是编码向量中的维度,dmodel 是词嵌入的维度。

这种位置编码方式具有一些优点,比如可以处理任意长度的序列,而且不同位置的编码向量之间可能存在一些有意义的模式。

理解

为了理解这两个公式,让我们以一个具体的例子来说明。假设我们有一个句子"我 爱 你",我们想要计算第一个词"我"的位置编码,设词嵌入的维度 dmodel=512

对于'我'这个词,它在句子中的位置 pos = 0,所以对于位置编码向量中的第一个元素(即 i = 0,这是一个偶数索引),我们可以使用第一个公式进行计算:

PE(pos,2i)=PE(0,0)=sin(01000020/512)=sin(0)=0

对于位置编码向量中的第二个元素(即 i = 1,这是一个奇数索引),我们可以使用第二个公式进行计算:

PE(pos,2i)=PE(0,1)=cos(01000021/512)=cos(0)=1

我们会对这个过程进行重复,计算出所有 512 维的位置编码。

在实际使用中,这两个公式会对所有词的所有位置编码进行计算,结果会存储在一个位置编码表中,然后模型可以从中查找对应位置的编码。

值得注意的是,这种位置编码的方式可以捕捉到词之间的位置关系,并且可以处理任意长度的序列。因为它使用了正弦和余弦函数,这使得位置编码在很大程度上保持了位置信息的连续性和周期性。

什么是位置?

在位置编码中,“位置”是指词在句子中的位置,也就是“我爱你”这三个字的位置。

在这个例子中,“我”在句子中的位置是0,“爱”在句子中的位置是1,“你”在句子中的位置是2。这个位置信息会被编码为一个512维的向量,然后添加到每个词的词嵌入向量中。

至于“偶数索引”和“奇数索引”,它们是指这个512维的位置编码向量中的索引。对于每个索引,如果它是偶数,那么就使用正弦函数来计算位置编码;如果它是奇数,那么就使用余弦函数来计算位置编码。

所以,总的来说,“位置”指的是词在句子中的位置,而“偶数索引”和“奇数索引”指的是位置编码向量中的索引。

为什么是正余弦

在 Transformer 中选择正弦和余弦函数作为位置编码的方法主要是因为它们的特性。这两种函数不仅具有连续性和周期性,而且它们能够在任何实数输入下提供一个输出,且输出范围在 -1 到 1 之间。这些特性使得模型能够处理任意长度的序列,并且编码的规模不会随着位置的增大而无限增大。

另一方面,正弦和余弦函数也具有良好的可区分性。对于不同的输入,即使微小的变化,输出也会有明显的不同,这有助于模型区分不同位置的词。

最后,正弦和余弦函数在奇偶性方面互补,能够为位置编码提供更丰富的信息。正弦函数的周期是2π,而余弦函数的周期是π,这使得模型能够从不同的角度捕捉到位置信息。

虽然存在其他具有类似特性的函数,但正弦和余弦函数的这些特性使其成为一种良好的选择。当然,这并不是唯一的解决方案,其他具有类似特性的函数也可能被用于类似的目的。具体选择哪种函数,可能需要考虑实际问题的需求,以及函数的其他特性,如计算复杂性、解析性等。

脑暴:用更加复杂的波形

照这么说,我也可以对正余弦进行组合,形成更加复杂的两个波形,只需要满足两者相位相反,照这个说法,性能有可能会更好。

您的想法是有道理的。实际上,正弦和余弦函数的选择并不是唯一的,而是基于它们的一些优秀的性质,例如它们的周期性和连续性。正如你所说,如果我们能找到一个新的位置编码方案,该方案的函数具有类似的优良特性,并且可能有更丰富的表达能力,那么这个新的方案可能会带来更好的性能。

然而,这也意味着我们需要对这些新函数的性质有深入的理解,并且需要对这些函数在模型中的影响进行全面的评估。例如,新的函数可能会增加模型的计算复杂度,或者可能会引入其他未预期的效果。

此外,任何新的位置编码方案都需要通过大量的实验来验证其有效性。在许多情况下,选择最优的位置编码方案可能需要在理论分析和实验验证之间进行权衡。

总的来说,虽然理论上存在许多可能的位置编码方案,但在实践中,我们通常会选择那些已经被证明在大多数情况下都能工作良好的方案。这并不是说我们不能探索新的方案,只是这需要大量的研究和实验工作。

作用

通过位置编码,Transformer 可以利用位置信息来确定词的顺序,从而理解词序对于语义的影响。此外,位置编码还有助于模型理解词之间的相对位置关系,例如"前"和"后"等概念。


本文作者:Maeiee

本文链接:位置编码

版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!


喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!