0
点赞
收藏
分享

微信扫一扫

Attention的注意力分数 | attention scoring functions #51CTO博主之星评选#

Attention score

本节内容主要是解释什么是attention打分函数。

当然我们首先需要了解什么是attention scoring(注意力分数)。

我们之前讲通用的注意力汇聚公式如下:

$$
f(x) = \sum_{i=1}^n \alpha(x, x_i) y_i
$$

就是用$x$和$x_i$之间的距离关系对$y$进行加权。 

展开得到:

$$
\alpha(\mathbf{q}, \mathbf{k}_i) = \mathrm{softmax}(a(\mathbf{q}, \mathbf{k}_i)) = \frac{\exp(a(\mathbf{q}, \mathbf{k}i))}{\sum{j=1}^m \exp(a(\mathbf{q}, \mathbf{k}_j))} \in \mathbb{R}
$$

image.png

  • 绿色框框里是α,对应的是注意力权重。
  • 红色框框里是a,对应的是注意力分数。

也就说, ​注意力分数 softmax之后变为 ​注意力权重 , ​注意力权重 就是 ​注意力分数 经过softmax计算。

看一下下图:
请添加链接描述

以softmax为界限,左边就是注意力分数(attention score)的计算部分,右边就转入注意力权重(attention weight)的计算了。

Attention scoring functions

我们之前在nadaraya-waston核回归之中讲过,我们选择高斯核作为计算方法。由此可知我们可以选择不同计算方法形成不同的注意力评分函数,不同的注意力评分函数会导致不同的注意力汇聚操作。这次我们介绍两种常用的注意力评分函数计算方法:

Scaled dot-product attention

之前我们在nadaraya-waston核回归中讲的是key是一个向量,query是单个值。其实query也可以是一个张量的。

缩放点积注意力(scaled dot-product attention)主要就是为了处理当query也是向量的时候该如何进行计算,注意这里要求query和key长度必须相等!!!

公式如下:
$$
a(\mathbf q, \mathbf k) = \mathbf{q}^\top \mathbf{k} /\sqrt{d}
$$

  • 其中$d$是向量维度的大小。

我们之前是使用高斯核$K(u) = \frac{1}{\sqrt{2\pi}} \exp(-\frac{u^2}{2})$来计算$x$和每个$x_i$之间的距离也就是query和keys之间的距离,现在我们直接使用内积一步到位。

学过线代的应该都知道,从几何意义上来说,是一个向量在另一个向量上的投影;从信号处理的角度来说,内积是两个信号的相似性。因此在这里使用向量内积直接求query和key之间的距离。

此外这样计算还有一个好处,就是我们实际操作中使用mini-batch,这里可以直接将其拼接乘矩阵进行非常简单的计算即可完成整个attention weight的计算。

公式如下:

$$
\mathrm{softmax}\left(\frac{\mathbf Q \mathbf K^\top }{\sqrt{d}}\right) \mathbf V
$$

  • 其中key和query的长度都是d
  • 假设有m个query和n个key,那其中:
    • query:$\mathbf Q\in\mathbb R^{m\times d}$
    • key:$\mathbf K\in\mathbb R^{n\times d}$
    • value:$\mathbf V\in\mathbb R^{n\times v}$ 。
  • 最终结果维度是$\mathbb{R}^{m\times v}$

    Additive attention

    讲完query和key等长,再看一下不等长时候怎么办。这种加性注意力(additive attention)这种主要是应对当query和key长度不同的时候是怎么操作的。
    公式如下:

现在假设query的长度为q,key的长度为k,那么 $\mathbf{q} \in \mathbb{R}^q$ 和键 $\mathbf{k} \in \mathbb{R}^k$。

$$
a(\mathbf q, \mathbf k) = \mathbf w_v^\top \text{tanh}(\mathbf W_q\mathbf q + \mathbf W_k \mathbf k)
$$

  • 可以很直观得从公式看出这里是将q和k直接扔进了一个小的神经网络里边,经过一层tanh激活函数之后得到注意力分数。

  • 其中$\mathbf W_q\in\mathbb R^{h\times q}$、$\mathbf W_k\in\mathbb R^{h\times k}$,这样经过计算之后可以将结果都转化为$\mathbb R^{h\times 1}$。
  • 经过tanh激活之后在和维度为h的$\mathbf w_v\in\mathbb R^{h}$进行计算,得到最终结果是一个数,维度$\mathbb{R}^1$。

补充

注意上边讲的两种方法是对于一个query和key的计算,中间插的那个mini-batch的简便计算是对整体的,是把Scaled dot-product attention所有的query和key一起计算,第二部分中additive attention中没写整体计算方法。以免有人看的迷糊,特此声明。

举报

相关推荐

0 条评论