前文传送门:

在上一次面试失利后,我回来仔细研究了一下Attention机制,研究完我不禁感悟,这机制真的厉害啊!因为我之前面试被问到的Encoder - Decoder框架中有个瓶颈是编码的结果以固定长度的中间向量表示,这导致较长的序列编码后很多信息被稀释了,导致解码时效果不佳。当时只记得有个Attention,但是不了解他的原理,所以上次面试没过:从零开始学自然语言处理(25)—— 通用的Encoder-Decoder模型框架

NLP中的Attention机制是在论文《NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE》被提出的,有兴趣的朋友可以去阅读论文:https://arxiv.org/pdf/1409.0473.pdf

上次面试问到的Encoder - Decoder框架如下图所示:

而加入Attention机制之后,Encoder - Decoder框架可以改为如下所示:

大家应该注意到上下两张图的主要区别在于中间向量C从固定不变的一个变成了不同的多个,在解码每个序列字符串时使用不同的Ci。

例如我们在翻译 “Through the woods, we reached the bank of the river.” 时,我们会翻译成 “穿过树林,我们到达了河岸。”,当我们在翻译 “bank” 这个词时,应该将注意力集中在 “bank ”上,同时也应该考虑上下文,例如“river”,这样我们才会将“bank”翻译为“河岸”,而不是“银行”,这符合我们人类的认知,又例如,我们翻译“woods”时,会重点关注“woods”和“through”等。所以我们每次在翻译(解码)一个词时,重点关注的内容是不同的,那如何表示在Decoder阶段解码某个输出(翻译某个词)时对原始输入关注的重点不同呢?

这个问题在上述的论文中得到了解决,论文提出了以下结构的模型:

这里使用了双层的RNN结构,关于RNN和双层RNN可以参考之前的文章:

首先,在Encoder阶段,输入的是 X 序列,X=(X1,X2,X3,...,XT),经过一个双向RNN结构编码,得到隐藏层每个单元的向量hi ,然后使用如下的公式计算得到解码不同单词时用到的Ci:

大家应该发现了,这里的C不再是传统Encoder-Decoder框架中那个固定的C了,而是根据解码不同 y 有着不同的Ci !理解这一点就理解了Attention的精髓了!

你可能会问,这里的αij是如何计算的?这里的 αij 类似权重的意思,如上图所示,在解码yt时,会综合考虑αt1,αt2,...,αtT作为对不同输入 Xi 的关注程度不同,αij计算公式如下:

所以αij其实是 eij经过softmax之后的结果,那问题变为eij是如何计算的了!eij的计算公式如下:

这里的a是一个对齐模型(Alignment model),实际上是一个前馈神经网络,这里的“对齐”你可以理解为是一种相似度的计算,计算的是当前解码内容的上一个隐藏状态s(i-1)和当前hj的关系,相当于将每个编码输入和当前输出进行匹配,从而得到权重。这样就完成了对Encoder-Decoder框架加入Attention机制,解决了一开始的问题!

这个Attention面试问题也就迎刃而解了~

扫码下图关注我们不会让你失望!

python attention机制_从零开始学Python自然语言处理(26)—— 强大的Attention机制...相关推荐

  1. python语言原理_从零开始学Python自然语言处理(十三)——CBOW原理详解

    在之前的连载中我们用代码实现了word2vec,但并没有详细讲解CBOW的原理,本文手把手带你走入CBOW的算法原理. word2vec是一种将word转为向量的方法,其包含两种算法,分别是skip- ...

  2. python 空数组_从零开始学python之numpy

    Numpy是python中一个常用的库,其支持大量的维度数据与矩阵运算,也拥有针对数据运算的数学函数库,用于独特的数组存储方式及对应的处理方法.一般用以下方式导入: import numpy as n ...

  3. python集合运算_从零开始学Python - 第014课:常用数据结构之集合

    在学习了列表和元组之后,我们再来学习一种容器型的数据类型,它的名字叫集合(set).说到集合这个词大家一定不会陌生,在数学课本上就有这个概念.通常我们对集合的定义是"把一定范围的.确定的.可 ...

  4. 学python处理数据结构_从零开始学Python - 第009课:常用数据结构之字符串

    第二次世界大战促使了现代电子计算机的诞生,世界上的第一台通用电子计算机叫ENIAC(电子数值积分计算机),诞生于美国的宾夕法尼亚大学,占地167平米,重量27吨,每秒钟大约能够完成约5000次浮点运算 ...

  5. python 减法函数_从零开始学Python(五):常用函数语句和运算符

    上一章我们简单的了解了一下python的代码缩进,基础的输出语句,多行语句和单行多行注释,今天我们来了解下python的变量与基本数据类型,让我们在以后的编程中,对各种类型了如指掌! 运算符 1.算术 ...

  6. python ai 教学_【Python AI教学】从零开始学Python AI开发系列01

    原标题:[Python AI教学]从零开始学Python AI开发系列01 欢迎开启新的旅程. 从2016年开始,AI人工智能的热潮扑面而来.而在机器学习和深度学习领域,Python位于最受欢迎的编程 ...

  7. 跟我从零开始学python之一_从零开始学 Python 之运算符

    从零开始学 Python 之运算符 前言 大家好,这里是「痴海」从零开始学习 Python 系列教程.此文首发于「痴海」公众号,欢迎大家去关注.学习一门语言最好的办法,就是教懂别人.在这公众号,我会从 ...

  8. python实现素数筛选法_从零开始学Python系列-第6讲:循环结构

    应用场景 我们在写程序的时候,一定会遇到需要重复执行某条或某些指令的场景.例如用程序控制机器人踢足球,如果机器人持球而且还没有进入射门范围,那么我们就要一直发出让机器人向球门方向移动的指令.在这个场景 ...

  9. python37从零开始学_从零开始学Python【37】--朴素贝叶斯模型(理论部分)

    [知识铺垫] 在介绍如何使用贝叶斯概率公式计算后验概率之前,先回顾一下概率论与数理统计中的条件概率和全概率公式: 如上等式为条件概率的计算公式,表示在已知事件A的情况下事件B发生的概率,其中P(AB) ...

最新文章

  1. html5边框有圆弧,CSS圆角有立体感的DIV边框
  2. CF、FM、DSSM、DeepFM等这些推荐模型的原理以及使用场景是什么?
  3. 麦格纳软件公司绩效考核信息化管理解决方案
  4. ClickHouse 在广告系统场景中的实践
  5. 蓝桥杯 友好数 数论
  6. 利用composer搭建PHP框架(五.自动加载)
  7. Linux系统下init进程的前世今生
  8. 适应网络伦理关系要求的新的伦理观
  9. 基于机器学习的回归拟合、详细总结
  10. Touch Panel 调试技巧 01
  11. Android渐变背景色
  12. C#对数据库的各种操作
  13. leetcode 506. Relative Ranks(python)
  14. 物联网4G工业路由器在森林烟火监测的应用
  15. Android逆向系列(一):初探Android逆向
  16. CTF MISC解题思路BUUCTF MISC1-8刷题
  17. @NotBlank的使用以及效果
  18. php tps,tps是啥
  19. Sox(Sound eXchange)一款强大的音频处理工具格式转化、切割音频、合并音频等
  20. 【C++从入门到放弃】C++编译生成动态链接库*.so及如何调用*.so

热门文章

  1. 全面讲解OpenStack技术知识
  2. ServiceComb中的数据最终一致性方案
  3. linux coreutils升级,Linux命令01--Coreutils软件包01--认识coreutils
  4. linux 环境搭建 Sentinel 控制台
  5. 实战01_SSM整合ActiveMQ支持多种类型消息
  6. SecureCRT 免安装、绿色版、免费版本
  7. 学习笔记之数据可视化(二)——页面布局(中)
  8. android studio打包纯H5项目(集成5+SDK)
  9. python使用PyMysql连接MySQL实现增删改查
  10. matlab和robotstudio,MATLAB与Robotstudio建立socket通信(初探)