对位置编码的理解
1.为什么要引入位置编码?
答:
西瓜喜欢吃苹果_and_苹果喜欢吃西瓜。每个token的embedding相同,但是表达的意思不同,需要位置编码来协助学习他们之间的关系。
假设每个token映射的向量为512维,则位置编码也需要是512维的,用于和embedding相加
2.于是选择使用三角函数来编排位置编码,假设全用sin,即sin(wx),x = 当前的位置索引pos,w为根据(i=0,1,2,3...511)计算的值,所以对于每个唯一的x,可以计算512个三角函数值,对于pos位置的token也就有了512维度的位置编码。
目前已经有了两个优点:
(1)值的有界性,三角函数值在[-1,1];
(2)绝对位置,512个w对应得到512个不同的sin图像,对于每个不同的pos,都能根据当前的pos得到512个值[sin(w0pos),sin(w1pos),sin(w2pos),....,sin(w511*pos)]
还想满足一个条件->相对位置,可以根据位置a的编码求出位置b的编码,于是引入了cos,如下:
原理:
sin(a+b)= sinacosb+cosasinb······················①
cos(a+b)=-sinasinb+cosacosb······················②
可以转换为矩阵乘法的形式

相对位置--假设b是相对于a位置的偏移量,那么就可以通过a位置的位置编码获取任意的b位置的位置编码

引入cos,才可以在不同位置间引入线性变换,只需要知道目标位置和已知位置的偏移量就可以根据已知位置的位置编码求出目标位置的位置编码,双数使用sin,单数使用cos,所以位置编码就变成了成对出现的,求t(双数)位置的位置编码,则t+1位置的位置编码也可以求出来。
类似:

上文中的w也就是1/10000^(2i/d),x也就是pos。d=token的embedding维度数(本文中为512),i在本文中=(0,1,2,....,511)是维度索引,pos=想要求位置编码的位置
个人理解,有问题可指出。

浙公网安备 33010602011771号