一. 什么是注意力机制

人在观察事物时会有选择性的关注较为重要的信息,称其为注意力。通过持续关注这一关键位置以获得更多的信息,而忽略其他的无用信息,这种视觉注意力机制大大提高了我们处理信息的效率和准确性。深度学习中的注意力机制和人类视觉的注意力机制类似,就是在更多信息中把注意力集中放在重要的点上,选出关键信息,而忽略其他不重要的信息。

注意力机制(Attention Mechanism)是一种在计算机科学和机器学习中常用的技术,可以使模型在处理序列数据时更加准确和有效。在传统的神经网络中,每个神经元的输出只依赖于前一层的所有神经元的输出,而在注意力机制中,每个神经元的输出不仅仅取决于前一层的所有神经元的输出,还可以根据输入数据的不同部分进行加权,即对不同部分赋予不同的权重。这样可以使模型更加关注输入序列中的关键信息,从而提高模型的精度和效率。

Attention 机制的核心思想是:让模型能够动态地关注输入数据中最重要的部分,而不是平等地处理所有信息。

二. 注意力机制(Attention)

注意力机制可以视为查询矩阵(Query)、(key)以及加权平均值构成了多层感知机(Multilayer Perceptron, MLP)。

给定Target中的某个元素Query,通过计算Query和各个Key的相似性相关性,得到每个Key对应Value的权重系数,然后对Value进行加权求和,即得到最终的Attention数值。所以,本质上Attention机制是Source中元素的Value值进行加权求和,而Query和Key用来计算对应Value的权重系数。

其计算公式为:

Attention(Q,K,V) = softmax\left ( \frac{QK^{T}}{\sqrt{d_k}} \right )V

其中,\sqrt{d_k}​​ 是缩放因子,用以控制内积数值量级,确保权重是单位方差的,保持 Softmax 梯度稳定。

其计算过程如下图所示:

  • 第一阶段,计算 Query和不同 Key 的相关性,即计算不同 Value 值的权重系数;
  • 第二阶段,对上一阶段的输出进行归一化处理,将数值的范围映射到 0 和 1 之间;
  • 第三阶段,根据权重系数对Value进行加权求和,从而得到最终的注意力数值。

三. 自注意力机制(Self-Attention)

自注意力机制(Self-Attention)是一种常用的注意力机制,它主要用于处理序列数据,可以在不同的时间步上计算出不同位置的注意力权重,从而将所有时间步的信息进行整合和交互。其核心思想在于Q,K,V三者同源。

其计算流程如下图:

简单描述就是:QK 相乘求相似度,做一个 scale(未来做 softmax 的时候避免出现极端情况),然后做 Softmax 得到概率,最后用得到的概率值和V相乘得到最终的值。

1. 获取Q,K,V值

假设有一个序列X = \left [ x_{1},x_{2},...,x_{n}\right ],其中x_{i}表示序列的第 i个元素,对每个元素x_{i}分别计算其查询(Query)、键(Key)和值(Value):

Q = W^{Q}\ *\ x_{i}\\ K = W^{k}\ *\ x_{i}\\ V = W^{v}\ *\ x_{i}

W^QW^KW^V分别表示对 Query、Key 和 Value 进行线性变换的权重矩阵,它们的维度分别为d_{Q} \times d_{X}d_{K} \times d_{X}d_{V} \times d_{X},其中d_{X} 表示输入序列的维度,d_{Q}d_{K}d_{V} 分别表示查询、键和值的维度。

2. 计算Q和K之间的相似度(MatMul)

将获取到的Q向量和K向量做点乘的操作计算其相似度,

Q * K^{T}

具体计算流程如下图所示:

3. Scale+Softmax计算

将Q向量和K向量计算出的注意力权重除以一个归一化因子,最后通过 softmax 函数进行归一化,

attn = softmax\left ( \frac{QK^{T}}{\sqrt{d_k}} \right )

其实现流程如下图所示:

4. 计算加权和(MatMul)

计算加权和,即将注意力权重与值进行加权求和,得到每个时间步的加权和

out= attn * V

其计算流程如下图所示:

z_{1}表示的就是 输入词向量thinking 的新的向量表示,即thinking 经过自注意力机制(Self-Attention)得到新的向量。

新的z_{1}依然是 thinking 的词向量表示,只不过这个词向量的表示蕴含了 thinking machines 这句话对于 thinking 而言哪个更重要的信息。

四. 掩码自注意力机制(Masked Self-Attention)

掩码自注意力(Masked Self-Attention)是生成模型(如ChatGPT、机器翻译)的核心技术,其本质是通过“遮挡未来信息”确保模型生成当前词时仅依赖已知内容。

可以通俗理解为:当我们做生成任务的时候,我们也想对生成的这个单词做注意力计算,但是,生成的句子是一个一个单词生成的:

例如生成句子“I have a dream”时:

-生成第一个词“I”时,模型只能关注自身;
-生成第二个词“have”时,模型只能参考已生成的“I”和“have”;
-生成第三个词“a”时,模型可参考“I”“have”和“a”;
-生成最后一个词“dream”时,才能看到整个句子。

如果没有掩码,模型在训练时会“偷看”完整句子,导致生成时依赖未出现的未来信息,产生逻辑错误(如生成“dream”时提前看到后续内容)。

具体操作流程为:通过一个上三角矩阵将未来位置的注意力分数设为极小值(如-1e9),使这些位置的权重趋近于零。例如生成“have”时,注意力矩阵中“a”“dream”位置的权重被强制忽略。如下图所示:

经过Softmax后变为:

掩码自注意力相当于给模型戴上“眼罩”,强制其生成每个词时仅依赖已知内容,避免“作弊”。这种机制是生成模型流畅输出文本的核心技术,也是Transformer在自然语言处理领域超越传统RNN/CNN的关键。

五. 多头自注意力机制(Multi-head Self-Attention)

多头自注意力机制(Multi-head Attention)是一种在Transformer模型中被广泛采用的注意力机制扩展形式,它通过并行地运行多个独立的注意力机制来获取输入序列的不同子空间的注意力分布,从而更全面地捕获序列中潜在的多种语义关联。

输入序列首先通过三个不同的线性变换层分别得到Query、Key和Value。然后,这些变换后的向量被划分为若干个“头”(论文中用的8头),每个头都有自己独立的Query、Key和Value矩阵。对于每个头,都执行一次Scaled Dot-Product Attention(缩放点积注意力)运算,即:

Attention(Q,K,V) = softmax\left ( \frac{QK^{T}}{\sqrt{d_k}} \right )V

最后,所有头的输出会被拼接(concatenate)在一起,然后再通过一个线性层进行融合,得到最终的注意力输出向量。

通过这种方式,多头自注意力能够并行地从不同的角度对输入序列进行注意力处理,提高了模型理解和捕捉复杂依赖关系的能力。

其具体流程图为:

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐