位置编码(PE)是如何在Transformers中发挥作用的

在人类的语言中,单词的顺序和它们在句子中的位置是非常重要的。如果单词被重新排序后整个句子的意思就会改变,甚至可能变得毫无意义。

Transformers不像LSTM具有处理序列排序的内置机制,它将序列中的每个单词视为彼此独立。所以使用位置编码来保留有关句子中单词顺序的信息。

什么是位置编码?

位置编码(Positional encoding)可以告诉Transformers模型一个实体/单词在序列中的位置或位置,这样就为每个位置分配一个唯一的表示。虽然最简单的方法是使用索引值来表示位置,但这对于长序列来说,索引值会变得很大,这样就会产生很多的问题。

位置编码将每个位置/索引都映射到一个向量。所以位置编码层的输出是一个矩阵,其中矩阵中的每一行是序列中的编码字与其位置信息的和。

如下图所示为仅对位置信息进行编码的矩阵示例。

Transformers 中的位置编码层

假设我们有一个长度为 L 的输入序列,并且我们需要对象在该序列中的位置。位置编码由不同频率的正弦和余弦函数给出:

d:输出嵌入空间的维度

pos:输入序列中的单词位置,0≤pos≤L/2

i:用于映射到列索引 其中0≤i<d/2,并且I 的单个值还会映射到正弦和余弦函数

在上面的表达式中,我们可以看到偶数位置对使用正弦函数,奇数位置使用 余弦函数。

从头编写位置编码矩阵

下面是一小段使用NumPy实现位置编码的Python代码。代码经过简化,便于理解位置编码。

 

完整文章:

https://avoid.overfit.cn/post/dc84ff7287e540b48da2eadfabd306bc

posted @   deephub  阅读(130)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示