TensorFlow LSTM 注意力机制图解
TensorFlow LSTM Attention 机制图解
深度学习的最新趋势是注意力机制。在接受采访时,现任OpenAI研究主管的Ilya Sutskever提到,注意力机制是最令人兴奋的进步之一,他们在这里进行投入。听起来令人兴奋但是什么是注意机制?
基于人类视觉注意机制,神经网络中的注意机制非常松散。人的视觉注意力得到了很好的研究,虽然存在着不同的模式,但它们基本上都是以“低分辨率”感知周围的图像,以“高分辨率”的方式集中在图像的某个区域,然后随着时间的推移调整焦点。
注意力机制解决什么问题?
为了理解我们可以做什么,我们以神经机器翻译(NMT)为例。传统的机器翻译系统通常依赖于基于文本统计属性的复杂特征工程。简而言之,这些系统是复杂的,并且大量的工程设计都在构建它们。神经机器翻译系统工作有点不同。在NMT中,我们将一个句子的含义映射成一个固定长度的向量表示,然后基于该向量生成一个翻译。通过不依赖于n-gram数量的东西,而是试图捕捉文本的更高层次的含义,NMT系统比许多其他方法更广泛地推广到新句子。也许更重要的是,NTM系统更容易构建和训练,而且不需要任何手动功能工程。事实上,Tensorflow中的一个简单的实现不超过几百行代码。
大多数NMT系统通过使用循环神经网络将源语句(例如,德语句子)编码为向量,然后基于该向量来解码英语句子,也使用RNN来工作。

在上述图中,将“Echt”,“Dicke”和“Kiste”字馈送到编码器中,并且在特殊信号(未示出)之后,解码器开始产生翻译的句子。解码器继续生成单词,直到产生句子令牌的特殊结尾。这里,h向量表示编码器的内部状态。
如果仔细观察,您可以看到解码器应该仅基于编码器的最后一个隐藏状态(上面的h_3)生成翻译。这个h3矢量必须编码我们需要知道的关于源语句的所有内容。它必须充分体现其意义。在更技术术语中,该向量是一个嵌入的句子。事实上,如果您使用PCA或t-SNE绘制不同句子在低维空间中的嵌入以降低维数,您可以看到语义上类似的短语最终彼此接近。这太棒了
然而,假设我们可以将所有关于潜在的非常长的句子的信息编码成单个向量似乎有些不合理,然后使解码器仅产生良好的翻译。让我们说你的源语句是50个字。英文翻译的第一个词可能与源句的第一个字高度相关。但这意味着解码器必须从50个步骤前考虑信息,并且该信息需要以矢量编码。已知经常性神经网络在处理这种远程依赖性方面存在问题。在理论上,像LSTM这样的架构应该能够处理这个问题,但在实践中,远程依赖仍然是有问题的。例如,研究人员已经发现,反转源序列(向后馈送到编码器中)产生明显更好的结果,因为它缩短了从解码器到编码器相关部分的路径。类似地,两次输入输入序列也似乎有助于网络更好地记住事物。
我认为把句子颠倒一个“黑客”的做法。它使事情在实践中更好地工作,但这不是一个原则性的解决方案。大多数翻译基准都是用法语和德语来完成的,与英语非常相似(甚至中文的单词顺序与英语非常相似)。但是有一些语言(如日语),一个句子的最后一个单词可以高度预测英语翻译中的第一个单词。在这种情况下,扭转输入会使事情变得更糟。那么,有什么办法呢?注意机制
使用注意机制,我们不再尝试将完整的源语句编码为固定长度的向量。相反,我们允许解码器在输出生成的每个步骤“参加”到源句子的不同部分。重要的是,我们让模型基于输入句子以及迄今为止所产生的内容,学习了要注意的内容。所以,在很好的语言(如英语和德语)中,解码器可能会顺序地选择事情。在制作第一个英文单词时参加第一个单词,等等。这是通过联合学习来整合和翻译的神经机器翻译所做的,看起来如下:

在这里,y是我们由解码器产生的翻译词,x是我们的源语句。上图说明使用双向循环网络,但这并不重要,您可以忽略反向方向。重要的部分是每个解码器输出字y_t现在取决于所有输入状态的加权组合,而不仅仅是最后一个状态。 a的权重定义为每个输出应考虑每个输入状态的多少。所以,如果a_ {3,2}是一个大数字,这意味着解码器在产生目标句子的第三个单词时,对源语句中的第二个状态给予了很大的关注。 a通常被归一化为总和为1(因此它们是输入状态的分布)。
关注的一大优点在于它使我们能够解释和可视化模型正在做什么。例如,通过在翻译句子时可视化注意力矩阵a,我们可以了解模型的翻译方式:

原文链接:http://www.wildml.com/2016/01/attention-and-memory-in-deep-learning-and-nlp/
更多 Tensorflow 教程:http://www.tensorflownews.com/
TensorFlow LSTM 注意力机制图解的更多相关文章
- TensorFlow从1到2(十)带注意力机制的神经网络机器翻译
基本概念 机器翻译和语音识别是最早开展的两项人工智能研究.今天也取得了最显著的商业成果. 早先的机器翻译实际脱胎于电子词典,能力更擅长于词或者短语的翻译.那时候的翻译通常会将一句话打断为一系列的片段, ...
- NLP教程(6) - 神经机器翻译、seq2seq与注意力机制
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www.showmeai.tech/article-det ...
- 深度学习之注意力机制(Attention Mechanism)和Seq2Seq
这篇文章整理有关注意力机制(Attention Mechanism )的知识,主要涉及以下几点内容: 1.注意力机制是为了解决什么问题而提出来的? 2.软性注意力机制的数学原理: 3.软性注意力机制. ...
- tensorflow 1.0 学习:十图详解tensorflow数据读取机制
本文转自:https://zhuanlan.zhihu.com/p/27238630 在学习tensorflow的过程中,有很多小伙伴反映读取数据这一块很难理解.确实这一块官方的教程比较简略,网上也找 ...
- DeepLearning.ai学习笔记(五)序列模型 -- week2 序列模型和注意力机制
一.基础模型 假设要翻译下面这句话: "简将要在9月访问中国" 正确的翻译结果应该是: "Jane is visiting China in September" ...
- 深入理解BERT Transformer ,不仅仅是注意力机制
来源商业新知网,原标题:深入理解BERT Transformer ,不仅仅是注意力机制 BERT是google最近提出的一个自然语言处理模型,它在许多任务 检测上表现非常好. 如:问答.自然语言推断和 ...
- 十图详解tensorflow数据读取机制
在学习tensorflow的过程中,有很多小伙伴反映读取数据这一块很难理解.确实这一块官方的教程比较简略,网上也找不到什么合适的学习材料.今天这篇文章就以图片的形式,用最简单的语言,为大家详细解释一下 ...
- 十图详解TensorFlow数据读取机制(附代码)
在学习TensorFlow的过程中,有很多小伙伴反映读取数据这一块很难理解.确实这一块官方的教程比较简略,网上也找不到什么合适的学习材料.今天这篇文章就以图片的形式,用最简单的语言,为大家详细解释一下 ...
- 自适应注意力机制在Image Caption中的应用
在碎片化阅读充斥眼球的时代,越来越少的人会去关注每篇论文背后的探索和思考. 在这个栏目里,你会快速 get 每篇精选论文的亮点和痛点,时刻紧跟 AI 前沿成果. 点击本文底部的「阅读原文」即刻加入社区 ...
随机推荐
- JAVA_SE基础——58.如何用jar命令对java工程进行打包
有时候为了更方便快捷的部署和执行Java程序,要把java应用程序打包成一个jar包.而这个基础的操作有时候也很麻烦,为了方便java程序员们能够方便的打包java应用程序,下面对jar命令进行介绍, ...
- javascript中的数组对象
1.创建数组的三种方式: 1.1 var 数组名=[元素1,元素2,元素3...]; 例如: var arr1=[1,2,3,4]; 1.2 var 数组名=new Array(元素1,元素2,元素3 ...
- js常用API方法
String对象常用的API:API指应用程序编程接口,实际上就是一些提前预设好的方法. charAt() 方法可返回指定位置的字符. stringObject.charAt(index) index ...
- GIT入门笔记(15)- 链接到私有GitLab仓库
GitLab是利用 Ruby on Rails 一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目.它拥有与Github类似的功能,能够浏览源代码,管理 ...
- hive:默认允许动态分区个数为100,超出抛出异常:
在创建好一个分区表后,执行动态分区插入数据,抛出了错误: Caused by: org.apache.hadoop.hive.ql.metadata.HiveFatalException: [Erro ...
- hdu1018 Big Number---N!的位数
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1018 题目大意: 求n阶乘的位数思路: N的阶乖的位数等于LOG10(N!)=LOG10(1)+.. ...
- Django REST framework+Vue 打造生鲜超市(五)
六.商品类别数据展示 6.1. 商品类别数据接口 (1)商品分类有两个接口: 一种是全部分类:一级二级三级 一种是某一类的分类以及商品详细信息: 开始写商品分类的接口 (2)序列化 给分类添加三级分类 ...
- 使用 WTForms 进行表单验证的例子
#使用 WTForms 进行表单验证的例子 from wtforms import Form from wtforms import BooleanField from wtforms import ...
- ng-model,ng-value,ng-bind,{{}}----angularJS数据绑定
最典型用法 双向绑定 <input type="text" value="{{apple}}" ng-model="apple" &g ...
- STL源码剖析 — 空间配置器(allocator)
前言 以STL的实现角度而言,第一个需要介绍的就是空间配置器,因为整个STL的操作对象都存放在容器之中. 你完全可以实现一个直接向硬件存取空间的allocator. 下面介绍的是SGI STL提供的配 ...