AI筑基录——注意力机制篇
前言回顾之前的内容我们介绍了神经网络的基础知识并且带着大家简单的完成了卷积神经网络的搭建接下来我们打算介绍一种优化方式——注意力机制注意此注意力并非 Transformer 中的注意力机制如果前面几期的内容没有看的可以点击下面的链接觉得内容有帮助的希望可以关注一下博主博主将持续更新专栏 AI筑基录AI筑基录——卷积神经网络篇-CSDN博客注意力机制在谈论注意力机制之前我们先明白注意力是什么我们生活中老师可能会说集中注意力看黑板这个时候我们的注意力通常就会落在黑板上面把关注的权重更多的放在黑板上面从而降低其他部分的权重注意力机制做的就是面对很多信息时模型自动判断哪些信息更重要并给重要信息更大的权重具体的做法就是通过加权的形式为什么需要注意力机制原因很简单因为不是每一个位置或者通道的信息都是重要的因此我们要把目光放在重要的区域所以我们需要注意力机制通道注意力机制经过 CNN 神经网路假设卷积层输出[ B,64,128,128 ]通道数是 64 对应特征图也是 64 张因为每一张特征图所代表的信息是不一样的于是通道注意力会为每一个通道生成一个权重通道注意力通常会先生成一个注意力权重接着广播乘法把每一个通道赋予对应的权重参数这样做形状不变但重要通道被增强不重要通道被抑制对于一个原始特征图 x[B, C, H, W] 每一个通道里面有 HxW个数为了判断整个通道重不重要首先需要把空间信息压缩掉常见方法是全局平均池化接着经过一个小的 MLP 层目的是学习各个通道之间存在什么关系以及最终应该给每个通道多大的权重最后经过 Sigmoid函数输出权重参数下面是 SE Attention 的代码示例class ChannelAttention(nn.Module): def __init__(self, channels, reduction16): super().__init__() hidden_channels max(channels // reduction, 1) # [B,C,H,W] - [B,C,1,1] self.avg_pool nn.AdaptiveAvgPool2d(1) # 用1×1卷积实现通道维度上的MLP self.mlp nn.Sequential( nn.Conv2d(channels, hidden_channels, kernel_size1), nn.ReLU(inplaceTrue), nn.Conv2d(hidden_channels, channels, kernel_size1) ) self.sigmoid nn.Sigmoid() def forward(self, x): weight self.avg_pool(x) weight self.mlp(weight) weight self.sigmoid(weight) return x * weight我们学习不要被动的接受内容我们不妨想一下由于采用了全局平均池化就算目标虽然在局部位置激活很强但是经过平均池化后目标特征可能被冲淡那么换句话全局池化适合小目标任务吗(因为背景信息占据主要内容)因此我们得换一个形式去描述通道那这个部分就是一个小小的优化过程了空间注意力机制前者解决哪一个通道重要空间注意力机制解决的就是哪个位置重要因此它首先是把通道数压缩一般采用的方法是分别沿通道最大池化和平均池化拼接后经过卷积层最后 Sigmoid 输出权重为什么要同时做平均和最大池化呢原因是平均池化可以表示这个位置在所有通道上的整体响应如何最大池化可以表示这个位置是否至少在某一个通道上产生了非常强的响应因此两者的结合会比只有一种表示的信息丰富代码示例class SpatialAttention(nn.Module): def __init__(self, kernel_size7): super().__init__() assert kernel_size in (3, 7) padding kernel_size // 2 self.conv nn.Conv2d( in_channels2, out_channels1, kernel_sizekernel_size, paddingpadding, biasFalse ) self.sigmoid nn.Sigmoid() def forward(self, x): # 沿通道维求平均 # [B,C,H,W] - [B,1,H,W] avg_out torch.mean(x, dim1, keepdimTrue) # 沿通道维取最大值 # [B,C,H,W] - [B,1,H,W] max_out, _ torch.max(x, dim1, keepdimTrue) # [B,1,H,W] [B,1,H,W] # - [B,2,H,W] pooled torch.cat([avg_out, max_out], dim1) # [B,2,H,W] - [B,1,H,W] weight self.conv(pooled) weight self.sigmoid(weight) return x * weightCBAM 注意力机制CBAM 注意力就是把前面两个合并在一起但是顺序一般固定为先通道注意力后空间注意力这个是研发者实验发现串联方式优于并行方式而在两种串联顺序中通道优先略好于空间优先代码示例import torch import torch.nn as nn class ChannelAttention(nn.Module): def __init__(self, channels, reduction16): super().__init__() hidden_channels max(channels // reduction, 1) self.avg_pool nn.AdaptiveAvgPool2d(1) self.max_pool nn.AdaptiveMaxPool2d(1) # 两个池化分支共享同一个MLP self.shared_mlp nn.Sequential( nn.Conv2d( channels, hidden_channels, kernel_size1, biasFalse ), nn.ReLU(inplaceTrue), nn.Conv2d( hidden_channels, channels, kernel_size1, biasFalse ) ) self.sigmoid nn.Sigmoid() def forward(self, x): # 两个分支都是 [B,C,H,W] - [B,C,1,1] avg_out self.shared_mlp(self.avg_pool(x)) max_out self.shared_mlp(self.max_pool(x)) weight self.sigmoid(avg_out max_out) # [B,C,H,W] * [B,C,1,1] return x * weight class SpatialAttention(nn.Module): def __init__(self, kernel_size7): super().__init__() assert kernel_size in (3, 7) padding kernel_size // 2 self.conv nn.Conv2d( 2, 1, kernel_sizekernel_size, paddingpadding, biasFalse ) self.sigmoid nn.Sigmoid() def forward(self, x): # 沿通道维压缩 avg_out torch.mean(x, dim1, keepdimTrue) max_out, _ torch.max(x, dim1, keepdimTrue) # [B,1,H,W] 和 [B,1,H,W] # - [B,2,H,W] pooled torch.cat([avg_out, max_out], dim1) # - [B,1,H,W] weight self.sigmoid(self.conv(pooled)) # [B,C,H,W] * [B,1,H,W] return x * weight class CBAM(nn.Module): def __init__(self, channels, reduction16, kernel_size7): super().__init__() self.channel_attention ChannelAttention( channels, reduction ) self.spatial_attention SpatialAttention( kernel_size ) def forward(self, x): # 先选择重要通道 x self.channel_attention(x) # 再选择重要空间位置 x self.spatial_attention(x) return x但是有一个点我们要注意不是说添加了对应的优化模块我们就一定可以涨点添加优化模块我们难免引入一个问题就是模型的参数量增加这个问题就会引出更多问题比如计算成本、拟合问题、存储问题等这也就是创新中常见的权衡所以就算没有涨点也很正常但是这也不代表我们这么做就是没有用我们可以注意力存图观察模型的注意主要是落在哪一个方面后面对其进一步做优化小思考我们不妨先归一这三个机制理想情况下我们是希望通道和空间都被赋予一个独立的权重这样做同一个空间位置对不同通道的重要性不同同一个通道在不同空间位置的重要性也不同但是直接预测成本太高(注意力图计算和内存成本)因此我们通常单独抓一个进行建模像是 CBAM 也是两者的近似组合现在的问题就是转化成为如何在低计算成本下建模更强的通道空间耦合关系呢大家有想法的可以在评论区讨论一下总结这一讲主要是介绍卷积神经网络的一个常见优化方式我们介绍了三种常见的注意力机制本源都是来自于我们卷积层输出维度产生的一般放置的位置是卷积层后面残差连接的前面AI筑基录的专栏会慢慢更新完带大家有体系的理解神经网络的由来制作不易喜欢博主文章的可以点赞收藏关注这些都是我持续更新的动力

相关新闻

嵌入式2英寸电容触摸屏驱动指南:SPI与I2C协同开发实战

嵌入式2英寸电容触摸屏驱动指南:SPI与I2C协同开发实战

1. 从“点一下”到“滑一下”:2英寸电容触摸屏的入门选择如果你玩过树莓派或者Arduino,大概率接触过那种需要按下去才有反应的电阻屏,或者干脆就是不带触摸的“裸屏”。最近几年,一种更接近我们手机体验的2英寸电容触摸LCD开始在小…

2026/8/2 8:27:43 阅读更多 →
PCA主成分分析实战:从鸢尾花数据集详解降维原理与标准化重要性

PCA主成分分析实战:从鸢尾花数据集详解降维原理与标准化重要性

1. 从一道经典例题切入:为什么PCA不是“降维魔法”? 如果你在数据科学或者机器学习的路上摸索过一阵子,大概率听说过PCA(主成分分析)这个名字。它常常被描述为一种“降维神器”或“特征提取工具”,听起来像…

2026/8/2 8:27:43 阅读更多 →
树莓派3.4英寸DSI LCD屏幕连接、驱动与优化全攻略

树莓派3.4英寸DSI LCD屏幕连接、驱动与优化全攻略

1. 项目概述:3.4英寸DSI LCD屏幕与树莓派的邂逅最近在捣鼓一个需要便携显示的项目,目光自然就落在了树莓派和各类小尺寸屏幕上。市面上HDMI接口的屏幕虽然通用,但接线繁琐、占用接口,对于追求极致简洁和低功耗的嵌入式应用来说&am…

2026/8/2 8:27:43 阅读更多 →

最新新闻

Kimi智能助手背后的AI基建:向量数据库与分布式推理如何支撑亿级用户

Kimi智能助手背后的AI基建:向量数据库与分布式推理如何支撑亿级用户

1. 从“人手一个”的体验,窥见AI基建的冰山一角最近,Kimi智能助手那个“人手一个数据库”的梗火遍了技术圈。很多用户发现,在和Kimi进行多轮、深度的对话后,它似乎能记住之前聊过的所有细节,从你上周提到的项目需求&am…

2026/8/2 9:19:07 阅读更多 →
终极免费PlantUML在线编辑器指南:5分钟从代码到专业UML图

终极免费PlantUML在线编辑器指南:5分钟从代码到专业UML图

终极免费PlantUML在线编辑器指南:5分钟从代码到专业UML图 【免费下载链接】plantuml-editor PlantUML online demo client 项目地址: https://gitcode.com/gh_mirrors/pl/plantuml-editor 还在为绘制复杂的UML图而头疼吗?PlantUML在线编辑器为你带…

2026/8/2 9:19:07 阅读更多 →
快手CK自动化运营:Cookie原理、风控规避与合规实践指南

快手CK自动化运营:Cookie原理、风控规避与合规实践指南

1. 项目概述:从“快手CK”到自动化运营的深度解析最近在和一些做短视频运营的朋友交流时,经常听到“快手CK”这个词。乍一听,可能有点摸不着头脑,这既不是某个新出的硬件,也不是官方术语。实际上,这是圈内对…

2026/8/2 9:19:07 阅读更多 →
华为手机激活锁(FRP锁)深度解析:原理、风险与解锁实战指南

华为手机激活锁(FRP锁)深度解析:原理、风险与解锁实战指南

1. 项目概述:当华为系手机成为“砖头”手滑输错密码,或者长时间没用,突然想不起来锁屏密码——这事儿估计不少人都遇到过。如果只是普通的忘记密码,大不了恢复出厂设置,虽然数据没了,但手机至少能重新“活”…

2026/8/2 9:19:07 阅读更多 →
Grove-MP3 v4.0音频模块:基于WT2605C的嵌入式MP3播放解决方案

Grove-MP3 v4.0音频模块:基于WT2605C的嵌入式MP3播放解决方案

1. 项目概述:Grove - MP3 v4.0,一个为创客而生的音频模块如果你玩Arduino、ESP32或者树莓派,想在项目里加点声音——比如做个会说话的智能闹钟、一个能播报天气的桌面助手,或者一个带背景音乐的互动装置——那你大概率会碰到一个头…

2026/8/2 9:19:07 阅读更多 →
微信公众号爬虫终极指南:5分钟解决你的数据采集难题

微信公众号爬虫终极指南:5分钟解决你的数据采集难题

微信公众号爬虫终极指南:5分钟解决你的数据采集难题 【免费下载链接】wechat_articles_spider 微信公众号文章的爬虫 项目地址: https://gitcode.com/gh_mirrors/we/wechat_articles_spider 你是否曾经需要分析微信公众号的运营数据,却发现微信平…

2026/8/2 9:18:07 阅读更多 →

日新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/2 0:00:38 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/2 0:00:38 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/2 6:34:16 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/2 2:47:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/2 0:23:22 阅读更多 →