Noonisy
Transformer中的位置编码
2022-11-13
阅读:274

Transformer中的位置编码


Pure Attention Module无法捕捉位置信息,无法区分不同位置的Token,因此大致有两条选择

1.将位置信息融入到输入中,这就是一般的绝对位置编码

2.微调一下Attention结构,使得它有办法分辨不同位置的Token,这就是一般的相对位置编码

以上两种编码方式又衍生了众多变种

绝对位置编码

一般来说,绝对位置编码会加到输入中:在输入的第 $k$ 个向量 $x_k$ 中加入位置向量 $p_k$ 变为 $x_k+p_k$,其中 $p_k$ 只依赖于位置编号 $k$

三角式

论文《Attention is All You Need》中提出来的方式:
$$ \begin{equation}\left\{\begin{aligned}&\boldsymbol{p}_{k,2i}=\sin\Big(k/10000^{2i/d}\Big)\\ &\boldsymbol{p}_{k, 2i+1}=\cos\Big(k/10000^{2i/d}\Big) \end{aligned}\right.\end{equation} $$
其中 $p_{k,2i},p_{k,2i+1}$ 分别是位置 $k$ 的编码向量的第 $2i,2i+1$ 个分量,$d$ 是位置向量的维度

其中一个使用它的理由是:
$$ \sin(\alpha+\beta)=\sin\alpha\cos\beta+\cos\alpha\sin\beta \\ \cos(\alpha+\beta)=\cos\alpha\cos\beta-\sin\alpha\sin\beta \\ $$
可以看到位置 $\alpha+\beta$ 的向量可以表示为位置 $\alpha$ 和位置 $\beta$ 的向量组合,也就提供了表达相对位置信息的可能性

训练式

...

递归式

...

$\ $

相对位置编码

相对位置并没有完整建模每个输入的位置信息,而是在算Attention的时候考虑当前位置与被Attention的位置的相对距离,由于自然语言一般更依赖于相对位置,所以相对位置编码通常也有着优秀的表现

经典式

由Google论文《Self-Attention with Relative Position Representations》提出,一般认为,相对位置编码是由绝对位置编码启发而来,考虑一般的带绝对位置编码的Attention:
$$ \begin{equation}\left\{\begin{aligned} \boldsymbol{q}_i =&\, (\boldsymbol{x}_i + \boldsymbol{p}_i)\boldsymbol{W}_Q \\ \boldsymbol{k}_j =&\, (\boldsymbol{x}_j + \boldsymbol{p}_j)\boldsymbol{W}_K \\ \boldsymbol{v}_j =&\, (\boldsymbol{x}_j + \boldsymbol{p}_j)\boldsymbol{W}_V \\ a_{i,j} =&\, softmax\left(\boldsymbol{q}_i \boldsymbol{k}_j^{\top}\right)\\ \boldsymbol{o}_i =&\, \sum_j a_{i,j}\boldsymbol{v}_j \end{aligned}\right.\end{equation} $$
其中 $Softmax$ 对 $j$ 那一维度进行归一化(以下都指行向量)。那么展开 $\boldsymbol{q}_i \boldsymbol{k}_j^{\top}$:
$$ \begin{equation} \boldsymbol{q}_i \boldsymbol{k}_j^{\top} = \left(\boldsymbol{x}_i + \boldsymbol{p}_i\right)\boldsymbol{W}_Q \boldsymbol{W}_K^{\top}\left(\boldsymbol{x}_j + \boldsymbol{p}_j\right)^{\top} = \left(\boldsymbol{x}_i \boldsymbol{W}_Q + \boldsymbol{p}_i \boldsymbol{W}_Q\right)\left(\boldsymbol{W}_K^{\top}\boldsymbol{x}_j^{\top} + \boldsymbol{W}_K^{\top}\boldsymbol{p}_j^{\top}\right) \end{equation} $$
为了引入相对位置信息,Google把第一项位置去掉,第二项 $\boldsymbol{p}_j \boldsymbol{W}_K$ 改为二元位置向量 $\boldsymbol{R}_{i,j}^{K}$ ,于是变成了:
$$ \begin{equation} a_{i,j} = softmax\left(\boldsymbol{x}_i \boldsymbol{W}_Q\left(\boldsymbol{x}_j\boldsymbol{W}_K + \color{red}{\boldsymbol{R}_{i,j}^K}\right)^{\top}\right) \end{equation} $$
以及 $\boldsymbol{o}_i =\sum\limits_j a_{i,j}\boldsymbol{v}_j = \sum\limits_j a_{i,j}(\boldsymbol{x}_j\boldsymbol{W}_V + \boldsymbol{p}_j\boldsymbol{W}_V)$ 中的 $\boldsymbol{p}_j \boldsymbol{W}_V$ 换成 $\boldsymbol{R}_{i,j}^{V}$:
$$ \begin{equation}\boldsymbol{o}_i = \sum_j a_{i,j}\left(\boldsymbol{x}_j\boldsymbol{W}_V + \color{red}{\boldsymbol{R}_{i,j}^{V}}\right) \end{equation} $$
所谓相对位置,是将本来依赖于二元坐标 $(i,j)$ 的向量 $\boldsymbol{R}_{i,j}^{K},\boldsymbol{R}_{i,j}^{V}$,改为只依赖于相对距离 $i−j$,并且通常来说会进行截断,以适应不同任意的距离
$$ \begin{equation}\begin{aligned} \boldsymbol{R}_{i,j}^{K} = \boldsymbol{p}_K\left[\text{clip}(i-j, p_{\min}, p_{\max})\right]\\ \boldsymbol{R}_{i,j}^{V} = \boldsymbol{p}_V\left[\text{clip}(i-j, p_{\min}, p_{\max})\right] \end{aligned}\label{eq:rp-clip}\end{equation} $$
这样一来,只需要有限个位置编码,就可以表达出任意长度的相对位置(因为进行了截断),不管 $pK,pV$ 是选择可训练式的还是三角函数式的,都可以达到处理任意长度文本的需求

$\ $

参考

最后编辑于:2022 年 11 月 13 日 19:57
邮箱格式错误
网址请用http://或https://开头