https://www.toutiao.com/i6716536091681227267/

本篇介绍在NLP中各项任务及模型中引入相当广泛的Attention机制。在Transformer中,最重要的特点也是Attention。首先详细介绍其由来,然后具体介绍了其编解码结构的引入和原理,最后总结了Attention机制的本质。

作者&编辑 | 小Dream哥

1 注意力机制的由来

在深度学习领域,注意力机制模仿的是人类认知的过程。当人看到如下“美女伤心流泪”图时,细细想一下,人在做出图片中美女是在伤心流泪的过程,应该是先整体扫描该图片;然后将视觉注意力集中到美女的脸部;集中到脸部之后,再进一步将视觉注意力集中到眼睛部位。最后发现了眼泪,得出美女是在伤心流泪的结论。

人类在对信息进行处理的过程中,注意力不是平均分散的,而是有重点的分布。受此启发,做计算机视觉的朋友,开始在视觉处理过程中加入注意力机制(Attention)。随后,做自然语言处理的朋友们,也开始引入这个机制。在NLP的很多任务中,加入注意力机制后,都取得了非常好的效果。

那么,在NLP中,Attention机制是什么呢?从直觉上来说,与人类的注意力分配过程类似,就是在信息处理过程中,对不同的内容分配不同的注意力权重。下面我们详细看看,在自然语言处理中,注意力机制是怎么实现的。

2 seq2seq结构及其中的Attention

如上图所示,是标准的编解码(seq2seq)机制的结构图,在机器翻译、生成式聊天机器人、文本摘要等任务中均有应用。其处理流程是通过编码器对输入序列进行编码,生成一个中间的语义编码向量C,然后在解码器中,对语义编码向量C进行解码,得到想要的输出。例如,在中英文翻译的任务中,编码器的输入是中文序列,解码器的输出就是翻译出来的英文序列。

可以看出,这个结构很"干净",对于解码器来说,在解码出y1,y2,y3时,语义编码向量均是固定的。我们来分析下这样是否合理。

假设输入的是"小明/喜欢/小红",则翻译结果应该是"XiaoMing likes XiaoHong"。根据上述架构,在解码得到"XiaoMing","likes"," XiaoHong"时,引入的语义编码向量是相同的,也就是"小明","喜欢","小红"在翻译时对得到"XiaoMing","likes"," XiaoHong"的作用是相同的。这显然不合理,在解码得到"XiaoMing"时,"小明"的作用应该最大才对。

鉴于此,机智的NLP研究者们,认为应该在编解码器之间加入一种对齐机制,也就是在解码"XiaoMing"时应该对齐到"小明"。在《Neural Machine Translation By Jointly Learning To Align And Translate》中首次将这种对齐机制引入到机器翻译中。我们来看看,这是怎样的一种对齐机制。

我们先回顾一下刚才的编解码结构,其语义编码向量和解码器状态,通过如下的公式得到:

通常在解码时语义编码向量是固定的。若要实现对齐机制,在解码时语义编码向量应该随着输入动态的变化。鉴于此,《Neural Machine Translation By Jointly Learning To Align And Translate》提出来一种对齐机制,也就是Attention机制。

如上图示,论文中采用双向RNN来进行语义的编码,这不是重点,我们先不关注。其对齐机制整体思想是:编码时,记下来每一个时刻的RNN编码输出(h1,h2,h3,..hn);解码时,根据前一时刻的解码状态,即yi-1,计算出来一组权重(a1,a2,..an),这组权重决定了在当前的解码时刻,(h1,h2,h3,..hn)分别对解码的贡献。这样就实现了,编解码的对齐。

下面我们用数学语言描述一下上面的过程。

首先,进行编码计算(h1,h2,..hn),i时刻的编码状态计算公式如下:

然后,开始解码,加入此时在解码的i时刻,则需要计算i时刻的编码向量Ci,通过如下的公式计算:

aij是对不同时刻的编码状态取的权重值。由此可见,i时刻的语义编码向量由不同时刻的编码状态加权求和得到。

下面看看,如何取得权重向量a

权重向量ai通过加入解码器前一个时刻的状态进行计算得到。eij表示,在计算Ci时,hj的绝对权重。通过对其使用softmax函数,得到aij。aij就是在计算Ci时,hj编码状态的权重值。

得到权重向量ai及语义编码向量Ci后,就可以计算当前时刻的解码状态了:

这就是编解码机制中注意力机制的基本内容了,本质上就是为了实现编解码之间的对齐,在解码时根据前一时刻的解码状态,获取不同时刻编码状态的权重值并加权求和,进而获得该时刻语义编码向量。

那么,抽离编解码机制,Attention机制的本质是什么呢?我们下面来看看。

3 Attention机制的本质

我们回想一下,引入Attention机制的本意,是为了在信息处理的时候,恰当的分配好”注意力“资源。那么,要分配好注意力资源,就需要给每个资源以不同的权重,Attention机制就是计算权重的过程。

如下图所示,

如上图所示,我们由资源Value,需要根据当前系统的其他状态Key和Querry来计算权重用以分配资源Value。

也就是,可以用如下的数学公式来描述Attention机制:

F函数可以有很多,在transformer中用的是点积。

总结

Transformer中最重要的特点就是引入了Attention,其对于Transformer性能的重要性我们下一篇介绍。总的来说,Adttention机制是一种对齐机制,它通过对系统当前的某些状态进行评估,来对系统资源进行权重分配,实现对齐,具体可以看机器翻译的例子。

「NLP」 聊聊NLP中的attention机制相关推荐

  1. 【NLP】 聊聊NLP中的attention机制

    本篇介绍在NLP中各项任务及模型中引入相当广泛的Attention机制.在Transformer中,最重要的特点也是Attention.首先详细介绍其由来,然后具体介绍了其编解码结构的引入和原理,最后 ...

  2. docker运行linux桌面,「Linux」- 在 Docker 中,运行桌面应用(以向日葵远程客户端为例)...

    「Linux」- 在 Docker 中,运行桌面应用(以向日葵远程客户端为例) 更新日期:2021年01月15日 @IGNORECHANGE @WIP 问题描述 我们使用 Debian 发行版,但是某 ...

  3. 理解LSTM/RNN中的Attention机制

    转自:http://www.jeyzhang.com/understand-attention-in-rnn.html,感谢分享! 导读 目前采用编码器-解码器 (Encode-Decode) 结构的 ...

  4. 通道注意力机制 cnn keras_【CV中的Attention机制】简单而有效的CBAM模块

    前言: CBAM模块由于其使用的广泛性以及易于集成得到很多应用.目前cv领域中的attention机制也是在2019年论文中非常火.这篇cbam虽然是在2018年提出的,但是其影响力比较深远,在很多领 ...

  5. 一文深入浅出cv中的Attention机制

    在深度学习领域中,存在很多专业名词,第一次看的时候总会很懵逼-后面慢慢看得时候才会有那么感觉,但是总觉得差点意思.今天我们要说的一个专业名词,就叫做Attention机制! 1. 直观理解Attent ...

  6. 深入理解CV中的Attention机制之SE模块

    CV中的Attention机制汇总(一):SE模块 Squeeze-and-Excitation Networks 论文链接:Squeeze-and-Excitation Networks 1. 摘要 ...

  7. CV中的attention机制之(cSE,sSE,scSE)

    CV中的attention机制之(cSE,sSE,scSE) 论文 代码 SE模块的博文链接 提出scSE模块论文的全称是:<Concurrent Spatial and Channel 'Sq ...

  8. CV中的Attention机制总结

    CV中的Attention机制 注意力机制 CV中的注意力机制 卷积神经网络中常用的Attention 视觉注意力机制在分类网络中的应用 SE-Net(CVPR 2017) ECA-Net(CVPR ...

  9. 【从零开始学习YOLOv3】7. 教你在目标检测中添加Attention机制

    前言:[从零开始学习YOLOv3]系列越写越多,本来安排的内容比较少,但是在阅读代码的过程中慢慢发掘了一些新的亮点,所以不断加入到这个系列中.之前都在读YOLOv3中的代码,已经学习了cfg文件.模型 ...

最新文章

  1. __new__ __init__区别
  2. 美国的工资、俄罗斯的妻子、英国的房子、中国的饮食
  3. 6.5 不同类型的数据集
  4. 【机器学习】中国大学慕课《机器学习》课后习题(二)(回归)
  5. 【原】关于ActiveX插件小项目总结
  6. 小程序制作五星点评(默认五星)
  7. node模块函数图解
  8. python 科学计算机_在这个免费的虚拟俱乐部中学习计算机科学和Python的基础知识
  9. Thymeleaf 模板布局三种区别
  10. VMware虚拟机中Linux系统如何修改IP地址
  11. css调logo大小,B2主题logo设置篇(尺寸,设置,闪光特效的设置方法)
  12. 基于SSM的教师本科教学质量评价管理系统
  13. SpringBoot数据库连接池常用配置(mysql+sqlServer)
  14. 数据共享,如何拆掉那些“部门的墙”?by 傅一平
  15. Python下selenium的get()方法大量时间超时报错TimeOut
  16. problem 1148
  17. 滚烫出炉:06中国IT十大财经人物
  18. Python的七大就业方向,小白适合哪个方向?学了Python能干什么?
  19. C#: 解决Fody is only supported on MSBuild 16 and above
  20. 未来 新媒体互动艺术 媒介与形式

热门文章

  1. win10下pycharm安装opencv tensorflow anaconda
  2. HSV的数据结构各分量H S V的直观理解其实就是对应图片位置的的像素一一对应的矩阵表示
  3. IoC容器总结与简单模拟
  4. win7隐藏linux分区工具,传授win7系统用组策略把分区隐藏掉的处理对策
  5. 超速电眼:全时成像芯片重塑机器视觉
  6. pytorch神经网络之卷积层与全连接层参数的设置
  7. 我自己可以挖矿了!使用Ethereum C++客户端Aleth建一个私有网络,并使用Remix部署一个智能合约
  8. spring整合mybatis(入门级简单教程2)
  9. 独家 | 一文带你熟悉贝叶斯统计
  10. 你的房东可能正用AI筛查你的犯罪记录,决定要不要租房给你