变压器模型中的位置编码是什么?


23

我是ML的新手,这是我在这里的第一个问题,对不起,如果您的问题很傻,对不起。

我正在尝试阅读和理解本文注意,您所需要的只是其中的一幅图片:

在此处输入图片说明

我不知道什么是位置编码。通过听一些youtube视频,我发现它是一个嵌入词,在其中具有单词的含义和位置,并且与sin(x)cos(x)

但我不知道它到底是什么以及它到底在做什么。所以我在这里寻求帮助。提前致谢。

Answers:


31

wpos[0,L1]w=(w0,,wL1)ewdmodel=4

ew=ew+[sin(pos100000),cos(pos100000),sin(pos100002/4),cos(pos100002/4)]=ew+[sin(pos),cos(pos),sin(pos100),cos(pos100)]

其中位置编码的公式如下 与(因此在原纸)。

PE(pos,2i)=sin(pos100002i/dmodel),
PE(pos,2i+1)=cos(pos100002i/dmodel).
dmodel=512i[0,255]

之所以使用这种技术,是因为在所提出的体系结构中没有词序的概念(第一个词,第二个词等)。输入序列的所有单词都以没有特殊顺序或位置的方式馈入网络(与普通的RNN或ConvNet体系结构不同),因此模型不知道单词的顺序。因此,与位置相关的信号会添加到每个词嵌入中,以帮助模型合并词的顺序。根据实验,这种增加不仅避免破坏嵌入信息,而且还增加了重要位置信息。在RNN的情况下,我们将单词顺序地馈送到RNN,即在步骤馈送第个单词,这有助于模型合并单词的顺序。nn

Jay Alammar的这篇文章以出色的可视化解释了这篇论文。不幸的是,其当前位置编码示例是不正确的(它对嵌入维度的前半部分使用,对下半部分使用,而不是对偶数索引使用,对奇数索引使用)。sincossincos


1
你也有这样优秀的文章纯粹是专注于位置嵌入:kazemnejad.com/blog/...
勒芒奥巴迪亚

6

位置编码是单词值及其在句子中位置的重新表示(假定开头和结尾或中间的开头和开头不相同)。

但是您必须考虑到句子的长度可以是任意长度,因此,如果句子的长度不同,那么说“ X”是句子中的第三个单词就没有意义:3词句中的第3个完全是在20个单词的句子中不同于第三。

位置编码器的作用是获得和函数的循环特性的帮助,以返回单词在句子中的位置信息。sin(x)cos(x)


2
谢谢。您能详细说明一下这种位置编码器是如何用和吗?sincos
Peyman

1

为了增加其他答案,OpenAI的ref实现在自然的日志空间中对其进行计算(我认为是为了提高精度。不确定他们是否可以使用以2为底的日志)。他们没有提出编码。这是用C重写为for-for循环的PE查找表生成:

int d_model = 512, max_len = 5000;
double pe[max_len][d_model];

for (int i = 0; i < max_len; i++) {
   for (int k = 0; k < d_model; k = k + 2) {
      double div_term = exp(k * -log(10000.0) / d_model);
      pe[i][k] = sin(i * div_term);
      pe[i][k + 1] = cos(i * div_term);
   }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.