当前位置: 首页 > news >正文

注意力机制综述学习记录

引言

近年来,深度学习在人工智能的领域一直充当领跑者的 身份,在模式识别、计算机视觉、自然语言处理中有着广泛的应用[2]。深度学习的想法源于人工神经网络的研究,而神经网络的研究是由真实大脑结构激发的,神经网络有很多种类型,如文献[3]中介绍,但基本原理是非常相似的。网络中的 每个神经元都能够接收、处理输入信号并发送输出信号。每个神经元与其他神经元连接的关系用一个称为权系数的实数 来评估,该实数反映了给定连接在神经网络中的重要程度。深度学习就是像神经网络结构一样,通过每层间的输入输出 的连接关系,人们可以学习到大量信息特征。

注意力机制能够以高权重去聚焦重要信息,以低权重去忽略不相 关的信息,并且还可以不断调整权重,使得在不同的情况下也可以选取重要的信息,因此具有更高的可扩展性和鲁棒性[9] 。其基本网络框架如图1所示。

在这里插入图片描述
此外,它还能通过共享重要信息(即选定的重要信息)与其他人进行信息交换,从而实现重要信息的传递[10]。因此注意力机制得到广大研究学者的关注,基于注意力机制的一些新的研究算法也在不断被提出验证和应用。
注意力机制在深度学习中能够发展迅速的原因主要有以下3个方面:

  • 1)这个结构是解决多任务最先进的模型,如机器翻译、 问题回答、情绪分析、词性标记、对话系统、数据监测、故障诊断等。
  • 2)注意力机制的显著优点就是关注相关的信息而忽略 不相关的信息,不通过循环而直接建立输入与输出之间的依赖关系,并行化程度增强,运行速度有了很大提高。
  • 3)它克服了传统神经网络中的一些局限,如随着输入长度增加系统的性能下降、输入顺序不合理导致系统的计算效率低下、系统缺乏对特征的提取和强化等。但是注意力机制 能够很好地建模具有可变长度的序列数据,进一步增强了其捕获远程依赖信息的能力,减少层次深度的同时有效提高精度。

本文以注意力机制中重要的 transformer 算法为分界点, 分别介绍了前期注意力机制与传统算法循环神经网络 (Recurrent Neural Network,RNN)、编 − 解 码 器(encoder-decoder)、长短期记忆(Long Short-Term Memory,LSTM)人工神经网络等的结合,并应用于图像处理、自然语言处理和数据预测等领域;和后期以自注意力(self-attention)为基本结构单元的 transformer、reformer 和 Hopfield 等算法的发展与应用。 最后在文末综述了注意力机制的应用领域和未来研究方向的 展望。

注意力机制前期应用

注意力机制自提出后,影响了基于深度学习算法的许多
人工智能领域的发展。而当前注意力机制已成功地应用于图
像处理、自然语言处理和数据预测等方面,现介绍其应用领域
如下。

1. 1 图像处理领域的应用

注意力机制的第一次提出是在视觉图像领域中[21],它指出注意力的作用就是将之前传统的视觉搜索方法进行优化,可选择地调整视觉对网络的处理,减少了需要处理的样本数据并且增加了样本间的特征匹配。文献[22]利用灵长类动物的视觉注意力提供了一个科学解释,提出的视觉注意模型结
构比较简单,能够对接收到的信息进行特征提取并且快速检测出各种形状和颜色,问题:但是因为结构的简单,无法检测到特征间的相关性,并且没有任何循环机制,所以在整个视觉识别过程中,无法重现图像轮廓,解决:因此人们就想到了将注意力机制与具有循环机制的循环神经网络(RNN)结合,并且在此基础上进行了一系列研究发现。
循环神经网络框架(RNN)是由 Jorden 和 Elman 分别于1986年和 1990年提出的,被认为是目前 RNN的最基础版本,之后随着科技进步,问题复杂度的加深,RNN 结构也在不断丰富和扩展。
循环神经网络,顾名思义其结构中含有循环层,而循环表示前一个和后一个是相关联的,即网络会对前面的信息进行记忆并作用于输出,这样神经网络中的隐藏层就存储了具有相关性的特征信息,其结构如图2所示。
在这里插入图片描述

由图 2 可知,RNN 下一时刻的输出与前面多个时刻的输入和自己当前状态有关,因此能够保留特征间的相关性,但是由于每一步状态的记录也会导致误差累积,从而有可能造成梯度爆炸;并且如果输入过多的序列信息,梯度的传递性不是很高,也会出现梯度消失的现象。因此,Google mind 团队在 2014 年将循环神经网络(RNN)模型与 attention 机制结合,利用注意力机制对特定的区域进行高分辨率处理。该模型受人类注意力的启发,根据需求将注意力集中在图片中特定的部分,类似于人类观察衣服图片时,往往不会看图片中所有因素,而是先注意到其中的突出因素。所以基于任务需求,这个模型不是处理全部图像,而是有针对性地选择相应位置处理,使整个模型的性能提高。众多实验结果表明,基于注意力机制的循环神经网络可以比单纯的循环神经网络更好地处理一些杂波图像和像素比较大的图像,是因为它可以将需要处理的图像特征提取简化,从而缩短处理数据的时间并且保留重要信息。
将注意力机制与RNN结合,很好地解决了单纯使用RNN在图像处理中的局限,如处理繁琐的特征信息往往会因为层数过深而梯度爆炸。注意力机制巧妙地提取图像中的关键信息同时忽略无关信息,为数据处理提供了更多的便利,网络层数也不会过深,梯度爆炸的问题也得到了很好的解决。

1. 2 自然语言处理领域的应用

注意力机制在视觉图像方面取得了很大突破后,一些学者同样将其思想应用在自然语言处理方面,也取得了丰硕的成果。利用神经网络实现机器翻译是新提出的一种翻译方法,不同于之前传统的基于段翻译,神经网络机器翻译可以建立一个能够读取单个句子并可以输出对应翻译句子的系统。之前提出的许多神经网络机器翻译都属于 encoder-decoder机制,其基本结构如图3所示。
在这里插入图片描述
Encoder-Decoder 方法使用了两个 RNN 来完成机器翻译(Statistical Machine Translation,SMT)工作:第一个 RNN 把一串符号序列编码成一个固定长度的向量,这就是编码器的工作;第二个 RNN 把这个固定长
度的向量解码成目标符号序列然后输出,担任的是解码器的工作。因此可知,encoder-decoder 机制就是将输入序列先利用编码转化成一个包含有特定信息的向量,通过不同语言对应的语义编码,再将其利用解码器将向量翻译为输出信息。
例如输入英文“I eat an apple”通过编解码器翻译后,便可以得到中文的“我吃了一个苹果”。但是encoder-decoder方法有个明显缺陷就是,它的编码解码都是对应定长的句子,所以当输入不同长度的句子时,这个方法的性能往往会降低很多;此外还有针对不同语言、不同情况的需要选择不同的编解码器,所以不具有普遍适用性。因此Bahdanau等首次将注意力机制 attention 应用到机器翻译的任务中去,实现了翻译和对齐同时进行,解决了语句长度不同的问题。文献[28]中提出的模型不再是将输入都编码为定长的向量,而是将输入都转换为向量,然后在解码过程中根据注意力机制自适应地选择向量的子集,避免了将输入句子压缩,保留完整句子信息。通过实验验证,基于注意力机制的对齐和翻译联合学习的方法比传统的encoder-decoder模型在翻译性能上有显著的提高。文献的基本模型如图4所示。
在这里插入图片描述
由上面的举例可知,当输入长度不同的句子时,编码只需把所有输入转换为向量,而解码则自适应地选择向量长度,所以可以让模型更好地处理不同长度的句子。基于注意力机制的encoder-decoder在语言翻译中发展更为迅速,文献[29-30]更是将注意力机制与encoder-decoder结合后如何扩展描述得
更为详尽,对之后的自然语言处理的应用起了很大的推动作用。

1. 3 数据预测领域的应用

在各行各业的数据分析中,数据预测也是其中一项重要工作。之前传统神经网络预测数据常使用RNN进行预测,缺点:但是这种方法同样因为训练层数多和长距离的序列时常存在梯度爆炸和梯度消失等问题,因此一种结合了注意力机制想 法 的 RNN 变 体 出 现 —— 长 短 期 记 忆 人 工 神 经 网 络(LSTM)。LSTM最初是由Hochreiter和Schmidhuber在1997年提出的,在近期 Alex Graves 进行了改良和推广,使之更加灵活地应用于多种场合。
LSTM 本质上仍然是一种 RNN 的递归神经网络结构[35],但它能够解决RNN中存在的梯度消失问题,是因为它有着独特设计的“门”结构(输入门、遗忘门和输出门),其结构如图5所示。
在这里插入图片描述
LSTM模型结构将细胞单元进行了扩充,其中遗忘门就是决定“忘记”哪些无用的信息;而记忆门则是决定保留哪些重要信息,从而进行传递;输出门则是将遗忘门和记忆门的细胞状态进行整合,然后输出至下一个细胞单元[35]
。因此 LSTM模型就是 RNN 结合了注意力机制的变体[36]。它将细胞单元进行更改,新增“遗忘门”“记忆门”和“输出门”就是为了对长序列进行挑选,然后将较长的序列转化为包含有重要信息的短序列,将数据进行传递,有效解决了传统算法预测数据时常遇到的问题,并得到广泛的应用。

注意力机制从一开始就因其独特的思想深受广泛学者的喜爱,通过实验研究将其进行拓展应用于多种情景。注意力机制与传统算法的简单结合就可以提高系统的性能,因此注意力机制的提出对深度学习许多结构都有着性能提高的作用。而在2017年,Vaswani提出了Transformer模型[37],更是将注意力机制推向了诸多应用方向的热潮。

注意力机制当前研究

由上文可知,注意力机制早在 20 世纪 90 年代就已经提出,Google mind团队将注意力机制与RNN结合进行图像分类也取得显著成果。此外 Bahdanau 等将注意力机制运用在自然语言处理中,大大提高了翻译精度,也让注意力机制得到不断发展,应用于各大领域。分析比较注意力机制的各个应用领域,人们也一直以提高效率且克服卷积神经网络(Convolutional Neural Network,CNN)、RNN 等算法的局限性为目的进行研究,尝试提出新的算法结构。而 Vaswani 等在2017年发表的“Attention is all you need”介绍了以self-attention为基本单元的Transformer模型[37]使得注意力机制得到真正的成功运用。
例如近期 Google 团队利用 transformer 代替了 Seq2Seq 的问题,再用自注意力代替了 LSTM,在翻译等任务中取得了更好的成绩。文献[37]中介绍的 transformer 的整体架构如图 6所示。
在这里插入图片描述
由图6可知,transformer是由左边的编码器和右边的解码器组成。编码器负责把输入序列进行位置编码后映射为隐藏层,然后解码器再把隐藏层映射为输出序列。编码器包含 4 个部分,编码器的第一个位置是将输入的数据转换为向量,通过位置编码后,将其输入到多头注意力。这里的位置编码就是记录序列数据之间顺序的相关性,相比较上文提到的RNN顺序输入transformer方法不需要将数据一一输入,可以直接并行输入,并存储好数据之间的位置关系,大大提高了计算速度,减少了存储空间。接下来第二部分的多头注意力是为了获取数据内部之间的相关性,也弥补了CNN方法中数据缺少关联性的缺点。第三部分是残差连接和标准化,在映射关系转换过程中,往往会存在计算产生的残差,而残差的存在会因为网络层数的增加,模型学习的映射关系越来越不精确,因此要通过第三部分残差连接和层标准化,有效提高模型的学习能力,并使数据更加标准,加快收敛,这也是一种优化技巧。最后再通过由两个全连接层组成的前向反馈层,将学习得到的数据进行非线性映射,即加大强的部分,减小弱的部分,最后再标准化,这样通过编码器得到的学习结果更加精准和具有代表性。
根据 transformer 结构可知,解码器相对比编码器是在第二部分多了一个掩码多头注意力。这个的目的是因为前面编码器训练时数据的长度是不一样的,而这里的解码器将这些数据中最大的长度作为计算单元进行训练,并且只需要之前数据对当前的影响,而不需要未来数据对它的影响,因此将后面未来预测的数据利用函数掩码掉,从而不参与训练。之后的两项与解码器中相同,最后再通过一次线性化和softmax层完成输出,这里的线性化和softmax层是将向量转换为输出所要求的类型,如机器翻译中,就会将向量根据概率大小选出合适的词语,从而完成翻译。
transformer通过注意力机制、编码解码、残差前馈网络和线性化等解决了许多问题。如解决了传统神经网络算法训练慢的缺陷,是因为它根据 CNN 中的卷积思想,结合了多头注意力,实现并行计算,大大加快了计算速度,并在多项语言翻译任务中取得较好的结果;而位置编码又使得 transformer 具
备了CNN欠缺而RNN擅长的能力,将序列数据间的关系可以存储下来,在自然语言处理的上下文语义等应用方面得到了广泛的应用。但是同transformer 也有其他缺陷,如只能让长序列得到高效处理,短序列的效率并没有得到提高;针对长序列,训练这些模型的成本就会很高。针对 transformer 中还存在的一些问题,Kitaev等将其中的一些结构进行优化,提出了新的模型reformer。
针对 transformer 中一些缺陷,reformer 对其进行了改进。首先是将transformer中的点积注意力替换为局部位置敏感哈希注意力。transformer 中的多头注意力是并行计算并叠加,它计算两个数据点之间的attention score需要将多个自注意力连起来因此导致计算量很大,所占内存较多。选了用局部敏感哈希注意力,代替多头注意力。局部敏感哈希的基本思想如图7所示。
在这里插入图片描述
由图 7 可知,attention score 分数接近的数据将会映射到同一个空间,其余相关性不大的数据则是被映射到其余空间,并且按照 attention score 分数排序,这便利了数据的查找也减少了计算量。因此将计算量复杂度大大降低,从而提高了对长序列训练的效率。
此外,在训练网络时为了反向传播计算,往往每一层的激活值都要被记录下来,所以层数越多,所占内存也越多。因此reformer便提出了用可逆残差取代标准残差层。
transformer 是一个具有梯度下降的多层模型,为了之后的反向传播计算,需要保存每一层的激活值,而 reformer利用可逆残差方法减少内存占用。在反向传播时按需计算每个层的激活值,而不需要把它们都存在内存中,在网络中的最后一层激活值可以恢复中间任何一层的激活值。可逆残差层如图8所示。
在这里插入图片描述
由图8可知:图8(a)是标准残差层,每一层的激活用于更新下一层的输入;图 8(b)指的是可逆网络中,要保持两组都激活,所以每层只更新其中一组;图8(c)指的是反向传播时可以恢复中间所有值的激活值。对比图 8(b)和图 8(c)可以看出,reformer的可逆残差层分为两组激活,一个是标准的残差,逐层更新到下一层,还有一组是只记录对第一层的变化,因此
在反向时很容易相减得到每层的激活值。这样训练网络时就不会因为激活值占大量的内存而局限了许多应用。
此外 reformer 还使用了一个小技巧来减少内存的使用,就是将比较厚的层进行分块预处理。Reformer模型中一些改
进的结构都是为了训练更长的序列,并且减少内存占用从而节省成本。Reformer经过实验验证,在使用比transformer实验更长的序列数据、得到相同的性能情况下,占用更少的内存并且更高效率地完成训练,因此 reformer 为序列扩展提供了更多的可能,同时内存使用的减少也使得实验成本更低。

现在深度学习领域中,注意力机制作为 RNN 的代替方法,还是一直处于核心位置,而基于注意力机制的transformer和 改 进 版 的 reformer 也 将 训 练 的 性 能 推 向 一 个 更 高 点 。transformer 和 reformer 在效率和占用内存上实现了很大的改进,现已成为各个领域的研究重点。无独有偶,近期一些研究者又提出 transformer 其实是 Hopfield 网络在连续状态下的一种特殊情况,因此基于注意力机制的这些算法与早在20世纪提出的Hopfield网络的原理相似。

相关文章:

  • 数据结构c语言版第二版(严蔚敏)第三章笔记
  • 羊了个羊,但是Python简(li)单(pu)版
  • 【软件测试】测试用例的设计方法
  • 二叉树的遍历问题
  • FPGA/HDL 人员开发利器-TerosHDL(开源 IDE)
  • 《谁动了我的奶酪》阅读笔记
  • 2023秋招--腾讯天美--游戏客户端--一面面经
  • 跨模态学习能力再升级,EasyNLP电商文图检索效果刷新SOTA
  • JavaScript 中什么时候使用 Map 更合适(二)
  • 【统计学习|书籍阅读】第五章 决策树 p55-p75
  • 【GlobalMapper精品教程】009:DSM过滤植被和房屋并生成等高线案例教程
  • web前端期末大作业:我的家乡广东(html+css布局)div制作
  • 【C进阶】——内存操作函数memcpy、memmove、memcmp、memset详解及其模拟实现
  • 【DNS服务器的配置】实操
  • mysql索引下推与回表
  • 【技术性】Search知识
  • 03Go 类型总结
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • CentOS6 编译安装 redis-3.2.3
  • ES6--对象的扩展
  • Fabric架构演变之路
  • IDEA 插件开发入门教程
  • java 多线程基础, 我觉得还是有必要看看的
  • js正则,这点儿就够用了
  • Laravel核心解读--Facades
  • maya建模与骨骼动画快速实现人工鱼
  • React系列之 Redux 架构模式
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 从零开始的无人驾驶 1
  • 从零开始学习部署
  • 复杂数据处理
  • 利用jquery编写加法运算验证码
  • 聊聊hikari连接池的leakDetectionThreshold
  • 判断客户端类型,Android,iOS,PC
  • 前端技术周刊 2019-01-14:客户端存储
  • 学习使用ExpressJS 4.0中的新Router
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 第二十章:异步和文件I/O.(二十三)
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • #HarmonyOS:Web组件的使用
  • #Linux(make工具和makefile文件以及makefile语法)
  • #图像处理
  • $(function(){})与(function($){....})(jQuery)的区别
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (二)fiber的基本认识
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (原創) 物件導向與老子思想 (OO)
  • (转)拼包函数及网络封包的异常处理(含代码)
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选