TransFormer--注意力机制:位置编码

TransFormer--注意力机制:位置编码

我们还是以I am good(我很好)为例。在RNN模型中,句子是逐字送入学习网络的。换言之,首先把I作为输入,接下来是am,以此类推。通过逐字地接受输入,学习网络就能完全理解整个句子。然而,Transformer网络并不遵循递归循环的模式。因此,我们不是逐字地输入句子,而是将句子中的所有词并行地输入到神经网络中。并行输入有助于缩短训练时间,同时有利于学习长期依赖。

不过,并行地将词送入Transformer,却不保留词序,它将如何理解句子的意思呢

Transformer也需要一些关于词序的信息,以便更好地理解句子。但这将如何做到呢?

对于给定的句子I am good,我们首先计算每个单词在句子中的嵌入值。嵌入维度可以表示为 d m o d e l d_{model} dmodel。比如将嵌入维度 d m o d e l d_{model} dmodel设为4,那么输入矩阵的维度将是[句子长度×嵌入维度],也就是[3 × 4]。

同样,用输入矩阵X(嵌入矩阵)表示输入句I am good。假设输入矩阵X如下图所示。

如果把输入矩阵X直接传给Transformer,那么模型是无法理解词序的。因此,需要添加一些表明词序(词的位置)的信息,以便神经网络能够理解句子的含义。所以,我们不能将输入矩阵直接传给Transformer。这里引入了一种叫作位置编码的技术,以达到上述目的。顾名思义,位置编码是指词在句子中的位置(词序)的编码。

位置编码矩阵P的维度与输入矩阵X的维度相同。在将输入矩阵直接传给Transformer之前,我们将使其包含位置编码。我们只需将位置编码矩阵P添加到输入矩阵X中,再将其作为输入送入神经网络,如下图所示。这样一来,输入矩阵不仅有词的嵌入值,还有词在句子中的位

置信息。

位置编码矩阵究竟是如何计算的呢?如下所示,Transformer论文"Attention Is All You Need"的作者使用了正弦函数来计算位置编码:

P ( p o s , 2 i ) = s i n ( p o s 1000 0 2 i / d m o d e l ) P(pos, 2i) = sin(\frac{pos}{10000^{ 2i / d_{model} }}) P(pos,2i)=sin(100002i/dmodelpos)

P ( p o s , 2 i + 1 ) = c o s ( p o s 1000 0 2 i / d m o d e l ) P(pos, 2i + 1) = cos(\frac{pos}{10000^{ 2i / d_{model} }}) P(pos,2i+1)=cos(100002i/dmodelpos)

在上面的等式中,pos表示该词在句子中的位置,i表示在输入矩阵中的 位置。下面通过一个例子来理解以上等式,如下图所示。

可以看到,在位置编码中,当i是偶数时,使用正弦函数;当i是奇数时,则使用余弦函数。通过简化矩阵中的公式,可以得出下图所示的结果。

我们知道I位于句子的第0位 ,am在第1位,good在第2位。代入pos值,我们得到下图所示的结果。

最终的位置编码矩阵P如下图所示。

只需将输入矩阵X与计算得到的位置编码矩阵P进行逐元素相加,并将得出的结果作为输入矩阵送入编码器中。

让我们回顾一下编码器架构。下图是一个编码器模块,从中我们可以看到,在将输入矩阵送入编码器之前,首先要将位置编码加入输入矩

阵中,再将其作为输入送入编码器。

以上就是位置编码的全部内容啦!

相关推荐
Victory_orsh3 分钟前
“自然搞懂”深度学习(基于Pytorch架构)——010203
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习
java1234_小锋4 分钟前
PyTorch2 Python深度学习 - 模型保存与加载
开发语言·python·深度学习·pytorch2
Python图像识别6 分钟前
74_基于深度学习的垃圾桶垃圾溢出检测系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)
python·深度学习·yolo
长桥夜波7 分钟前
机器学习日报10
人工智能·机器学习
CoovallyAIHub12 分钟前
突破360°跟踪极限!OmniTrack++:全景MOT新范式,HOTA指标狂飙43%
深度学习·算法·计算机视觉
MrSYJ15 分钟前
可以指定 Jupyter Notebook 使用的虚拟环境吗
python·llm·agent
quant_198629 分钟前
【教程】使用加密货币行情接口 - 查询比特币实时价格
开发语言·后端·python·websocket·网络协议
ytttr87331 分钟前
MATLAB实现经验模态分解(EMD)与希尔伯特变换获取能量谱
人工智能·python·matlab
AI浩33 分钟前
MHAF-YOLO:用于精确目标检测的多分支异构辅助融合YOLO
人工智能·yolo·目标检测
yumgpkpm34 分钟前
Doris在CMP7(类Cloudera CDP 7 404版华为Kunpeng)启用 Kerberos部署Doris
大数据·hive·hadoop·python·oracle·flink·cloudera