大模型的旋转位置编码

ROFORMER: ENHANCED TRANSFORMER WITH ROTARY POSITIONEMBEDDING 论文
 
我们先看hf官网上给的说明:
  https://hf-mirror.com/docs/transformers/model_doc/roformer
 RoPE comes with valuable properties such as flexibility of being expand to any sequence lengths, decaying inter-token dependency with increasing relative distances, and capability of equipping the linear self-attention with relative position encoding.
特性: 位置编码可以拓展到任意长度, 内在token之间的依赖性跟他们的相对距离长度进行衰减, 
下面都是使用文档意思不大. 直接看论文.
 
2.1 我们需要的函数.

image

m表示第几个token
\(q_m\)表示第m个token的\(q\)编码.输入是\(x_m\)和位置m. 同理\(k_n\)\(v_n\).

2.2 绝对位置编码.
使用下面公式来表达我们2.1需要的函数.
image
image
\(x_i\)加上\(p_i\)是编码后的向量. 这个f确实是2.1定义的函数族的一种实现.
image
i是向量索引的位置.
这种方法的缺陷是.直接添加位置编码\(p_i\)到上下文表示\(x_i\)太粗糙.表现力不够.
2.3 相对位置编码
Shaw 2018年的编码方法:
image
这种方法, 把q里面\(p_i\)取消.确实没必要q和k都算位置编码.
然后\(p_r^k\)是可训练的位置编码,r,k是两个输入变量.其中r表示
image
表示k的位置n跟q里面的位置m的相对距离.这个距离clip一下.

Dai 2019提出:
image
这个公式就是绝对位置公式简单矩阵展开计算.
然后把公式替换成一些相对位置.
image

image
radford 2018: 这种是相对位置最优的设置. 但是这些都可以看做位置信息直接加到上下文信息里面. 但是我们论文的方法不一样, 我们的更有解释性.

3.1公式化:
\(q_m^Tk_n\)可以看做两个token互相的作用. 输出一个数值.表示两个token的相关度.
image
这个理解是,我们每生成一个字符,我们用当前的\(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,这个性质可以类比叫做内积.也就是两个向量做内积.(就有对称性,和正定型)
image

3.2

3.2.1 2d情况:
image
这个可以看做上面要求的内积的一种实现.

细节:
https://zhuanlan.zhihu.com/p/642884818

注意论文的理解:
3.2.1里面的意思是. 我们把二维情况看做复平面. 也就是一个向量(a,b)我们用a+bi来表示.所以按照这个理解\((W_qx_m)\)也是二维向量,\(x_m\)也是二维向量. 所有数都是二维向量,看做复数.

image
核心公式是这个.
理解这个公式:
preliminary:
一个复数乘以\(e^{im\theta}\)等价于逆时针旋转\(\theta\)角度.
复数\(re^{im\theta}\)的共轭等于\(re^{-im\theta}\)

其实可以用三角函数初等证明这个度量就是这个.过程就在上面链接中.
image

=========综上, 就是复数空间的经典内积的应用.

计算笔记:
image

仿射变换的矩阵表达:
刚体变换(形状不改变,图形任意两点距离不变,也就是平移和旋转)、仿射变换(也就是本文讨论的部分,需要保持Collineraity共线性且点之间距离比例不变)、投影变换(原图像和变换后图像的平行关系不一定相同,也就不一定共线)、非线性变换(不太了解 不过多解释)等。
image

矩阵表达:
缩放:
image
旋转:
image
裁剪变换 shearing
image
image

对称:
image

齐次坐标系:
image

image

那么反过来. 是否任意一个矩阵都可以分解成这4种变换呢? 放缩,裁剪,对称,旋转.

证明很显然: 只需要放缩跟裁剪矩阵就可以分解任意二阶矩阵.

回到rope论文:
给出rope的解释性: 他旋转单词嵌入向量, 通过乘以他的索引倍数乘以一个常数作为角度进行旋转.这就是rope的背后动机.

图片解释一下: Q和K都进行下面的转化.
image

就是序列的每2个,我们把他看做一个复数,然后根据index进行旋转就完事了.

3.3 rope的特性.

image
分母我们保持不进行旋转.
下面就全都是实验数据了.

posted on 2023-12-19 10:43  张博的博客  阅读(54)  评论(0编辑  收藏  举报

导航