注意力机制计算介绍

Wings Lv3

接下来,我们来稍微讨论注意力机制计算。正如之前的博客所介绍,当前主流业界的大规模参数模型中的一个重要组件就是注意力机制(Attention)。那么当前,首先需要搞清楚的就是,什么是注意力机制的计算,如何理解?

在这一篇博客中,我会尝试联系传统的网络模块,从传统的网络模块理解注意力机制的计算的机制是什么,然后再介绍它的一些性质和特殊场景下的变种。

通用注意力机制建模

首先,本文并不直接对着注意力公式来理解。事实上,如果直接对着注意力公式来理解,可能会有点“无法理解”,至少是和其他网络之间的联系。所以,我们先从深度学习最基础的形式出发。在这里需要澄清一点的是,当前主流大语言模型中所使用的因果自注意力(Causal self-attention)是通用注意力的特殊情况。

回到最简单的深度学习网络——多层感知机(MLP)上:

可以看到,一个最简单的多层感知机是一个带非线性函数变换的两层的线性变换。其中参数是两个参数矩阵,是一个非线性函数。这个神经网络的输入是维向量,输出是维向量,中间有过渡的维向量。从公式上看,多层感知机所针对的是单个向量自身的变换,在深度学习中这种向量也可以叫做一个状态(State)。

我们从常见的任务来理解,如房价状态分类任务,输入是某一个房子的各类信息,可以由一个房子的不同属性所构成,观察第一个参数矩阵的计算:

这是一个非常基础的矩阵乘法,对于一个中间状态向量来说,它的其中一个分量是通过上一层元素的带权求和所得到的,相当于这个向量的每一个分量有着不同的重要程度求和得到的。带权求和这个概念将会贯穿本文始终。

接着,我们再来看卷积神经网络(CNN)。为什么会有卷积神经网络,或者说卷积神经网络解决了多层感知机哪些没有处理好的内容呢?

首先,卷积神经网络大量使用在图像处理领域上,其一个主流核心观点是,卷积神经网络本身是许多过滤器(filter)的集合,通过多个自适应的大小不同参数不同的过滤器提取图像特征来做图像任务,如分类,生成等。

举个例子,对于一个输入的图像(假设是一张灰度图),卷积神经网络,首先有多个不同大小的过滤器,假设这里有一个3x3大小的过滤器,它首先会从左上角开始提取图片特征(事实上在CNN中的计算顺序并不重要,这里只是选择其中一块),其过程可以由以下公式描述:

从这个公式上可以看到,模型参数作为一种信号过滤/提取器提取图像原有信息,但和多层感知机不同的是,我们将一张图片看做为一个向量,此时这个过滤器(多层感知机的“过渡矩阵”)类似一个固定大小的窗口,针对该向量的某些部分进行信息提取得到新的向量的分量:

当然,这样做是有好处的:

  • 利用了图像的平面信息更好提取信息。一个像素位置周围的像素的信息是有关系的,其不同的组合形式表示不同的状态,通过模型给定的过滤器提取这样的状态为后续的任务提供基础。
  • 减少了计算开销。从矩阵计算来说,通过更小的矩阵计算,以窗口化的形式完成图像特征的提取,减少了计算开销。

接下来,我们借助上述回顾的内容,尝试扩展到文本,在扩展文本之前,我们做几个思想实验来更好地理解,文本需要什么样类型的神经网络更合适。

思想实验1:像素/图像特征向量化

在卷积神经网络基础上,我们假设输入的图像的颜色元素是向量形式,或者,提取出来的图像特征元素是向量形式,即网络所接受的输入每一个元素都是向量形式。

首先,这样的假设是合理的,对于神经网络来说,它本质上并不理解颜色像素是“什么”,而只是知道有一个数值强度,而通过向量形式,也就是一个维度空间能够更好地表达颜色\特征之间的关系。传统的特征提取过程可以理解为一定范围内的颜色数值强度之间模式的信息提取,提取以后仍然是一个数值,这个数值可以理解为上一层过滤器的匹配程度。

对于下一层的网络来说,如果能够知道上一层的过滤器的参数状态是什么,即组合,就能够更大程度利用该信息,更好地进行下游状态的迭代。

所以,此时整个网络所接受到的输入就是一组向量的输入,即,当然当前背景是图像,所以向量和向量之间还有在平面上的位置关系。

在这个变化下,我们再重新思考卷积神经网络的变形,对比公式(4),可以意识到计算过程完全不需要改变:

这仍然是通过一个固定大小的过滤器给定对应的权值,对于不同的向量有着不同的重要程度再求和,这就是向量形式的带权求和。

对于多层感知机的向量形式推广也是类似的,假设一个房子的属性不再是简单的数值,而是每一个富有含义的状态向量,那么通过一层神经网络的变换得到的中间的向量状态,对于其中一个分量结果就是所有输入向量的带权求和。而多行权重(行),相当于有多个不同过滤器得到不同的分量结果:

思想实验2:可变大小的特征提取

接着,我们再思考一个事情,传统的卷积神经网络有一个常见的隐形要求是固定输入大小,这一方面确保经过多层卷积神经网络以后输出的维度是固定的,但也导致在面对不同尺寸的图像输入的时候(训练也是如此)首先就需要对图像进行大小规模处理,比如放缩到某尺寸规模,再进行神经网络处理。

我们尝试换思路,不是让图像放缩大小来适应网络,而是让网络能够适应不同尺寸的图像,这就要求网络本身能够处理变化的尺寸。我们设想一个最简单的变换,通过适应可变大小的网络变换提取信息,假设输入是可变大小的图像,输出是固定大小的维度。

此时,我们重新思考公式(5)的时候就会发现一个问题,卷积神经网络的权值是固定的,而输入是变化的,它无法适应可变大小的输入,此时我们需要一个能够根据这个区域大小变化的神经网络模块。

既然我们需要一个随着区域大小变化的神经网络模块,我们可以直接从区域出发,假设某个区域中有个向量,通过依赖这些向量做变换得到权值有:

此时,这个权值就能适应这的个数多少。对于这个可变大小的区域,公式(5)也可以扩展为:

为了防止数值溢出,即这个区域较大,此时求和的数值可能会很大在数值上会溢出,所以可以做一个平均对数值大小进行控制有:

到这里,我们的通用注意力计算也呼之欲出。接下来我们整理上述公式,导出一个通用的注意力公式。

通用注意力计算形式

从上述的思想实验中,可以得知,假如我们要处理一批可变大小向量之间的关系,就需要公式(8)这种形式的神经网络模块。具体观察公式(8)可以看到,对于区域$X=(\vec{x}_1, \dots, \vec{x}N)f\text{filter}\vec{x}_iw_i$再进行区域向量的带权求和。为了和熟悉的注意力计算公式对应,可以重新写成下面的形式:

公式(9)和公式(8)没有本质上的区别仅仅只是一些符号的改变。从公式(9)延伸出来的意义,表示第个位置对应过滤器匹配项,表示该位置的向量状态。从公式(10)还可以看出,常见注意力形式下的在概念位置上并不是同样的位置,可以很明显看出向量是绑定在一起的,背后由同一个控制,而是单独的,与过滤器,参数概念相关。

这种形式的能够处理可变大小向量的神经网络模块就不再是存储适配区域大小的权值,而是记录上述的变换等变换的参数,而模型所要训练的内容也是这些变换函数。

Attention的具体物理意义与变种

接下来,通过上述推导的通用注意力计算形式来理解常见的注意力的变种。

常用的通用注意力形式

首先介绍当前常用的”通用”形式[1,2,3]。从公式(10)出发,函数定义为向量相似度计算得到权值,有:

其中是一个与有着同样维度的向量。另一方面,整个权值的计算还需要经过一个Softmax归一化有

而对于则通过线性变换来完成变换。所以,对于两个领域的向量空间(过滤器领域)和(目标领域),维度分为是,首先有三个过渡矩阵。然后选择领域A中的1个向量和领域B中的个向量,有

公式(10)的计算就可以写成:

补充:在具体计算中会对计算有一个系数放缩这是因为过渡矩阵变换以后加权求和会让数值偏大,做一个数值放缩,在这里稍微忽略数值上考虑。

扩展1:矩阵形式

假设领域A中选择的不是1个而是个,那么整个计算可以变成一个矩阵形式,相当于有个过滤器作用同一个区域,得到个向量结果,此时就有

这也是我们常说的并行形式,从上述的公式来看,并行形式本质上是多个过滤器对同一个区域作用的过程。

扩展2:mask形式

除此之外,在一些场景下,并不希望所有的区域向量都参与进来,比如图像中,非常远的像素对这个区域影响较小,可以忽略从而减少计算;或者类似序列信息,当前位置的信息不需要看到后面序列的信息。如果直接从中排除掉,自然就不会参与计算;另一方面,如果没有排除掉,还可以通过针对某一些位置遮盖以实现,此时就可以直接让,经过的计算得到从而屏蔽掉对应的位置向量。

因果序列的自注意力

如果我们把场景限定在文本上[3],我们会发现,文本可以看做是一组带顺序的向量所构成一个维度的信息,通过注意力计算能够得到带序列的文字信息聚合状态。对于每一个顺序位置中,只需要聚合前面的信息即可,即公式(15)的变形有:

仔细观察该公式的下标,遍历随着序列的位置而不同。除此之外,所有的都是来自同一组向量,所以又叫做自注意力,但从上述的推导来看,之间的计算地位并不等同,是一个过滤器,是原始数据的信息。所以我们可以理解到,一段长度为的文本实际上拥有个过滤器个源数据

类似地,该背景下也有矩阵形式,但由于要满足每一个过滤器的位置限制,所以还需要通过屏蔽位置后续的信息来达到序列信息的性质。

参考材料

[1] PyTorch. MultiheadAttention[EB/OL]. https://docs.pytorch.org/docs/2.13/generated/torch.nn.MultiheadAttention.html.

[2] PyTorch. torch.nn.functional.scaled_dot_product_attention[EB/OL]. https://docs.pytorch.org/docs/2.13/generated/torch.nn.functional.scaled_dot_product_attention.html.

[3] Vaswani A, Shazeer N, Parmar N, et al. Attention is all you need[J]. Advances in neural information processing systems, 2017, 30.

  • 标题: 注意力机制计算介绍
  • 作者: Wings
  • 创建于 : 2026-08-05 10:00:00
  • 更新于 : 2026-08-11 17:18:15
  • 链接: https://www.wingslab.top/深度学习/注意力机制计算介绍/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。