当前版本为本文的尝鲜版,稳定版尚未发布:
位置编码:
https://zhuanlan.zhihu.com/p/454482273
transformer的sin位置编码本身已经包含了相对位置信息,本身就是一种包含相对信息的绝对位置编码。因为它符合一种形式:
而这种编码一种比较尴尬的地方就在于,这仍然是一种绝对位置编码,虽然token之间的位置编码可以互相转换,但是每个token的位置编码还和自己的位置强相关,有点等差数列的意思。(抽象到一维的情况,假如我们使用的位置编码就是一维自然数,那也符合这种形式),所以这仍然是绝对位置编码
希望可以有一种完全的相对位置编码,也就是位置编码在后续的forward中完全不会产生绝对位置的信息。
这里苏剑林给介绍了一下一些位置编码
https://zhuanlan.zhihu.com/p/352898810
ROPE:
以下内容摘编自:十分钟读懂旋转编码(RoPE)
首先,位置编码本身并不一定需要是一个显式的embedding向量,可以是一种“信息”,融入到模型中即可,这是理解RoPE的一个关键点。一般的位置编码是计算一个embedding向量,和正常的word embedding相加。比如:
这里 \(P_{emb}\)是位置编码, \(X_{emb}\)是词嵌入。我们把上式写成:
\[X_{out}=f(X_{emb}) \tag 2 \]这里的 \(f\)的作用就是”对 \(X_{emb}\)施加位置编码“。因此,位置编码可以视为一种”施加“作用。然后,先说RoPE的位置编码计算方法:对于序列中的第m个token,它的词嵌入为 \(\boldsymbol{x}_m\),计算它的 \(\boldsymbol{q}_m,\boldsymbol{k}_m\):
\[\boldsymbol{q}_m=W_Q\boldsymbol{x}_m \\ \boldsymbol{k}_m=W_K\boldsymbol{x}_m \tag 3\]然后,对其”施加位置编码信息“:
\[\boldsymbol{qpos}_m=\boldsymbol{R}^\theta_{d,m}\boldsymbol{q}_m=\boldsymbol{R}^\theta_{d,m}W_Q\boldsymbol{x}_m \\ \boldsymbol{kpos}_m=\boldsymbol{R}^\theta_{d,m}\boldsymbol{k}_m=\boldsymbol{R}^\theta_{d,m}W_K\boldsymbol{x}_m \tag 4\]然后,把 \(\boldsymbol{qpos}_m\)和 \(\boldsymbol{kpos}_m\)当成之前的Query和Key向量进行attention计算即可。这里的 \(\boldsymbol{R}^\theta_{d,m}\)和位置m相关,这样就包含了位置的信息,但是,推导后实际上在后续self-attention计算中和绝对位置是无关的。这个公式可见:R的计算公式
\[\bm{R}^d_{\Theta,m}=\begin{equation}\scriptsize{\underbrace{\begin{pmatrix} \cos m\theta_0 & -\sin+m\theta_0+&+0+&+0+&+\cdots+&+0+&+0+\\+\sin+m\theta_0+&+\cos+m\theta_0+&+0+&+0+&+\cdots+&+0+&+0+\\+0+&+0+&+\cos+m\theta_1+&+-\sin+m\theta_1+&+\cdots+&+0+&+0+\\+0+&+0+&+\sin+m\theta_1+&+\cos+m\theta_1+&+\cdots+&+0+&+0+\\+\vdots+&+\vdots+&+\vdots+&+\vdots+&+\ddots+&+\vdots+&+\vdots+\\+0+&+0+&+0+&+0+&+\cdots+&+\cos+m\theta_{d/2-1}+&+-\sin+m\theta_{d/2-1}+\\+0+&+0+&+0+&+0+&+\cdots+&+\sin+m\theta_{d/2-1}+&+\cos+m\theta_{d/2-1}+\\+\end{pmatrix}}_{\boldsymbol{W}_m}}\end{equation} \]这个可以提前计算好放在那里。至于具体推理,原文知乎已经很清晰了。之后再写。
标签:...,位置,浅谈,编码,boldsymbol,sin,RoPE,theta,+&+ From: https://www.cnblogs.com/wangbingbing/p/18095356