徐慧志的个人博客

2023-02-09 如何理解自注意力机制

发布于 2023年02月09日  (最近编辑 2023年03月30日 )
5 分钟  • 2348 字
Table of contents

理解输入与输出

一个vector对应一个label的情况,即输入和输出一样多,也叫做sequence labeling

我们想考虑整个 sequence,但是不想把 sequence 所有的数据都包括在里面,就有了 self-attention。

Self-attention

如果要考虑上下文的信息,输入可以扔进 self-attention 之后,生成 vector with context,然后丢进FC层,然后再过一次 self-attention,然后再丢进 FC 层。

可以这样理解,self-attention 获得上下文信息,FC 层专注于局部信息,交替使用。

运作原理:

0

问题就变成了,输入是 $a$ 时,如何计算 $b$?用 $b^1$来说明,具体分三步。

$QKV$(从矩阵的角度看self-attention)

  1. 把 $a^1$ 到 $a^4$ 看成是矩阵 $I$ 的列,$q^1$ 到 $q^4$ 是矩阵 $Q$ 的列,那么可以转化成矩阵间的运算。

矩阵$I$乘以$Wq$,得到矩阵$Q$,$Q$的4列就是$q^1$到$q^4$。

同样,输入矩阵I乘以$W^k$,得到矩阵$K$,$K$的4列就是$k^1$到$k^4$。

输入$I$乘上三个不同的矩阵,就得到了$QKV$。

3

  1. 每一个 $q$ 会和每一个 $k$ 计算内积,得到 attention score。

    1. 矩阵和向量相乘:

      1. 矩阵 $K$ 和 $q^1$ 内积,得到 $a^1$ 和其他输入的相关性。
      2. 矩阵 $K$ 和 $q^2$ 内积,得到 $a^2$ 和其他输入的相关性。
      3. 合起来,就是

      $$ \begin{array}{cc}
      \alpha_{1,1} & \alpha_{2,1} & \alpha_{3,1} & \alpha_{4,1} \ \alpha_{1,2} & \alpha_{2,2} & \alpha_{3,2} & \alpha_{4,2} \ \alpha_{1,3} & \alpha_{2,3} & \alpha_{3,3} & \alpha_{4,3}\ \alpha_{1,4} & \alpha_{2,4} & \alpha_{3,4} & \alpha_{4,4} \end{array} =

      \begin{array}{cc} k^1 \ k^2 \ k^3 \ k^4 \
      \end{array}

      \begin{array}{cc} q^1 & q^2 & q^3 & q^4 & \end{array} $$

      简写为

      $$ A = K^T \cdot Q $$

      4

  2. 对 $A$ 做Softmax,得到 $A^\prime$

  3. $V$乘以$A^\prime$得到B

    • $v^1$乘上 $\alpha^\prime_{1,1}$, 加上$v^2$乘上 $\alpha^\prime_{1,2}$,等等,得到 $b^1$
    • $v^1$乘上 $\alpha^\prime_{1,1}$, 加上$v^2$乘上 $\alpha^\prime_{1,2}$,等等,得到 $b^2$
    • O 就是 Output

5

总结:先产生QKV,根据Q找出相关的位置,再对V做weighted sum。

6

怎么得到$W^q$、$W^k$和$W^v$

初始化一个矩阵,通过training data 在训练过程中更新。

自注意模块计算两个向量的关联性

内积方法

左边的向量乘以 $W^q$ 矩阵,右边的向量乘以 $W^k$ 矩阵,得到 $q$ 和 $k$ 这两个向量。然后做内积,得到一个标量。

$$ \alpha = q \cdot k $$

相加方法

左边的向量乘以 $W^q$ 矩阵,右边的向量乘以 $W^k$ 矩阵,得到 $q$ 和 $k$ 这两个向量。然后相加丢到tanh,再乘以 $W$,得到 $\alpha$。

7

参考:

李宏毅老师的讲课视频

11.【李宏毅机器学习2021】自注意力机制 (Self-attention) (下)_哔哩哔哩_bilibili

Sein heißt werden, leben heißt lernen.

Der einfache Weg is immer verkehrt.