Attention机制
目录
提出背景
Attention原理
Attention机制本质思想
Attention机制总结
改进:Self-Attention
前置知识:RNN,LSTM/GRU
提出背景
Attention模型是基于Encoder-Decoder框架提出的。Encoder-Decoder框架,也就是编码-解码框架,主要被用来处理序列-序列问题。
Encoder:编码器,将输入的序列<x1,x2,x3…xn>编码,使其转化为一个语义编码C,这个C中就储存了序列<x1,x2,x3…xn>的信息。
Decoder:解码器,根据输入的语义编码C,然后将其解码成序列数据
编码方式有很多种,在文本处理领域主要有RNN、LSTM、GRU、BiRNN、BiLSTM、BiGRU等。解码方式主要有两种:
-
[论文1]Cho et al., 2014 . Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation.
-
[论文2]Sutskever et al., 2014. Sequence to Sequence Learning with Neural Networks.
论文1中指出,因为语义编码C包含了整个输入序列的信息,所以在解码的每一步都引入C。文中Ecoder-Decoder均是使用RNN,在计算每一时刻的输出yt时,都应该输入语义编码C,即ht=f(ht-1,yt-1,C),p(yt)=f(ht,yt−1,C)。
问题在于:语义编码C是由输入序列X的每个单词经过Encoder 编码产生的,这意味着不论是生成哪个单词,y1,y2还是y3,其实输入序列X中任意单词对生成某个目标单词yi来说影响力都是相同的(其实如果Encoder是RNN的话,理论上越是后输入的单词影响越大,并非等权)
论文2中的方式相对简单,只在Decoder的初始输入引入语义编码C,将语义编码C作为隐藏层状态值h0的初始值,p(yt)=f(ht,yt−1)。
问题在于:将整个序列的信息压缩在了一个语义编码C中,用一个语义编码C来记录整个序列的信息,如果序列是长序列,那么只用一个语义编码C来表示整个序列的信息肯定会产生大量损失,且容易出现梯度消失的问题。
Attention原理
当一个语义编码C无法有效解决问题时,就尝试引入多个C。对于不同的预测Yi,注意力会集中在不同的C上,即由固定的中间语义C换成了根据当前输出单词来调整为加入注意力模型变化的Ci。
Yi是Decoder的当前输出单词,Ci是Decoder的当前注意力向量。Ci是根据Decoder的上一时刻的输出单词Yi-1和隐藏层Si-1计算出来的,它表示了Decoder对Encoder的输入序列的不同部分的关注程度。
在下文中,H和S都表示RNN隐藏层的值,H表示Encoder的第i个隐藏层的值,S表示Decoder的第i个隐藏层的值。
Yi是根据Ci和Si-1生成的,它表示了Decoder根据注意力向量选择合适的输入单词进行翻译的结果。
Si是根据Decoder的第i-1个隐藏层的值Si-1和第i-1个输出单词Yi-1计算出来的。具体的计算方法取决于Decoder使用的RNN的类型,比如LSTM或GRU。
为了体现出输入序列中不同单词对当前预测的影响程度不同,对于每一个预测输出Yi,Attention模型中都会给出一个概率分布:
其中,f(xj)即为对应隐藏层的值hj,用αi=[αi1,αi2,…,αin]表示注意力分配概率向量,即αij=pj,使得:
在Attention机制中,Decoder的每个隐藏层Si都会与Encoder的所有隐藏层Hi进行相关性计算,得到一个注意力分配概率分布αi。然后,根据这个概率分布,对Encoder的隐藏层H进行加权求和,得到一个注意力向量Ci。这个向量就是Decoder的当前输出Yi所关注的Encoder的输入序列的语义表示。
求得语义编码Ci的关键在于计算Attention模型所需要的输入句子的单词注意力分配概率值,即α。
Decoder上一时刻的输出值Yi-1与上一时刻传入的隐藏层的值Si-1通过RNN生成Si,然后计算Hi与h1,h2,h3…hm的相关性,得到相关性评分[f1,f2,f3…fm],然后对fj使用softmax激活就得到注意力分配αij。
此处使用的是Soft Attention,所有的数据都会注意,并计算出相应的注意力权值,不会设置筛选条件。
还有一种Hard Attention会在生成注意力权重后筛选掉一部分不符合条件的注意力,让它的注意力权值为0。
Attention机制本质思想
事实上,Attention机制并非一定基于Encoder-Decoder框架。
将Source中的构成元素想象成是由一系列的<Key,Value>数据对构成,此时给定Target中的某个元素Query,通过计算Query和各个Key的相似性或者相关性,得到每个Key对应Value的权重系数再加权求和即可得最终的Attention Value。
Lx表示source的长度,ρ(q,ki)的计算如下:
内积:
Cosine相似性:
MLP网络:
-
内积:Transformer使用的方法
-
Cosine相似性-余弦相似度:分子为点积,分母为向量的L2范数(各元素平方和的平方根)
-
MLP网络不常用
在得到相关性ρ之后,引入激活函数(如softmax),对相关性归一化,即将原始计算分值整理成所有元素权重之和为1的概率分布,同时利用激活函数的内在机制突出重要元素的权重。
Attention机制总结
-
相关性分析
-
归一化
-
加权求和
缺点
-
只能在Decoder阶段实现并行运算,Encoder部分依旧采用的是RNN、LSTM等顺序编码的模型,Encoder部分依然无法实现并行运算。
-
Encoder部分目前仍旧依赖于RNN,对于长距离的两个词相互之间的关系没有办法很好的获取。
改进:Self-Attention
在一般任务的Encoder-Decoder框架中,输入Source和输出Target内容是不一样的,比如对于英-中机器翻译来说,Source是英文句子,Target是对应的翻译出的中文句子,Attention机制发生在Target的元素和Source中的所有元素之间。
Self-Attention是在Source内部元素或者Target内部元素之间发生的Attention机制,也可以理解为Target=Source这种特殊情况下的注意力计算机制,相当于是Query=Key=Value,计算过程与Attention一样。
引入Self-Attention后会更容易捕获句子中长距离的相互依赖的特征,Self-Attention在计算过程中会直接将句子中任意两个单词的联系通过一个计算步骤直接联系起来,所以远距离依赖特征之间的距离被极大缩短,有利于有效地利用这些特征。除此外,Self Attention对于增加计算的并行性也有直接帮助作用。正好弥补了attention机制的两个缺点,这就是为何Self Attention逐渐被广泛使用的主要原因。
相关文章:
Attention机制
目录 提出背景 Attention原理 Attention机制本质思想 Attention机制总结 改进:Self-Attention 前置知识:RNN,LSTM/GRU 提出背景 Attention模型是基于Encoder-Decoder框架提出的。Encoder-Decoder框架,也就是编码-解码框架&…...
Rust 常用的第三方库
Rust 的标准库虽然已经很强大,但如果恰当地使用第三方库,可以大大改善编程效率。以下是一些常用的 Rust 第三方库。 tokio ---- 最通用的异步编程库,几乎可以说是行业标准了,大量的其它库依赖于tokio。reqwest ---- HTTP 客户端库…...
构建高可用性Java应用:介绍分布式系统设计与开发
构建高可用性Java应用需要考虑许多因素,其中之一是设计和开发分布式系统。分布式系统是由多个独立计算机或节点组成的系统,这些节点通过网络连接,共同完成一项任务。 在分布式系统设计和开发中,有几个关键方面需要考虑࿱…...
x-cmd pkg | gitui - git 终端交互式命令行工具
目录 简介首次用户功能特点类似工具与竞品进一步探索 简介 gitui 由 Stephan D 于 2020 年使用 Rust 语言构建的 git 终端交互式命令行工具,旨在终端界面中便捷管理 git 存储库。 首次用户 使用 x gitui 即可自动下载并使用 在终端运行 eval "$(curl https:/…...
javaWeb案例知识点
一.rest风格编程 二.综合案例结构 三.分页查询 分页插件PageHelper 四.部门管理开发 五.员工管理开发 六.文件上传...
SQL日期列更新操作详解
在实际的数据库管理过程中,有时我们需要对数据库中的日期列进行更新。这篇博客将详细介绍一条 SQL 语句,该语句用于更新 referral_up_order 表中的多个日期列,并将它们的日期部分更改为 2023-10-24,同时保留原始时间部分。 1、背…...
stable diffusion 基础教程-图生图
界面 图生图大概有以下几个功能: 图生图涂鸦绘制局部绘制局部绘制(涂鸦蒙版)其常用的也就上面四个,接下来逐步讲解。 以图反推提示词 图生图可以根据反推提示词来获取相应图片的提示词,目前3种主流方式,如下: CLIP反推提示词:推导出的文本倾向于自然语言的描述方式,…...
如何获取高质量的静态住宅代理?常见问题与误区
静态住宅IP代理在今天的网络营销领域扮演着至关重要的角色,静态住宅IP代理以其稳定性和高匿名性,为互联网业务提供了一个安全的执行环境。通过模拟真实用户的网络行为,这些IP代理降低了企业在网络营销活动中被识别和封禁的风险。它保护了企业…...
基于SpringBoot的旅游网站281
文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的旅游网站281,java项目。…...
做外贸没客户就静下来沉淀
最近有人说,现在手上的各种群都变得很安静了,像之前,到各种节日,比如国庆,冬至,元旦这些。群里都非常热闹,不说全部人,总会有几个人发红包,或者发祝贺信息的。今年发现&a…...
网络流总结
网络流总结 基础知识最大流最小割定理 最大流EKdinic模型二分图匹配无源汇上下界可行流有源汇上下界最大、最小流多源汇最大流最大流之关键边最大流之拆点最大流建图实战 最小割模型最大权闭合子图最大密度子图最小点权覆盖集最大点权独立集最小割建图实战 费用流EK模型费用流与…...
安卓11通过脚本修改相应板型系统属性
安卓10以后rk的一套源码兼容很多板型,多种cpu型号都兼容了,这一点相比之前省心了很多,所以就诞生了需要一套代码兼容多种板子的需求,定制修改中需要经常修改系统属性,通过以下脚本一次实现: #!/bin/bashfu…...
网络安全—PKI公钥基础设施
文章目录 前提知识散列函数非对称加密数字签名 PKI受信任的人RA注册CA颁发IKE数字签名认证(交换证书)密钥管理 前提知识 散列函数 散列也可以叫哈希函数,MD5、SHA-1、SHA-2、、(不管叫啥,都记得是同一个东西就行&…...
推荐一款加速器,也可加速github
地址https://github.com/BeyondDimension/SteamTools...
springboot框架,中间库是mognodb,可以写入2个数据库的Demo
1-springboot版本: 2.3.9.RELEASE POM.xml文件: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&quo…...
基于Java SSM框架实现旅游资源网站系统项目【项目源码+论文说明】
基于java的SSM框架实现旅游资源网站系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个旅游资源网站 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述旅…...
015、控制流运算符match
1. 控制流运算符match Rust中有一个异常强大的控制流运算符:match,它允许将一个值与一系列的模式相比较,并根据匹配的模式执行相应代码。模式可由字面量、变量名、通配符和许多其他东西组成;后文会详细介绍所有不同种类的模式及它…...
个人博客主题 vuepress-hope
文章目录 1. 简介2. 配置2.1 个人博客,社媒链接配置 非常推荐vuepress-hope 1. 简介 下面的我的博客文章的截图 通过md写博客并且可以同步到github-page上 2. 配置 2.1 个人博客,社媒链接配置 配置文件 .vuepress/theme.ts blog: {medias: {BiliB…...
【LeetCode-剑指offer】--19.验证回文串II
19.验证回文串II 方法:双指针 首先考虑如果不允许删除字符,如何判断一个字符串是否是回文串。常见的做法是使用双指针。定义左右指针,初始时分别指向字符串的第一个字符和最后一个字符,每次判断左右指针指向的字符是否相同&#…...
锂电池寿命预测 | Matlab基于LSTM长短期记忆神经网络的锂电池寿命预测
目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 锂电池寿命预测 | Matlab基于LSTM长短期记忆神经网络的锂电池寿命预测 程序设计 完整程序和数据获取方式:私信博主回复Matlab基于LSTM长短期记忆神经网络的锂电池寿命预测。 参考资料 [1] http://t.csdn…...
JSON 详解
文章目录 JSON 的由来JSON 的基本语法JSON 的序列化简单使用stringify 方法之 replacerstringify 方法之 replacer 参数传入回调函数stringify 方法之 spacestringify 方法之 toJSONparse 方法之 reviver 利用 stringify 和 parse 实现深拷贝 json 相信大家一定耳熟能详&#x…...
我不想学JAVA---------JAVA和C的区别
前言 我一个研究方向是SLAM的为什么要来学JAVA。 从九月份开学到现在,已经学了Linux,数据结构,SLAM,C的基础操作,期间还参与编写了一本VHDL的教材。还有上课、考试什么的其他杂七杂八的事情就不说了。 读研好苦逼&…...
不能错过的AI前沿开源工具!
🌈🌈🌈🌈🌈🌈🌈🌈 欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术 的推送 发送 资料 可领取 深入理…...
为什么深度学习神经网络可以学习任何东西
下图你所看到的,是著名的曼德尔布罗特集,我们可以见证这个集合呈现出的复杂形态: 要理解神经网络如何学习曼德尔布罗特集,我们首先需要从最基础的数学概念讲起:什么是函数?函数本质上是一个将输入转化为输出…...
使用 SpringSecurity 发送POST请求出现 403
问题场景 在使用 SpringSecurity 时对一些访问权限进行了设置, 在用户请求资源时出现了403错误 , 通过检查代码发现请求权限是开放的, 并且切换成 GET 请求也是可以通过, 换成POST 请求就无法通过。 解决方法 在 SpringSecurity 中关闭 CSRF 因为 前端向后台发送 post 请求…...
解决Typora笔记上传到CSDN上图片无法显示的问题
解决Typora笔记上传到CSDN上图片无法显示的问题 一、发现问题二、分析问题三、解决问题图床介绍所需工具PicGo软件安装操作下载安装PicGo配置PicGo 设置Typora 四、总结 一、发现问题 当我们使用Typora这款强大的Markdown编辑器记录笔记时,经常会遇到一个让人困扰的…...
Vue3.0+Echarts (可视化界面)
Vue3.0Echarts (可视化界面) 1. 简介2. 安装2.1 下载安装Node.js2.2 全局下载项目脚手架2.3 创建项目 1. 简介 2. 安装 2.1 下载安装Node.js 2.2 全局下载项目脚手架 以管理员身份执行 npm install -g vue/cli vue --version2.3 创建项目 vue crea…...
编程语言的未来:探索技术进步的轨迹
编程语言的未来:探索技术进步的轨迹 随着科技的飞速发展,编程语言在计算机领域中扮演着至关重要的角色。它们是软件开发的核心,为程序员提供了与机器沟通的桥梁。然而,未来的技术进步将如何影响编程语言的走向呢?让我…...
SOLIDWORKS使用技巧——SOLIDWORKS草图绘制时一定要完全定义
SOLIDWORKS草图的定义状态有多种,按是否报错区分,如下: 1. 正常状态:欠定义、完全定义; 2. 错误状态的:过定义、悬空、无解; 其中,错误状态需要修复,不然会影响模型重…...
网络类型之GRE和MGRE和NHRP
GRE-通用路由封装 是一种简单的三层VPN封装技术,属于虚拟的点到点网络类型 优点:支持IP 网络作为承载网络、支持多种协议、支持IP 组播,配置简单,容易布署。 缺点:缺少保护功能,不能执行如认证、加密、以…...
四川网站建设培训学校/web网页制作成品
自年初出台《贵州省数字经济规划(2017-2020年)》后,贵州省大数据发展管理局又梳理出全年大数据发展10大重点工程。其内容是:产业培育、项目裂变、融合升级、数据融通、数字政府、数据扶贫、基础设施攻坚、安全铁壁、万…...
wordpress多个视频/怎么做网络营销推广啊
前言Vue是一套用于构建用户界面的渐进式框架,目前有越来越多的开发者在学习和使用.在笔者写完 从0到1教你搭建前端团队的组件系统 之后很多朋友希望了解一下如何搭建基于vue的组件系统,所以作为这篇文章的补充,本文来总结一下如何搭建基于vue的组件库.虽然笔者有近2年没有从事v…...
中国建设招标网网站首页/沈阳网站关键词优化公司
题目 分析 发现,当子段[l,r]被取了出来,那么[l-1,r]、[l,r1]一定也被取了出来。 那么,首先将[1,n]放入大顶堆,每次将堆顶的子段[l,r]取出来,因为它是堆顶,所以一定是最大的子段,输出它ÿ…...
网站建设需要版块/厦门百度seo点击软件
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!为了方便大家更加系统地学习和掌握各种常用的…...
企业网站建设 南通/南宁推广软件
按Ctrl0即可。UltraEdit有10个剪切板(clipboard),分别用Ctrl0 - Ctrl9 切换. Ctrl0 是 Windows 的,其他则为用户自定义的<script>window._bd_share_config{"common":{"bdSnsKey":{},"bdText":"","…...
合肥 网站建设公司哪家好/张北网站seo
文末联系获取源码 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏览器…...