《深度学习进阶 自然语言处理》第八章:Attention介绍

news2024/11/25 16:51:26

文章目录

    • 8.1 Attention结构
      • 8.1.1 seq2seq存在的问题
      • 8.1.2 编码器的改进
      • 8.1.3 解码器的改进
    • 8.2 Attention的应用
    • 8.3 总结


之前文章链接:

开篇介绍:《深度学习进阶 自然语言处理》书籍介绍
第一章:《深度学习进阶 自然语言处理》第一章:神经网络的复习
第二章:《深度学习进阶 自然语言处理》第二章:自然语言和单词的分布式表示
第三章:《深度学习进阶 自然语言处理》第三章:word2vec
第四章:《深度学习进阶 自然语言处理》第四章:Embedding层和负采样介绍
第五章:《深度学习进阶 自然语言处理》第五章:RNN通俗介绍
第六章:《深度学习进阶 自然语言处理》第六章:LSTM介绍
第七章:《深度学习进阶 自然语言处理》第七章:seq2seq介绍

写在开头,本章中提到的Attention概念和我们现在常谈的Attention有些差别,此处Attention概念更加广泛。

我们现在常提的Attention,大多数人会想到《Attention Is All You Need》中提出的transformer中的内容;
本书出版于2018年7月,当时《Attention Is All You Need》已经发表,但是火遍整个NLP行业的BERT模型还没有被Google提出(2018年10月,Google发出一篇论文《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》, BERT模型横空出世, 并横扫NLP领域11项任务的最佳成绩),BERT问世后,《Attention Is All You Need》这篇文章才受到更多人的关注。
本章内容梳理,主要是整理当时基于RNN等时序模型的Attention相关内容。

8.1 Attention结构

在上一章讲到, seq2seq是一个非常强大的框架,应用面很广。本章我们将介绍进一步强化seq2seq的注意力机制(Afttention mechanism,简称Attention )。基于Attention 机制, seq2seq可以像我们人类一样,将“注意力”集中在必要的信息上。此外,使用Attention可以解决当前seq2seq面临的问题。

8.1.1 seq2seq存在的问题

seq2seq中使用编码器对时序数据进行编码,然后将编码信息传递给解码器。此时,编码器的输出是固定长度的向量。实际上,这个“固定长度”存在很大问题。因为固定长度的向量意味着,无论输入语句的长度如何(无论多长),都会被转换为长度相同的向量。这种情况会导致有用的信息从向量中溢出。

接下来依次通过改进编码器、解码器来避免这种情况的发生。

8.1.2 编码器的改进

到目前为止,我们都只将LSTM层的最后的隐藏状态传递给解码器,但是编码器的输出的长度应该根据输入文本的长度相应地改变。这是编码器的一个可以改进的地方。具体而言,如下图所示,使用各个时刻(各个单词)的LSTM层的隐藏状态。通过这种方式可以获得和输入的单词数相同数量的向量。在下图的例子中,输入了5个单词,此时编码器输出5个向量。这样一来,编码器就摆脱了“一个固定长度的向量”的制约。
在这里插入图片描述

以上是对编码器的改进。这里我们所做的改进只是将编码器的全部时刻的隐藏状态取出来而已。通过这个小改动,编码器可以根据输入语句的长度,成比例地编码信息。那么,解码器又将如何处理这个编码器的输出呢?

8.1.3 解码器的改进

解码器的改进,主要是把编码器的输出hs输入到各个时刻的Attention层。另外,这里将LSTM层的隐藏状态向量输入Affine层。具体内容如下图:
在这里插入图片描述

以上内容概述了关于编码器和解码器部分的改进,其代码实现见书本P344,在此不做详述。

8.2 Attention的应用

我们在前面介绍了如何将Attention应用在seq2seq上,但是Attention这一想法本身是通用的,在应用上还有更多的可能性。接下来我们介绍一下如何在transformer中使用Attention机制(书中讲到关于GNMT、NTM在此不做介绍,感兴趣读者可以翻阅原书)。

Transformer是基于Attention构成的,其中使用了Self-Attention技巧,这一点很重要。Self-Attention直译为“自己对自己的Attention",也就是说,这是以一个时序数据为对象的Attention,旨在观察一个时序数据中每个元素与其他元素的关系,Self-Attention如下图所示。
在这里插入图片描述

整个tansformer结构如下图:
在这里插入图片描述

Transformer中用Attention代替了RNN。实际上,由上图可知,编码器和解码器两者都使用了Self-Attention。Feed Forward层表示前馈神经网络(在时间方向上独立的网络)。具体而言,使用具有一个隐藏层、激活函数为ReLU的全连接的神经网络。另外,图中的Nx表示灰色背景包围的元素被堆叠了N次。

关于transformer详细介绍,参考之前整理资料:

  • 01-transformer简介

  • 02-transformer架构

8.3 总结

本章简单介绍了Attention实现的机制,然后以transformer为例,介绍了Attention在模型中的应用。

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

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

相关文章

SSH连接WSL2踩坑记录与增加端口转换规则,实现外网与WSL2的连接

SSH连接WSL2踩坑记录 文章目录SSH连接WSL2踩坑记录1. 在WSL里的操作2. ssh连接3. 可能出现的错误4. 再配置端口转发到WSL1. 在WSL里的操作 1.1 重装openssh-server sudo remove openssh-server # 如果已经安装了,建设先卸载 sudo apt install openssh-server…

Ansys Lumerical | 行波 Mach-Zehnder 调制器仿真分析

前言 本示例描述了行波 Mach-Zehnder 调制器的完整多物理场(电气、光学、射频)仿真,最后在INTERCONNECT中进行了紧凑模型电路仿真。计算了相对相移、光学传输、传输线带宽和眼图等关键结果。 综述 此示例中5毫米长的Si波导由5毫米长的Al共面…

SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.24 SpringBoot 整合 RabbitMQ(topic 模式)

SpringBoot 【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇5 整合第三方技术5.24 SpringBoot 整合 RabbitMQ(topic 模式)5.24.1 …

FL Studio2023水果编曲软件最新版安装教程

FL Studio中文版是知名的音乐制作软件,让你的计算机就像是全功能的录音室,软件包含13种虚拟音源,可同时录制64轨音频轨,FL Studio中文版拥有的漂亮的大混音盘,先进的创作工具,让你的音乐突破想象力的限制&a…

智能化油田建设规划

一、数字化油田-技术现状 数字化油田实现了设备的远程生产过程监控,使井场实现无人值守。所以目前的设备运行维护管理系统只能实现数据统计管理,并不能实现设备状态监控及远程维护及故障诊断。 1、数字化油田— 存在的问题 缺少设备状态在线监测系统&a…

第三章. 业务功能开发--用户登录安全退出

第三章. 业务功能开发--用户登录安全退出 1. 用户登录 需求: 用户在登录页面,输入用户名和密码,点击"登录"按钮或者回车,完成用户登录的功能.*用户名和密码不能为空*用户名或者密码错误,用户已过期,用户状态被锁定,ip受限 都不能登录成功*登录成功之后,所…

Android Jetpack之Lifecycle的使用及源码分析

Lifecycle生命周期感知型组件可执行操作来响应另一个组件(如 Activity 和 Fragment)的生命周期状态的变化。这些组件有助于您编写出更有条理且往往更精简的代码,此类代码更易于维护。 尤其是在Activity和Fragment在已经默认支持LifeCycle的情…

【第五部分 | JS WebAPI】3:DOM 节点操作

目录 | 节点操作 1-1 概述 2-1 获取父节点 3-1 获取子节点(获取所有子对象 不推荐) 3-2 获取子节点(获取所有子【元素节点】) 3-3 获取首尾子节点 4-1 获取兄弟节点 5-1 动态创建、添加节点 5-2 案例:评论区 …

性能测试_JMeter_connection timed out :connect

jmeter报错:failed:connection timed out :connect/java.net.BindException: Address already in use: connect java.net.BindException: Address already in use: connectat java.net.DualStackPlainSocketImpl.connect0(Native Method)at java.net.DualStackPlainSocketImpl…

Linux系统上安装软件

安装jdk,安装tomcat,安装Mysql 四种安装方式: 安装jdk 1.去这个网站上下载linux版本的jdk Java Archive Downloads - Java SE 8 2.在虚拟机中的服务器终端中输入ifconfig(注意不是ipconfig,而是ifconfig…

智慧机场解决方案-最新全套文件

智慧机场解决方案-最新全套文件一、建设背景二、建设思路三、建设方案四、获取 - 智慧机场全套最新解决方案合集一、建设背景 中国处在机场持续大规模建设过程中,政府也有意愿建设机场作为城市名片,经济持续增长会带来机场的持续建设;我国机…

螺旋模型的优点与缺点

螺旋模型: 特点: 螺旋模型在“瀑布模型”的每一个开发阶段前引入一个非常严格的风险识别、风险分析和风险控制,它把软件项目分解成一个个小项目。每个小项目都标识一个或多个主要风险,直到所有的主要风险因素都被确定 螺旋模型强…

Copilot:AI自动写代码,人工智能究竟还能取代什么?

Copilot:AI自动写代码,人工智能究竟还能取代什么? 前言 在AI绘画掀起一阵热潮之后,AI写代码又逐渐进入了我们的视野,似乎这一步我们还没想到就迅速到来了,难道说AI在取代画家之后,还要取代程序…

引擎入门 | Unity UI简介–第1部分(7)

本期我们继续为大家进行Unity UI简介(第一部分)的后续教程 本篇内容 14.放置标题图像 15.添加开始按钮 16.定位按钮 文章末尾可免费获取教程源代码 本篇Unity UI简介(第一部分)篇幅较长,分为十篇,本篇…

sqli-labs/Less-48

欢迎界面还是以sort为注入参数 接下来进行注入类型的判断 首先输入一下内容 sortrand() 多尝试几次 发现界面会发生变化 所以这一关属于数字型注入 然后我们选择使用报错注入 尝试输入一下内容 sortupdatexml(1,if(11,concat(0x7e,database(),0x7e),1),1)-- 回显如下 呦…

网络层 408真题 大题详解

1、【2009】 第一问有两种分配可能性,要想到位 记住🚩 路由器到互联网的路由相当于默认路由0/0 即目的地址0.0.0.0 子网掩码0.0.0.0 2、【2015】 注意🚩DHCP服务器不能转发信息 要观察到本图网络拓扑是同一个网络,在同一个网络中…

Linux系统man帮助一文通-尚文网络xUP楠哥

~~全文共1453字,阅读需约5分钟。 进Q群11372462,领取专属报名福利,包含云计算学习路线图代表性实战训练大厂云计算面试题资料! Linux帮助手册的常见章节 man是Manual的缩写,用来查看系统中命令和配置的帮助信息。Linux本地系统上…

Java#21(抽象与接口)

目录 一.抽象方法和抽象类 1.抽象方法: 2.抽象类: 3.注意: 二.接口 1.接口的定义 2.注意 3.接口中成员的特点 三.接口中的方法 1.JDK7以前: 接口中只能定义抽象方法2.JDK8: 接口中可以定义有方法体的方法(默认、静态) 3.JDK9: 接口中可以定义私有方法 一.抽象方法和…

【Call for papers】DSN-2023(CCF-B/截稿日期: 2022年12月7日)

文章目录1.会议信息2.时间节点3.论文主题On behalf of the Organizing Committee, we extend you a warm welcome to the 53rd Annual IEEE/IFIP International Conference on Dependable Systems and Networks (DSN 2023), organized by the University of Coimbra, Portugal.…

[ Linux ] 如何查看Linux系统版本

文章目录查看Linux内核Kernel的场景情况查看 Linux 版本的几种方式1、通过查看 redhat-release (可查看小版本)2、使用 lsb_release 命令 (可查看小版本)3、使用 hostnamectl 命令 (只可查看大版本)4、通过…