为什么在 Transformer 模型的 Positional Encodings 中使用 10000 作为分母?

数据挖掘 机器学习 词嵌入 变压器
2022-02-12 21:34:15

我正在研究All you need is Attention论文,虽然位置编码的动机是有道理的,并且其他 stackexchange 答案让我了解了它结构的动机,但我仍然不明白为什么1/10000被用作比例因子pos一句话。为什么选择这个号码?

在此处输入图像描述

1个回答

Amirhossein 的博客文章很好地解释了位置编码的直觉。

我从博客中得出的结论是:只考虑一对正弦曲线(正弦和余弦)。假设我们在 1 个完整的周期内(例如 0 到 2pi),得到的编码基本保证是唯一的。即有一个从实数(1、1.5、2、2.34 等)x 到一对(sin(x), cos(x))的一对一映射。因此,编码到这个 2 元组向量。

因此, 的目的10000可能只是为了确保整个周期非常大。

如果您绘制sin(1/10000*x),您将观察到完成 1 个完整周期,x >50k。这足以对可能具有 <1k 个单词的单词进行编码。

请注意,根据原始方程,第一对正弦曲线是sin(pos)cos(pos)在这种情况下,位置编码可以说不是唯一的。即可能有两个位置(注意:它们是整数)具有相同的编码,尽管只有当我们有一个非常长的句子使得位置具有完全相同的编码时才会发生这种情况。尽管有人可能会争辩说,pi这是不合理的,但任何整数位置都不太可能具有相同的编码。