1.encoder-decoder

在提attention之前,我们先回顾一下encoder-decoder机制。
encoder-decoder在NLP领域的使用会比较广泛,按照我个人的理解,encoder-decoder本质上是一种思维方式,一种框架。encoder环节,将现实输入环节进行抽象编码转化为一个数学问题。decoder环节,则是求解该数学问题,并转化为现实世界的答案。

而输入环节输入的不同,则代表了不同的应用场景。
如果输入是中文句子,输出是英文翻译,则是典型的机器翻译问题,encoder-decoder框架在该领域的应用也最为深入。
如果输入是问题,输出是答案,那这就是典型的对话系统或者自动客服服务系统。
如果输入是一篇文章,输出是一段文字总结,那这就是文本摘要系统。
如果输入是一张图片,输出是对该图片的描述,那这就是看图说话。
如果输入是一段语音,输出是语音对应的句子,那这就是语音识别。

等等,还有许多场景。

2.encoder-decoder

相信大家都见过下面这张图,为了避免版权问题,自己用画图软件重新画了一遍,也更加清晰。

上面这张图就比较简单清楚地描述了encoder-decoder框架的过程。比如对于一个机器翻译系统,输入x1, x2, x3, x4是一个句子,先对其进行编码,会得到一个中间语义向量c,然后在decoder端解码,得到结果y1, y2, y3。而其中的编码器、解码器的网络结构,可以使用传统的像rnn, lstm等结构。

不难看出来,encoder-decoder框架的优点比较明显:
1.可以高效处理变长序列问题。
2.如果输入是像图片这种维度很高的数据,可以达到降维的目的。
3.学习方式为end-to-end。

3.为什么要attention

上面的encoder-decoder框架,有一个缺点也很明显:
encoder把所有的输入,最后边变成了一个统一的特征向量C,再去decoder解码。很明显,系统的性能瓶颈就在C这里,要求C不能包含原始输入的所有信息,最后的效果就要打折扣。比如说机器翻译问题,如果要翻译的句子或者文章很长,C的表达能力,无法涵盖原来句子所有信息,那么翻译精度会大打折扣。
如果我们模仿人脑的思考问题方式,人的大脑在工作的时候,其实是有一定注意力区域的。比如我们观察某一张图片,很容易找到一张图片中最显著的位置。浏览某个网页的时候,也是习惯性看左上方的位置,所以搜索引擎的设计也是搜索结果放在左上方方便查看。因此,我们同样可以将这一思维过程运行到神经网络中来。
具体来说,attention机制通过在每个时间输入不同的中间向量C,来模拟不同时间注意力不同的问题。举个翻译的例子:我们要翻译knowledge is power这句话,知识就是力量。对应的知识这个结果,只需将注意力放在源句中knowledge的部分,is power两个词的贡献度很小。这样,当我们decoder去解码预测最终结果的时候,不仅可以看到原句encoder完毕的所有信息,而且可以不仅仅依赖于原来的定长向量C, 从而提高整个翻译的精度。

用一张图来表示与encoder-decoder框架的区别,如下所示。

从上面的结构可以看出,attention的核心改变,是将之前的定长向量C,变成了不同时刻输入不同向量C1, C2, C3。所以,attention的核心也就变成了如果去计算向量C1, C2, C3。

4.attention注意力计算

为了让计算过程更为清晰明了,我们将encoder, decoder过程中的隐变量展开,再画两幅图:


上面图为encoder-decoder框架,下面图为attention机制。
对于传统的encoder-decoder框架,解码器decode某一时间的隐状态输出,只与上一时间的隐状态输出有关。而对于attention来讲,还与当前时刻的上下文向量C有关系。C是通过encoder中所有时间隐藏状态的加权平均得到的。而加权使用的权值,是根据编码时刻的隐含状态与当前解码时刻的隐含状态相似度计算出来。这样在当前时刻解码,网络就能将“注意力”尽可能多的集中于对应编码时刻的隐含状态。
具体的计算逻辑如下:
eji=score(hiin,hjout)αji=eji∑iejicj=∑iαjihiinhjout+1=f(hjout,cj)\begin{aligned} e_{ji} &= score(h_i^{in}, h_j^{out}) \\ \alpha_{ji} &= \frac{e_{ji}}{\sum_i e_{ji}} \\ c_j &= \sum_i \alpha_{ji} h_i^{in} \\ h_j^{out+1} &= f(h_j^{out}, c_j) \end{aligned} eji​αji​cj​hjout+1​​=score(hiin​,hjout​)=∑i​eji​eji​​=i∑​αji​hiin​=f(hjout​,cj​)​

其中,ejie_{ji}eji​是未归一化的attention score,即表示对encode端隐藏状态应该施加注意力的程度,cjc_jcj​是当前时刻的中间向量,score表示具体的相似度计算方法。

5.相似度计算方法

对于score的计算,常用的方式有如下几种
sji=hjThisji=hjTWhisji=W2tanh(W1[hj;hi])sji=σ(W2tanh(W1[hj;hi]+b1)+b2)\begin{aligned} s_{ji} &= h_j^T h_i \\ s_{ji} & = h_j^T W h_i \\ s_{ji} & = W_2 tanh(W_1[h_j; h_i]) \\ s_{ji} & = \sigma (W_2 tanh(W_1[h_j; h_i] + b_1) + b_2) \end{aligned} sji​sji​sji​sji​​=hjT​hi​=hjT​Whi​=W2​tanh(W1​[hj​;hi​])=σ(W2​tanh(W1​[hj​;hi​]+b1​)+b2​)​

其中,第一,二种计算方式为点乘,又名luong’s multiplicative style。第三种计算方式为相加,又名Bahdanau’s additive style。第四种计算方式为MLP。

参考文献
1.https://zhuanlan.zhihu.com/p/28054589 完全图解RNN、RNN变体、Seq2Seq、Attention机制

encoder, decoder, attention机制理解相关推荐

  1. Attention机制理解笔记(空间注意力+通道注意力+CBAM+BAM)

    Attention机制理解笔记 声明 Attention分类(主要SA和CA) spitial attention channel attention SA + CA(spitial attentio ...

  2. Attention 机制

    SENet 详解 https://blog.csdn.net/xjz18298268521/article/details/79078551 图解 1.基础网络结构 2.各阶段计算方式公式  3.结构 ...

  3. 系统学习NLP(二十三)--浅谈Attention机制的理解

    转自:https://zhuanlan.zhihu.com/p/35571412 Attentin机制的发家史 Attention机制最早是应用于图像领域的,九几年就被提出来的思想.随着谷歌大佬的一波 ...

  4. 深入理解attention机制

    深入理解attention机制 1. 前言 2. attention机制的产生 3. attention机制的发展 4. attention机制的原理 5. attention的应用 参考文献 1. ...

  5. 理解Attention机制原理及模型

    目前采用编码器-解码器 (Encode-Decode) 结构的模型非常热门,是因为它在许多领域较其他的传统模型方法都取得了更好的结果.这种结构的模型通常将输入序列编码成一个固定长度的向量表示,对于长度 ...

  6. 【机器学习】Attention机制的一些整理与理解

    写在前面 由于最近需要用到Attention机制,看了一些相关的论文以及介绍等,所以打算将其整理一下.关于Attention机制的一些背景知识就不做过多介绍了,做NLP研究的同学一般对其不会陌生.不熟 ...

  7. 干货|理解attention机制本质及self-attention

    点击上方"小白学视觉",选择加"星标"或"置顶"重磅干货,第一时间送达 上一篇,我们讲述了attention的知识,这篇接上篇,更加深入的理 ...

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

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

  9. encoder decoder 模型理解

    encoder decoder 模型是比较难理解的,理解这个模型需要清楚lstm 的整个源码细节,坦率的说这个模型我看了近十天,不敢说完全明白. 我把细胞的有丝分裂的图片放在开头,我的直觉细胞的有丝分 ...

  10. 引读attention机制--个人理解

    文章目录 1. 意会--大脑注意到某物 2. 言传--分解注意过程 2.1 言传的准则 2.2 数据形式 和 大脑潜意识动作 2.3 观察分解例子 2.4 注意过程言传化 3. 公式化--注意机制 3 ...

最新文章

  1. 做好过程质量保证QA工作的几个关键方面
  2. SQL SERVER2000中订阅与发布的具体操作
  3. linux安装php pgsql,Linux下apache php+phppgadmin+postgresql安装配置
  4. poj3714 最近点对
  5. 计算机斐波那流程图,循环结构——斐波那契数列.DOC
  6. 你真的确定Spring AOP的执行顺序吗
  7. 转:神奇的Fastcgi_Finish_Request
  8. node项目打包如何隐藏html后缀,详解webpack打包nodejs项目(前端代码)
  9. 求最长XX序列的两种方法
  10. 详细教程:编译Linux最新内核
  11. springboot - 应用实践(3)springboot的核心
  12. AndroidStudio使用opencv,android开发项目实例
  13. 声纹识别之Alize入门教程(四):matlab代码读取Spro工具提取的mfcc特征
  14. MAX30102学习笔记(上)
  15. 7位白手起家的亿万富豪的7大独特做事准则 凤凰科技02-0411:46 原标题:7位白手起家的亿万富豪的7大独特做事准则 那些白手起家的亿万富翁企业家是否有一些独特的思维方式和做事准则,从而让自己获得
  16. js判断设备是ios还是安卓,以及微信端
  17. Android入门学习
  18. js如何实现侧边广告_如何用稳定器轻松实现低成本的商业级广告片制作?
  19. Python 三维动画生成 绘制螺旋线
  20. linux 忽略错误信息,linux – 由于文件模式错误而忽略/etc/logrotate.conf

热门文章

  1. SD-WAN+物联网:让城市更智慧
  2. memcached 快速入门
  3. backbond Model实现
  4. 解决Windows Vista/7/8/8.1 远程桌面连接XP或2003缓慢的问题
  5. Url传值的Get method and Post method
  6. 学用ASP.NET2.0
  7. jstack分析CPU高的问题
  8. tomcat以debug模式启动
  9. webpack手动构建vue和vue-cli构建使用 px2rem-loader ,全局自动转换px单位,让自适应来的更简单点!...
  10. Storm入门(四)WordCount示例