注意力机制介绍
教材
10.1. 注意力提示 — 动手学深度学习 2.0.0 documentation
QKV
在注意力机制的背景下,自主性提示被称为 查询(query)。 给定任何查询,注意力机制通过 注意力汇聚(attention pooling) 将选择引导至 感官输入(sensory inputs,例如中间特征表示)。 在注意力机制中,这些感官输入被称为 值(value)。 更通俗的解释,每个值都与一个 键(key)配对, 这可以想象为感官输入的非自主提示。 如 图10.1.3所示,可以通过设计注意力汇聚的方式, 便于给定的查询(自主性提示)与键(非自主性提示)进行匹配, 这将引导得出最匹配的值(感官输入)。
也就是说对 key 按照规则加权求和,然后拟合一个最合适的值,作为输出。这种拟合是一种选择倾向。
非参数汇聚
简单起见, 考虑下面这个回归问题:给定的成对的“输入一输出”数据集 $\left\{\left(x_1, y_1\right), \ldots,\left(x_n, y_n\right)\right\}$
, 如何学习 $f$
来预测任意新输入 $x$
的输出 $\hat{y}=f(x)$
?
下面的黄色点是数据集,我们用平均值预测,效果不佳。原因在于 y 实际上和 x 相关。
于是有两个人想到可以用这个公式来估计 $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$
. -
这里的权重数量不一定和样本数量相同。
对于 $(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 |