在Transformer模型中,位置编码(Positional Encoding)是一种非常重要的机制,用于给模型提供关于单词在序列中位置的信息。这是因为Transformer架构本身并不像循环神经网络(RNN)那样具有递归结构,因此无法直接捕捉序列中单词的位置关系。位置编码的引入使得模型能够理解单词的顺序,这对于处理诸如自然语言处理(NLP)任务中的句法和语义结构至关重要。下面将举例解释transformer中的位置编码:
1. transformer结构图
注意:它的编码器的输出会送入到所有的解码器模块,如下:
在transformer的结构图中,由一个“Positional Encoding”,即位置编码,查看了以下资料后,稍微有点儿理解了,记录于此。
2. 位置编码的作用
由于transformer是并行化运算,所以输入的信息中没有位置信,而在语音文本中,绝大部分都是有语序的。例如:我爱你,要是翻译成’"You love me",那意思就完全不一样了。于是,就有了位置编码,其作用就是让输入数据携带位置信息,是模型能够找出位置特点。
3. 位置编码的计算
在transformer中的位置编码中,其编码公式如下:
其中,
。上面,表示偶数位置使用sin, 奇数位置使用cos。引入实例,如: 翻译"我爱你"。
Step1: embedding编码
假设embedding编码将每个词向量编程成512维,如图所示:
如上,如果有规定每次输入的x1, x2,...,xn的长度,那么不足就直接使用padding用0填充.其中的”喜欢“换成”爱“即可。
Step2: 位置编码
由上图知,其 ,其编码示意图如下:
一步步计算可得,其具体的位置编码:
Step3: 位置编码与embedding编码进行相加
如图,
然后即可将其作为transtormer的输入进去Attention以及其他运算。
注:
文章有参考:wangguisen.blog.csdn.net/article/det… 该文写得非常赞,值得一看。