深度学习| 注意力机制

news2025/1/19 8:26:09

注意力机制

  • 为什么需要注意力机制
    • Seq2Seq问题
    • Transfomer
  • Attention注意力机制
  • 分类
    • 软硬注意力
    • 注意力域

为什么需要注意力机制

这个可以从NLP的Seq2Seq问题来慢慢理解。

Seq2Seq问题

Seq2Seq(Sequence to Sequence):早期很多模型中,样本特征维度通常都是一致的。但是在机器翻译中,输入和输出的长度都是不固定的,例如输入英文“school”会输出中文“学校”,输入一个单词却输出两个汉字。如何解决这种输入输出特征维度可变的情况,并可以把一个序列直接转换到另一个序列,这就是Seq2Seq要解决的问题。

经典的Seq2Seq模型:使用的是两个循环神经网络(Recurrent Neural Network,RNN),下面是其的Encoder-Decoder结构图。编码器将输入序列转换为一个固定长度的向量表示,解码器将该向量转换为长度不固定的输出序列。

在这里插入图片描述

Encoder部分是一个多输入单输出的RNN结构,把词向量x依次输入到Encoder,隐藏神经元A输入是由当前输入x和上一个隐藏神经元的输出组成,最后输出最后一个隐藏神经元的输出作为Decoder的输入。这样的Encoder结构可以模拟人类的阅读顺序去读取序列化数据,只保留最后一个隐藏状态,相当于将把整个序列浓缩在了一起。

Decoder结构和Encoder结构几乎是一样的,不同的地方在于输入的x是前面的结果。如果是训练阶段那么输入的x就是前面输出的label(标准答案),如果是测试阶段那么输入的 x ∗ x^* x就是前面输出的结果。这样Decoder结构也可以模拟人类说话的顺序,输出不同长度的序列。
在这里插入图片描述
存在的问题:当使用RNN处理长文本序列的时候,会出现两个问题。首先,第一个问题就是其顺序结构导致无法捕捉长序列上下文信息。Decoder做预测非常依赖于Encoder最后的输出,但是如果句子过长,Encoder最后的输出状态会忘记前面的句子内容,也就是信息丢失。第二个问题就是并行处理序列困难。因为RNN的内部循环结构,所以只能顺序处理序列,无法对序列整体进行并行计算。

补充:Seq2Seq是一个端到端(end-to-end)的网络模型,所谓的端到端神经网络是指能够直接从原始数据中提取特征并输出最终结果的模型,不需要显式地进行手动特征提取或分步骤处理。

Transfomer

Transfomer:Transfomer的核心就是Attention注意力机制,在RNN的Encoder-Decoder基础上加入了注意力机制,能实现长序列的并行处理,从而来解决前面提到RNN的两个问题。

为什么能解决RNN处理长文本序列的问题:加入Attention注意力机制后的Seq2Seq模型,不会忘记原始输入句子信息,而且Decoder也能够知道句子中哪些词比较重要,但是会增加额外的计算量。

应用:除了前面提到的自然语言处理(Natural Language Processing,NLP),Transfomer还在计算机视觉(Computer Vision,CV)中也有所应用。卷积神经网络(Convolutional Neural Network,CNN)作为计算机视觉领域中一个热门的研究方向,非常擅长特征提取,但是其更关注局部的信息。CNN的核心是卷积,而Transformer的核心是自注意力机制。自注意力机制允许模型从图像中任意位置获取信息,更好地处理长距离依赖关系。而CNN则需要在多层卷积之后,才能将图片中距离比较远的像素点关联起来。

Attention注意力机制

Attention介绍:就是模仿人的注意力机制设计,人看到一个东西,会把注意力放在需要关注的地方,把其它无关的信息过滤掉。下面的图是人类看到图片注意力热力图。
在这里插入图片描述

Attention原理:在Seq2Seq模型介绍的时候,会发现Encoder只会把最后一个隐藏状态输出,对于前面隐藏状态全部都舍弃了,而Attention做得就是把舍弃掉的隐藏信息给利用起来。在Seq2Seq举的翻译例子中,把“Hellow world”翻译为“哈喽世界”,“Hellow”对“哈”、“喽”、“世”和“界”每个字的贡献都是一致,但是实际上“Hellow”应该对“哈”和“喽”的贡献要多些,而对“世”和“界”的贡献要少些。如何分配这些贡献程度并得到合适的向量传递给Decoder,这就是Attention要实现的,主要是用在Encoder部分。

Attention机制
Attention机制的核心就是QKV。

Q(Query):Query包含了读者的问题的信息。
K(Key):Key与Value相关联,Key是原始信息所对应的关键性信息,相当于对原始信息做了某种转换得到的词向量。
V(Value):Value理解为原始捕捉到的信息,不受到任何注意力的干扰。

计算步骤:

  • Query和Key进行相似度计算,得到Attention Score。
  • 对Attention Score进行Softmax归一化,得到权值矩阵,相当于每个贡献程度。
  • 权重矩阵与Value进行加权求和计算。

看过一个比较好的比喻,可以把Attention过程比作我们在浏览器搜索文章的过程。
Value相当于浏览器里面所有的文章,Key相当于每个文章对应的标题,标题是从文章张提炼的,而Query相当于我们输入到浏览器中的问题。Attention搜索过后,就会对每个文章和问题匹配度进行一个得分,来对原来的文章筛查。
总结QKV:Query相当于问题,Value相当于一组答案,Key相当于该答案所对应问题的关键字

分类

软硬注意力

软注意力(Soft Attention):加权图像的每个像素。 高相关性区域乘以较大的权重,而低相关性区域标记为较小的权重。注意力模块相对于输入是可微的,所以通过标准的反向传播方法进行训练。
大多数软注意力模块都不会改变输出尺寸,从而可以很灵活的插入到卷积网络的各个部分。但会增加训练参数,从而导致计算成本有所提高。

硬注意力(Hard Attention):一次选择一个图像的一个区域作为注意力,设成1,其他设为0。通常是不可微的,硬注意力相对软注意力更难训练,不能反向传播,但是可以借助如强化学习的手段去学习。

注意力域

注意力机制中的模型结构分为三大注意力域来分析。
主要是:空间域(spatial domain),通道域(channel domain),混合域(mixed domain)。

  • 空间域:将图片中的的空间域信息做对应的空间变换,从而能将关键的信息提取出来。对空间进行掩码的生成,进行打分,代表是Spatial Attention Module。
  • 通道域:类似于给每个通道上的信号都增加一个权重,来代表该通道与关键信息的相关度的话,这个权重越大,则表示相关度越高。对通道生成掩码mask,进行打分,代表是SEnet, Channel Attention Module。
  • 混合域:空间域的注意力是忽略了通道域中的信息,将每个通道中的图片特征同等处理,这种做法会将空间域变换方法局限在原始图片特征提取阶段,应用在神经网络层其他层的可解释性不强。代表主要是BAM(Bottleneck Attention Module)和CBAM(Convolutional Block Attention Module)。

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

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

相关文章

扭蛋机小程序对市场的发展有哪些推动作用?

近几年,扭蛋机发展的非常迅猛。随着二次元文化的火热,给扭蛋机带来了发展机遇,扭蛋机行业也受到了大众的喜爱。扭蛋机的商品种类多样化,包含了各类热门IP周边衍生品、玩具、小商品等,适合所有消费人群,市场…

2024年汉字小达人活动还有5个月开赛:来做18道历年选择题备考吧

现在距离2024年第11届汉字小达人比赛还有五个多月的时间,如何利用这段时间有条不紊地备考呢?我的建议是两手准备:①把小学1-5年级的语文课本上的知识点熟悉,重点是字、词、成语、古诗。阅读理解不需要。②把历年真题刷刷熟&#x…

【漏洞复现】云时空社会化商业ERP系统slogin SQL注入漏洞

漏洞描述: 云时空社会化商业ERP系统slogin存在SQL注入漏洞,攻击者可以通过此漏洞获取数据库敏感信息。 搜索语法: Fofa-Query: app"云时空社会化商业ERP系统" 漏洞详情: 1.云时空社会化商业ERP系统。 2.漏洞POC: …

浏览器和nodejs中的eventloop

浏览器和nodejs中的eventloop 浏览器中的Event Loop 在浏览器中,设计成为了单线程。如果要处理异步请求,则需要增加一层调度逻辑,把js代码封装成一个个的任务,放在一个任务队列中,主线程不断的读取任务执行。每次调取…

IDEA2023版本创建Sping项目无法使用Java8

1. 问题复现 1.1 当前版本2023.3.2 1.2 创建项目时:不存在jdk8选项 提示报错 1.3 原因分析 Spring官方发布Spring Boot 3.0.0 的时候告知了一些情况,Java 17将成为未来的主流版本 2. 如何解决 2.1 替换创建项目的源 我们只知道IDEA页面创建Spring项目…

玩转PyCharm

玩转PyCharm PyCharm是由JetBrains公司开发的提供给Python专业的开发者的一个集成开发环境,它最大的优点是能够大大提升Python开发者的工作效率,为开发者集成了很多用起来非常顺手的功能,包括代码调试、高亮语法、代码跳转、智能提示、自动补…

历史遗留问题-Oracle 19c RAC 安装时节点连接性问题

测试服务器的二节点数据库宕掉了,原因不明,需要产环境重新安装。我想上次在自己虚拟机安装实验过一次,应该一天能搞定,事实证明,你永远有学不完的bug!!!! 首先查看一下系…

python 调试 c++源码

1. gdb常用调试命令概览和说明 2. 编译c库设置Debug模式 cmake设置debug 在CMake中设置debug模式通常意味着启用调试信息和优化。以下是一个简单的CMakeLists.txt文件示例,展示了如何设置项目以便在Debug模式下构建: cmake_minimum_required(VERSION 3…

【WEEK9】 【DAY3】JSR303数据校验及多环境切换【中文版】

2024.4.24 Wednesday 目录 4.JSR303数据校验及多环境切换4.1.JSR303数据校验(了解即可)4.1.1.修改Person.java4.1.2.修改pom.xml(添加依赖)4.1.3.运行Springboot02ConfigApplicationTests.java进行测试4.1.4.使用数据校验&#x…

HotSpot JVM 中的应用程序/动态类数据共享

0.前言 本文的目的是详细讨论 HotSpot JVM 自 JDK 1.5 以来提供的一项功能,该功能可以减少启动时间,但如果在多个 JVM 之间共享相同的类数据共享 (CDS) 存档,则还可以减少内存占用。 1.类数据共享 (CDS) CDS 的想法是使用特定格式将预处理…

【氮化镓】液态Ga在GaN(0001)和(0001̅)表面上的三维有序排列随温度的变化

文章标题是《Temperature dependence of liquid-gallium ordering on the surface of epitaxially grown GaN》,作者是Takuo Sasaki等人,发表在《Applied Physics Express》上。文章主要研究了在分子束外延(MBE)条件下,液态镓(Ga)在GaN(0001)…

探索在Apache SeaTunnel上使用Hudi连接器,高效管理大数据的技术

Apache Hudi是一个数据湖处理框架,通过提供简单的方式来进行数据的插入、更新和删除操作,Hudi能够帮助数据工程师和科学家更高效地处理大数据,并支持实时查询。 支持的处理引擎 Spark Flink SeaTunnel Zeta 主要特性 批处理 流处理 精确一次性…

状态模式和策略模式对比

状态模式和策略模式都是行为型设计模式,它们的主要目标都是将变化的行为封装起来,使得程序更加灵活和可维护。之所以将状态模式和策略模式进行比较,主要是因为两个设计模式的类图相似度较高。但是,从状态模式和策略模式的应用场景…

2024最新版JavaScript逆向爬虫教程-------基础篇之深入JavaScript运行原理以及内存管理

目录 一、JavaScript运行原理1.1 前端需要掌握的三大技术1.2 为什么要学习JavaScript1.3 浏览器的工作原理1.4 浏览器的内核1.5 浏览器渲染过程1.6 认识JavaScript引擎1.7 V8引擎以及JavaScript的执行过程1.8 V8引擎执行过程 二、JavaScript的执行过程2.1 初始化全局对象2.2 执…

解决宏定义后面无法加分号

总结:注意是针对单行if语句使用,并且宏定义后面必须带分号(格式统一) 参考连接 C语言种do_while(0)的妙用_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1vk4y1R7VJ/?spm_id_from333.337.search-card.all.click&vd_…

Excel数据处理:动态数据分析报表、单元格数字格式、使用排序工具

1、在生成数据透视表之后选中一个单元格,点击插入,在图表中选择一个自己想要的图表。(生成可视化的图表) 2、在分析中找到切片器,通过点击切片器可以即时变换生成不同的可视化图,可以右键切片器选择关联两个…

matlab 对数坐标画图,及在曲线上加竖直线

matlab 对数坐标画图 方法一:直接对x、y值取对数,然后画图 plot(log(x), log(y), m, LineWidth,1, Marker,.);% ,Color,#EDB120 方法二:将x、y轴刻度改为对数形式 plot(x, y, r, LineWidth,1, Marker,); ax gca();% 获取当前坐标句柄 ax…

解决Oracle锁表的方法

在实际工作中,并发量比较大的项目,经常会出现锁表的问题,下面我将复现这个问题,并给出解决方法。 一、问题复现 1、session1修改aabb表的B字段为迪迦奥特曼,但是不提交该事务。 2、session2也修改这行的这个字段。 发…

【stomp实战】搭建一套websocket推送平台

前面几个小节我们已经学习了stomp协议,了解了stomp客户端的用法,并且搭建了一个小的后台demo,前端页面通过html页面与后端服务建立WebSocket连接。发送消息给后端服务。后端服务将消息内容原样送回。通过这个demo我们学习了前端stomp客户端的…

【leetcode面试经典150题】71. 对称二叉树(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主,题解使用C语言。(若有使用其他语言的同学也可了解题解思路,本质上语法内容一致&…