Self-Attention 和 Multi-Head Attention 的区别——附最通俗理解!!

简介: Self-Attention 和 Multi-Head Attention 的区别——附最通俗理解!!

前言

随着Transformer模型的迅速普及,Self-Attention(自注意力机制)和Multi-Head Attention(多头注意力机制)成为了自然语言处理(NLP)领域中的核心组件。本文将从 简要工作、工作流程、两者对比三个方面,解析这两种注意力。


一、简要介绍

Self-Attention(自注意力机制):使输入序列中的每个元素能够关注并加权整个序列中的其他元素,生成新的输出表示,不依赖外部信息或历史状态。

  • Self-Attention允许输入序列中的每个元素都与序列中的其他所有元素进行交互。
  • 它通过计算每个元素对其他所有元素的注意力权值,然后将这些权值应用于对应元素的本身,从而得到一个加权和的输出表示。
  • Self-Attention不依赖于外部信息或先前的隐藏状态,完全基于输入序列本身。

Self-Attention

Multi-Head Attention(多头注意力机制):通过并行运行多个Self-Attention层并综合其结果,能够同时捕捉输入序列在不同子空间中的信息,从而增强模型的表达能力。

  • Multi-Head Attention实际上是多个并行的Self-Attention层,每个“头”都独立地学习不同的注意力权重。
  • 这些“头”的输出随后被合并(通常是拼接后再通过一个线性层),以产生最终的输出表示。
  • 通过这种方式,Multi-Head Attention能够同时关注来自输入序列的不同子空间的信息。

Multi-Head Attention

二、工作流程

Self-Attention(自注意力机制):通过生成查询、键和值向量,计算并归一化注意力分数,最终对值向量进行加权求和,从而得到输入序列中每个位置的加权表示。

Self-Attention工作流程

第一步:查询、键和值的生成

  • 输入:接收一个由嵌入向量组成的输入序列,这些嵌入向量可以是词嵌入加上位置嵌入。
  • 处理:使用三个独立的线性层(或称为密集层)为每个输入向量生成查询(Q)、键(K)和值(V)向量。

查询向量用于表示当前焦点或希望获取的信息。

键向量用于确定与查询向量匹配的信息。

值向量包含与相应的键向量关联的实际信息。

第一步:查询、键和值的生成

第二步:注意力矩阵的计算

  • 处理:计算查询向量和所有键向量之间的点积,形成一个注意力分数矩阵。

这个矩阵的每个元素表示一个查询向量和对应键向量之间的相关性分数。

由于点积操作,分数可能非常大或非常小。

第二步:注意力矩阵的计算

第三步:注意力归一化分数

  • 处理:应用 Softmax函数对注意力分数矩阵进行归一化。

归一化后,每行的和为1,每个分数表示对应位置信息的权重。

在应用softmax之前,通常会除以一个缩放因子(如查询或键向量维度的平方根)来稳定梯度。

第三步:归一化注意力分数

第四步:加权和输出

  • 处理:使用归一化后的注意力权重对值向量进行加权求和

加权求和的结果是自注意力机制的输出,它包含了输入序列中所有位置的加权信息。

输出向量的每个元素都是输入向量的加权和,权重由注意力机制决定。

第四步:加权和输出

Multi-Head Attention(多头注意力机制):通过将输入的查询、键和值矩阵分割成多个头,并在每个头中独立计算注意力,再将这些头的输出拼接线性变换,从而实现在不同表示子空间中同时捕获和整合多种交互信息,提升模型的表达能力。

Multi-Head Attention 工作流程

  • 初始化:首先,初始化必要的参数,包括查询、键和值矩阵的权重,以及多头注意力中的头数。这些权重将用于后续的线性变换。
  • 线性变换:对输入的查询、键和值矩阵进行线性变换。这些线性变换是通过与相应的权重矩阵相乘来实现的。变换后的矩阵将用于后续的多头注意力计算。
  • 分割与投影:将线性变换后的查询、键和值矩阵分割成多个头。每个头都有自己的查询、键和值矩阵。然后,在每个头中独立地计算注意力分数。
  • 缩放与Softmax:对每个头的注意力分数进行缩放,以避免梯度消失或爆炸的问题。然后,应用Softmax函数将注意力分数归一化,使得每个位置的权重之和为1。
  • 加权求和:使用归一化后的注意力权重对值矩阵进行加权求和,得到每个头的输出矩阵。
  • 拼接与线性变换:将所有头的输出矩阵拼接在一起,形成一个大的输出矩阵。然后,对这个输出矩阵进行线性变换,得到最终的输出。

三、两者对比

核心差异:Self-Attention关注序列内每个位置对其他所有位置的重要性,而Multi-Head Attention则通过在多个子空间中并行计算注意力,使模型能够同时捕获和整合不同方面的上下文信息,从而增强了对复杂数据内在结构的建模能力。

  • Self-Attention(自注意力机制):自注意力机制的核心是为输入序列中的每一个位置学习一个权重分布,这样模型就能知道在处理当前位置时,哪些位置的信息更为重要。Self-Attention特指在序列内部进行的注意力计算,即序列中的每一个位置都要和其他所有位置进行注意力权重的计算。
  • Multi-Head Attention(多头注意力机制):为了让模型能够同时关注来自不同位置的信息,Transformer引入了Multi-Head Attention。它的基本思想是将输入序列的表示拆分成多个子空间(头),然后在每个子空间内独立地计算注意力权重,最后将各个子空间的结果拼接起来。这样做的好处是模型可以在不同的表示子空间中捕获到不同的上下文信息。

案例对比:在“我爱AI”例子中,Self-Attention计算每个词与其他词的关联权重,而Multi-Head Attention则通过拆分嵌入空间并在多个子空间中并行计算这些权重,使模型能够捕获更丰富的上下文信息。

Self-Attention(自注意力机制):

1. 输入:序列“我爱AI”经过嵌入层,每个词(如“我”)被映射到一个512维的向量。

2. 注意力权重计算:

       对于“我”这个词,Self-Attention机制会计算它与序列中其他所有词(“爱”、“A”、“I”)之间的注意力权重。

       这意味着,对于“我”的512维嵌入向量,我们会计算它与“爱”、“A”、“I”的嵌入向量之间的注意力得分。

3. 输出:根据计算出的注意力权重,对输入序列中的词向量进行加权求和,得到自注意力机制处理后的输出向量。

Multi-Head Attention(多头注意力机制):

1. 子空间拆分:

       原始的512维嵌入空间被拆分成多个子空间(例如,8个头,则每个子空间64维)。

       对于“我”这个词,其512维嵌入向量被相应地拆分成8个64维的子向量。

2. 独立注意力权重计算:

       在每个64维的子空间内,独立地计算“我”与“爱”、“A”、“I”之间的注意力权重。

       这意味着在每个子空间中,我们都有一套独立的注意力得分来计算加权求和。

3. 结果拼接与转换:

       将每个子空间计算得到的注意力输出拼接起来,形成一个更大的向量(在这个例子中是8个64维向量拼接成的512维向量)。

       通过一个线性层,将这个拼接后的向量转换回原始的512维空间,得到Multi-Head Attention的最终输出。

四、通俗理解

Self-Attention(自注意力机制)

假如你在玩一堆玩具。有些玩具是朋友,它们喜欢一起玩。比如,超级英雄玩具喜欢和其他超级英雄在一起,动物玩具喜欢和其他动物在一起。当你玩一个玩具时,你会想,哪些玩具是它的好朋友?自注意力机制就像是帮助玩具找到它们的好朋友。这样,玩具们就可以更好地一起玩,让游戏更有趣。

在计算机的世界里,自注意力机制帮助电脑找出一句话里哪些词是“好朋友”,哪些词需要一起被理解。这就像帮助玩具找到它们的好朋友,让整个故事更有意思。

Multi-Head Attention(多头注意力机制)

假如你有一群不同的小朋友,每个人都有自己最喜欢的玩具。一个小朋友可能最喜欢超级英雄,另一个可能喜欢动物,还有一个可能喜欢车子。当他们一起玩时,每个人都会关注不同的玩具。然后,他们一起分享他们玩的故事,这样就可以组成一个大故事,每个玩具都有自己的角色。

多头注意力机制就像这群小朋友一样。电脑不只从一个角度看问题,而是像很多个小朋友一样,从不同的角度来看。这样,电脑就可以了解更多的事情,像小朋友们分享他们的故事一样,电脑也可以把这些不同的视角放在一起,让它更好地理解整个问题。

总结

所以,自注意力机制就像是帮助玩具找到它们的好朋友,而多头注意力机制就像许多小朋友从不同的角度一起玩玩具,让故事更丰富有趣。电脑用这些方法来更好地理解我们告诉它的话,就像玩一个有趣的游戏一样!

参考:架构师带你玩转AI

目录
相关文章
|
1月前
|
机器学习/深度学习 测试技术 计算机视觉
【YOLOv11改进 - 注意力机制】LSKA(Large Separable Kernel Attention):大核分离卷积注意力模块
【YOLOv11改进 - 注意力机制】LSKA(Large Separable Kernel Attention):大核分离卷积注意力模块
【YOLOv11改进 - 注意力机制】LSKA(Large Separable Kernel Attention):大核分离卷积注意力模块
|
1月前
|
机器学习/深度学习 自然语言处理 计算机视觉
【YOLOv11改进 - 注意力机制】 MHSA:多头自注意力(Multi-Head Self-Attention)
【YOLOv11改进 - 注意力机制】 MHSA:多头自注意力(Multi-Head Self-Attention)BoTNet是一种将自注意力机制引入ResNet的创新架构,通过在最后三个瓶颈块中用全局自注意力替换空间卷积,显著提升了图像分类、物体检测和实例分割的性能,同时减少了参数量和计算开销。在COCO实例分割和ImageNet分类任务中,BoTNet分别达到了44.4%的Mask AP和84.7%的Top-1准确率,超越了现有模型。
【YOLOv11改进 - 注意力机制】 MHSA:多头自注意力(Multi-Head Self-Attention)
|
6月前
|
存储 人工智能 算法
Multi-Head RAG:多头注意力的激活层作为嵌入进行文档检索
现有的RAG解决方案可能因为最相关的文档的嵌入可能在嵌入空间中相距很远,这样会导致检索过程变得复杂并且无效。为了解决这个问题,论文引入了多头RAG (MRAG),这是一种利用Transformer的多头注意层的激活而不是解码器层作为获取多方面文档的新方案。
88 1
|
5月前
|
机器学习/深度学习 编解码 自然语言处理
【YOLOv8改进 - 注意力机制】 MHSA:多头自注意力(Multi-Head Self-Attention)
YOLO目标检测专栏探讨了BoTNet,一种在ResNet瓶颈块中用全局自注意力替换卷积的架构,提升实例分割和检测性能。BoTNet表现优于先前的ResNeSt,且在ImageNet上速度更快。文章介绍了多头自注意力(MHSA)机制,用于学习输入的不同部分间的关系。BoTNet的MHSA层整合在低分辨率特征图中,以捕获长距离依赖。YOLOv8进一步引入MHSA,通过具体的模块定义(如提供的`MHSA`类)来增强模型的注意力机制。相关论文和代码链接可供参考。
|
6月前
|
测试技术 计算机视觉
【YOLOv8改进】LSKA(Large Separable Kernel Attention):大核分离卷积注意力模块 (论文笔记+引入代码)
YOLO目标检测专栏介绍了大可分卷积核注意力模块LSKA,用于解决VAN中大卷积核效率问题。LSKA通过分解2D卷积为1D卷积降低计算复杂度和内存占用,且使模型关注形状而非纹理,提高鲁棒性。在多种任务和数据集上,LSKA表现优于ViTs和ConvNeXt,代码可在GitHub获取。基础原理包括LSKA的卷积核分解设计和计算效率优化。示例展示了LSKA模块的实现。更多详情及配置参见相关链接。
|
6月前
|
机器学习/深度学习 计算机视觉
【YOLOv8改进】EMA(Efficient Multi-Scale Attention):基于跨空间学习的高效多尺度注意力 (论文笔记+引入代码)
YOLO目标检测专栏介绍了创新的多尺度注意力模块EMA,它强化通道和空间信息处理,同时降低计算负担。EMA模块通过通道重塑和并行子网络优化特征表示,增强长距离依赖建模,在保持效率的同时提升模型性能。适用于图像分类和目标检测任务,尤其在YOLOv8中表现出色。代码实现和详细配置可在文中链接找到。
|
6月前
|
机器学习/深度学习 计算机视觉
【YOLOv8改进】MSFN(Multi-Scale Feed-Forward Network):多尺度前馈网络
**HCANet: 高光谱图像去噪新方法**\n混合卷积与注意力网络(Hybrid Convolutional and Attention Network)是针对HSI去噪的创新模型,结合CNN和Transformer,强化全局与局部特征。它使用卷积注意力融合模块捕获长距离依赖和局部光谱相关性,多尺度前馈网络提升多尺度信息聚合。代码可在[GitHub](https://github.com/summitgao/HCANet)获取。
|
6月前
|
机器学习/深度学习 存储 计算机视觉
【YOLOv8改进】BRA(bi-level routing attention ):双层路由注意力(论文笔记+引入代码)
**BiFormer和HCANet摘要** BiFormer是CVPR2023提出的一种新型视觉Transformer,采用双层路由注意力机制实现动态稀疏注意力,优化计算效率和内存使用,适用于图像分类、目标检测和语义分割任务。代码可在GitHub获取。另一方面,HCANet是针对高光谱图像去噪的深度学习模型,融合CNN和Transformer,强化全局和局部特征建模,通过多尺度前馈网络提升去噪效果。HCANet在HSI数据集上表现优秀,其代码同样开放源代码。
|
机器学习/深度学习
知识追踪实战:lstm+ Multi-head Attention注意力机制的学生做题成绩预测实战
知识追踪实战:lstm+ Multi-head Attention注意力机制的学生做题成绩预测实战
131 0
|
机器学习/深度学习 数据采集 自然语言处理
多单元 RNN(Multi-Unit RNN)
多单元 RNN(Multi-Unit RNN)是一种循环神经网络(RNN)的扩展,它在原有的 RNN 基础上增加了一个单元(Unit)的概念。这个单元可以是一个单独的神经网络层,也可以是一个完整的子网络。在多单元 RNN 中,每个单元都可以独立地学习输入序列的不同特征,从而提高模型的表达能力。多单元 RNN 通常用于处理序列数据,例如自然语言处理、语音识别和时间序列预测等领域。
111 3