注意力机制(英语:attention)是人工神经网络中一种模仿认知注意力的技术。这种机制可以增强神经网络输入数据中某些部分的权重,同时减弱其他部分的权重,以此将网络的关注点聚焦于数据中最重要的一小部分。数据中哪些部分比其他部分更重要取决于上下文。可以通过梯度下降法对注意力机制进行训练。
类似于注意力机制的架构最早于1990年代提出,当时提出的名称包括乘法模块(multiplicative module)、sigma pi单元、超网络(hypernetwork)等。注意力机制的灵活性来自于它的“软权重”特性,即这种权重是可以在运行时改变的,而非像通常的权重一样必须在运行时保持固定。注意力机制的用途包括神经图灵机(英语:Neural Turing machine)中的记忆功能、可微分神经计算机(英语:Differentiable neural computer)中的推理任务、Transformer模型中的语言处理、Perceiver(感知器)模型中的多模态数据处理(声音、图像、视频和文本)。
假设我们有一个以索引排列的标记(token)序列。对于每一个标记,神经网络计算出一个相应的满足的非负软权重。每个标记都对应一个由词嵌入得到的向量。加权平均即是注意力机制的输出结果。
可以使用查询-键机制(query-key mechanism)计算软权重。从每个标记的词嵌入,我们计算其对应的查询向量和键向量。再计算点积的softmax函数便可以得到对应的权重,其中代表当前标记、表示与当前标记产生注意力关系的标记。
某些架构中会采用多头注意力机制(multi-head attention),其中每一部分都有独立的查询(query)、键(key)和值(value)。
下图展示了将英语翻译成法语的机器,其基本架构为编码器-解码器结构,另外再加上了一个注意力单元。在图示的简单情况下,注意力单元只是循环层状态的点积计算,并不需要训练。但在实践中,注意力单元由需要训练的三个完全连接的神经网络层组成。这 三层分别被称为查询(query)、键(key)和值(value)。
下表是每一步计算的示例。为清楚起见,表中使用了具体的数值或图形而非字母表示向量与矩阵。嵌套的图形代表了每个h都包含之前所有单词的历史记录。在这里,我们引入注意力分数以得到所需的注意力权重。
以矩阵展示的注意力权重表现了网络如何根据上下文调整其关注点。
对注意力权重的这种展现方式回应了人们经常用来批评神经网络的可解释性问题。对于一个只作逐字翻译而不考虑词序的网络,其注意力权重矩阵会是一个对角占优矩阵。这里非对角占优的特性表明注意力机制能捕捉到更为细微的特征。在第一次通过解码器时,94%的注意力权重在第一个英文单词“I”上,因此网络的输出为对应的法语单词“je”(我)。而在第二次通过解码器时,此时88%的注意力权重在第三个英文单词“you”上,因此网络输出了对应的法语“t'”(你)。最后一遍时,95%的注意力权重在第二个英文单词“love”上,所以网络最后输出的是法语单词“aime”(爱)。
注意力机制有许多变体:点积注意力(dot-product attention)、QKV注意力(query-key-value attention)、强注意力(hard attention)、软注意力(soft attention)、自注意力(self attention)、交叉注意力(cross attention)、Luong注意力、Bahdanau注意力等。这些变体重新组合编码器端的输入,以将注意力效果重新分配到每个目标输出。通常而言,由点积得到的相关式矩阵提供了重新加权系数(参见图例)。