注意力机制

这篇文章是我在学习《动手学深度学习》时记录的笔记,或有疏漏,望海涵。

1. 什么是注意力?

人们认为,注意力由自主性注意力和非自主性注意力构成。

自主性注意力是指人类主观意愿上分配的注意力,非自主性注意力是指在无主观意愿时被色彩、声音等刺激吸引的注意力。

2. 注意力机制

注意力机制
注意力机制中有三种数据:查询 Query, 键 Key, 值 Value。

  • Query 是自主性线索,代表着我们当下想要查询的内容。
  • Key 是非自主性线索,蕴含着对 Value 在一定程度上的抽象后的信息。
  • Value 是实际输入的数据。
  • Key-Value 是成对出现的。

在注意力汇聚层中,我们通过计算 Query 和 Key 的相似度来分配 Value 的权重。

3. Nadaraya-Watson 核回归模型

📝 历史

Nadaraya-Watson 核回归模型于 1964 年被提出。

Nadaraya-Watson 核回归模型使用非参数注意力机制:

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

其中,$K$ 是核函数。

4. 注意力汇聚

我们可以进一步推广得到通用的注意力汇聚的公式:

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

其中 $x$ 是查询,$(x_{i}, y_{i})$ 是键值对。

我们可以简单的认为:$\alpha$ 是注意力权重,注意力汇聚则是进行一次加权平均。

注意力权重满足:非负,且总和为 1。因此它们可以被看作是一个概率分布。

考虑高斯核:

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

从这里我们理解其内涵,Query 离 Key 越近,其权重越高。

5. 注意力分数

进一步抽象,我们可以将 $softmax$ 的输入作为一个注意力分数,$softmax$ 负责将其映射到概率空间。

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

这样做将模型结构进一步解耦合。

我们接下来对注意力分数的“评分机制”进行优化。
现有的机制是将 Query 和 Key 直接相减后计算差向量大小,这在一定程度上描述了两者的距离,但不够精确。

5.1 缩放点积注意力

两向量的点积描述了它们之间的相似度。

点积要求两向量拥有相同的长度 $d$,假设查询和键的所有元素都是独立的随机变量,并且满足:均值为 0、方差为 1,那么其点积就满足:均值为 0、方差为 $d$。
方差过大会使注意力分数差异过大,分配的注意力权重就会不平衡,导致模型过早收敛。
为了避免上述影响,我们将点积后的结果除 $\sqrt{d}$,这样其方差就变为 $1$。
于是我们得到缩放点积注意力(Scaled Dot-Product Attention)的评分函数

$$ a(\mathbf q, \mathbf k) = \frac{\mathbf{q}^\top \mathbf{k}}{\sqrt{d}} $$

使用小批量计算的缩放点积注意力则是:

$$ \mathrm{softmax}\left(\frac{\mathbf Q \mathbf K^\top }{\sqrt{d}}\right) \mathbf V \in \mathbb{R}^{n\times v} $$

5.2 加性注意力

当 Query 和 Key 的维度不同时,无法直接使用点积注意力。这时我们可以选择加性注意力。

加性注意力的评分函数是:

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

其中可学习的参数是 $\mathbf W_q\in\mathbb R^{h\times q}$、$\mathbf W_k\in\mathbb R^{h\times k}$ 和 $\mathbf w_v\in\mathbb R^{h}$。
将查询和键连结起来使用 $\tanh$ 激活,然后输入到一个 MLP 中, 感知机包含一个隐藏层,其参数为 $\mathbf w_v$,其隐藏单元数是一个超参数 $h$,最终输出一个实数作为注意力分数。

加性注意力实际上使用了一个小的 MLP 来学习 Q、K、V 中隐含的关系。

5.3 对比

由于缩放点积注意力的并行性、计算效率更高,所以它更加流行。

使用 Hugo 构建
主题 StackJimmy 设计