Python----循环神经网络(Transformer ----绝对位置编码(Absolute-PositionEncoding))
位置编码
传统的循环神经网络(RNNs)通过其固有的序列处理机制(即按顺序处理输入)来自然地捕捉序列中的顺序信息。但对于 Transformer 来说,情况就不同了。Transformer 模型的核心是自注意力机制 (Self-Attention),它允许模型同时处理序列中的所有词,而不是像 RNN 那样按顺序处理。这意味着 Transformer 本身并没有内置的机制来理解词语在序列中的位置或它们之间的相对顺序。
例如,在句子“猫追老鼠”和“老鼠追猫”中,词语是相同的,但它们的顺序不同,含义也完全不同。如果 Transformer 仅仅依赖于词语的语义信息,而没有位置信息,它可能无法区分这两个句子的含义。
位置编码的作用:
为模型提供了关于序列中每个词语的位置信息。通过将位置编码添加到词嵌入中,模型就能够同时理解词语的语义内容和它们在序列中的位置,从而正确处理词语之间的顺序关系。
绝对位置编码
绝对位置编码是最常见和最直接的位置编码方法之一。它的目标是为序列中的每个位置分配一个唯一的向量,这个向量表示该位置的绝对位置信息。然后,这个位置编码向量会与对应的词嵌入向量相加,形成一个包含语义和位置信息的复合向量,再输入到 Transformer 模型中。
在绝对位置编码中,每个单词都有一个独立的位置嵌入向量,表示其在序列中的绝对位置。这个位置嵌入向量可以通 过学习得到,也可以采用一些规则或者预定义的方式生成。
绝对位置编码是 Transformer 架构中一个至关重要的组件,它弥补了自注意力机制在处理序列顺序信息上的不足。通过巧妙地利用正弦和余弦函数,它为模型提供了丰富的位置信息,使得 Transformer 能够成功地处理各种序列到序列的任务,如机器翻译、文本摘要和问答系统等。

Transformer 原始论文中使用的绝对位置编码采用正弦 (sine) 和余弦 (cosine) 函数来生成位置编码向量。这种选择有几个关键优势:
唯一性: 对于序列中的每个位置,都生成一个唯一的编码。
连续性: 随着位置的增加,编码值会平滑地变化。这有助于模型学习和泛化到更长的序列。
可扩展性: 正弦和余弦函数可以轻松地为任意长度的序列生成位置编码,而不需要预先定义最大序列长度。
表示相对位置的能力: 虽然是“绝对”位置编码,但通过三角函数的性质,两个不同位置的编码向量的线性组合或点积可以间接表示它们之间的相对距离。例如,sin(x+k)=sin(x)cos(k)+cos(x)sin(k),这意味着位置 x+k 的编码可以通过位置 x 的编码来表示,其中包含了关于 k 的信息。这使得模型能够更容易地学习到相对位置关系,即使它直接接收的是绝对位置信息。
正余弦位置编码

这种方法的优点是可以利用正余弦函数的周期性和相位差来表示位置之间的相对关 系。
两个位置编码之间的 关系只和它们的位置差k有关,而与它们的绝对位置无关。
例如两个 love位置编码后,它俩之间的编码信息关系只和他俩的距离 ,即6有关。
同时,不同的维度i对应着不同的频率,因此,位置编码可以捕捉到不同尺度的位置 关系。
更多推荐


所有评论(0)