为什么变压器位置编码同时使用正弦和余弦?

数据挖掘 机器学习 nlp 变压器 注意机制
2021-09-22 19:26:50

在变压器架构中,他们使用位置编码(在这个答案中进行了解释,我知道它是如何构造的。

我想知道为什么它需要同时使用正弦和余弦而不是只使用一个或另一个?

1个回答

如果您阅读了上述答案,我想您已经有了需要一种编码方式来表示输入中单词位置的概念。

为了不使用整数序列 (1, 2, 3, ... n),因为值和大小没有边界,浮点数友好是首选。但是,仅使用有限的(0 到 1)选项意味着您需要事先知道序列的长度。

这就是作者提出循环解决方案的原因。Sincos函数可以从这个想法中受益,因此是这里的选择。但是为什么同时使用两者而不是一个呢?

原始论文中没有明确回答,但是如果您阅读这篇文章(我敦促您这样做),原因是您可以使用线性变换从两个函数转到具有偏移量的相同函数:

在此处输入图像描述

如果您想知道为什么提供此属性很有用,如果您深入研究文章下方的评论,您会找到您寻求的解释:

我想这个编码框架使模型能够通过简单地生成一个仅依赖于 k 的变换矩阵来关注相对位置。为了清楚起见,我假设给定任何输入 PE(pos),该模型可以通过将 PE(pos) 与权重矩阵 T(变换矩阵)相乘来创建以 PE(pos+k) 为目标的注意力查询矩阵 Q。权重矩阵 T 可以是单个前馈层的参数,可以在训练过程中学习。

基本上,该模型可以学习一个不依赖于t作为部分的矩阵来概括所有编码值范围。

我们可以只使用其中之一吗?

您可以对位置的值进行编码,是的。但是你不会有这个线性变换可用的属性,这似乎是学习过程成功的一个非常重要的部分。