大模型的旋转位置编码
m表示第几个token
\(q_m\)表示第m个token的\(q\)编码.输入是\(x_m\)和位置m. 同理\(k_n\)和\(v_n\).
2.2 绝对位置编码.
使用下面公式来表达我们2.1需要的函数.
\(x_i\)加上\(p_i\)是编码后的向量. 这个f确实是2.1定义的函数族的一种实现.
i是向量索引的位置.
这种方法的缺陷是.直接添加位置编码\(p_i\)到上下文表示\(x_i\)太粗糙.表现力不够.
2.3 相对位置编码
Shaw 2018年的编码方法:
这种方法, 把q里面\(p_i\)取消.确实没必要q和k都算位置编码.
然后\(p_r^k\)是可训练的位置编码,r,k是两个输入变量.其中r表示
表示k的位置n跟q里面的位置m的相对距离.这个距离clip一下.
Dai 2019提出:
这个公式就是绝对位置公式简单矩阵展开计算.
然后把公式替换成一些相对位置.
radford 2018: 这种是相对位置最优的设置. 但是这些都可以看做位置信息直接加到上下文信息里面. 但是我们论文的方法不一样, 我们的更有解释性.
3.1公式化:
\(q_m^Tk_n\)可以看做两个token互相的作用. 输出一个数值.表示两个token的相关度.
这个理解是,我们每生成一个字符,我们用当前的\(q_m\)去跟所有的k向量去查询, 所以\(q_m\)叫查询向量.所以得到了向量\(a_{m,n}\),是一个N维向量,然后计算\(o_m\)得到一个D维向量.等于把最初始的信息\(q_m\)这个D维向量,变成\(o_m\)这个D维向量.
这个相关度我们需要他跟\(x_m\),\(x_n\),m-n相关, 并且有对称性.正定行,自己跟自己一定是相关的,算出来大于0,这个性质可以类比叫做内积.也就是两个向量做内积.(就有对称性,和正定型)
3.2
3.2.1 2d情况:
这个可以看做上面要求的内积的一种实现.
细节:
https://zhuanlan.zhihu.com/p/642884818
注意论文的理解:
3.2.1里面的意思是. 我们把二维情况看做复平面. 也就是一个向量(a,b)我们用a+bi来表示.所以按照这个理解\((W_qx_m)\)也是二维向量,\(x_m\)也是二维向量. 所有数都是二维向量,看做复数.
核心公式是这个.
理解这个公式:
preliminary:
一个复数乘以\(e^{im\theta}\)等价于逆时针旋转\(\theta\)角度.
复数\(re^{im\theta}\)的共轭等于\(re^{-im\theta}\)
其实可以用三角函数初等证明这个度量就是这个.过程就在上面链接中.
=========综上, 就是复数空间的经典内积的应用.
计算笔记:
仿射变换的矩阵表达:
刚体变换(形状不改变,图形任意两点距离不变,也就是平移和旋转)、仿射变换(也就是本文讨论的部分,需要保持Collineraity共线性且点之间距离比例不变)、投影变换(原图像和变换后图像的平行关系不一定相同,也就不一定共线)、非线性变换(不太了解 不过多解释)等。
矩阵表达:
缩放:
旋转:
裁剪变换 shearing
对称:
齐次坐标系:
那么反过来. 是否任意一个矩阵都可以分解成这4种变换呢? 放缩,裁剪,对称,旋转.
证明很显然: 只需要放缩跟裁剪矩阵就可以分解任意二阶矩阵.
回到rope论文:
给出rope的解释性: 他旋转单词嵌入向量, 通过乘以他的索引倍数乘以一个常数作为角度进行旋转.这就是rope的背后动机.
图片解释一下: Q和K都进行下面的转化.
就是序列的每2个,我们把他看做一个复数,然后根据index进行旋转就完事了.
3.3 rope的特性.
分母我们保持不进行旋转.
下面就全都是实验数据了.