如何理解 Transformer 中的 Query、Key 与 Value

-------------------------------------

原创文章欢迎转载,但请注明出处。

-------------------------------------

Transformer 起源于 2017 年的一篇 google brain 的又一篇神文 《Attention is all you need》,至此由引领了在 NLP 和 CV 了又一研究热点。

在 Transformer 中一个非常关键的贡献就是 self-attention。就是利用输入样本自身的关系构建注意力模型。

self-attention 中又引入了三个非常重要的元素: Query 、Key 和 Value。

假设 \bf{X} \in \mathbb{R}^{n \times d} 是一个输入样本序列的特征, 其中 n 为输入样本个数(序列长度),d 是单个样本纬度。

Query、Key & Value 定义如下:

Query: \bf{Q} = \bf{X} \cdot W^Q , 其中\bf{W}^Q \in \mathbb{R}^{d \times d_q}, 这个矩阵可以认为是空间变换举证,下同

Key: \bf{K} = \bf{X} \cdot W^K ,其中\bf{W}^K \in \mathbb{R}^{d \times d_k}

Value: \bf{V} = \bf{X} \cdot W^K ,其中\bf{W}^V \in \mathbb{R}^{d \times d_v}

对与很多人来说,看到这三个概念一脸懵逼。这三个概念到底和 self-attention 由啥关系,为啥要取这个名字?

注意:这里一定要注意 X 、Q、K、V 的每一行代表一个输入样本,这与很多的样本矩阵每一列是一个样本的定义不一样,这个对于理解后续的内容非常重要。

那么本博客就是希望简单解释一下起这三个名字的原因。

要理解这三个概念的含义,首先要明白 self-attention 最终想要的是什么?

答案是:给定当前输入样本 \bf{x}_i \in \mathbb{R}^{1 \times d}( 为了更好地理解,我们把输入进行拆解),产生一个输出,而这个输出是序列中所有样本的加权和。因为假设这个输出能看到所有输入的样本信息,然后根据不同权重选择自己的注意力点。

如果你认可这个答案,那么下面就好解释了。

query 、 key & value 的概念其实来源于推荐系统。基本原理是:给定一个 query,计算query 与 key 的相关性,然后根据query 与 key 的相关性去找到最合适的 value。举个例子:在电影推荐中。query 是某个人对电影的喜好信息(比如兴趣点、年龄、性别等)、key 是电影的类型(喜剧、年代等)、value 就是待推荐的电影。在这个例子中,query, key 和 value 的每个属性虽然在不同的空间,其实他们是有一定的潜在关系的,也就是说通过某种变换,可以使得三者的属性在一个相近的空间中。

在 self-attention 的原理中,当前的输入样本 \bf{x}_i,通过空间变换变成了一个 query,  \bf{q}_i = \bf{x}_i \cdot W^Q\bf{q}_i \in \mathbb{R}^{1 \times d_q}。 类比与推荐系统中的检索项,我们要根据 query 与 key 的相关性去检索所需要的value。 那么 \bf{K} = \bf{X} \cdot W^K 为什么是 key 呢?

因为按照推荐系统的流程,我们要去找 query 和key 的相关性,最简单的方法就是进行点积,获得当前样本与关系向量。而在self-attention 的操作中,会进行如下操作 \bf{r_i} = \bf{q}_i \cdot K^T,这样 \bf{r}_i \in \mathbb{R}^{1 \times n} 每一个元素就可以看做是当前样本 \bf{x}_i 与序列中其他样本之间的关系向量。

获得样本之间的关系后,就顺理成章了,只需要将 \bf{r}_i 归一化后乘以 V 矩阵,便可以得到self-attention 的最终加权输出:O_i = softmax(r_i)\cdot V

V 中的每一行是序列的一个样本。\bf{O}_i \in \mathbb{R} ^{1 \times d_v},其中 O 的每一维输出,相当于是所有输入序列样本对应纬度的加权和,而权重就是关系向量 softmax(r_i) 。(这个矩阵乘法可以自己画画看)。

自此,可以得出一下结论:

1. self-attention 之所以取推荐系统中的 query、key 、value三个概念,就是利用了与推荐系统相似的流程。但是 self-attention 不是为了 query 去找 value,而是根据当前 query 获取 value 的加权和。这是 self-attention 的任务使然,想要为当前输入找到一个更好的加权输出,该输出要包含所有可见的输入序列信息,而注意力就是通过权重来控制。

2. self-attention 中这里 key 和 value 都是输入序列本身的一个变换,可能这也是 self-attention 的另外一层含义吧:自身同时作为 key 和 value。其实也非常合理,因为在推荐系统中,虽然 key 和 value 属性原始的特征空间不同,但是它们是有强关联关系的,因此他们通过一定的空间变换,是可以统一到一个特征空间中。这也是为什么self-attention 要乘以 W 的原因之一。

--

以上内容,持续修改优化,欢迎交流讨论

---

参考材料:

Attention is all you need:https://arxiv.org/pdf/1706.03762.pdf

Transformers in Vision: A Survey: https://arxiv.org/abs/2101.01169 [注意本文中,关于W^Q , W^K  和 W^V 的纬度定义是错的,别被误导了]

A Survey on Visual Transformer:https://arxiv.org/abs/2012.12556

推荐系统与Attention机制——详解Attention机制_caizd2009的博客-CSDN博客_attention 推荐系统

neural networks - What exactly are keys, queries, and values in attention mechanisms? - Cross Validated

猜你喜欢

转载自blog.csdn.net/yangyehuisw/article/details/116207892
今日推荐