| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 深度学习笔记------注意力机制 -> 正文阅读 |
|
[人工智能]深度学习笔记------注意力机制 |
目录 ?1.1??Encoder-Decoder框架(编码-解码框架) 1.什么是注意力机制? ? ?当我们人类在看东西时,一般会将注意力集中注视着某个地方,而不会关注全部所有信息。例如当我们一看到下面这张猫的图片时,主要会将目光停留在猫的脸部,以及留意猫的躯干,而后面的草地则会被当成背景忽略掉,也就是说我们在每一处空间位置上的注意力分布是不一样的。如下图,当需要识别的是猫咪的时候,其他绿色本经特征就是无用的。attention机制就是找到这些最有用的信息。深度学习中的注意力机制(Attention Mechanism)和人类视觉的注意力机制类似,就是在众多信息中把注意力集中放在重要的点上,选出关键信息,而忽略其他不重要的信息。 ? ? ? ? ? ?不是所有的区域对任务的贡献都是相同的,只有任务相关的区域才需要关心,如分类任务主体,注意力机制就是寻找网络中最重要的部分进行处理,它可以集成到网络结构中以提高模型的性能。一般来说,注意力机制可以从图像空间和通道空间两个维度进行设计。可以分为空间注意力机制,通道注意力机制还有空间和通道混合注意力模型三种。 ? ? ??目前大多数的注意力模型附着在Encoder-Decoder框架下,所以我们先来了解Encoder-Decoder框架然后在该框架下,了解注意力模型。 ?1.1??Encoder-Decoder框架(编码-解码框架)? ? ? 目前大多数的注意力模型附着在Encoder-Decoder框架下,所以我们先来了解下这个框架。Encoder-Decoder框架可以看作是一种文本处理领域的研究模式,该框架的抽象表示如下图: ? ? ? ? 给定输入X,通过Encoder-Decoder框架生成目标Y。其中,Encoder(编码器)就是对输入X进行编码,通过非线性变换转化为中间语义表示C;Decoder(解码器),根据输入X的语义表示C和之前已生成的历史信息生成目标信息。 1.2 注意力模型? ? ? 本文开头讲到的人类视觉注意力机制,它在处理信息时注意力的分布是不一样的。而Encoder-Decoder框架将输入X都编码转化为语义表示C,这样就会导致所有输入的处理权重都一样,没有体现出注意力集中,因此,也可看成是“分心模型”。 ? ? ? ? ?例如输入的英文句子是:Tom chase Jerry,目标的翻译结果是“汤姆追逐杰瑞”。那么在语言翻译中,Tom, chase, Jerry这三个词对翻译结果的影响程度是不同的,其中,Tom, Jerry是主语、宾语,是两个人名,chase是谓语,是动作,那么这三个词的影响程度大小顺序分别是Jerry>Tom>chase,例如(Tom,0.3)(Chase,0.2) (Jerry,0.5),不同的影响程度代表AI模型在翻译时分配给不同单词的注意力大小,即分配的概率大小。 ? ? 下图描述(Image-Caption)是一种典型的图文结合的深度学习应用,输入一张图片,人工智能系统输出一句描述句子,语义等价地描述图片所示内容。很明显这种应用场景也可以使用Encoder-Decoder框架来解决任务目标,此时Encoder输入部分是一张图片,一般会用CNN来对图片进行特征抽取,Decoder部分使用RNN或者LSTM来输出自然语言句子。 2 空间注意力模型1)STN(空间变换网络) ?STN是什么(What)
? ? ? ? STN是一个非常典型的空间注意力模型,通过学习输入的形变来完成适合任务的预处理。其结构如下图所示,对于其详细的工作原理,可以参考博文: https://blog.csdn.net/YOULANSHENGMENG/article/details/121222429 ? ?2)Dynamic Capacity Network ? ? 3??通道注意力机制SENet(?Squeeze-and-Excitation Networks) ? ? SENet以极大的优势获得了最后一届 ImageNet 2017 竞赛 Image Classification 任务的冠军,考虑特征通道之间的关系, SENet就是基于这一点并提出了 Squeeze-and-Excitation Networks(简称 SENet)。 SENet的结构中,Squeeze 和 Excitation 是两个非常关键的操作,以此来命名。我们的动机是希望显式地建模特征通道之间的相互依赖关系。另外, SENet并不打算引入一个新的空间维度来进行特征通道间的融合,而是采用了一种全新的「特征重标定」策略。具体来说,就是通过学习的方式来自动获取到每个特征通道的重要程度,然后依照这个重要程度去提升有用的特征并抑制对当前任务用处不大的特征。 ? 上图是 SE 模块的示意图。给定一个输入 x,其特征通道数为 c_1,通过一系列卷积等一般变换后得到一个特征通道数为 c_2 的特征。与传统的 CNN 不一样的是,接下来我们通过三个操作来重标定前面得到的特征。 首先是 Squeeze 操作,我们顺着空间维度来进行特征压缩,将每个二维的特征通道变成一个实数,这个实数某种程度上具有全局的感受野,并且输出的维度和输入的特征通道数相匹配。它表征着在特征通道上响应的全局分布,而且使得靠近输入的层也可以获得全局的感受野,这一点在很多任务中都是非常有用的。 其次是 Excitation 操作,它是一个类似于循环神经网络中门的机制。通过参数 w 来为每个特征通道生成权重,其中参数 w 被学习用来显式地建模特征通道间的相关性。 最后是一个 Reweight 的操作,我们将 Excitation 的输出的权重看做是进过特征选择后的每个特征通道的重要性,然后通过乘法逐通道加权到先前的特征上,完成在通道维度上的对原始特征的重标定。 上左图是将 SE 模块嵌入到 Inception 结构的一个示例。方框旁边的维度信息代表该层的输出。 这里我们使用 global average pooling 作为 Squeeze 操作。紧接着两个 Fully Connected 层组成一个 Bottleneck 结构去建模通道间的相关性,并输出和输入特征同样数目的权重。我们首先将特征维度降低到输入的 1/16,然后经过 ReLu 激活后再通过一个 Fully Connected 层升回到原来的维度。这样做比直接用一个 Fully Connected 层的好处在于:1)具有更多的非线性,可以更好地拟合通道间复杂的相关性;2)极大地减少了参数量和计算量。然后通过一个 Sigmoid 的门获得 0~1 之间归一化的权重,最后通过一个 Scale 的操作来将归一化后的权重加权到每个通道的特征上。 除此之外,SE 模块还可以嵌入到含有 skip-connections 的模块中。上右图是将 SE 嵌入到 ResNet 模块中的一个例子,操作过程基本和 SE-Inception 一样,只不过是在 Addition 前对分支上 Residual 的特征进行了特征重标定。如果对 Addition 后主支上的特征进行重标定,由于在主干上存在 0~1 的 scale 操作,在网络较深 BP 优化时就会在靠近输入层容易出现梯度消散的情况,导致模型难以优化。 目前大多数的主流网络都是基于这两种类似的单元通过 repeat 方式叠加来构造的。由此可见,SE 模块可以嵌入到现在几乎所有的网络结构中。通过在原始网络结构的 building block 单元中嵌入 SE 模块,我们可以获得不同种类的 SENet。如 SE-BN-Inception、SE-ResNet、SE-ReNeXt、SE-Inception-ResNet-v2 等等。 4 空间和?通道混合注意力机制?CBAM(Convolutional Block Attention Module) ? ? ? ?ECCV2018的一篇文章,主要贡献为提出一个新的网络结构。SENet,在feature map的通道上进行attention生成,然后与原来的feature map相乘。这篇文章指出,该种attention方法只关注了通道层面上哪些层会具有更强的反馈能力,但是在空间维度上并不能体现出attention的意思。CBAM作为本文的亮点,将attention同时运用在channel和spatial两个维度上,CBAM与SE Module一样,可以嵌入了目前大部分主流网络中,在不显著增加计算量和参数量的前提下能提升网络模型的特征提取能力。 ? ? 在网络结构中引入attention机制可以提升网络模型的特征表达能力。attention不止能告诉网络模型该注意什么,同时也能增强特定区域的表征。CBAM在channel和spatial两个维度上引入了attention机制。CBAM结构概览如下所示: ?CBAM主要对其进行以下两个运算: 其中等号右边的操作符表示的是element-wise的点乘。Mc表示在channel维度上做attention提取的操作,Ms表示的是在spatial维度上做attention提取的操作。下图分别表示了Channel Attention Module和Spatial Attention Module的处理过程。 ?Channel attention module Spatial attention module ?本章笔记主要参考以下博文是: 大话注意力机制(Attention Mechanism) - 雪饼的个人空间 - OSCHINA - 中文开源技术交流社区 深度学习中的注意力机制(2017版)_张俊林的博客-CSDN博客_注意力机制 【论文复现】CBAM: Convolutional Block Attention Module_luuuyi的博客-CSDN博客 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 4:40:14- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |