注意力机制介绍

教材

10.1. 注意力提示 — 动手学深度学习 2.0.0 documentation

QKV

在注意力机制的背景下,自主性提示被称为 查询(query)。 给定任何查询,注意力机制通过 注意力汇聚(attention pooling) 将选择引导至 感官输入(sensory inputs,例如中间特征表示)。 在注意力机制中,这些感官输入被称为 (value)。 更通俗的解释,每个值都与一个 (key)配对, 这可以想象为感官输入的非自主提示。 如 图10.1.3所示,可以通过设计注意力汇聚的方式, 便于给定的查询(自主性提示)与键(非自主性提示)进行匹配, 这将引导得出最匹配的值(感官输入)。

../_images/qkv.svg

也就是说对 key 按照规则加权求和,然后拟合一个最合适的值,作为输出。这种拟合是一种选择倾向。

非参数汇聚

简单起见, 考虑下面这个回归问题:给定的成对的“输入一输出”数据集 $\left\{\left(x_1, y_1\right), \ldots,\left(x_n, y_n\right)\right\}$, 如何学习 $f$ 来预测任意新输入 $x$ 的输出 $\hat{y}=f(x)$ ?

下面的黄色点是数据集,我们用平均值预测,效果不佳。原因在于 y 实际上和 x 相关。

gh

于是有两个人想到可以用这个公式来估计 $f(x)$,它用现有的所有数据,来拟合:


$$
f(x) = \sum_{i=1}^n \frac{K(x - x_i)}{\sum_{j=1}^n K(x - x_j)} y_i,
$$

这个估计器叫做 Nadaraya-Watson核回归(Nadaraya-Watson kernel regression)。来看看:

  • $K$ 叫做核函数。

  • 我们认为,对于其它已知点,它的 $x$ 越接近要估计的数据点,那么它的 $y$ 就越接近要估计的点的 $y$.

  • 那么这个接近,或者说相似,就用核 $K(x-x_{i})$ 来刻画。这种估计可以看作是 $k$ 近邻算法的一种推广。

  • 这样来看,其实 $f(x)$ 就是基于核函数的相似度的加求和,越接近被估计点的,对权重的贡献就越大。

抽象为一个注意力汇聚公式:


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

其中 $x$ 是查询 Q,$(x_{i},y_{i})$ 都是已知的数据集。$\alpha(x, x_i)$ 是注意力权重。

对于高斯核 $K(u) = \frac{1}{\sqrt{2\pi}} \exp(-\frac{u^2}{2}).$


$$
\begin{split}\begin{aligned} f(x) &=\sum_{i=1}^n \alpha(x, x_i) y_i\\ &= \sum_{i=1}^n \frac{\exp\left(-\frac{1}{2}(x - x_i)^2\right)}{\sum_{j=1}^n \exp\left(-\frac{1}{2}(x - x_j)^2\right)} y_i \\&= \sum_{i=1}^n \mathrm{softmax}\left(-\frac{1}{2}(x - x_i)^2\right) y_i. \end{aligned}\end{split}
$$

Nadaraya-Watson核回归是一种非参数模型,这意味着把训练数据看作模型参数,训练数据集就代表了模型本身。新样本的预测是通过训练数据的加权平均等方式得到的。

注意力机制的 Q, K, V 中,K, V 就是数据集的 x, y 吗?

不完全是。在注意力机制中:

  • Q (Query) 代表查询向量,通常是当前正在处理的输入。

  • K (Key) 代表关键向量,是从整个输入序列中提取的表示。

  • V (Value) 代表值向量,与 Key 相关联,包含 Key 所指向的信息。

K 和 V 通常来源于同一个输入序列,但并不直接对应数据集的 x 和 y。它们更多地起到一种检索和聚合信息的作用,协助 Q 从整个序列中找到最相关的信息。注意力机制通过 Q 和 K 的相似度来确定应该重点关注 V 的哪些部分。

带参数汇聚

考虑到如果增加一个可学习参数 $w$


$$
\begin{split}\begin{aligned}f(x) &= \sum_{i=1}^n \alpha(x, x_i) y_i \\&= \sum_{i=1}^n \frac{\exp\left(-\frac{1}{2}((x - x_i)w)^2\right)}{\sum_{j=1}^n \exp\left(-\frac{1}{2}((x - x_j)w)^2\right)} y_i \\&= \sum_{i=1}^n \mathrm{softmax}\left(-\frac{1}{2}((x - x_i)w)^2\right) y_i.\end{aligned}\end{split}
$$

这样可以更好地理解和重构输入数据的特性。

这里的 $w$ 实际时模型的权重参数,并不等于样本的数量。其维度和特性取决于模型的设计。例如,在一些基于神经网络的注意力模型中,$W$ 可能是一个矩阵,它的维度取决于输入和输出的特征维度,而并非样本数量。

在课本中 $w$ 实际上是一个标量,学习之后得到的只有这个标量值。

评分函数

上面的 $-\frac{1}{2}((x - x_i)w)^2$ 部分是注意力评分函数,记作 $a$。把 $a$ 输入到 softmax 函数中进行运算,得到这一个点的概率分布。全部点算出来之后,得到的是与各个键对应的值的概率分布。

  • 这里的 Key 就是各样本的 $x$.

  • 这里的 Value 就是各样本的 $y$.

  • 这里的 Query 就是推理时输入的 $x$.

  • 这里的权重数量不一定和样本数量相同。

../_images/attention-output.svg

对于 $(x_{i}, y_{i})$ 对应的我们有 $(\mathbf{k}_1, \mathbf{v}_1), \ldots, (\mathbf{k}_m, \mathbf{v}_m)$

相应的,注意力汇聚函数:


$$
f(\mathbf{q}, (\mathbf{k}_1, \mathbf{v}_1), \ldots, (\mathbf{k}_m, \mathbf{v}_m)) = \sum_{i=1}^m \alpha(\mathbf{q}, \mathbf{k}_i) \mathbf{v}_i \in \mathbb{R}^v,
$$

其中的权重是标量:


$$
\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}.
$$

其它评分函数

使用不同的评分函数可以处理不同形状的数据。

方法 匹配分数函数$\text{score}(\boldsymbol{s}_t, \boldsymbol{h}_i)$ 论文
Content-Base $\text{score}(\boldsymbol{s}_t, \boldsymbol{h}_i) = \text{cosine}[\boldsymbol{s}_t, \boldsymbol{h}_i]$ Graves2014
Additive $\text{score}(\boldsymbol{s}_t, \boldsymbol{h}_i) = \mathbf{v}_a^\top \tanh(\mathbf{W}_a[\boldsymbol{s}_t; \boldsymbol{h}_i])$ Bahdanau2015
Location-Base $\alpha_{t,i} = \text{softmax}(\mathbf{W}_a \boldsymbol{s}_t)$ Luong2015
General $\text{score}(\boldsymbol{s}_t, \boldsymbol{h}_i) = \boldsymbol{s}_t^\top\mathbf{W}_a\boldsymbol{h}_i$ Luong2015
Dot-Product $\text{score}(\boldsymbol{s}_t, \boldsymbol{h}_i) = \boldsymbol{s}_t^\top\boldsymbol{h}_i$ Luong2015
Scaled Dot-Product $\text{score}(\boldsymbol{s}_t, \boldsymbol{h}_i) = \frac{\boldsymbol{s}_t^\top\boldsymbol{h}_i}{\sqrt{n}}$ Vaswani2017

参考