注意力机制简单理解

1. 什么是注意力机制?

​ 我们在日常的生活中对许多事物都有我们自己的注意力重点,通过注意力我们可以更加关注于我们注意的东西,从而过滤不太关注的信息。

  • 看到一张人像图时,我们会更关注人的脸部,其次根据脸部再细分我们个人的关注点,比如我更关注眼睛,你可以更关注鼻子、嘴巴等。然后为这些关注点内容赋予不同的权重,这个权重代表注意力的分配。

​ 注意力机制就是模仿人的注意力的一种识别机制,可以帮助机器像人一样筛选重要注意力特征。

2. 如何实现注意力机制?

  • 计算公式:image-20240110151349869

其中,image-20240110154254019计算相似值,通过softmax函数转化为概率权重,然后✖️V得到注意力值。

例子:淘宝搜索

  1. 查询:在淘宝搜索“笔记本“,查询Q

    image-20240110151544583

    网页中出现的最前面的笔记本推荐是淘宝推荐系统最希望我们注意的一些笔记本,这就是注意力机制实现的一种,那么其内部的机制是怎样的呢?我们接着往下进行分析。

  2. 计算相似性K:淘宝系统在拿到查询Q之后,将Q与后台现有的商品的关键字K进行对比,计算他们和查询之间的相似性得到一个暂且可以理解为权重的东西。

    这一步的主要作用就是搜索到是笔记本的商品。

  3. 价值V:每个商品都对应了一个价值V,这个价值的计算方式可能是淘宝内部的一个价值打分机制,可以根据商品的广告费、评价、销量等因素来综合得出。

    而这一步的作用就是得到是笔记本的商品之后,每个商品都是对应的价值VV越高就说明该商品的价值越高。

  4. 根据相似性计算商品的综合价值(给商品价值加上权重):权重✖️价值,得到商品的综合价值。然后系统根据综合评分进行排序,将排序后的笔记本呈现给用户。

    这个综合价值是相对于客户的搜索Q而言的。

3. 自注意力机制

自注意力机制是注意力机制的变体,其减少了对外部信息的依赖,更擅长捕捉数据或特征的内部相关性。

image-20240110170337045

自注意力机制在文本中的应用,主要是通过计算单词间的互相影响,来解决长距离依赖问题。

自注意力机制的计算过程,如上图所示:

1.将输入单词转化成嵌入向量;

2.根据嵌入向量得到qkv三个向量;

3.为每个向量计算一个score:score =q . k

4.为了梯度的稳定,Transformer使用了score归一化,即除以image-20240110170140524

5.对score施以softmax激活函数;

6.softmax点乘Valuev,得到加权的每个输入向量的评分v

7.相加之后得到最终的输出结果image-20240110170504069

例子:The animal didn't cross the street because it was too tired 这里的it到底代表的是animal还是street呢,对于我们来说能很简单的判断出来,但是对于机器来说,是很难判断的,self-attention就能够让机器把itanimal联系起来。利用了自注意力机制之后,可以得到下图所示的关联:

image-20240110171013521

说明注意力机制可以很好学习上下文的信息,得到不同词汇之间的注意力关系。

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用[1]和引用的描述,GALA(Global and Local Attention)注意力机制是一种结合了全局和局部信息的注意力机制。它主要通过自适应地编码来自远程区域的信息上下文来增加感受野。 以下是一个简单示例代码,用于演示GALA注意力机制的实现: ```python import torch import torch.nn as nn class GALAAttention(nn.Module): def __init__(self, in_channels): super(GALAAttention, self).__init__() self.avg_pool = nn.AdaptiveAvgPool2d(1) self.max_pool = nn.AdaptiveMaxPool2d(1) self.conv = nn.Conv2d(in_channels, in_channels, kernel_size=1) self.sigmoid = nn.Sigmoid() def forward(self, x): avg_out = self.conv(self.avg_pool(x)) max_out = self.conv(self.max_pool(x)) attention = self.sigmoid(avg_out + max_out) out = x * attention return out # 使用示例 input = torch.randn(1, 64, 32, 32) # 输入特征图大小为 1x64x32x32 gala = GALAAttention(64) # 输入通道数为 64 output = gala(input) # 输出特征图大小与输入相同 print(output.size()) # 输出特征图的大小 ``` 在上述代码中,`GALAAttention`类定义了一个GALA注意力模块。它包含了一个自适应平均池化层和一个自适应最大池化层,用于提取全局和局部信息。然后,通过一个卷积层将池化后的特征图进行通道变换,并使用Sigmoid函数将其映射到0到1之间的范围,得到注意力矩阵。最后,将输入特征图与注意力矩阵相乘,得到加权后的输出特征图。 你可以根据需要调整输入特征图的大小和通道数,并使用`forward`方法将输入特征图传递给`GALAAttention`模块,以获取输出特征图。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值