Advertisement

卷积神经网络中的自注意力机制(Self-Attention Mechanism)

阅读量:

卷积神经网络中的自注意力机制(Self-Attention Mechanism)主要分为两类:增强特征提取能力和降低计算复杂度。在增强特征提取能力方面,包括Non-local Net、DANet、A^2-Net、RNL、DMSANet、SAN和PSA等机制。这些机制通过不同方式提升特征的捕捉能力,如Non-local Net利用非局部滤波操作,DANet引入沿空间和通道的自注意力,A^2-Net通过双线性池化和注意力机制提取特征描述子,RNL基于区域计算相似程度,DMSANet进行多尺度注意力,SAN设计自注意力网络,PSA基于极化滤波原理。在降低计算复杂度方面,包括CCNet、GCNet、EMANet、ISANet、ANNNet、LightNL和NLSA等机制。这些机制通过串行计算、通道注意力、Pyramid Pooling、轻量化设计和局部敏感哈希等方法,减少计算量并提高效率。

卷积神经网络中的自注意力机制(Self-Attention Mechanism)

Self-Attention Mechanism in Convolutional Neural Networks.

卷积神经网络中的自注意力机制通过非局部滤波操作实现,其过程与Seq2Seq模型的自注意力机制类似。

传统的卷积层是一种局部滤波操作,其输出特征的任一位置均基于输入特征对应局部区域的构建,仅能捕获局部特征间的相互关系。相比之下,自注意力机制通过计算任意两个位置之间的关联性,直接捕捉长距离依赖关系,无需局限于局部点,相当于构建了一个与特征图尺寸一致的虚拟卷积核,从而能够捕获更为丰富的特征信息。

在卷积网络的自注意力机制中,首先生成输入特征x的键特征f(x)、查询特征g(x)以及值特征h(x);接着,通过点积注意力机制生成自注意力特征图。

\alpha_{i} = \text{softmax}\left(f(x_i)^Tg(x_j)\right) =\frac{e^{f(x_i)^Tg(x_j)}}{\sum_j e^{f(x_i)^Tg(x_j)}}

在计算输出位置i的响应y_i时,考虑所有输入值特征h(x_j)的加权:

y_i= \sum_{j}^{} \alpha_{j}h(x_j) = \sum_{j}^{} \frac{e^{f(x_i)^Tg(x_j)}}{\sum_k e^{f(x_i)^Tg(x_k)}} h(x_j)

上式可以被写作更一般的形式:

y_i=\frac{1}{C\left(x_i\right)} \sum_j f\left(x_i, x_j\right) h\left(x_j\right)

相似度函数f(\cdot,\cdot)用于计算两个特征位置x_i,x_j之间的相似程度,输出经过权重因子C(x_i)的归一化处理。当相似度函数被设定为Embedded Gaussian函数时:

该模型通过计算两个输入向量之间的相似性函数,实现了一种高效的特征映射关系。具体而言,该函数 f\left(\mathbf{x}_i, \mathbf{x}_j\right) 通过指数运算,将映射后的特征向量\theta\left(\mathbf{x}_i\right)\phi\left(\mathbf{x}_j\right)之间的点积结果进行了显著的放大,从而有效度量了输入空间中两个样本点之间的相似程度。

此时自注意力机制等价于上述query-key-value 形式。

自注意力机制的实现可参考:

复制代码
    class SelfAttention(nn.Module):
    def __init__(self, in_channels):
        super(SelfAttention, self).__init__()
        self.f = nn.Conv2d(in_channels, in_channels, 1)
        self.g = nn.Conv2d(in_channels, in_channels, 1)
        self.h = nn.Conv2d(in_channels, in_channels, 1)
        self.o = nn.Conv2d(in_channels, in_channels, 1)
    
    def forward(self, x):
        b, c, h, w = x.shape
        fx = self.f(x).view(b, c, -1) # [b, c, hw]
        fx = fx.permute(0, 2, 1) # [b, hw, c]
        gx = self.g(x).view(b, c, -1) # [b, c, hw]
        attn = torch.matmul(fx, gx) # [b, hw, hw]
        attn = F.softmax(attn, dim=2) # 按行归一化
    
        hx = self.h(x).view(b, c, -1) # [b, c, hw]
        hx = hx.permute(0, 2, 1) # [b, hw, c]
        y = torch.matmul(attn, hx) # [b, hw, c]
        y = y.permute(0, 2, 1).contiguous() # [b, c, hw]
        y = y.view(b, c, h, w)
        return self.o(y)

卷积神经网络中的自注意力机制包括:

  • 提升特征提取能力:非局部网络、深度注意力网络、A squared网络、区域神经网络、多尺度自适应网络、自注意力网络、多尺度自适应网络、金字塔特征网络,
  • 优化计算复杂度:计算复杂度优化网络、图卷积网络、图卷积增强网络、信息素增强网络、自适应神经网络、低复杂度网络、非局部计算网络,

(1)增强特征提取能力

Non-local Net

Non-Local Net 设计了卷积网络中自注意力机制的基本结构。

Dual Attention Network (DANet)

DANet采用了Dual Attention机制,同时引入了沿空间维度以及通道维度的自注意力机制。

Double Attention Network (A^2-Net)

A^2-Net首先通过双线性池化生成一系列描述子,接着通过注意力机制将这些描述子分配至特征的各个位置。

Region-based Non-local (RNL)

在计算两个特征位置x_i,x_j之间的相似程度时,基于区域的non-local方法不仅考虑这两个点本身,还考虑它们周围的区域。这一方法不仅关注这两个点的局部特征,还充分考虑了它们所处的区域环境。数学公式y_i=\frac{1}{C\left(x_i\right)} \sum_j f\left( \theta(\mathcal{N}_i),\theta(\mathcal{N}_j)\right) x_j保持不变。

Dual Multi Scale Attention Network (DMSANet)

DMSANet 首先将特征按照通道进行分组,并行地运用空间和特征自注意力网络,随后通过注意力机制进行特征融合。

Self-attention Network (SAN)

作者成功地将自注意力机制开发为两类:成对的自注意力和分段的自注意力。

\mathbf{y}_i被表示为\sum\limits_{j\in \mathcal{R}_i}\alpha(\mathbf{x}_i,\mathbf{x}_j) \odot \beta(\mathbf{x}_j),同时\mathbf{y}_i也被表示为\sum\limits_{j\in \mathcal{R}_i}\alpha(\mathbf{x}_{\mathcal{R}_i,j}) \odot \beta(\mathbf{x}_j)

Polarized Self-Attention (PSA)

该机制借鉴了摄影领域中的极化滤波技术。首先,该方法在通道维度或空间维度上对特征进行压缩处理,随后会对损失的强度范围进行相应的增强或抑制操作。

(2)降低计算复杂度

Criss-Cross Attention (CCNet)

CCNet开发了Criss-Cross Attention机制,该机制通过计算点的横纵坐标位置的注意力信息,并通过串行两个Criss-Cross attention模块间接与全局任意位置进行注意力计算。

Global Context Network (GCNet)

GCNet开发了名为Global Context Block的模块,通过引入查询-键权重共享机制,简化了attention map的构建过程,并在此基础上增加了通道级注意力机制。

Expectation-Maximization Attention Network (EMANet)

该算法(EMANet)利用期望最大化(EM)计算出一组精炼的基底,在这些基底上执行注意力机制。

Interlaced Sparse Self-Attention (ISANet)

ISANet通过将特征图划分为块来计算块内self attention,从而得到Long-range的attention;同时,ISANet通过计算块之间的self attention来获得Short-range的attention。

Asymmetric Non-local Neural Network (ANNNet)

该模型基于Pyramid Pooling机制,对Non-Local模块中的Key和Value进行采样操作,以降低计算开销。

Lightweight Non-Local Network (LightNL)

LightNL模块是专为神经结构搜索设计的轻量级Non-Local模块,其主要改进方向包括三个关键方面:在生成Q、K、V的过程中,LightNL模块省略了1×1卷积操作,改用深度卷积替代输出卷积,并采用更小尺寸的特征图计算相关性。

Non-Local Sparse Attention (NLSA)

该方法利用局部敏感哈希生成attention bucket,仅在同一个attention bucket内部的特征上执行自注意力计算。

⭐ 参考文献

全部评论 (0)

还没有任何评论哟~