“你心里装着一个连见面都难的人,却想着和她有以后。”

李宏毅2021春机器学习-第四节-自注意力机制(self- attention)

1. 当输入为一个Vector时

当输入为一个向量时,输入已经不再是一个固定纬度,此时的输出有以下几种情况:

  • 为每一个长度的Vector输出一个label

    如:输入一句话,为每个词判断词性

  • 整个序列拥有一个label

    如:根据评论判断评论性质

  • 由模型决定输出的label的数量(seq2seq)

    如:翻译

2. self-attention机制

self-attention

通过self-attention处理所有sequence,使用Fully connected network处理self- attention的输出。

self-attention-2

输入是一串向量,输出的向量与所有向量都关联。生成b的步骤(以b1为例):

  1. 根据a1向量找出所有与a1相关的向量,每个与a1的相关性用 $\alpha$来表示

    计算 $\alpha$的方式有很多种,比较常见的有:

    • Dot-product

      将两个向量分别乘以两个矩阵,得到q和k, $\alpha$的值就等于p.q。

      dot-product

  2. 将相关性融合到self-attention中来,首先计算输入之间的关联性,然后通过softmax进行处理

    self-attention-3

  3. 通过attention scores计算出输出b

    self-attention-4

通过上面的计算,我们可以对q、k、v的计算简化为:

self-attention-5

a的计算可以简化为:

self-attention-6

a'的计算过程为:

b的计算过程可表示为:

整个计算过程可以简化表示为:

其中需要需学习的是wq、wk、wv。

3. Multi-head self-attention

Multi-head self- attention时self- attention的进阶版本,应用比较广泛。在语音辨识等领域使用较多的head可能会得到更好的效果。

以下为两个heads的例子:

之后可以得到:

4. self-attention的位置资讯

默认的self-attention的输入序列是没有position信息的,如果需要位置的资讯可以通过position encoding进行编号。

为每一个position设定一个唯一的vector e

self- attention在NLP上应用广泛。

  • self- attention for speech

    计算A‘的复杂度时L*L(L为A的维度)

    可以通过Truncated self-attention进行截断。

  • self- attention for image

    一个图片也可以看作一个vector。

    self-attention vs cnn(https://arxiv.org/abs/1991.03584

    • cnn的receptive field可以看作简化的self-attention

    • 训练资料多的时候self-attention(弹性更大)效果好

    • 训练资料少的时候cnn的效果比较好

    self- attention vs rnn

    对RNN来说假设最右边的输出要考虑到最左边的vector需要将这个vector放入memory中,一直到最后一个vecotr进行计算,而self- attention不需要。

    RNN是无法parallel的,RNN必须按照顺序进行运算。在运算速度上self-attention比rnn快。目前rnn框架开始逐渐改成self- attention的架构。

  • self-attention for Graph

    在处理Graph时只需要考虑链接的点。(GNN Graph neural network)

5. self-attention的改进和变种

self- attention的计算量巨大,因此为了得到更好的速度和效果的均衡,产生了不同变种的self-attention。

添加新评论