机器学习实战(第二版)读书笔记(4)——seq2seq模型注意力机制(BahdanauAttention,LuongAttention)详解

news2024/11/25 7:49:12

一、Seq2seq模型 

机器学习实战(第二版)读书笔记(1)——循环神经网络(RNN) 中详细介绍了RNN如下图1所示,可以发现RNN结构大多数对序列长度比较局限,对于机器翻译等任务(输入输出长度不想等N to M),RNN没办法处理,这便有了seq2seq模型,本文以编码器-解码器模型(模型有两部分组成即编码器和解码器)为例。

图1:RNN结构

注:RNN在时间步t的输入为(x_{t},h_{t-1}) 即(当前时间步输入信息,上一时间步的隐藏状态),状态的传递使得模型具有记忆力,这也是其可以处理序列的原因。并且RNN只能做 1 to n ,n to n,n to 1 任务

1.1  编码器(Encoder)

编码器一般使用普通的RNN结构,作用是学习输入序列的表征,将输入编码成对任务最有用的向量C(上下文向量)。

  

图2:编码器结构

 上下文向量C的计算方式如下:

  • c = h_{N}(最后一个时间步的隐藏状态 h_{N}
  • c = f(h_{N}) ( 对最后一个时间步的隐藏状态h_{N} 进行变换)
  • c = f(h_{1}​,h_{2},⋯,h_{N}​)  (对所有时间步的隐藏状态进行变换)

 1.2 解码器(Decoder)

解码器一般也是用普通RNN结构,作用是将编码器的输出向量C转换为任务目标输出。根据对C的利用方式的不同可以分成如下几种:

  • 上下文向量C只作为解码器第一个时间步的输入。第二个时间步开始以上一时间步的神经元状态作为输入。
    图3:示例1
  • 解码器时间步t的输入为(C,h^{_{t-1}^{'}}) 
图4:示例2
  • 解码器时间步t的输入为(C,h^{_{t-1}^{'}}y^{_{t-1}^{'}}
图5:示例3

存在问题:存在短期记忆问题,当序列过长C表征输入序列能力下降,并存在梯度消失等问题。下面要说的注意力机制可以缓解这种问题。

二、注意力机制

前言

注意力机制由一种称为对齐模型(或注意力层)的小型神经网络生成,该网络与整个模型一起训练,可以缓解RNN短期记忆的问题。BahdanauAttention和LuongAttention论文提出的attention机制都是基于机器翻译,当然也可以应用于其他领域,如推荐系统。

2.1 Bahdanau Attention 

链接:NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE

2.1.1 编码器

Bahdanau的encoder部分,使用的是双重循环神经网络,神经单元是GRU。论文中对每个时间步输出的两个隐藏状态做的是连接。

图6:concate操作

2.1.2 解码器

本论文中解码器在时间步t的输入为(y_{t-1}h_{t-1},C_{t})即(上一次预测结果,时间步t-1隐藏状态,时间不t上下文)。可以发现C_{t}是有下标的,和上文介绍的不太一样。这是为什么呢?因为每个步都是不一样的,接下来让我们看看C_{t}是怎么计算的。

C_{i}=\sum_{j=1}^{N}a_{ij}h_{j} 其中h_{j}是编码器生成的隐藏状态序列,可见C_{i}是编码器隐藏状态的加权求和。

原文中a_{ij}计算过程描述如下:

图7:Bahdanau注意力计算公式

 上图操作,可以图8的神经网络实现:

图8:注意力网络
​​​​​

 2.1.3 示例

下图为使用了Bahdanau 注意力的编码器-解码器网络在机器翻译上的使用。解码器的输入为

h_{t-1},C_{t}),可发现编码器隐藏状态经过变过后得到C_{t}再送入解码器

图9:使用了Bahdanau 注意力的编码器-解码器网络

2.2 Luong Attention  

Luong等人在2015年发表的论文中提出由于注意力机制的目的是测量编码器的输出之一与解码器的先前隐藏状态之间的相似性,因此作者提出了简单地计算这两个向量的点积。作为在本论文中提出两种注意力机制:global attentionlocal attention。

链接:Effective Approaches to Attention-based Neural Machine Translation

2.2.1 Luong Attention  模型

Luong在encoder-decoder模型中使用的是两层单向循环神经网络且神经单元为LSTM,如下图(蓝色部分为编码器,红色为解码器)。解码器的输入为 (h_{t},C_{t}),注意该模型的输入为上下文向量 C_{t}和当前时刻的解码器隐藏状态h_{t},可发现编码器隐藏状态未经过变换直接送入解码器(不是很好理解),这是与Bahdanau注意力区别之一。

图10:Luong Attention模型

 2.2.2  global attention

global attention考虑 encode所有隐藏状态,如下图11所示。

图11:global attention

论文中给出的权重(weights) 计算公式如下,并给出了三种score计算方式

 缺点:在预测很长的句子的时候,其预测结果可能会不符合文意。所以又提出了local attention

  2.2.2  local attention

local注意力只关注编码器输出的隐藏状态的一部分。模型首先为每一个目标单词生成一个aligned position(p_{t}),它是一个整数并且取值范围为[0,L](L为编码器隐藏状态的长度),解码阶段只关心

[p_{t}-D,p_{t}+D]窗口范围内的encode隐藏状态(D根据经验设置)。

图12:local attention

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

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

相关文章

SVN使用:Mac电脑中修改SVN输出信息为英文的方法

前言 作为软件开发人员,关于项目代码管理以及维护想必都不陌生,尤其是在团队协作的时候,多人开发维护同一个项目更是需要代码管理。关于项目代码管理维护工具,常用的就是Git、SVN等管理工具。本篇文章只来分享一下关于SVN的配置设…

C语言学习笔记-常量

“常量”的广义概念是:‘不变化的量’。例如:在计算机程序运行时,不会被程序修改的量。 以上是百度百科上对常量的部分定义。C语言的学习过程中将会接触很多的常量,不同类型的常量其定义、用法等会有所差异。要搞清楚他们的相似与…

如何恢复已删除的文件?5分钟搞定的简单方法。

本文介绍如何使用文件恢复程序恢复已删除的文件。它包括与恢复已删除文件相关的提示。 如何恢复已删除的文件 从硬盘驱动器恢复已删除的文件并不是一件疯狂的事情,但一旦您意识到文件已被删除,就尝试恢复会有所帮助。被删除的文件通常不会被真正删除&am…

终于有人把数据仓库讲明白了

数仓概念 ⚫ 数据仓库(英语:Data Warehouse,简称数仓、DW),是一个用于存储、分析、报告的数据系统。 ⚫ 数据仓库的目的是构建面向分析的集成化数据环境,分析结果为企业提供决策支持(Decision Support&am…

Linux入门教程|| Linux 忘记密码解决方法|| Linux 远程登录

很多朋友经常会忘记Linux系统的root密码,linux系统忘记root密码的情况该怎么办呢?重新安装系统吗?当然不用!进入单用户模式更改一下root密码即可。 步骤如下: 重启linux系统 3 秒之内要按一下回车,出现如…

解决Error: Electron failed to install correctly, please delete......报错的问题

问题 在启动electron项目的时候,报mlgb错 Error: Electron failed to install correctly, please delete node_modules/electron and try installing again 搞了 好久 才解决 原因 升级Electron到7.0.0,提示Electron failed to install correctly, p…

python数据可视化开发(3):使用psutil和socket模块获取电脑系统信息(Mac地址、IP地址、主机名、系统用户、硬盘、CPU、内存、网络)

系列文章目录 python开发低代码数据可视化大屏:pandas.read_excel读取表格python实现直接读取excle数据实现的百度地图标注python数据可视化开发(1):Matplotlib库基础知识python数据可视化开发(2):pandas读取Excel的数据格式处理 文章目录系…

Linux下监控类命令:ps,du,top,df,free详解

Linux下监控类命令top命令top信息解释top参数使用ps命令ps信息解释ps参数使用du和dffree命令top命令 top命令,是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,一般系统资源导致的崩溃问题可以使用top实时监控各进程…

魔兽世界服务器架设开服教程(巫妖王之怒外网详细教程)

魔兽世界服务器架设开服教程(巫妖王之怒外网详细教程)首先需要了解魔兽各个重要文件详细情况说明不管是任何一个魔兽世界GM想要将服务器修改成为自己想要的样子,首先要做的一件事情就是了解自己的服务器文件是说明意思,对于大多数…

2023年java面试之设计模式

1.什么是设计模式设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。2.为什么要学习设计模式看懂源代码:如果你不懂设计模式去看Jd…

云原生周刊 | 使用 K8s 可视化工具集来调试业务 | 2023-1-30

开源项目推荐 k8z k8z 意在 K8s 业务层面,提供一个方便好用的 K8s 集群可视化工具集。目前包含以下功能: 终端:连接到集群任意 Pod 容器上,方便调试Tcpdump:对集群内容器进行 tcpdump 抓包,可直接展示抓…

七天实现一个go web框架

目录引流为什么要用web框架复习下net/http库以及http.Handler接口代码结构General.go启动!上下文必要性封装前context.go拆分router封装后启动!前缀树路由Trie 树目标实现前缀树修改router改变ServeHTTP实现分组控制Group对象的属性其余实现中间件实现其…

云计算|OpenStack|社区版OpenStack安装部署文档(三 --- 身份认证服务keystone安装部署---Rocky版)

一, 什么是keystone keystone是openstack的关键必选组件之一,其作用是提供身份认证服务,所有的身份认证信息都是存储在controller节点的数据库内。 具体的关于keystone的介绍可以参见官方文档:OpenStack Docs: Identity servic…

设备树中的pin 信息,是在什么时候被初始化的?

一、开发环境 SOC : IMX6ULL系统内核:4.1.15 二、问题描述 Linux 内核提供了pinctrl 和gpio 子系统用于GPIO 驱动。pinctrl_ctrl 子系统从设备树中获取pin 信息,然后配置pin复用 和pin电气特征(上/下拉,速度,驱动能…

python小游戏——像素鸟代码开源

♥️作者:小刘在这里 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的,绽放,愿所有的美好&#…

特斯拉Q4财报:底部反弹70%,为信仰打call

北京时间2023年1月26日美股盘后,探案君的信仰之股——特斯拉公布了2022年第四季度财报,无论营收还是利润依然吊打华尔街预期,这就是特斯拉,当然这也很特斯拉! 一、整体业绩,很特斯拉 营收方面&#xff1a…

JavaScript基础复盘4

JavaScript作用域 JavaScript作用域就是代码名字(变量)在某个范围内起作用和效果 目的是为了提高程序的可靠性,减少命名冲突。 JS没有块级作用域,{}内写的变量外部也可以使用。 作用域链 作用域链:内部函数访问外部函数…

拯救OOM~ 字节自研 Android 虚拟机内存管理优化黑科技 mSponge

本文描述的虚拟机内存管理优化方案,是从应用侧视角对 Android 虚拟机内存管理进行改造,优化了虚拟机对 LargeObjectSpace 的内存管理策略,间接增加其它内存空间使用上限。改造后的方案,32 位运行环境 LargeObjectSpace 的内存使用…

Aspose.CAD for .NET 23.1.0 Crack

Aspose.CAD for .NET 是一个独立的类库,它增强了 Windows 和 ASP.NET 的应用程序,以便在不需要 AutoCAD 甚至任何其他工作流渲染过程的情况下处理和渲染 CAD 绘图。CAD 类库允许将 DWG、DWT、DWXF、IFC、PLT、DGN、OBJ、STL、IGES、CFF2 文件以及图层和布…

封装一个顺序栈,并封装其相应的操作:判空、入栈、出栈、遍历栈、销毁

main.cpp#include <iostream> #include<fei1.h>using namespace std;int main() {der L;//创建L.date(215);//入栈L.ent(45);L.ent(23);L.ent(98);L.ent(12);//遍历L.trav();// 出栈L.come();L.come();//遍历L.trav();//销毁L.dest();return 0; }fei.cpp#include&l…