自注意力机制(Self-Attention Mechanism)
一、什么是Self-Attention Mechanism
先让我们来了解什么是注意力机制,当我们看到一张图画时,第一眼肯定会注意到图片中最显眼的特征,**深度学习中的注意力机制(Attention Mechanism)**是一种模仿人类视觉和认知系统的方法,它允许神经网络在处理输入数据时集中注意力于相关的部分。通过引入注意力机制,神经网络能够自动地学习并选择性地关注输入中的重要信息,提高模型的性能和泛化能力。
例如下图:
我们大部分人第一眼注意到的一定是东方明珠,但是这图其实还有旁边的楼,下面的汽车等等。这其实就是一种Attention,我们关注的是最主要的东西,而刻意“忽视”那些次要的东西。
我们再来讲解一个重要的概念,即query、key和value。这三个词翻译成中文就是查询、键、值,看到这中文的意思,还是迷迷糊糊的。我们来举个例子:小明想在b站搜索深度学习,他把深度学习四个字输入到搜索栏,按下搜索键。搜索引擎就会将他的查询query映射到数据库中相关的标签key,如吴恩达、神经网络等等,然后向小明展示最匹配的结果value。
再比如以下这张图可以较好地去理解注意力机制,其展示了人类在看到一幅图像时如何高效分配有限注意力资源的,其中红色区域表明视觉系统更加关注的目标,从图中可以看出:人们会把注意力更多的投入到人的脸部。文本的标题以及文章的首句等位置。
自注意力机制(self-attention mechanism),也被称为注意力机制(attention mechanism),是一种用于序列数据建模的机制。它最初在自然语言处理领域中被广泛使用,但也可以应用于其他序列数据,如音频和时间序列数据。
自注意力机制的目标是对序列中的每个元素分配一个权重,以便根据元素之间的关系进行建模。它通过将输入序列中的每个元素与其他元素进行比较来实现这一点,然后为每个元素计算一个权重,表示该元素与其他元素的关联程度。这些权重可以用于加权聚合序列中的元素,以产生一个表示整个序列的上下文向量。
二、Self-Attention Mechanism的架构
原论文地址如下:Attention is All you Need (neurips.cc)
在原论文中我们可以看见这个公式,乍一看晦涩难懂,但是让我们一点一点来看,这个公式中的Q,K,V就是上面我们所描述的query、key和value
1、计算过程
(1)定义输入
在进行Self - Attention之前,我们首先定义3个1×4的input。 pytorch代码如下:
import torch
x = [
[1, 0, 1, 0], # input 1
[0, 2, 0, 2], # input 2
[1, 1, 1, 1] # input 3
]
x = torch.tensor(x, dtype=torch.float32)
(2)初始化权重
每个input和三个权重矩阵分别相乘会得到三个新的矩阵,分别是key(橙色),query(红色),value(紫色)。我们已经令input的shape为1×4,key、query、value的shape为1×3,因此可以推出与input相乘的权重矩阵的shape为4×3。 代码如下:
import torch
w_key = [
[0, 0, 1],
[1, 1, 0],
[0, 1, 0],
[1, 1, 0]
]
w_query = [
[1, 0, 1],
[1, 0, 0],
[0, 0, 1],
[0, 1, 1]
]
w_value = [
[0, 2, 0],
[