TransFormer学习之基础知识:STN、SENet、CBAM、Self-Attention

news2024/11/25 2:40:29

1.空间注意力机制STN

参考链接:STN(Spatial Transformer Networks)
参考链接:通俗易懂的Spatial Transformer Networks(STN)

  • 核心动机: 在空间中捕获重要区域特征(如图像中的数字),将核心区域进行放大居中,使得结果更容易识别
  • 主体结构: 局部网络、参数化网络采样(网络生成器)和差分图像采样
    [图片]

1.1 局部网络(Localisation net)

输入: U,U可以是输入图片也可以是Feature Map
输出: θ \theta θ,局部网络会将重要区域特征进行放大居中, θ \theta θ表示原图到变换后图像之间的变换和平移参数,参考上图(b)列

1.2 网络生成器(Grid generator)

输入:局部网络模块输出的变换关系 θ \theta θ
输出:经过仿射变换后的特征图,参考上图中©列

1.3 差分图像采样(Sample)

Sample 就是用来解决Grid generator模块变换出现小数位置的问题的,当对小数进行仿射变换时,由于取整操作会将变换前不同的位置映射到同一个坐标下。针对这种情况,STN采用双线性插值(Bilinear Interpolation) 进行解决,即根据(x,y)的像素值根据周围坐标的像素值来确定。计算公式如下:
[图片]
[图片]

2.通道注意力之SENet

[图片]

  • 核心动机:在通道中捕获重要区域特征,通过学习的方式来自动获取到每个特征通道的重要程度,然后依照这个重要程度去提升有用的特征并抑制对当前任务用处不大的特征
  • 主体结构:全局池化、权重预测、为每一个通道给不同的权重
    参考链接:【注意力机制】SENet(Squeeze-and-Excitation Networks)详解

2.1 全局池化(global average pooling)

Squeeze操作将一个channel上整个空间特征编码为一个全局特征,采用global average pooling 来实现,就是将每个通道上所有的特征相加,最终由H*W*C变为1*1*C
[图片]

2.2 权重预测(Excitation)

Excitation主要是通过两个全连接神经网络FC将将每个通道信息转换为相应的权重,网络结构如下:
[图片]

第一个FC层对C个通道特征进行降维,目的是降低模型的复杂度以及泛化能力
第二个FC层再进行升维操作,最终通过Sigmoid函数将每个通道归一化到[0-1]区间

2.3 为通道赋予权重(Scale)

Scale操作是将学习到的各个channel的激活值(sigmoid激活,值为0到1)乘以U上的原始特征:
[图片]

3.混合注意力机制CBAM

  • 核心思想:同时经过了通道和空间两个注意力机制的处理,自适应细化特征。
    [图片]

这两个模块可以以并行或顺序的方式放置。结果表明,顺序排列的结果比并行排列的结果好。对于排列的顺序,实验结果表明,通道在前面略优于空间在前面

4.自注意力(Self-Attention)

参考链接:自注意力(Self-Attention)机制原理说明
参考链接:图解自注意力机制(Self-Attention)
参考链接:Vision Transformer 超详细解读 (原理分析+代码解读) (一)

  • 核心思想:计算给定的input sequence各个位置之间彼此的影响力大小

4.1 自注意力机制简介

对于网络输入的一组向量,每个向量之间可能存在联系,自注意力机制会结合其他向量对当前向量的影响,可以帮助模型更好地理解序列中的上下文信息,从而更准确地处理序列数据。比如某个单词Games在孤独的语境中可能会将其识别为游戏,但是给定上下文信息the 2022 Beijing Winter GamesGames会被理解为奥运会。

和上述注意力机制一样,自注意力机制也是为输入向量添加一个权重信息,不过不是表征重要程度,而是和输入其他向量之间的关系。

在对图像的处理过程中,会将图像分割为一系列的像素块,每个像素块会作为一个序列,自注意力机制会寻找每个像素块之间的关系。

4.2 自注意力机制的实现过程

本节图像来自:https://cloud.tencent.com/developer/article/2407538

4.2.1 单个输出

[图片]

对于每一个输入向量a,经过蓝色部分self-attention之后都输出一个向量b,这个向量b是考虑了所有的输入向量对a1产生的影响才得到的,这里有四个词向量a对应就会输出四个向量b。

以输入a1为例,介绍其他输入向量与a1之间的联系

  1. 基于Dot-product计算sequence中各向量与a1的关联程度
    在这里插入图片描述

绿色的部分就是输入向量a1a2,灰色的WqWk为权重矩阵,需要学习来更新,用a1去和Wq相乘,得到一个向量q,然后使用a2Wk相乘,得到一个数值k。最后使用q和k做点积,得到αα也就是表示两个向量之间的相关联程度。

  1. 可以计算每一个α(又称为attention score),q称为query,k称为key
    [图片]

另外,也可以计算a1和自己的关联性,再得到各向量与a1的相关程度之后,用softmax计算出一个attention distribution,这样就把相关程度归一化(即图中公式),通过数值就可以看出哪些向量是和a1最有关系。
假设[a1, a2, a3, a4]=[2, 3, 4, 5],计算相关性后[a11, a12, a13, a14]=[0, 2, 8, 10],归一化后就变为[0, 0.1, 0.4, 0.5]
[图片]

  1. 根据 α′ 抽取sequence里重要的信息
    [图片]

先求v,v就是键值value,v和q、k计算方式相同,也是用输入a乘以权重矩阵W,得到v后,与对应的α′ 相乘,每一个v乘与α’后求和,得到输出b1。
如果 a1 和 a2 关联性比较高, α1,2′ 就比较大,那么,得到的输出 b1 就可能比较接近 v2 ,即attention score决定了该vector在结果中占的分量;

4.2.2 矩阵形式

  1. q、k、v的矩阵形式生成
    [图片]

把4个输入a拼成一个矩阵,乘上相应的权重矩阵W,得到相应的矩阵Q、K、V,分别表示query,key和value:
[图片]

[图片]

三个W是我们需要学习的参数

  1. 利用得到的Q和K计算每两个输入向量之间的相关性
    也就是计算attention的值α, α的计算方法有多种,通常采用点乘的方式。
    先针对q1,通过与k1到k4拼接成的矩阵K相乘,得到 α 1 , n \alpha_{1,n} α1,n
    [图片]

同样,q1到q4也可以拼接成矩阵Q直接与矩阵K相乘:
[图片]

写为矩阵形式:
[图片]

矩阵A中的每一个值记录了对应的两个输入向量的Attention的大小α,A’是经过softmax归一化后的矩阵。

  1. 利用得到的A’和V,计算每个输入向量a对应的self-attention层的输出向量b
    [图片]

[图片]

写成矩阵形式:
[图片]

4.2.3 总结

对self-attention操作过程做个总结,输入是I,输出是O,矩阵Wq、 Wk 、Wv是需要学习的参数。
[图片]

4.3 多头自注意力机制(Multi-head Self-attention)

因为相关性有很多种不同的形式,有很多种不同的定义,所以有时不能只有一个q,要有多个q,不同的q负责不同种类的相关性。

4.3.1 计算单个输入a:

[图片]

首先,和上面一样,用a乘权重矩阵W得到qkv,然后q再乘两个不同的W,得到两个不同的 q i , j q^{i,j} qi,j,i代表的是位置,1和2代表的是这个位置的第几个q。
[图片]

4.3.2 计算多个head

这上面这个图中,有两个head,代表这个问题有两种不同的相关性。
同样,k和v也需要有多个,两个k、v的计算方式和q相同,都是先算出来ki和vi,然后再乘两个不同的权重矩阵。
[图片]

对于多个输入向量也一样,每个向量都有多个head:
[图片]

4.3.3 计算self-attention

和上面讲的过程一样,只不过是1那类的一起做,2那类的一起做,两个独立的过程,算出来两个b。
对于1:
[图片]

对于2:
[图片]

[图片]

4.4 Positional Encoding

在训练self attention的时候,实际上对于位置的信息是缺失的,没有前后的区别,上面讲的a1,a2,a3不代表输入的顺序,只是指输入的向量数量,不像rnn,对于输入有明显的前后顺序,比如在翻译任务里面,对于机器学习,机器学习依次输入。而self-attention的输入是同时输入,输出也是同时产生然后输出的。

如何在Self-Attention里面体现位置信息呢?就是使用Positional Encoding
[图片]

如果ai加上了ei,就会体现出位置的信息,i是多少,位置就是多少。vector长度是人为设定的,也可以从数据中训练出来

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1689731.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2461. 长度为 K 子数组中的最大和(c++)

给你一个整数数组 nums 和一个整数 k 。请你从 nums 中满足下述条件的全部子数组中找出最大子数组和: 子数组的长度是 k,且子数组中的所有元素 各不相同 。 返回满足题面要求的最大子数组和。如果不存在子数组满足这些条件,返回 0 。 子数…

第七节 ConfigurationClassParser 源码分析

tips: ConfigurationClassParser 是 Springframework 中的重要类。 本章主要是源码理解,有难度和深度,也枯燥乏味,可以根据实际情况选择阅读。 位置:org.springframework.context.annotation.ConfigurationClassPars…

怎样下载Android Studio历史版本文件包

1.在官网上下载都是推荐最新版本,想下载历史版本比较费劲,绕来绕去的。 2.进入这个网站可以下载其他版本https://android-studio.en.uptodown.com/windows/versions Older versions of Android Studio Its not uncommon for the latest version of an a…

【大数据】MapReduce实战

文章目录 [toc]Word CountMapperReducerrun.sh本地调试 基于白名单的Word CountMapperReducerrun.sh本地调试 文件分发-fileMapperReducerrun.sh -cacheFileMapperReducerrun.sh -cacheArchiveMapperReducerrun.sh 杀死MapReduce Job排序压缩文件mr_ip_lib_python本地调试 个人…

Flask Response 对象

文章目录 创建 Response 对象设置响应内容设置响应状态码设置响应头完整的示例拓展设置响应的 cookie重定向响应发送文件作为响应 总结 Flask 是一个 Python Web 框架,用于快速开发 Web 应用程序。在 Flask 中,我们使用 Response 对象来构建 HTTP 响应。…

东软联合福建省大数据集团打造“数据要素×医疗健康”服务新模式

5月23日,东软集团与福建省大数据集团有限公司在福州签订战略合作协议。 据「TMT星球」了解,双方将在健康医疗数据要素价值领域展开合作,通过大数据服务,赋能商业保险公司的产品设计和保险两核,打造“数据要素医疗健康…

微软开源多模态大模型Phi-3-vision,微调实战来了

节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型& AIGC 技术趋势、大模型& AIGC 落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了…

Qt 报错总结 No suitable kits found

目录 “No suitable kits found” 解决 解决方法参考: chatGPT辅助解决QT构建报错error: multiple target patterns 我的解决方法:把语言设置为空 “No suitable kits found” 解决 没有找到合适的kits套件,在安装Qt Creator时没有安装Min…

AGI技术与原理浅析:曙光还是迷失?

前言:回顾以往博客文章,最近一次更新在2020-07,内容以机器学习、深度学习、CV、Slam为主,顺带夹杂个人感悟。笔者并非算法科班出身,本科学制药、研究生学金融,最原始的算法积累都来源于网络,当时…

系统架构师考试(十)

SaaS为在线客服 PaaS为二次开发,比如低代码平台 IaaS 硬件开发 B 是基础设施作为服务 软件架构的概念 架构风格 数据流风格 网络报文是在计算机网络中通过网络传输的数据单元,它是网络通信的基本单位。网络报文包含了发送方和接收方之间传输的数据&…

【Crypto】摩丝

文章目录 一、摩斯解题感悟 一、摩斯 很明显莫尔斯密码 iloveyou还挺浪漫 小小flag,拿下 解题感悟 莫尔斯密码这种题还是比较明显的

在Windows10中重命名文件和文件夹的6种方法,有你熟悉和不熟悉的

序言 你可以通过多种方式在Windows 10上重命名文件。如果每次你想更改文件名时仍右键单击并选择“重命名”,那么我们有一些技巧可以加快更改速度。 使用文件资源管理器重命名文件和文件夹 Windows 10的文件资源管理器是一个功能强大的工具。你知道吗,有四种不同的方法可以…

从零入门激光SLAM(二十一)——看不懂FAST-LIO?进来

大家好呀,我是一个SLAM方向的在读博士,深知SLAM学习过程一路走来的坎坷,也十分感谢各位大佬的优质文章和源码。随着知识的越来越多,越来越细,我准备整理一个自己的激光SLAM学习笔记专栏,从0带大家快速上手激…

【Vue】input框自动聚焦且输入验证码后跳至下一位

场景:PC端 样式: <div class="verification-code-input"><input v-model="code[index]" v-for="(_, index) in 5" :key="index" type="text" maxlength="1" @input="handleInput(index)" …

数据库—— MySQL数据库安装

一、MySQL数据库定义 MySQL是一种开源关系型数据库管理系统&#xff0c;它使用SQL语言进行数据的管理。通过MySQL&#xff0c;可以创建数据库、表格、插入、查询、更新和删除数据等操作。MySQL支持多种操作系统&#xff0c;并且被广泛应用于Web应用程序开发中。MySQL以其高性能…

【HTML】制作一个跟随鼠标的流畅线条引导页界面(可直接复制源码)

目录 前言 HTML部分 CSS部分 JS部分 效果图 总结 前言 无需多言&#xff0c;本文将详细介绍一段HTML代码&#xff0c;图中线条可跟随鼠标移动&#xff0c;具体内容如下&#xff1a; 开始 首先新建一个HTML的文本&#xff0c;文本名改为[index.html]&#xff0c;创建好后右…

(Oracle)SQL优化基础(三):看懂执行计划顺序

往期内容&#xff1a; &#xff08;Oracle&#xff09;SQL优化基础&#xff08;一&#xff09;&#xff1a;获取执行计划 &#xff08;Oracle&#xff09;SQL优化基础&#xff08;二&#xff09;&#xff1a;统计信息 获取到执行计划后&#xff0c;对于新手朋友来讲可能不知道…

win11安装docker运行Open-Webui 界面化展示 ollama大模型

1.OpenWeb UI运行需要docker 环境下载docker Get Started | Docker 2.需要命令提示符docker -v 查询是否安装成功&#xff1b; 查询docker详情docker version 3.github拉取open-webUi镜像Package open-webui GitHub 复制命令运行在命令提示符&#xff1b; 等待下载完成 4.到…

[图解]SysML和EA建模住宅安全系统-07 to be块定义图

1 00:00:01,970 --> 00:00:05,040 入侵者这里有个∞ 2 00:00:05,530 --> 00:00:07,000 说明它下面已经有子图了 3 00:00:07,010 --> 00:00:08,080 我们看看里面子图 4 00:00:10,200 --> 00:00:17,000 这里&#xff0c;我们看位置 5 00:00:19,030 --> 00:00:…

find 几招在 Linux 中高效地查找目录

1. 介绍 在 Linux 操作系统中&#xff0c;查找目录是一项常见的任务。无论是系统管理员还是普通用户&#xff0c;都可能需要查找特定的目录以执行各种操作&#xff0c;如导航文件系统、备份数据、删除文件等。Linux 提供了多种命令和工具来帮助我们在文件系统中快速找到目标目…