看到这个Positional Encoding完全不明白这是个啥。今天似乎搞懂了,整理一下。
众所周知RNN属鱼的记性不太好,学了后面忘了前面。
LTSM呢倒是一个字一个按照顺序来的,但是太慢啊,transformer是并行输入的,一次一个矩阵,这么搞要搞到地老天荒。
那么问题就来了,一次输入一批就失去了顺序,上下文没了。
这个时候Positional Encoding就要闪亮登场了,我给字一个‘’编号‘’不就好了,编号之间是存在顺序的,那么这样字和字之间也存在顺序了。
位置向量是怎么算出来的呢?注意哦,是位置向量,并不是位置嵌入,这和BERT里面的Positional Embbeding不一样。
也就是奇数用cos 偶数用sin。众所周知三角函数具有周期性,那么周期性是不是一种顺序信息?
原文里面把这个周期设定在2π到1W*2π之间,用sin和cos组合就可以组合出独一无二的位置信息,即每个词都能得到不重复的不同周期的sin和cos组成出来的位置信息。
那我们整体看一下:
现在我有一个已经做好的词表和对应的词嵌入。V [vocab size, embbeding dimension] 括号里的是这个矩阵的尺寸。
vocab size是词表里面词的