irpas技术客

Transformer的PE(position embedding),即位置编码理解_清梦枕星河~_transformer pe

irpas 2187

背景:

最近要搞理论学习了,先前搞了大半年的工程,又要捡起一些理论原理,现在还是从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/


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #transformer #PE #n #batch为1