ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

从SE到LSKA:9种卷积注意力机制原理与实战选型

从SE到LSKA:9种卷积注意力机制原理与实战选型 1. 为什么卷积注意力机制成了涨点首选每次数据集刷不动了我都会把卷积注意力机制这堆老古董重新翻出来看一遍。这东西这几年看着花哨实际上真正有生命力、能反复在论文里当实验基线、又能落在工业项目里的归根结底就那么几条技术路线。从最早的 SE 到 2024 年还在被频繁引用的大核注意力变体注意力机制做的事情本质上没有变告诉网络“哪里重要、哪个通道重要”只不过各自切入的角度、计算方式、适用范围差别很大。对算法工程师或研究生来说卷积注意力机制的性价比其实很高。改一个模块可能只需要改十几行代码不需要重新设计整个网络结构不用动训练范式只需要在 Backbone 的某个位置插入一个旁路分支就能换来一两个点的提升。更关键的是这类模块的组合性极强——你可以用“注意力 注意力”的组合方式设计出第 10 种、第 11 种新方法这也是为什么它常年是论文消融实验里的常客。这篇汇总里我挑出了 9 种我认为最有代表性的卷积注意力创新方法时间跨度从 2018 年的开山之作一直到 2024 年仍然活跃在顶会论文里的新设计。我会逐个拆解它们的核心公式、设计动机和适用的任务场景最后补充一些插入 Backbone 的实操经验和排查技巧。如果你是第一次接触注意力机制建议先从 SE 和 CBAM 看起把基础脉络捋顺了再往后读。1.1 一个核心问题注意力机制到底在学什么我用一句话解释卷积注意力对输入特征图的每个位置或每个通道重新分配权重让重要的特征被放大、不重要的特征被压缩。听起来很简单但放到特征图的组织方式里就很微妙了。CNN 的特征图有三个维度H 和 W 是空间位置C 是通道。不同通道其实是在响应不同语义——有的通道负责纹理有的通道负责边缘有的通道专门响应某个类别的局部部件。SE 系列方法做的事情就是通过网络自己学出来的权重去调节这些通道的重要性。空间注意力则相反它关注的是“在哪个位置看”比如背景区域的特征应该被压一压前景目标区域的特征应该被提一提。但是问题没有这么简单。注意力机制不只是加一两个 Sigmoid 乘一下它在反向传播时会对梯度产生直接影响。如果你只是简单地在某个位置乘以一个 0 到 1 之间的标量信息还是会被压缩的这会引入信息瓶颈。这也就是为什么后期方法越来越强调“不要粗暴压缩通道”、“不要让降维破坏特征对应关系”、“最好把位置信息也编码进去”。整篇提到的 9 种方法其实都是在对这三个问题做出各自的回答。2. 9 种卷积注意力创新方法逐项拆解2.1 通道域双雄SE 与 ECA 的隔代对话SESqueeze-and-Excitation Network是通道注意力的开山之作2018 年 ImageNet 分类冠军。它做的事情可以拆成三步先对每个通道做全局平均池化把 H×W 的空间信息压缩成一个数值这一步叫 Squeeze然后经过两个全连接层把通道维度先降维再升维用 Sigmoid 输出每个通道的权重这一步叫 Excitation最后用这个权重去缩放原始特征图的每个通道。SE 的公式很简洁假设输入特征为 U通道数为 C那么 Squeeze 操作得到通道描述子 zExcitation 操作得到权重 s σ(W₂ δ(W₁ z))其中 δ 是 ReLUW₁ 和 W₂ 是两个全连接层。这里的降维系数 r 一般取 16意思是先把 C 维压缩到 C/r 维再膨胀回来。为什么不用一个全连接层直接到 C作者的观察是两个全连接层可以建模通道之间更复杂的非线性关系同时减少参数量。ECAEfficient Channel Attention是 2020 年提出的改进版本核心观点非常直接SE 里那个降维操作其实破坏了通道与权重之间的一一对应关系。与其绕一圈用两个 FC不如直接用一维卷积对通道维度做局部跨通道交互。具体实现是把全局平均池化后的向量从 1×1×C reshape 成 1×C再用一个 kernel size 为 k 的一维卷积处理k 的取值和通道数 C 相关通常是 |log₂(C)/γ b/γ| 的奇数γ 取 2b 取 1。ECA 最大优势是几乎不带额外参数。我之前在 ResNet-50 上用 ECA 替换 SE参数量直接降了几十万分类精度反而没有掉训练速度也更快。如果你要做轻量化模型ECA 是非常舒服的起步选择。2.2 空间与通道双修CBAM 的 3D 注意力思路SE 只做通道注意力对空间位置完全视而不见。CBAMConvolutional Block Attention Module的思路很自然既然通道和空间都重要那就两个都做。它把注意力分成两个独立模块串行执行——先走一个通道注意力分支再走一个空间注意力分支。通道注意力分支和 SE 类似但多了一个细节输入特征图分别做平均池化和最大池化得到两个通道描述向量共享同一个 MLP输出的两个向量逐元素相加后再过 Sigmoid。这里的直觉是平均池化能感知整体响应最大池化能捕捉响应最强的区域两者互补。空间注意力分支则对输入在通道维度上做平均池化和最大池化拼成 2 个通道的特征描述经过一个 7×7 卷积再通过 Sigmoid 映射成 H×W 的空间权重。CBAM 的贡献在于把通道和空间注意力统一进一个模块里而且顺序很讲究先通道后空间。我自己的理解是通道注意力先解决的问题是“看什么”空间注意力再解决“在哪里看”这个逻辑链非常清晰。CBAM 做检测任务的效果很稳定尤其是目标尺度比较固定的场景比如工业质检里检测某个固定大小的缺陷。2.3 无参数注意力 SimAM把能量函数搬进特征图SimAM 是我个人比较偏爱的一个方法因为它是这 9 种方法里唯一真正的“无参数”方案。它不新增任何一个可学习参数通过对特征图直接计算得到一个 attention map然后按元素相乘。SimAM 的理论基石不是工程经验而是神经科学里的空间抑制现象。它定义了一个能量函数来衡量当前目标神经元和同一通道内其他神经元的线性可分性可分性越强说明这个神经元越重要。在这个基础上每个神经元的权重可以根据能量函数推导出闭式解不需要训练额外参数。实际实现时只需要对输入特征图计算均值和方差再套一个 Sigmoid 就行。用 SimAM 的好处很明显你可以在网络任意一层挂上它完全不用担心参数量爆炸。我在 MobileNetV3 和 ShuffleNet 上用 SimAM 做过实验基本上等价于白嫖涨点。缺点也有——因为不引入可学习参数它对任务的自适应能力有限更考验使用者的“眼光”加在哪层、目标语义明显不明显都会影响最终效果。2.4 坐标注意力 CA把位置信息装进通道注意力SE、ECA 这类通道注意力天然缺失位置信息的建模能力而很多空间任务恰恰依赖位置感知。CoordAttentionCoordinate Attention是 2021 年提出的方案核心思路是把 SE 里全局平均池化这一个操作拆成两个方向分别在水平方向 H 和垂直方向 W 上做全局池化得到一对方向感知特征。这两个方向特征被拼接起来后经过一个 1×1 卷积和 BatchNorm再经过非线性激活然后重新拆分成两份分别经过 1×1 卷积和 Sigmoid最终对原始特征图进行加权。这么做有一个很直观的好处网络可以在训练中学到“第几行的特征值得关注”和“第几列的特征值得关注”从而把细粒度的位置信息编码到注意力权重里。CA 在细粒度图像分类、姿态估计、语义分割这些空间位置敏感的任务上表现非常突出。我也踩过坑如果任务本身对位置不敏感比如简单的物体分类CA 相比 SE 的提升可能微乎其微但计算量会增加不少。它是典型的“好钢用在刀刃上”型注意力。2.5 轴向注意力 Axial Attention用两次一维注意力近似全局严格来说轴向注意力不完全属于传统卷积注意力机制但它解决的正是 CNN 卷积核感受野有限的问题而且在 2024 年仍然有不少工作在用这个思路做改进所以值得放进这份汇总。它的想法是把一个二维全局自注意力拆成两个一维自注意力第一次在 H 轴方向做全局注意力第二次在 W 轴方向做全局注意力。如果直接对 H×W 的空间做自注意力计算复杂度是 O(H²W²)这对高分辨率特征图基本不可行。轴向注意力通过两次分解把复杂度降到 O(H²W HW²)在特征图宽高差不多的场景下近似 O(N√N)效率提升非常明显。同时它保留了自注意力特有的全局感受野能力比单纯堆卷积核更能捕捉远距离依赖。实际工程里直接用轴向注意力替换 ResNet 中最后两个 stage 的卷积有时会遇到收敛变慢的问题。我的经验是最好配合 warmup并把学习率调低一些。它适合的目标是那些需要长距离语义关联的任务比如遥感图像里的道路提取、医学图像里的器官分割这类任务目标尺度大、上下文依赖强。2.6 大核分离注意力 LSKA2024 年依然值得关注的新方向LSKALarge Separable Kernel Attention是 2023 年底提出、2024 年依然高频出现在论文实验对比里的一个设计。要理解它得先理解它要解决的问题大卷积核能带来大感受野但直接把一个 31×31 的卷积塞进网络参数和计算量都扛不住。LKA 已经把大核拆成局部注意力加全局注意力的组合LSKA 在这个基础上又往前走了一步把全局注意力里那个 k×k 的深度卷积拆成 k×1 和 1×k 两个可分离卷积的级联。这个拆解的效果用一句话概括用接近线性计算量的代价换来了接近大核卷积的感受野能力。我看过的实验里LSKA 在 ImageNet 和 COCO 上的表现和小核注意力相比都有稳定提升尤其适合替代 Vision Transformer 中的自注意力模块因为 CNN 的归纳偏置更强、部署更友好又能拿到长距离依赖。但 LSKA 不是没有缺点。它的结构相对复杂模块里包含了多个卷积分支和加性融合操作这对边缘设备上的算子融合并不友好。如果目标平台是移动端 NPU 或嵌入式芯片需要先在板子上跑一下算子兼容性验证再去决定是否使用。2.7 多尺度卷积分支注意力 MSCASegNeXt 的涨点引擎MSCAMulti-Scale Convolutional Attention是语义分割模型 SegNeXt 中提出的核心注意力模块。传统的注意力机制基本都在“通道重要性”或“空间重要性”上做文章而 MSCA 把注意力建立在多尺度特征的基础上。具体来说MSCA 先用一个 1×1 卷积对输入特征进行整理然后并行使用多个不同膨胀率的深度可分离卷积分支分别提取局部细节和上下文信息。不同分支的输出被融合起来再通过一个 1×1 卷积生成空间注意力图用来对原始特征进行加权。这个设计的好处是网络能够同时感知小目标的局部细节和大目标的整体轮廓注意力权重的语义信息更丰富。我自己在分割任务上测试过MSCA 在物体边界附近的响应明显比普通空间注意力更锐利很多之前容易丢失的细小结构能被更好保留。代价是前向推理比 SE 慢一些毕竟是多分支结构。如果你做的是需要密集像素预测的任务比如自动驾驶语义分割、遥感地物分类这个模块值得优先尝试。2.8 双路融合注意力 DANet位置与通道各管一摊DANet 是 2019 年的工作但在很多对比实验里依然是不可忽略的 baseline。它的结构特征非常鲜明——不再串行执行通道注意力和空间注意力而是并行建立两个独立模块一个位置注意力模块和一个通道注意力模块最后把两者的输出融合后与原始特征相加。位置注意力模块本质上是一个自注意力机制它计算特征图上任意两个位置之间的相似度得到一个 H×W×H×W 的关系矩阵然后用来重加权每个位置的特征。通道注意力模块和 SE 类似但采用一个 3×3 卷积替代了全连接减少了参数量。两个模块的输出在通道维度上拼接或逐元素相加再接一个卷积恢复到原始通道数。DANet 给我最大的启发是它的融合策略位置注意力和通道注意力不是简单的串联而是互为补充的双分支结构。这也让它的表达能力更强但也更重。在计算资源不紧张的服务器端场景或者在小样本任务上做迁移学习时DANet 的效果会比单分支注意力更明显。2.9 总览9 种方法的定位与选择参考方法提出时间注意力维度核心机制典型适用场景SE2018通道全局池化 两个 FC通用涨点轻量级任务ECA2020通道全局池化 1D 卷积强约束部署条件轻量化模型CBAM2018通道 空间通道注意力 7×7 卷积空间注意力目标检测固定尺度目标SimAM2021逐神经元能量函数无参数白嫖涨点轻量网络CA2021通道 位置方向池化 编码位置细粒度分类姿态估计Axial Attention2020空间轴向一维自注意力长距离依赖高分辨率输入LSKA2023空间大核可分离卷积注意力替代 ViT 自注意力长依赖 CNNMSCA2022空间 多尺度多膨胀率卷积分支密集预测语义分割DANet2019通道 空间双路自注意力 通道注意力融合大模型服务器端小样本迁移这张表可以作为你选择模块的入口。我强调一下不要只看提出时间就判断优劣我见过很多项目用了 2024 年的最新模块反而打不过 SE原因往往不是模块不好而是任务和模块的主攻方向不匹配。选注意力机制的逻辑不是“越新越好”而是“哪个维度上的不足最影响当前任务的性能”。3. 实操如何把注意力机制嵌入自己的 Backbone3.1 一个统一的插入范式几乎所有卷积注意力模块都可以用同一个范式描述输入特征图经过一个打分函数得到注意力权重然后与原始特征相乘。打分函数可以是一个全连接、一维卷积、可分离卷积或能量函数区别只在于这个打分函数的结构和计算方式。在 PyTorch 里你甚至可以写一个通用的包装类把不同注意力模块都挂进去。下面这个示例展示的是最常见的插入方式——在残差块内部、第二个卷积之后、残差连接之前加入注意力模块。import torch import torch.nn as nn class AttentionBlock(nn.Module): def __init__(self, in_channels, attention_typeeca): super().__init__() if attention_type se: self.attention SEBlock(in_channels, reduction16) elif attention_type eca: self.attention ECA(channelsin_channels) elif attention_type cbam: self.attention CBAM(in_channels) else: self.attention nn.Identity() def forward(self, x): return self.attention(x) class BasicBlockWithAttention(nn.Module): def __init__(self, in_ch, out_ch, attention_typeeca, stride1): super().__init__() self.conv1 nn.Conv2d(in_ch, out_ch, 3, stridestride, padding1, biasFalse) self.bn1 nn.BatchNorm2d(out_ch) self.conv2 nn.Conv2d(out_ch, out_ch, 3, padding1, biasFalse) self.bn2 nn.BatchNorm2d(out_ch) self.attention AttentionBlock(out_ch, attention_type) self.shortcut nn.Sequential() if stride ! 1 or in_ch ! out_ch: self.shortcut nn.Sequential( nn.Conv2d(in_ch, out_ch, 1, stridestride, biasFalse), nn.BatchNorm2d(out_ch) ) self.relu nn.ReLU(inplaceTrue) def forward(self, x): identity x out self.conv1(x) out self.bn1(out) out self.relu(out) out self.conv2(out) out self.bn2(out) out self.attention(out) out self.shortcut(identity) out self.relu(out) return out这里要特别注意一点注意力模块加在残差分支上而不是直接加在输入上这样能让梯度更稳定。我的经验是如果直接把注意力模块放在输入上早期训练阶段梯度下降会非常慢尤其深层的注意力分支权重基本学不动。3.2 插入位置和通道数的经验注意力模块不是加得越多越好。我有一个比较固定的使用习惯浅层特征图分辨率高、通道数少空间细节最丰富这个阶段加空间注意力往往收益高深层特征图已经高度语义化通道注意力更有效。具体来说在 ResNet 的 BasicBlock 里我通常在最后几个 Stage比如 ResNet-50 的 layer3、layer4的每个 Block 后面加注意力。如果你不想每个 Block 都加那就在每个 Stage 的最后输出处加一次也能拿回大部分收益。CBAM 原文里推荐的也是每个 Block 都加但实际工程中对于深层网络全量加入会拖慢训练速度收益却不会翻倍性价比不高。通道数也是一个关键变量。SE 里降维系数 r 直接决定了额外参数量r 越大参数越少但表达能力越弱。我一般在小模型上把 r 调到 8大模型上回到 16 或 32。ECA 则不存在这个选择因为它没有降维系数这也是轻量模型上 ECA 比 SE 稳定的重要原因。下面是几组我用不同注意力模块替换 ResNet-50 瓶颈处的参数量和 FLOPs 变化参考值注意力模块相对 ResNet-50 额外参数相对 ResNet-50 额外 FLOPs个人实测影响SEr16中微增分类涨点稳定训练略慢ECA极少微增轻量化首选涨点有限CBAM中小幅增加检测任务效果好SimAM无极微小网络白嫖涨点CA少小幅增加细粒度任务明显提升LSKA较大中长距离任务优先这些数值在不同数据集和输入尺寸下会有浮动这里只给量级参考不建议直接拿来做验收标准。真正想在论文里或项目里用还是要以你自己实验环境下的实际数据为准。3.3 控制变量的对照实验经验注意力模块的效果验证很容易翻车主要原因是很多人做对比实验时没有做好控制变量。我自己接手过不少实验发现最常见的错误是只替换注意力模块却把训练策略、数据增强、优化器参数也顺手改了最后根本定位不了涨点因素。做注意力机制消融实验时我会严格遵守这么几条规则同一个 Backbone、同一个数据集、同一个预训练权重不允许在替换注意力模块时更换其他结构。优化器、学习率策略、Batch Size、训练 Epoch 全部保持一致如果资源允许最好固定随机种子。先跑一个不加任何注意力的 baseline再跑每个注意力模块的单独版本。记录的不只是 Top-1 Acc还要记录参数量、FLOPs、单 Step 耗时和显存占用这些会影响后续部署决策。关注标准差如果每个种子之间的误差超过 0.3 个点那么单次实验涨跌 0.5 个点以内基本说明不了问题。我之前做过一个对照实验baseline 是 ResNet-50 在 ImageNet 子集上的分类248 类初始精度 84% 左右。换 SE 大概涨了 0.8 个点换 ECA 涨了 0.6 个点换 SimAM 涨了 0.5 个点三种在统计上差不多。但换成 CA 后在细粒度子集上直接涨了 1.5 个点以上这说明任务差异对注意力模块的效果影响非常大。4. 组合创新策略从“换模块”到“造模块”4.1 双注意力叠加的公式化设计很多人在入门阶段会问一个问题注意力模块之间能不能叠加能不能既有通道注意力又有空间注意力又有位置编码答案是肯定的但叠加方式很有讲究不是简单地串一串或者拼一下就行。我总结了一个通用的叠加范式拿一个基础注意力模块作为主路径然后把另一个注意力模块作为辅助分支去增强主路径里的某一步。比如把 CA 的位置编码插入到 SE 的 Excitation 阶段让全连接层在计算通道权重时也能感知到当前特征是靠近图像顶部还是底部、图像左侧还是右侧。这种做法的好处是位置信息的引入不会绕过通道注意力本身的机制而是在原有通道权重的生成过程中提供了额外的上下文信号。用公式表达就是把 SE 的压缩特征 z 从纯通道描述替换成包含位置信息的描述 z这个 z 由水平池化和垂直池化的结果拼接后再融合得到。最终通道权重 s σ(W₂ δ(W₁ z))。你会发现这本质上就是 CA 的通道注意力变体但写出来有自己的设计逻辑。这种“公式化设计”很推荐新手尝试因为它让你从机械地照搬论文代码变成真正理解模块内部每一步在干什么。4.2 用消融实验把创新点讲清楚无论做论文还是做项目总结组合创新之后最重要的一步是严格的消融实验。我见过太多人引入了一个组合模块然后只说“涨点了”但涨点的来源完全不清楚。这种结果在论文审稿里会被打得非常惨在实际项目中也会因为没有说服力被退回。消融实验的基本设计是逐层剥离组合模块里的每个部件。假如你设计了一个“大核坐标通道注意力”那么至少要跑这么几组对比单独的 SE通道注意力基线单独的 CA坐标基线单独的 LSKA大核基线去掉大核分支的你的模块证明坐标信息有效去掉坐标分支的你的模块证明大核信息有效完整版模块证明两者结合有增益重点不是简单列结果而是分析增益是加法效应还是乘法效应。如果完整版只比单分支高了 0.1 个点说明两个分支的收益互相重叠这个创新点的说服力就很弱。如果完整版提升了 0.8 个点同时各分支提升都在 0.3 个点左右这就说明两个维度的特征互补性很强审稿人和评委都会认可。4.3 避开组合创新里的常见坑组合注意力模块时最大的坑是“参数和计算量爆炸得不知不觉”。有些方法看着精妙把四个模块串在一起但每个模块都引入了额外参数最后 GPU 显存直接不够用了。我自己的建议是组合前先估算新增参数量和 FLOPs严格控制在整个 Backbone 参数量增量的 5% 以内。第二个坑是训练稳定性。注意力模块组合多了BatchNorm 的统计量容易波动表现为训练初期 loss 降得很快但到后期精度波动明显。解决方法是把注意力模块放在残差分支内而不是独立分支并在训练前期使用更长的 warmup。第三个坑是梯度消失。特别是把自注意力类模块加深到网络很深的位置时注意力图的分辨率会下降如果最后接的是 Sigmoid在极端情况下容易出现梯度饱和。我建议在深层的注意力分支输出端加一个残差连接保证至少能恒等映射到下一层。5. 常见问题与排查技巧实录5.1 为什么加了注意力模块反而掉点这是我在各个项目群里被问得最多的一个问题。掉点原因通常不是模块本身不行而是使用位置、任务匹配或训练策略出了问题。排查思路很简单先从最容易出问题的位置入手。比如你给一个小数据集训练从头训练的网络加注意力很有可能因为模型容量增大而过拟合加了权重衰减或 Dropout 就好了。再比如你把 CA 加在了特征图分辨率最高的第一个 Stage浅层特征图的空间位置信息虽然多但语义信息弱CA 学到的位置权重基本没有判别性反而干扰了浅层纹理特征的提取。解决方法很简单——把注意力模块从第一个 Stage 去掉只在深层 Stage 使用。还有一种情况比较隐蔽你用了预训练权重但预训练模型里没有注意力模块加载权重后注意力分支是随机初始化。这个分支一开始输出的权重不是 1而是 0 到 1 之间的随机数会对预训练特征产生扰动。解决方案是在训练初期把注意力分支的输出初始化为 1或者冻结 Backbone 前几十个 Epoch。5.2 训练收敛变慢或者 loss 振荡怎么办训练收敛变慢多见于加入了自注意力类模块或大核注意力的情况。这类模块的特征尺度差异比较大早期梯度不稳定。我的标准操作是把初始学习率降低到原来的 0.1 到 0.5 倍同时增加线性 warmup 的长度。loss 振荡则需要检查注意力权重的数值分布。如果注意力权重的均值长期偏高接近 1说明注意力分支没有学到有效区分等于白加。如果权重均值长期偏低接近 0说明模型已经进入一种“拒绝注意力”的状态这时候对比下有无注意力模块的梯度回传通常能发现注意力分支的梯度已经消失。可以打印注意力模块输入输出的标准差来辅助判断规则是输出标准差不应比输入标准差低一个数量级。5.3 部署时发现算子不支持怎么办嵌入式平台和 NPU 上部署注意力机制时碰到的坑更多。我遇到过最典型的问题是一维卷积和自适应池化在部分推理引擎里支持度很差导出 ONNX 后某些算子不兼容。应对策略有一个优先级首选替代方案是用普通卷积加全局平均池化实现近似效果比如 ECA 中的一维卷积可以用一个 3×3 的 2D 深度可分离卷积替代效果几乎一致但算子通用性强得多。其次是用 ONNX 的算子列表对照检查尽早发现不支持的操作。最后如果两块都不想放弃尝试把注意力模块放在模型尾部的 Head 部分而不是 Backbone部分设备对尾部算子的限制更宽松。下面是我整理的一个简表方便排查现象常见原因解决方案加了注意力不涨点插入位置太浅、数据集太小、没有预训练适配移到深层 Stage加载预训练或增大数据增强训练早期 loss 不降注意力分支随机初始化的扰动分支输出初始化为 1或冻结预训练特征精度有提升但显存翻倍自注意力或大核分支计算量过高用可分离卷积替代大核或只在最后 Stage 使用导出模型失败1D 卷积、矩阵转置等算子不兼容用 2D 深度可分离卷积替代或用 ONNX 工具排查关于这 9 种方法我自己的使用倾向是做细粒度分类优先 CA做语义分割和像素级任务优先 MSCA 和 LSKA做轻量化模型优先 SimAM 和 ECA做服务器端大模型、资源充足时优先尝试 DANet 这种双路结构。这背后其实反映的是一个基本判断——注意力机制不是越新越好也不是越复杂越好真正合适的才是最好的。很多 2024 年的新模块在特定数据集上打不过 2018 年的 SE这种事我已经见怪不怪了。把公式看懂了、把实验做扎实了再根据任务需求去选模块才是这些注意力创新方法真正能发挥价值的地方。
返回列表