Self-Attention自注意力机制:深度学习中的动态焦点 | 手把手实例解析

680 阅读8分钟

一、前言

在探索自然语言处理(NLP)和其他序列建模任务中,注意力机制已经成为了一个不可或缺的工具。它使得模型能够聚焦于输入数据中的关键部分,而不仅仅是按照顺序处理信息。在这篇文章中,我们将探讨一种特别的注意力机制——自注意力(Self-Attention),并解释它如何改变了我们构建神经网络的方式。


二、什么是自注意力?

自注意力是一种特殊的注意力机制,它允许模型关注输入序列的不同位置以计算表示向量。与传统的循环神经网络(RNN)相比,自注意力机制不需要按照顺序处理序列中的每个元素,这大大加快了训练速度,并且能够在长距离依赖上表现出色。

类比:阅读书籍

想象一下你在阅读一本小说。当你读到某个段落时,你的大脑会自动将注意力集中在某些关键词或句子上,这些词句对于理解整个故事至关重要。自注意力机制就像是一个智能的阅读器,它可以在文本中找到这些关键点,并根据它们的重要性为每一个词分配权重。

三、自注意力机制的目标

自注意力机制的主要目标是在处理序列数据(如文本、时间序列等)时,为每个位置的元素形成一个上下文敏感的表示。具体来说,自注意力机制的目标包括以下几个方面:

1、上下文感知表示:

自注意力机制允许模型为序列中的每个元素(比如句子中的每个词)生成一个基于其周围元素的表示。这意味着每个词的表示不仅依赖于它本身的特征,还依赖于它与其他词的关系。

2、权重分配:

在自注意力机制中,会为序列中的每个元素分配权重,这些权重反映了该元素对于其他元素的重要性。通过计算这些权重,模型可以确定哪些部分更加重要,从而在后续的任务中给予更多的关注。

3、并行计算:

相比于传统的循环神经网络(RNNs),自注意力机制允许在计算过程中实现并行化,从而显著提高训练效率。

4、长距离依赖捕获:

自注意力机制可以有效地捕获输入序列中任意两个位置之间的依赖关系,即使这两个位置相距很远。这一点对于处理长序列数据尤其重要。

5、多头注意力:

为了捕捉不同层次上的信息,自注意力机制通常采用多头注意力的形式。每个头都可以独立地学习不同的注意力分布,这样就可以同时考虑多种角度的上下文信息。

6、灵活的输入长度:

自注意力机制不需要固定的输入长度,因此它可以很容易地处理变长的输入序列。


总结来说,自注意力机制的目标是让模型能够根据输入序列中各个元素之间的相互关系,为每个元素生成一个上下文相关的表示。这些表示可以用于各种自然语言处理任务,如机器翻译、文本分类、情感分析等,从而提高模型的表现力和预测性能。

四、自注意力机制如何分配权重——举例说明

让我们通过一个具体的例子来展示自注意力机制是如何分配权重的。我们将使用一个简短的句子作为输入,并详细解释每个步骤。

1、输入句子

假设我们的输入句子是:“The cat sat on the mat.”

2、步骤分解

  1. 初始化:首先,我们需要为句子中的每个单词计算查询向量、键向量和值向量。
  2. 计算相似度:然后,我们计算每个查询向量与所有键向量之间的相似度。
  3. 归一化:接着,我们对相似度得分进行归一化,以得到注意力权重。
  4. 加权求和:最后,我们根据注意力权重对值向量进行加权求和,得到每个单词的新表示。

3、初始化表格

假设我们有以下的键向量(Key Vectors)、查询向量(Query Vectors)和价值向量(Value Vectors):

单词键向量 (Key)查询向量 (Query)价值向量 (Value)
The[0.3, 0.4][0.1, 0.2][0.5, 0.6]
cat[0.9, 0.1][0.7, 0.8][0.2, 0.3]
sat[0.5, 0.6][0.3, 0.4][0.7, 0.8]
on[0.2, 0.3][0.9, 0.1][0.4, 0.5]
the[0.7, 0.8][0.5, 0.6][0.9, 0.1]
mat[0.4, 0.5][0.2, 0.3][0.6, 0.7]

4、计算相似度

我们已经计算了每个单词与其他单词的键向量之间的点积,得到了相似度得分的表格。

5、计算相似度表格

单词Thecatsatonthemat
The-0.630.270.180.350.10
cat0.63-0.710.380.350.19
sat0.270.33-0.240.420.18
on0.180.630.24-0.300.13
the0.350.350.420.30-0.22
mat0.100.190.180.130.22-

6、计算注意力权重

接下来,我们需要对相似度得分进行归一化,以得到注意力权重。我们使用 softmax 函数来归一化相似度得分。

7、归一化表格

单词Thecatsatonthemat
The-0.460.110.070.140.04
cat0.46-0.510.200.140.08
sat0.110.15-0.110.190.09
on0.070.460.11-0.140.08
the0.140.140.190.14-0.14
mat0.040.080.090.080.14-

8、加权求和

最后,我们将根据注意力权重对价值向量进行加权求和,得到每个单词的新表示。

9、加权求和示例

以单词“cat”为例,我们计算它的新表示 (o_{cat})。

  1. 计算加权和: 在这里插入图片描述

  2. 具体计算: 在这里插入图片描述

  3. 结果: 在这里插入图片描述

10、加权求和表格

单词新表示
The[0.289, 0.318]
cat[0.356, 0.442]
sat[0.382, 0.425]
on[0.315, 0.362]
the[0.442, 0.289]
mat[0.234, 0.301]

11、解释

  • 对于单词“cat”,它与“on”和“the”之间的相似度较高,这可能是因为它们在语义上更相关。
  • 因此,在计算“cat”的新表示时,“on”和“the”的值向量将被赋予更高的权重。
  • “cat”的新表示综合了它周围的单词信息,特别是那些与它关联较大的单词。

五、新的加权求和表格的作用?

加权求和表格与原始的键向量和查询向量表格相比具有不同的含义和用途。加权求和表格展示了经过自注意力机制处理后,每个单词的新表示向量。这些新表示向量综合了上下文中其他单词的信息,从而更好地反映了每个单词在句子中的语境意义。下面详细解释这些不同之处及其意义:

1、不同之处

  1. 原始表格:原始表格列出了每个单词的键向量和查询向量,这些向量通常是通过线性变换从原始词嵌入得到的。
  2. 加权求和表格:加权求和表格列出了每个单词的新表示向量,这些向量是通过自注意力机制得到的。

2、意义

  1. 上下文敏感:加权求和表格中的新表示向量是上下文敏感的。这意味着每个单词的表示不仅取决于其自身的特征,还取决于它在句子中的位置以及与其他单词的关系。这种上下文敏感性有助于模型更好地理解句子的意思。
  2. 注意力权重:加权求和表格中的新表示向量是根据注意力权重计算得到的。这些权重反映了句子中每个单词相对于其他单词的重要性。通过这种方式,模型可以更关注那些对于理解句子意义更为重要的单词。
  3. 长距离依赖:加权求和表格中的新表示向量能够更好地捕获长距离依赖关系。由于注意力机制可以连接句子中的任意两个位置,即使它们相隔很远,这也使得模型能够更好地处理长句子和复杂结构。
  4. 并行计算:加权求和表格中的新表示向量可以在多个位置同时计算,这提高了模型的计算效率,尤其是在处理长序列时。

3、加权求和表格示例

单词新表示
The[0.289, 0.318]
cat[0.356, 0.442]
sat[0.382, 0.425]
on[0.315, 0.362]
the[0.442, 0.289]
mat[0.234, 0.301]

4、比较

与原始表格相比,加权求和表格中的新表示向量具有以下特点:

  • 更加丰富:新表示向量包含了来自句子中其他单词的信息,这使得它们能够更好地反映单词在特定上下文中的意义。
  • 更加聚焦:通过注意力权重,新表示向量更加关注那些对于理解句子更为重要的单词。
  • 更加上下文相关:新表示向量根据上下文中其他单词的不同而变化,这使得它们能够在不同的句子中具有不同的含义。

5、小结

加权求和表格中的新表示向量是自注意力机制的核心输出,它们使得模型能够更好地理解输入序列中的单词,从而提高在各种自然语言处理任务中的表现。这些新表示向量能够更好地捕捉句子的上下文信息,这对于任务如机器翻译、文本分类、情感分析等是非常重要的。

六、总结

通过以上步骤,自注意力机制能够为每个单词生成一个新的表示向量,这个向量综合了整个句子中其他单词的信息,并且根据它们与目标单词的相关性进行了加权。这种机制使得模型能够捕捉到输入序列中的上下文关系,并且重点关注于那些对于理解某个单词意义更为重要的部分。