神经网络算法:一文搞懂Attention(注意力)机制

本文详细阐述了Attention机制的核心逻辑、原理以及在AI领域的应用,包括Transformer模型、BERT和GPT的发展。通过图书馆寻找漫威书籍的例子,生动展示了Attention如何根据信息重要性分配注意力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文将从Attention的本质、Attention的原理、Attention的应用三个方面,带您一文搞懂Attention(注意力)机制。

图片

Attention的本质

核心逻辑:从关注全部到关注重点

  • Attention机制处理长文本时,能从中抓住重点,不丢失重要信息

  • Attention 机制像人类看图片的逻辑,当我们看一张图片的时候,我们并没有看清图片的全部内容,而是将注意力集中在了图片的焦点上。

  • 我们的视觉系统就是一种 Attention机制,将有限的注意力集中在重点信息上,从而节省资源,快速获得最有效的信息。

图片

视觉系统就是一种Attention机制

Transformer:《Attention is All You Need》

  • Transformer模型,完全基于注意力机制,避开了传统的RNN或CNN结构

  • 引入了Self-Attention机制,使模型可以对输入序列中的所有元素进行关联建模

  • Multi-Head Attention使得模型能够从多个角度捕获输入序列的信息

  • 为后续的大规模预训练语言模型(如BERT、GPT等)奠定了基础。

图片

**AI 领域的 Attention 机制:**Attention->Transformer->BERT、GPT->NLP

二、Attention的原理

原理初体验: 小故事讲解 Attention原理

  • Attention机制好比在图书馆中有大量的书籍,每本书都有特定的编号和内容。当想要了解某个主题(比如“漫威”)时,会查找与这个主题相关的书籍。

  • 与“漫威”直接相关的动漫、电影书籍会仔细地阅读(权重高),而与“漫威”间接相关的二战书籍只需要简单浏览一下(权重低)。

  • 这个过程就体现了Attention机制的核心思想:根据信息的重要性来分配注意力

图片

Attention机制:了解漫威

Attention原理:3阶段分解

图片

Attention机制的原理图

  • 第一步:query 和 key 进行相似度计算,得到权值。

  • 第二步:将权值进行归一化,得到直接可用的权重。

  • 第三步:将权重和 value 进行加权求和。

RNN 时代是死记硬背的时期,Attention机制学会了提纲挈领进化到Transformer,融会贯通,具备优秀的表达学习能力,再到 GPT、BERT,通过多任务大规模学习积累实战经验,战斗力爆棚。

三、Attention的应用

CNN + Attention:

CNN的卷积操作可以提取重要特征,这也算是Attention的思想。但是CNN的卷积感受视野是局部的,需要通过叠加多层卷积区去扩大视野。

CNN叠加Attention方式如下:

  • 在卷积操作前做Attention: 比如Attention-Based BCNN-1,对两段输入的序列向量进行Attention,计算出特征向量,再拼接到原始向量中,作为卷积层的输入。

  • 在卷积操作后做Attention: 比如Attention-Based BCNN-2,对两段文本的卷积层的输出做Attention,作为池化层的输入。

  • 在池化层做Attention: 比如Attention pooling,首先我们用LSTM学到一个比较好的句向量,作为query,然后用CNN先学习到一个特征矩阵作为key,再用query对key产生权重,进行Attention,得到最后的句向量。

LSTM+Attention:

LSTM内部有门控机制,其中输入门选择哪些当前信息进行输入,遗忘门选择遗忘哪些过去信息,这也算是一定程度的Attention。但LSTM需要一步一步去捕捉序列信息,在长文本上的表现会随着步骤的增加而慢慢衰减,难以保留全部的有用信息。

LSTM通常需要得到一个向量,再去做任务,常用方式有:

  • 直接使用最后的隐藏层(可能会损失一定的前文信息,难以表达全文)

  • 对所有步骤下的隐藏层进行等权平均(对所有步骤一视同仁)。

  • Attention机制,对所有步骤的隐藏层进行加权,把注意力集中到整段文本中比较重要的隐藏层信息。性能比前面两种要好一点,方便可视化观察哪些步骤是重要的。

### 步态识别中的注意力机制及其实现方法 在步态识别领域,注意力机制是一种有效的方法,能够帮助模型聚焦于输入数据中最重要的部分,从而提升性能。以下是关于步态识别中注意力机制的应用以及其实现方式的具体分析。 #### 注意力机制的作用 注意力机制的核心在于通过动态加权的方式突出重要特征并抑制无关信息。对于步态识别而言,这种能力尤为重要,因为步态数据通常受到多种干扰因素的影响,如视角变化、光照条件差异和遮挡等[^1]。因此,在处理复杂的步态数据时,引入注意力机制可以帮助模型更好地捕捉人体姿态的关键区域或时间片段。 #### 基于深度学习的实现方法 一种常见的做法是在卷积神经网络(CNN)架构的基础上融入自注意力模块或者通道注意力机制来增强特征表达能力。例如,《用于步态识别的3D局部卷积神经网络一文中提到的研究工作采用了三维卷积层结合局部感受野设计,并进一步探讨了如何利用空间-时间上的注意力建模行人行走过程中的细微动作模式[^2]。 具体来说,可以通过以下几种技术路径实现: 1. **空间注意力** 空间注意力关注的是图像不同位置的重要性程度。它可以被定义为一个权重图,其中每个像素点对应着其相对于全局场景的意义大小。为了计算这些权重值,一般会先经过一系列变换操作得到查询向量Q、键K与值V三者之间的关系矩阵;接着再乘回原始特征映射上完成重新分配资源的任务。 ```python import torch.nn as nn class SpatialAttention(nn.Module): def __init__(self, kernel_size=7): super(SpatialAttention, self).__init__() assert kernel_size in (3, 7), 'kernel size must be 3 or 7' padding = 3 if kernel_size == 7 else 1 self.conv1 = nn.Conv2d(2, 1, kernel_size, padding=padding, bias=False) self.sigmoid = nn.Sigmoid() def forward(self, x): avg_out = torch.mean(x, dim=1, keepdim=True) max_out, _ = torch.max(x, dim=1, keepdim=True) x = torch.cat([avg_out, max_out], dim=1) x = self.conv1(x) return self.sigmoid(x) ``` 2. **通道注意力** 不同于单纯考虑单张图片内部各处关联性的思路,通道维度则反映了多路滤波器共同协作的结果。换句话说就是让各个feature map之间也存在竞争合作关系以便更精准地描述目标对象特性。该种形式下往往采用平均池化(Max Pooling) 和最大池化(Avg Pooling)分别获取统计汇总后的表征作为输入端传递给全连接层生成最终决策依据。 ```python import torch from torch import nn class ChannelAttention(nn.Module): def __init__(self, num_channels, reduction_ratio=8): super(ChannelAttention, self).__init__() self.num_channels = num_channels self.reduction_ratio = reduction_ratio reduced_dim = int(num_channels / reduction_ratio) self.fc1 = nn.Linear(in_features=num_channels, out_features=reduced_dim, bias=False) self.relu = nn.ReLU(inplace=True) self.fc2 = nn.Linear(in_features=reduced_dim, out_features=num_channels, bias=False) self.sigmoid = nn.Sigmoid() def forward(self, input_tensor): batch_size, channels, height, width = input_tensor.size() # Average pooling along spatial dimensions avg_pool = F.avg_pool2d(input_tensor, (height, width)).view(batch_size, channels) # Max pooling along spatial dimensions max_pool = F.max_pool2d(input_tensor, (height, width)).view(batch_size, channels) shared_mlp_output_avg = self.fc2(self.relu(self.fc1(avg_pool))) shared_mlp_output_max = self.fc2(self.relu(self.fc1(max_pool))) channel_attention_map = self.sigmoid(shared_mlp_output_avg + shared_mlp_output_max).unsqueeze(-1).unsqueeze(-1) output = input_tensor * channel_attention_map.expand_as(input_tensor) return output ``` 以上两种类型的注意力都可以单独部署也可以联合起来形成复合型结构以适应更加多样化的需求环境当中去发挥各自优势互补长短达到最优效果的目的。 #### 当前研究现状与发展前景 虽然当前已有不少尝试将注意力机制应用于步态识别任务之中取得了一定成效但是仍然存在着诸多亟待解决的技术难题有待突破比如怎样构建更为鲁棒高效的跨摄像头匹配算法等等这些问题都需要未来科研工作者们持续努力探索寻找答案. ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值