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. [论文1]Cho et al., 2014 . Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation.

  2. [论文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)。

y_1=f(C) \\y_2=f(C,y_1) \\y_3=f(C,y_1,y_2)

问题在于:语义编码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模型中都会给出一个概率分布:

(X_j,p_j)

其中,f(xj)即为对应隐藏层的值hj,用αi=[αi1,αi2,…,αin]表示注意力分配概率向量,即αij=pj,使得:

C_i=\sum\limits_{j=1}^n\alpha_{ij}h_j

在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。

Attention(query,source)=\sum\limits^{L_x}_{i=1}a_i*value_i \\a_i=f(\rho_i) \\\rho_i=\rho(query,key_i)

Lx表示source的长度,ρ(q,ki)的计算如下:

内积:\rho(q,k_i)=q·k_i

Cosine相似性:\rho(q,k_i)=\frac{q·k_i}{\parallel q \parallel·\parallel k_i \parallel}

MLP网络:\rho(q,k_i)=MLP(q,k_i)

  • 内积:Transformer使用的方法

  • Cosine相似性-余弦相似度:分子为点积,分母为向量的L2范数(各元素平方和的平方根)

  • MLP网络不常用

在得到相关性ρ之后,引入激活函数(如softmax),对相关性归一化,即将原始计算分值整理成所有元素权重之和为1的概率分布,同时利用激活函数的内在机制突出重要元素的权重。

a_i=softmax(\rho_i)=\frac{e^{p_i}}{\sum^{L_x}_{j=1}e^{\rho_j}}

Attention机制总结

  1. 相关性分析

  2. 归一化

  3. 加权求和

缺点

  1. 只能在Decoder阶段实现并行运算,Encoder部分依旧采用的是RNN、LSTM等顺序编码的模型,Encoder部分依然无法实现并行运算。

  2. 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逐渐被广泛使用的主要原因。

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

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

相关文章

『番外篇十』SwiftUI 实战:打造一款“五脏俱全”的网络图片显示 App(下)

概览 在上篇文章中,我们初步实现了一款小巧的网络图片显示器。 我们先是创建了 json 数据对应的图片模型,然后将 App 界面“分而治之”划分为独立的三个组件以便“逐个击破”,最后我们将所有这些融合在一起。 不过,目前的实现仍有一些问题。比如我们添加了一层不必要的 …

详解Vue3中的鼠标事件mousemove、mouseover和mouseout

本文主要介绍Vue3中的常见鼠标事件mousemove、mouseover和mouseout。 目录 一、mousemove——鼠标移动事件二、mouseover——鼠标移入事件三、mouseout——鼠标移出事件 下面是Vue 3中常用的鼠标事件mousemove、mouseover和mouseout的详解。 一、mousemove——鼠标移动事件 鼠…

跟着cherno手搓游戏引擎【3】事件系统和预编译头文件

不多说了直接上代码&#xff0c;课程中的架构讲的比较宽泛&#xff0c;而且有些方法写完之后并未测试。所以先把代码写完。理解其原理&#xff0c;未来使用时候会再此完善此博客。 文件架构&#xff1a; Event.h:核心基类 #pragma once #include"../Core.h" #inclu…

JMeter使用

目录 启动JMeter 创建线程组 设置线程参数 设置http请求参数 ​编辑 创建查看结果树(显示成功/失败多少以及返回结果等信息) 创建聚合报告(显示响应时间、吞吐量、异常数等信息) 点击上方的执行按钮即可开始压力测试 结果树显示 聚合报告结果显示 启动JMeter 在JMete…

CSS-4

平面转换 整体认识 div {margin: 100px 0;width: 100px;height: 100px;background-color: pink;/* 过渡效果 */transition: all 1s;}/* 当鼠标悬停到div时&#xff0c;进行平面转换 */div:hover {transform: translate(800px) rotate(360deg) scale(2) skew(180deg);}作用&…

系统学习Python——装饰器:函数装饰器-[对方法进行装饰:使用嵌套函数装饰方法]

分类目录&#xff1a;《系统学习Python》总目录 如果想要函数装饰器在简单函数和类级别的方法上都能工作&#xff0c;最直接的解决办法在于使用前面文章介绍的状态保持方案之一&#xff1a;把自己的函数装饰器编写为嵌套的def&#xff0c;这样你就不会陷入单一的self实例参数既…

【unity学习笔记】捏人+眨眼效果+口型效果

一、vriod捏人 1.在vroidstudio软件中捏人 2.导出模型&#xff08;.vrm) 二、vrid导入unity的插件 1.在Git上搜索、打开univrm。 2.找到release页面找到合适的插件版本。&#xff08;VRM-0.116.0_0f6c&#xff09; 3.将univrm导入到工程中&#xff08;assets&#xff09;。 三…

前端显示json格式化

实现效果 在前端页面上展示格式化的JSON数据可以通过以下步骤完成&#xff1a; 获取JSON数据&#xff1a;首先&#xff0c;你需要获取要展示的JSON数据。你可以从后端API获取数据&#xff0c;或者直接在前端定义一个JSON对象。 格式化JSON&#xff1a;使用JavaScript的JSON对…

微服务雪崩问题及解决方案

雪崩问题 微服务中&#xff0c;服务间调用关系错综复杂&#xff0c;一个微服务往往依赖于多个其它微服务。 微服务之间相互调用&#xff0c;因为调用链中的一个服务故障&#xff0c;引起整个链路都无法访问的情况。 如果服务提供者A发生了故障&#xff0c;当前的应用的部分业务…

C++初阶------------------入门C++

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

【LMM 007】Video-LLaVA:通过投影前对齐以学习联合视觉表征的视频多模态大模型

论文标题&#xff1a;Video-LLaVA: Learning United Visual Representation by Alignment Before Projection 论文作者&#xff1a;Bin Lin, Yang Ye, Bin Zhu, Jiaxi Cui, Munan Ning, Peng Jin, Li Yuan 作者单位&#xff1a;Peking University, Peng Cheng Laboratory, Sun …

TCP中的三次握手和四次挥手

TCP中的连接和断开可以说是在面试中经常被问到的问题之一&#xff0c;正好有空就总结一下&#xff0c;首先回顾一下TCP的相关知识点 1. TCP的基础知识 1.1 TCP的基本概念 我们知道TCP是运输层的面向连接的可靠的传输协议。面向连接的&#xff0c;指的就是在两个进程发送数据…

简单FTP客户端软件开发——JavaFX开发FTP客户端

文章目录 导入外部包commons-net-3.10.0.jarJavaFX开发客户端 FTP客户端要求如下&#xff1a; 简单FTP客户端软件开发 网络环境中的一项基本应用就是将文件从一台计算机中复制到另一台可能相距很远的计算机中。而文件传送协议FTP是因特网上使用得最广泛的文件传送协议。FTP使用…

手机摄影学习

手机摄影学习 基础知识1&#xff0c;成像基本原理2&#xff0c;什么是焦距3&#xff0c;快门&#xff08;简称s&#xff09;4&#xff0c;上面功能之间的相互影响5&#xff0c;焦点6&#xff0c;过爆、欠曝7&#xff0c;cmos&#xff08;感光芯片&#xff09;、测光、聚焦&…

2023年“中银杯”安徽省网络安全B模块(部分解析)

前言 以下是2023年中银杯安徽省网络安全B模块题目&#xff0c;镜像可以私聊我 B模块安全事件响应/网络安全数据取证/应用安全&#xff08;400 分&#xff09; B-1&#xff1a;CMS网站渗透测试 任务环境说明&#xff1a; √服务器场景&#xff1a;Server2206&#xff08;关…

java SSM拖拉机售后管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM拖拉机售后管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源 代码和数据库&#xff0c;系统主要…

raid解析

raid原理是把各个硬盘组成一个组&#xff0c;是磁盘的集合&#xff0c;按照排列组合的方法给raid去不同的名字。 raid 0磁盘 读写性能都提高 在什么情况下使用1快盘raid 0 &#xff1f; 实际利用率 100% 系统中要不然都做raid 要不然都不做raid 当前6快盘都是raid 但是…

es简单入门

星光下的赶路人star的个人主页 努力努力再努力 文章目录 1、简介2、使用场景3、基本知识4、中文文档和官网链接5、增删改查&#xff08;php代码&#xff09;6、基本查询7、HTTP操作7.1 索引操作7.1.1 创建索引 7.2 文档操作7.2.1 创建文档7.2.2 查看文档7.2.3 修改文档7.2.4 修…

NLP:预测新闻类别 - 自然语言处理中嵌入技术

简介 在数字时代&#xff0c;在线新闻内容呈指数级增长&#xff0c;需要有效的分类以增强可访问性和用户体验。先进机器学习技术的出现&#xff0c;特别是在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;为文本数据的自动分类开辟了新的领域。本文[1]探讨了在 NLP …

基于EMD的滚动轴承故障诊断算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1EMD的基本原理 固有模态函数&#xff08;IMF&#xff09; 筛分过程 4.2 基于EMD的滚动轴承故障诊断算法 信号预处理 EMD分解 特征提取 故障诊断 5.算法完整程序工程 1.算法运行效…