Skip to content

Attention

\[\text{Attention} = \text{softmax}\left(\frac{QK^{\top}}{\sqrt{d_k}}\right)V\]

我们以 3 个输入向量,维度 512 为例,\(Q = \begin{pmatrix}q_1\\ q_2\\ q_3\end{pmatrix}, K = \begin{pmatrix}k_1\\ k_2\\ k_3\end{pmatrix}, V = \begin{pmatrix}v_1\\ v_2\\ v_3\end{pmatrix}\) . 这其中,Q 代表三个输入向量的查询,K 代表三个输入向量的键值,V 代表三个输入向量的信息。

\[QK^{\top} = \begin{pmatrix}q_1k_1^{\top} & q_1k_2^{\top} & q_1k_3^{\top}\\ q_2k_1^{\top} & q_2k_2^{\top} & q_2k_3^{\top}\\ q_3k_1^{\top} & q_3k_2^{\top} & q_3k_3^{\top}\\ \end{pmatrix}\]

除以 \(\sqrt{d_k}\) 是为了便于学习。

Attention 的 softmax 是 按行 计算的,每一行的结果和为 1 ,这反映了每个键 key 与单个查询 query 的相关性。

举个例子,最终结果

\[\text{Attention} = \begin{pmatrix}0.1v_1+0.8v_2+0.1v_3\\ 0.2v_1+0.6v_2+0.2v_3\\0.9v_1+0.01v_2+0.09v_3\end{pmatrix}\]

其含义可以理解为,对于第一个输入向量,它应该重点关注(0.8)第二个输入向量,捎带关注第一(0.1)、第三个(0.1)输入向量,因此它需要的关键信息就是 \(0.1v_1+0.8v_2+0.1v_3\) .