Transformer的PE(position embedding),即位置编码理解

背景:

最近要搞理论学习了,先前搞了大半年的工程,又要捡起一些理论原理,现在还是从transformer熟悉理解一下,争取吃透。
关于transformer的经典介绍和资料也一大堆,我就不展开来讲了,碰到了一些一时没太想明白的问题,就记一下,也当是重新理解一遍。

在这里插入图片描述


transformer的输入要么是词向量或是块状处理了的图像,分别用于自然语言处理和计算机视觉领域。
在自然语言处理中,原始的输入肯定是某种文字形式的语言,但是要送进机器处理要先进行编码,一般有word2vec等方式转化为词向量。

词向量之间需要有一个相对位置关系,如果全部不分序输入那处理肯定不方便,不同词之间组合意思也会发生变化,于是就要给词向量加位置信息。

普通的加一个位置信息,词量大时不利于计算,于是transformer里面用了一种位置编码方式,把位置信息作为词向量的一部分输入信息一起送入网络进行处理,而且获得了不错的效果,一开始位置编码也没太看明白,多看了一些资料后也有一些大致了解。

Transformer 中使用位置 Embedding 保存单词在序列中的相对或绝对位置。

在这里插入图片描述


这是位置向量函数的定义,经过多番解读,我现在的理解是:

1、表示方法:

假设某种语言的每个单词都可以嵌入成254个长度的向量,即一个单词的长度是254,

假设单词嵌入并且组成batch后,shape为(b,N,254),N是序列最大长度,即最长的一句话包含的单词个数为N,254是每个单词的嵌入向量长度,b是batch,为了便于组成batch(不同训练句子单词个数肯定不一样)进行训练,可以简单统计所有训练句子的单词个数,取最大即可,假设统计后发现待翻译句子最长是10个单词,那么编码器输入是10x254,batch为1 则输入维度是(1,10,254).

因为位置向量长度要和词向量相加,需要长度保持一致,所以位置向量的维度为(1,N,254),N表示N个单词对应的N个位置,每个位置采用254长度向量进行表示。

在这里插入图片描述

2、transformer采用sin-cos函数进行表示:

在这里插入图片描述


其中,pos对应N,范围是0~N,表示词向量长度为N的某个单词的位置
i 表示某个单词的表示向量的最小单位的位置,范围是0-253;d表示长度单词词向量长度的最大值,即254

进行单词表示时,把表示向量的最小单位按位置进行划分,偶数用sin表示,奇数用cos表示,按照位置顺序进行拼接

在这里插入图片描述


如上图,纵向是position,表示一个句子的长度,此处是50,说明该句子包含50个单词,即上面的N;
横向表示每个单词的词向量长度,此处是128,即上文的254. 另1/50的横向条表示一个单词,图中画了3条,对应3个单词。

下面几幅图同理:

在这里插入图片描述


在这里插入图片描述

附上几个有帮助的链接以供参考,是查找过程觉得比较有用的:
https://zhuanlan.zhihu.com/p/338817680
https://zhuanlan.zhihu.com/p/308301901
https://kazemnejad.com/blog/transformer_architecture_positional_encoding/
http://jalammar.github.io/illustrated-transformer/

相关文章

学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习...
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面...
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生...
Can’t connect to local MySQL server through socket \'/v...
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 ...
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服...