【深度学习笔记】10_11 注意力机制

注:本文为《动手学深度学习》开源内容,部分标注了个人理解,仅为个人学习记录,无抄袭搬运意图

10.11 注意力机制

在10.9节(编码器—解码器(seq2seq))里,解码器在各个时间步依赖相同的背景变量来获取输入序列信息。当编码器为循环神经网络时,背景变量来自它最终时间步的隐藏状态。

现在,让我们再次思考那一节提到的翻译例子:输入为英语序列“They”“are”“watching”“.”,输出为法语序列“Ils”“regardent”“.”。不难想到,解码器在生成输出序列中的每一个词时可能只需利用输入序列某一部分的信息。例如,在输出序列的时间步1,解码器可以主要依赖“They”“are”的信息来生成“Ils”,在时间步2则主要使用来自“watching”的编码信息生成“regardent”,最后在时间步3则直接映射句号“.”。这看上去就像是在解码器的每一时间步对输入序列中不同时间步的表征或编码信息分配不同的注意力一样。这也是注意力机制的由来 [1]。

仍然以循环神经网络为例,注意力机制通过对编码器所有时间步的隐藏状态做加权平均来得到背景变量。解码器在每一时间步调整这些权重,即注意力权重,从而能够在不同时间步分别关注输入序列中的不同部分并编码进相应时间步的背景变量。本节我们将讨论注意力机制是怎么工作的。

在10.9节(编码器—解码器(seq2seq))里我们区分了输入序列或编码器的索引 t t t与输出序列或解码器的索引 t ′ t' t。该节中,解码器在时间步 t ′ t' t的隐藏状态 s t ′ = g ( y t ′ − 1 , c , s t ′ − 1 ) \boldsymbol{s}_{t'} = g(\boldsymbol{y}_{t'-1}, \boldsymbol{c}, \boldsymbol{s}_{t'-1}) st=g(yt1,c,st1),其中 y t ′ − 1 \boldsymbol{y}_{t'-1} yt1是上一时间步 t ′ − 1 t'-1 t1的输出 y t ′ − 1 y_{t'-1} yt1的表征,且任一时间步 t ′ t' t使用相同的背景变量 c \boldsymbol{c} c。但在注意力机制中,解码器的每一时间步将使用可变的背景变量。记 c t ′ \boldsymbol{c}_{t'} ct是解码器在时间步 t ′ t' t的背景变量,那么解码器在该时间步的隐藏状态可以改写为

s t ′ = g ( y t ′ − 1 , c t ′ , s t ′ − 1 ) . \boldsymbol{s}_{t'} = g(\boldsymbol{y}_{t'-1}, \boldsymbol{c}_{t'}, \boldsymbol{s}_{t'-1}). st=g(yt1,ct,st1).

这里的关键是如何计算背景变量 c t ′ \boldsymbol{c}_{t'} ct和如何利用它来更新隐藏状态 s t ′ \boldsymbol{s}_{t'} st。下面将分别描述这两个关键点。

10.11.1 计算背景变量

我们先描述第一个关键点,即计算背景变量。图10.12描绘了注意力机制如何为解码器在时间步2计算背景变量。首先,函数 a a a根据解码器在时间步1的隐藏状态和编码器在各个时间步的隐藏状态计算softmax运算的输入。softmax运算输出概率分布并对编码器各个时间步的隐藏状态做加权平均,从而得到背景变量。

图10.12 编码器—解码器上的注意力机制

具体来说,令编码器在时间步 t t t的隐藏状态为 h t \boldsymbol{h}_t ht,且总时间步数为 T T T。那么解码器在时间步 t ′ t' t的背景变量为所有编码器隐藏状态的加权平均:

c t ′ = ∑ t = 1 T α t ′ t h t , \boldsymbol{c}_{t'} = \sum_{t=1}^T \alpha_{t' t} \boldsymbol{h}_t, ct=t=1Tαttht,

其中给定 t ′ t' t时,权重 α t ′ t \alpha_{t' t} αtt t = 1 , … , T t=1,\ldots,T t=1,,T的值是一个概率分布。为了得到概率分布,我们可以使用softmax运算:

α t ′ t = exp ⁡ ( e t ′ t ) ∑ k = 1 T exp ⁡ ( e t ′ k ) , t = 1 , … , T . \alpha_{t' t} = \frac{\exp(e_{t' t})}{ \sum_{k=1}^T \exp(e_{t' k}) },\quad t=1,\ldots,T. αtt=k=1Texp(etk)exp(ett),t=1,,T.

现在,我们需要定义如何计算上式中softmax运算的输入 e t ′ t e_{t' t} ett。由于 e t ′ t e_{t' t} ett同时取决于解码器的时间步 t ′ t' t和编码器的时间步 t t t,我们不妨以解码器在时间步 t ′ − 1 t'-1 t1的隐藏状态 s t ′ − 1 \boldsymbol{s}_{t' - 1} st1与编码器在时间步 t t t的隐藏状态 h t \boldsymbol{h}_t ht为输入,并通过函数 a a a计算 e t ′ t e_{t' t} ett

e t ′ t = a ( s t ′ − 1 , h t ) . e_{t' t} = a(\boldsymbol{s}_{t' - 1}, \boldsymbol{h}_t). ett=a(st1,ht).

这里函数 a a a有多种选择,如果两个输入向量长度相同,一个简单的选择是计算它们的内积 a ( s , h ) = s ⊤ h a(\boldsymbol{s}, \boldsymbol{h})=\boldsymbol{s}^\top \boldsymbol{h} a(s,h)=sh。而最早提出注意力机制的论文则将输入连结后通过含单隐藏层的多层感知机变换 [1]:

a ( s , h ) = v ⊤ tanh ⁡ ( W s s + W h h ) , a(\boldsymbol{s}, \boldsymbol{h}) = \boldsymbol{v}^\top \tanh(\boldsymbol{W}_s \boldsymbol{s} + \boldsymbol{W}_h \boldsymbol{h}), a(s,h)=vtanh(Wss+Whh),

其中 v \boldsymbol{v} v W s \boldsymbol{W}_s Ws W h \boldsymbol{W}_h Wh都是可以学习的模型参数。

10.11.1.1 矢量化计算

我们还可以对注意力机制采用更高效的矢量化计算。广义上,注意力机制的输入包括查询项以及一一对应的键项和值项,其中值项是需要加权平均的一组项。在加权平均中,值项的权重来自查询项以及与该值项对应的键项的计算。

在上面的例子中,查询项为解码器的隐藏状态,键项和值项均为编码器的隐藏状态。
让我们考虑一个常见的简单情形,即编码器和解码器的隐藏单元个数均为 h h h,且函数 a ( s , h ) = s ⊤ h a(\boldsymbol{s}, \boldsymbol{h})=\boldsymbol{s}^\top \boldsymbol{h} a(s,h)=sh。假设我们希望根据解码器单个隐藏状态 s t ′ − 1 ∈ R h \boldsymbol{s}_{t' - 1} \in \mathbb{R}^{h} st1Rh和编码器所有隐藏状态 h t ∈ R h , t = 1 , … , T \boldsymbol{h}_t \in \mathbb{R}^{h}, t = 1,\ldots,T htRh,t=1,,T来计算背景向量 c t ′ ∈ R h \boldsymbol{c}_{t'}\in \mathbb{R}^{h} ctRh
我们可以将查询项矩阵 Q ∈ R 1 × h \boldsymbol{Q} \in \mathbb{R}^{1 \times h} QR1×h设为 s t ′ − 1 ⊤ \boldsymbol{s}_{t' - 1}^\top st1,并令键项矩阵 K ∈ R T × h \boldsymbol{K} \in \mathbb{R}^{T \times h} KRT×h和值项矩阵 V ∈ R T × h \boldsymbol{V} \in \mathbb{R}^{T \times h} VRT×h相同且第 t t t行均为 h t ⊤ \boldsymbol{h}_t^\top ht。此时,我们只需要通过矢量化计算

softmax ( Q K ⊤ ) V \text{softmax}(\boldsymbol{Q}\boldsymbol{K}^\top)\boldsymbol{V} softmax(QK)V

即可算出转置后的背景向量 c t ′ ⊤ \boldsymbol{c}_{t'}^\top ct。当查询项矩阵 Q \boldsymbol{Q} Q的行数为 n n n时,上式将得到 n n n行的输出矩阵。输出矩阵与查询项矩阵在相同行上一一对应。

10.11.2 更新隐藏状态

现在我们描述第二个关键点,即更新隐藏状态。以门控循环单元为例,在解码器中我们可以对6.7节(门控循环单元(GRU))中门控循环单元的设计稍作修改,从而变换上一时间步 t ′ − 1 t'-1 t1的输出 y t ′ − 1 \boldsymbol{y}_{t'-1} yt1、隐藏状态 s t ′ − 1 \boldsymbol{s}_{t' - 1} st1和当前时间步 t ′ t' t的含注意力机制的背景变量 c t ′ \boldsymbol{c}_{t'} ct [1]。解码器在时间步 t ′ t' t的隐藏状态为

s t ′ = z t ′ ⊙ s t ′ − 1 + ( 1 − z t ′ ) ⊙ s ~ t ′ , \boldsymbol{s}_{t'} = \boldsymbol{z}_{t'} \odot \boldsymbol{s}_{t'-1} + (1 - \boldsymbol{z}_{t'}) \odot \tilde{\boldsymbol{s}}_{t'}, st=ztst1+(1zt)s~t,

其中的重置门、更新门和候选隐藏状态分别为

r t ′ = σ ( W y r y t ′ − 1 + W s r s t ′ − 1 + W c r c t ′ + b r ) , z t ′ = σ ( W y z y t ′ − 1 + W s z s t ′ − 1 + W c z c t ′ + b z ) , s ~ t ′ = tanh ( W y s y t ′ − 1 + W s s ( s t ′ − 1 ⊙ r t ′ ) + W c s c t ′ + b s ) , \begin{aligned} \boldsymbol{r}_{t'} &= \sigma(\boldsymbol{W}_{yr} \boldsymbol{y}_{t'-1} + \boldsymbol{W}_{sr} \boldsymbol{s}_{t' - 1} + \boldsymbol{W}_{cr} \boldsymbol{c}_{t'} + \boldsymbol{b}_r),\\ \boldsymbol{z}_{t'} &= \sigma(\boldsymbol{W}_{yz} \boldsymbol{y}_{t'-1} + \boldsymbol{W}_{sz} \boldsymbol{s}_{t' - 1} + \boldsymbol{W}_{cz} \boldsymbol{c}_{t'} + \boldsymbol{b}_z),\\ \tilde{\boldsymbol{s}}_{t'} &= \text{tanh}(\boldsymbol{W}_{ys} \boldsymbol{y}_{t'-1} + \boldsymbol{W}_{ss} (\boldsymbol{s}_{t' - 1} \odot \boldsymbol{r}_{t'}) + \boldsymbol{W}_{cs} \boldsymbol{c}_{t'} + \boldsymbol{b}_s), \end{aligned} rtzts~t=σ(Wyryt1+Wsrst1+Wcrct+br),=σ(Wyzyt1+Wszst1+Wczct+bz),=tanh(Wysyt1+Wss(st1rt)+Wcsct+bs),

其中含下标的 W \boldsymbol{W} W b \boldsymbol{b} b分别为门控循环单元的权重参数和偏差参数。

10.11.3 发展

本质上,注意力机制能够为表征中较有价值的部分分配较多的计算资源。这个有趣的想法自提出后得到了快速发展,特别是启发了依靠注意力机制来编码输入序列并解码出输出序列的变换器(Transformer)模型的设计 [2]。变换器抛弃了卷积神经网络和循环神经网络的架构。它在计算效率上比基于循环神经网络的编码器—解码器模型通常更具明显优势。含注意力机制的变换器的编码结构在后来的BERT预训练模型中得以应用并令后者大放异彩:微调后的模型在多达11项自然语言处理任务中取得了当时最先进的结果 [3]。不久后,同样是基于变换器设计的GPT-2模型于新收集的语料数据集预训练后,在7个未参与训练的语言模型数据集上均取得了当时最先进的结果 [4]。除了自然语言处理领域,注意力机制还被广泛用于图像分类、自动图像描述、唇语解读以及语音识别。

小结

  • 可以在解码器的每个时间步使用不同的背景变量,并对输入序列中不同时间步编码的信息分配不同的注意力。
  • 广义上,注意力机制的输入包括查询项以及一一对应的键项和值项。
  • 注意力机制可以采用更为高效的矢量化计算。

参考文献

[1] Bahdanau, D., Cho, K., & Bengio, Y. (2014). Neural machine translation by jointly learning to align and translate. arXiv preprint arXiv:1409.0473.

[2] Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., … & Polosukhin, I. (2017). Attention is all you need. In Advances in Neural Information Processing Systems (pp. 5998-6008).

[3] Devlin, J., Chang, M. W., Lee, K., & Toutanova, K. (2018). Bert: Pre-training of deep bidirectional transformers for language understanding. arXiv preprint arXiv:1810.04805.

[4] Radford, A., Wu, J., Child, R., Luan, D., Amodei, D., Sutskever I. (2019). Language Models are Unsupervised Multitask Learners. OpenAI.


注:本节与原书基本相同,原书传送门

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Leet code 1658 将x减到0的最小操作数

解题思路:滑动窗口 主要思想:正难逆简 题目需要左找一个数 右找一个数 我们不如直接找中间最长的一连串子数让这串子树和为 数组子树和减去X 找不到就返回 -1 滑动窗口双指针从左端出发,进行 进窗口 判断 出窗口 更新结果四个步骤 代码…

用机床测头为什么能提升加工中心精度?提高生产效率?

制造业的蓬勃发展为企业提出了更高的精度和效率要求。在现代制造业中,机床测头作为一种关键的检测装置,能够实时监控加工过程中的误差,及时调整,保证加工质量的稳定性,提高加工中心的精度,进而提升生产效率…

QT 如何在QPushButton上播放gif(终极版)

在平时浏览网站,或者使用软件的时候,经常可以见到:在点击了某个按钮之后,按钮上会显示动图以及提示文字。在QT中,比较常见且简单的做法就是:给按钮设置一个layout,然后在这个layout里面添加QLab…

openssl3.2 - note - Getting Started with OpenSSL

文章目录 openssl3.2 - note - Getting Started with OpenSSL概述笔记openssl 历史版本Configure 选项开关支持的OSopenssl 文档简介安装新闻每个平台的安装文档支持的命令列表配置文件格式环境变量 END openssl3.2 - note - Getting Started with OpenSSL 概述 看到官方文档…

三款内衣洗衣机的顶级较量:希亦、小吉、由利,谁才是性价比之王?

洗衣机在我们的生活中可谓是非常常见的了,几乎每家每户都具备着一台。即便是有洗衣机,也有不少人不会将自己我贴身衣物直接扔在洗衣机里清洗,而是会自己手工手洗。这跟我们传统上的观念有很大的关系,认为把内衣、内裤等贴身衣物放…

代码随想录算法训练营三刷day24 | 回溯算法 之 理论基础 77. 组合

三刷day24 理论基础77. 组合递归函数的返回值以及参数回溯函数终止条件单层搜索的过程 理论基础 回溯法解决的问题都可以抽象为树形结构。 因为回溯法解决的都是在集合中递归查找子集,集合的大小就构成了树的宽度,递归的深度,都构成的树的深…

【Java 并发】AbstractQueuedSynchronizer

1 AQS 简介 在同步组件的实现中, AQS 是核心部分, 同步组件的实现者通过使用 AQS 提供的模板方法实现同步组件语义。 AQS 则实现了对同步状态的管理, 以及对阻塞线程进行排队, 等待通知等一些底层的实现处理。 AQS 的核心也包括了这些方面: 同步队列, 独占式锁的获取和释放, 共…

2024三掌柜赠书活动第十六期:AI时代Python金融大数据分析实战

目录 前言 AI时代Python金融大数据分析实战 关于《AI时代Python金融大数据分析实战》 编辑推荐 内容简介 作者简介 图书目录 书中前言/序言 《AI时代Python金融大数据分析实战》全书速览 结束语 前言 随着人工智能技术的发展和金融行业的不断进步,大数据分…

Linux下的多线程编程:原理、工具及应用(1)

🎬慕斯主页:修仙—别有洞天 ♈️今日夜电波:Flower of Life—陽花 0:34━━━━━━️💟──────── 4:46 🔄 ◀️ ⏸ ▶️ ☰ …

记一次Spring事务失效的发现与解决过程

一、事情起因是这样的 首先,我们是使用Spring mybatis 进行开发。 某功能在测试环境看到报错日志, 但是数据库里面的数据发生了变化,没有回滚。 执行数据库update 操作的方法上明确有 Transactional(rollbackFor Exception.class)的注解。…

【数学建模】熵权法

之前我们学了层次分析法和topsis法,但是主观性十分强,有没有科学的方法得出权重呢?今天,我们来学习熵权法! 基本概念: 熵权法,物理学名词,按照信息论基本原理的解释,信息…

Spring状态机简单实现

一、什么是状态机 状态机,又称有限状态自动机,是表示有限个状态以及在这些状态之间的转移和动作等行为的计算模型。状态机的概念其实可以应用的各种领域,包括电子工程、语言学、哲学、生物学、数学和逻辑学等,例如日常生活中的电…

什么是MVC三层结构

1.MVC(三层结构) MVC(Model-View-Controller)是一种常见的软件设计模式,用于将应用程序的逻辑和界面分离成三个不同的组件。每个组件负责特定的任务,从而提高代码的可维护性和可扩展性。 以前的模式。 遇到…

数据集下载

一、数据集下载——谷歌Open images 谷歌Open-image-v6是由谷歌出资标注的一个超大型数据集,数据大小达到600多G,类别达到600多种分类,对于普通研究者而言,根本没办法全部下载下来做测试,也没必要。只需要下载与自己任…

苹果Vision Pro即将在中日韩等九国开卖 | 百能云芯

苹果公司近期透露,首款混合实境(MR)头盔「Vision Pro」即将在今年晚些时候推向更多国家销售。虽然苹果尚未公布具体的销售细节,但根据最新的外媒报道,这款高科技产品可能即将在中国、日本、韩国等九个国家开卖&#xf…

三翼鸟门店转型升级:首批260家线下店入驻天猫喵店

作者 | 曾响铃 文 | 响铃说 “资深玩家教你如何做全屋智能家居”、“一条视频给你讲清楚智能家居的设计思路”……在各大网站上搜索“智能家居”,就会出现类似的标题。区别于传统家居博主,他们主要通过分享智能家居体验,讲解智能家居设计等…

Hadoop大数据应用:Linux 部署 HDFS 分布式集群

目录 一、实验 1.环境 2.Linux 部署 HDFS 分布式集群 3.Linux 使用 HDFS 文件系统 二、问题 1.ssh-copy-id 报错 2. 如何禁用ssh key 检测 3.HDFS有哪些配置文件 4.hadoop查看版本报错 5.启动集群报错 6.hadoop 的启动和停止命令 7.上传文件报错 8.HDFS 使用命令 一…

【JetsonNano】onnxruntime-gpu 环境编译和安装,支持 Python 和 C++ 开发

1. 设备 2. 环境 sudo apt-get install protobuf-compiler libprotoc-devexport PATH/usr/local/cuda/bin:${PATH} export CUDA_PATH/usr/local/cuda export cuDNN_PATH/usr/lib/aarch64-linux-gnu export CMAKE_ARGS"-DONNX_CUSTOM_PROTOC_EXECUTABLE/usr/bin/protoc&qu…

SAT和SMT介绍及求解器使用

一、SAT 1、介绍 (1)定义 SAT即命题逻辑公式的可满足性问题/布尔可满足性问题。即给定一个与或非和变量组成的命题公式,判断是否存在一些结果使得这个公式成立 它是第一个被确认为NP完全的问题。 输入:析取范式(C…

新站上线了

新站上线了 由于本人自身的向往,以及粉丝朋友的广大呼吁。我终于抽出时间给我的新站上线了。感谢各位粉丝好友的关注。欢迎大家前来踩站~。 新站地址:https://jhj-coding.top/ 今后会同时维护CSDN与jhj-coding哦!期待新站可以给大家带来更好…