Self-Attention

核心公式

$$
\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V
$$

来源

自注意力模型的运作方式

我们要通过考虑一整串输入的向量来得到输出,每个$b$都是考虑了所有$a$之后产生的。以$b^1$为例,我们来介绍这个过程。

自注意力的目的是考虑整个序列,但是又不希望把整个序列的所有信息包在一个窗口里,所以有一个特别的机制,用$\alpha$来判断每个向量与$a^1$的关联程度

计算向量关联程度的方法

两个向量点积的结果在某种程度上可以反映两个向量的相似度。如图(a)方式,把输入的两个向量分别乘上两个不同的矩阵$W^q$、$W^k$,得到两个向量$q$和$k$,再把$q$和$k$做点积,把他们做逐元素的相乘,求和后就得到了$\alpha$。这是计算$\alpha$的一种方法,也是目前最常用的一种方法,另一种计算方式见图(b)

将各个向量的关联性计算出之后(一般自己与自己也会计算关联性),除以$\sqrt{d_k}$(防止$QK^T$数值过大softmax梯度消失),对所有的关联性做一个softmax操作,即$\alpha\prime_{1,i} = e^{\alpha_{1,i}} / \sum_{j} e^{\alpha_{1,j}}$ ,得到 $a\prime$

添加softmax

接下来我们要根据$\alpha’$,去抽取出序列里面重要的信息。把向量$a^1$到$a^4$乘上$W^v$得到新的向量$v^1$到$v^4$,乘上对应的注意力分数$\alpha’$,求和,即$b^1=\sum_ia’_{1,i}v^i$,就得到了对应的b

根据α′抽取序列中重要的信息
将上述过程向量化后,即得到了Self-Attention的核心公式
从矩阵乘法的角度来理解注意力

位置编码

需要考虑位置信息时,就要用到位置编码。位置编码为每一个位置设定一个位置向量,用$e^i$表示,上标$i$代表位置,不同的位置就有不同的向量位置编码

进阶版本

多头自注意力(multi-head self-attention)

相关有很多种不同的形式,所以也许可以有多个$q$,不同的$q$负责不同种类的相关性多头自注意力的计算过程

截断自注意力(truncated self-attention)可以处理向量序列长度过大的问题。截断自注意力