NLP学习笔记(五) 注意力机制

news2024/9/27 19:26:03

大家好,我是半虹,这篇文章来讲注意力机制 (Attention Mechanism) 在序列到序列模型中的应用


在上一篇文章中,我们介绍了序列到序列模型,其工作流程可以概括为以下两个步骤

首先,用编码器将输入序列编码成上下文向量,然后,用解码器将上下文向量解码成输出序列

这里所说的上下文向量,其实可以理解成输入序列的向量表示

如此以该向量作为联系,解码器就可以生成与输入序列相关的输出序列

序列到序列_0

上图是基于循环神经网络的序列到序列模型示意图, R 1 R_{1} R1 是编码器, R 2 R_{2} R2 是解码器,二者都是循环神经网络

宏观上说,所有序列到序列模型的核心问题就两个:

  1. 编码器怎么得到上下文向量?
  2. 解码器怎么使用上下文向量?

序列到序列模型对上述两个问题有很多种设计方案,上图所展示的模型是一种较为基础的设计

该模型将编码器最后一步的隐状态作为上下文向量,然后用上下文向量初始化解码器的隐状态


但是,这样简单的设计会使得解码器将过多的信息压缩在隐状态中

在每一步解码的过程中,解码器的隐状态不仅需要记住当前步之前已解码的信息,还要记住输入序列的信息

我们能不能想办法减轻解码器信息压缩的情况呢?答案自然是肯定的,并且通过一个简单的改动就可以做到

那就是除了用上下文向量初始化解码器隐状态外,在每一步解码时将上下文向量作为解码器和分类层的输入

这样,解码器和分类层就能直接通过上下文向量获得输入序列的信息,使解码器隐状态需要保存的信息变少

序列到序列_1

上图是改进后的序列到序列模型,该模型仍然是将编码器最后一步的隐状态作为上下文向量

不同之处在于上下文向量除了用于初始化解码器隐状态之外,还作为解码器和分类层的输入

好了,思路非常简单,在实现的时候提醒大家注意两个细节:

  1. 解码器和分类层在每个时间步里使用的上下文向量都是一样的
  2. 解码器和分类层会将上下文向量与原始输入拼接得到新的输入

然而,改进后的设计仍然无法解决编码器将过多的信息压缩在隐状态中

对于上述两种方案,编码器试图将整个输入序列的信息压缩到最后一个时间步的隐状态里面

当输入序列较长时,很容易会出现信息缺失的情况,要怎么解决呢,这就是注意力机制发挥作用的时候

使用注意力机制时:

  1. 编码器不再使用最后一个时间步的隐状态表示整个输入序列,而是保留序列中每个时间步的隐状态
  2. 解码器在每一步解码时,会动态计算当前步与输入序列所有隐状态的匹配分数,找出最相关的部分

这句话怎么理解呢?

用翻译任务来举例,假设现在我们要进行中译英,将 机器学习 翻译成 Machine Learning

当解码器在生成 Machine   时,其实应该将注意力放在输入中的 机器 两个字上

当解码器在生成 Learning 时,则是需要将注意力放在输入中的 学习 两个字上


在序列到序列模型中有两个比较经典的注意力机制,一是 Bahdanau Attention \text{Bahdanau Attention} Bahdanau Attention,二是 Luong Attention \text{Luong Attention} Luong Attention

下面我们以视频的方式直观看看这两个注意力机制的运作

Bahdanau Attention

Luong Attention


对于上述两种注意力机制,上下文向量都是动态计算的,并以不同的方式应用到解码过程

两者的不同之处如下所示:

不同之处 Bahdanau Attention \text{Bahdanau Attention} Bahdanau Attention Luong Attention \text{Luong Attention} Luong Attention
上下文向量计算的输入解码器上一 隐状态
编码器所有隐状态
解码器当前隐状态
编码器所有隐状态
解码器输入当前输入
上下文向量
当前输入
分类层输入当前隐状态
上下文向量
当前输入
当前隐状态
上下文向量

值得一提的是,虽然两者用于上下文向量计算的输入是不同的,但上下文向量的计算方式却是相似的

概括来说就是,在每一步解码时用单个解码器隐状态与所有编码器隐状态计算注意力权重后加权求和得到

公式化的表达:

  • 给定所有编码器隐状态 H e = { H 1 e ,   H 2 e ,   ⋯   ,   H N e } H^{e} = \{H^{e}_{1},\ H^{e}_{2},\ \cdots,\ H^{e}_{N}\} He={H1e, H2e, , HNe} 以及单个解码器隐状态 H t d H^{d}_{t} Htd
  • 待求为当前上下文向量 C t d C^{d}_{t} Ctd

计算步骤如下:

  • 计算注意力权重分布: α i = softmax ( score ( H i e ,   H t d ) ) = exp ⁡ ( score ( H i e ,   H t d ) ) ∑ j = 1 N exp ⁡ ( score ( H j e ,   H t d ) ) \alpha_{i} = \text{softmax}(\text{score}(H^{e}_{i},\ H^{d}_{t})) = \frac{\exp{(\text{score}(H^{e}_{i},\ H^{d}_{t})})}{\sum_{j=1}^{N}{\exp({\text{score}(H^{e}_{j},\ H^{d}_{t})}})} αi=softmax(score(Hie, Htd))=j=1Nexp(score(Hje, Htd))exp(score(Hie, Htd))
  • 计算当前上下文向量: C t d = ∑ i = 1 N α i H i e C^{d}_{t} = \sum_{i=1}^{N}{\alpha_{i} H^{e}_{i}} Ctd=i=1NαiHie

其中最核心的部分就是打分函数,用于计算编码器隐状态与解码器隐状态之间的匹配分数

在两种注意力机制中,对于打分函数有各自的设计,如下表所示:

注意力机制名称打分函数名称打分函数公式
Bahdanau Attention \text{Bahdanau Attention} Bahdanau Attention concat \text{concat} concat score ( H i e ,   H t d ) = W b ⋅ tanh ⁡ ( W a ⋅ [ H i e ;   H t d ] ) \text{score}(H^{e}_{i},\ H^{d}_{t}) = W_{b} \cdot \tanh (W_{a} \cdot [H^{e}_{i};\ H^{d}_{t}]) score(Hie, Htd)=Wbtanh(Wa[Hie; Htd])
Luong Attention \text{Luong Attention} Luong Attention concat \text{concat} concat score ( H i e ,   H t d ) = W b ⋅ tanh ⁡ ( W a ⋅ [ H i e ;   H t d ] ) \text{score}(H^{e}_{i},\ H^{d}_{t}) = W_{b} \cdot \tanh (W_{a} \cdot [H^{e}_{i};\ H^{d}_{t}]) score(Hie, Htd)=Wbtanh(Wa[Hie; Htd])
Luong Attention \text{Luong Attention} Luong Attention dot product \text{dot product} dot product score ( H i e ,   H t d ) = ( H i e ) T ⋅ H t d \text{score}(H^{e}_{i},\ H^{d}_{t}) = (H^{e}_{i})^{T} \cdot H^{d}_{t} score(Hie, Htd)=(Hie)THtd
Luong Attention \text{Luong Attention} Luong Attention general \text{general} general score ( H i e ,   H t d ) = ( H i e ) T ⋅ W a ⋅ H t d \text{score}(H^{e}_{i},\ H^{d}_{t}) = (H^{e}_{i})^{T} \cdot W_{a} \cdot H^{d}_{t} score(Hie, Htd)=(Hie)TWaHtd

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

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

相关文章

费控产品之易快报洞察解析

1.费控行业洞察 1.1 概念及管理范畴界定 费控业务的本质是企业支出的管理,因此分析费控要从企业支出管理的宏观范畴来看,企业支出主要包括两方面,一个是企业成本,一个是期间费用。期间费用就是我们常说的管理费用、销售费用和财务…

Centos7的安装与模板机的制作

Centos7的安装与模板机的制作 1.安装环境准备 1.VMware Workstation 2.centos7镜像 本文用的VMware版本为16.2.1 build-18811642 2.开始安装 话不多说,直接上图 3.模板机制作 1.查看防火墙的运行状态 firewall-cmd --state防火墙目前正在启动中 2.关闭防火墙…

STM32——STM32简介与创建工程

文章目录一、stm32简介stm32MCU:ARM:命名规则:片上资源/外设:系统结构:引脚的定义功能引脚介绍:最小系统引脚介绍:电源引脚介绍:启动配置最小系统电路二、软件安装三、新建工程固件库…

2022年专业408的算法题

文章目录0 结果1 题目2 思路3 实现3.1 思路13.2 思路二0 结果 1 题目 2 思路 1,首先明确二叉搜索树的定义:任何一个节点大于其左子树中的全部结点,小于其右子树中的全部结点。中序遍历二叉搜索树得到一个升序序列。2,明确题目中给…

【微信小程序入门到精通】— 微信小程序实现多页面切换(tabBar)

目录前言一、tabBar 介绍二、实操(创建 tabBar )2.1 基本配置2.2 详细配置总结前言 对于目前形式,微信小程序是一个热门,那么我们该如何去学习并且掌握之后去做实际项目呢? 为此我特意开设此专栏,在我学习的…

mysql索引机制实现及自适应hash索引

一、介绍   哈希(hash)是一种非常快的查找方法,一般情况下查找的时间复杂度为O(1)。常用于连接(join)操作,如Oracle中的哈希连接(hash join)。 InnoDB存储…

canopen11-sdo-40读取命令

源码 参考文件 1、SDO介绍 就对象而言,主机要访问节点词典的数据,因此主机是client客户端,节点是server服务器。上传与下载是对服务器来说的(这点和常识有点不太一样)。因此,上传指的是服务器发送数据给客户端,下载是客户端给服务器数据。 我们这里要用主机访问节点服…

Linux多进程编程之exec函数族使用

Linux多进程编程之exec函数族使用1.exec函数族是什么2.execl函数具体使用3.execlp4.exec后面不同字母所代表的含义1.exec函数族是什么 顾名思义,它并不只是一个函数,而是以exec开头的六个函数,并且是没有exec这个函数的(就像TCP/…

几行代码演示linux kernel、libc、userSpace app的关系

问一:编译出来的Linux内核镜像(".\build\arch\arm64\boot\Image"),可以单独运行吗?答案是能,但是加载完就提示panic,然后死掉了。 原因是: 内核代码加载完后,一定要切换到低权限模式…

Wireshark TS | Packet Challenge 之 HTTP 案例分析

前言 来自于 Sharkfest Packet Challenge 中的一个数据包案例,Sharkfest 是 Wireshark 官方组织的一年一度的大会,致力于在 Wireshark 开发人员和用户社区之间分享知识、经验和最佳实践。印象中早期是一年一次,近几年发展成一年两次&#xf…

我的2022年终总结

目录 1 序 1 2 工作 1 3 业余 1 3.1 AI 1 3.2 数学小插曲 3 3.3 金融投资 3 4 生活 4 5 最后 4 1 序 老婆大人每年这个时候都要写年终总结,现在也正在写;CSDN也发起了年终征文活动;各大app也各种年度大数据总结。我好像还是第一次写年终总…

两两交换链表中的节点 -- 虚拟头节点

24两两交换链表中的节点 – 虚拟头节点 通过本题可以: 增加对虚拟头节点的理解。 加强对链表这一基本数据结构的基本操作的理解。 1. 交换过程: 如图,假设链表如图所示。 为了减少对头节点的单独讨论,这里采用虚拟头节点进行…

Allegro如何显示走线和铜皮的网络名操作指导

Allegro如何显示走线和铜皮的网络名操作指导 在做PCB设计的时候,如果可以实时看到走线和铜皮的网络名,对于设计有很大帮助,如下图 具体操作如下 选择Set-up-user preferences选择Display

Vue 总结一(简介 基本语法)

目录 Vue 是什么 与其它 JS 框架的关联 Vue 周边库 MVVM模型 怎么用 Vue模板语法有2大类: 数据绑定 data 事件 v-on methods 计算属性 computed 监视属性 watch computed和watch之间的区别: 条件渲染 v-if v-show Vue 是什么 一个动态构建用…

sql根据团队树一级一级汇总统计

1、需求描述 最近碰到了一个需求,是要统计各个团队的员工的销售金额,然后一级一级向上汇总。 架构团队树是类似于这种样子的,需要先算出每个员工的销售金额,然后汇总成上一级的团队金额,然后各个团队的销售总金额再往上…

京东技术发展简史

文章目录前言京东发展历程京东商城技术的演进京东自研技术分布式数据库StarDB京东云移动端Flutter在京东的实践大数据咚咚架构ShardingSphere京东人物参考“京东可以高速发展到今天的规模的原因,其中最核心的是坚持“倒三角”战略:建立出色的团队&#x…

转义字符与strlen(),sizeof()在一起的注意事项

转义字符与strlen(),sizeof() 1. 转义字符每个人都知道是怎么一回事儿,转义字符顾名思义就是转变意思。 2. 首先转义字符肯定是一个字符,不是两个字符,更不用说是数字了,就是字符。 3. 当用strlen()统计字符串长度时或者用sizeo…

2022年度回顾

这一年是不平凡的一年,换了公司,新公司频繁出差,去了临沂,去了河南,去了唐山,去了福鼎,当中最印象深刻的还是河南,项目万分火急,在疫情隔绝的10月份毅然决然的前往河南安…

如何稍微优雅滴完成博文访问计数[SpringBoot+redis+分布式锁]

文章目录前言背景朴素做法Redis方案流量统计接口演示自定义注解计数实现防刷加锁完整代码数据一致性分析自定义注解返回值分析解决方案总结前言 okey,我们来收尾一下,这公历纪年2022年12月31日。这是本年度的最后一篇博文。那么这篇博文主要是用来实现博文的一个访…

【LeetCode】被围绕的区域 [M](深度优先遍历)

130. 被围绕的区域 - 力扣(LeetCode) 一、题目 给你一个 m x n 的矩阵 board ,由若干字符 X 和 O ,找到所有被 X 围绕的区域,并将这些区域里所有的 O 用 X 填充。 示例 1: 输入:board [[&quo…