对Neural Machine Translation by Jointly Learning to Align and Translate论文的详解
读论文
Neural Machine Translation by Jointly Learning to Align and Translate
这个论文是在NLP中第一个使用attention机制的论文。他们把attention机制用到了神经网络机器翻译(NMT)上。NMT其实就是一个典型的sequence to sequence模型,也就是一个encoder to decoder模型,传统的NMT使用两个RNN,一个RNN对源语言进行编码,将源语言编码到一个固定维度的中间向量,然后在使用一个RNN进行解码翻译到目标语言。
直接来看这个模型
\(c_{i} = \sum_{j=1}^{T_{x}}\alpha_{i,j}h_{j}\)
\(\alpha_{i,j} = \frac{exp(e_{i,j})}{\sum_{k=1}^{T_{x}}exp(e_{i,k})}\)
\(e_{ij} = a(s_{i-1},h_{j})\)
我们使用一个前馈神经网络来对对齐网络模型\(a\)进行参数化。(在这里有一个知识点需要取了解什么是前馈神经网络)。对于这个前馈神经网络模型,是整体模型的一部分,所以参数会随着整体模型的其他部分异同进行训练更新,而不是单独把这个模型拿出来训练。
值得注意的是这个对齐模型并不是一个隐变量(什么是隐变量在这里有一个解释。这个对齐模型是一个软对齐模型,允许损失函数的梯度进行反向传播并更新(这里我并没有看懂,为啥软对齐模型可以达到这个效果)。换句话讲,这个对齐模型可以和整个翻译模型一起进行训练更新。
我们把计算隐层状态权重和的过程可以理解为一个求期望隐层状态表达的过程。
我们可以把\(\alpha_{i,j}或者是说与它相关\)当做是一个概率。这个概率的含义就是目标单词\(y_{i}\)和源单词\(x_{j}\)对齐的概率。或者说,目标单词\(y_{i}\)是从源单词\(x_{j}\)翻译过来的概率带下。然后对于目标单词\(y_{i}\)来说的,它的环境向量\(c_{i}\)是一个期望中的表达,这个表达是基于annotations(这里指的是所有的隐层状态)和相对应的\(\alpha_{ij}\)的结合计算。
\(\alpha_{i,j}\)或者\(e_{i,j}\)反应出的是\(h_{j}\)和上一层隐层状态\(s_{i-1}\)对于下一个隐层状态\(s_{i}\)和下一个单元输出\(y_{i}\)
解码器应用这个attention机制,从而决定在原始句子中的哪个部分需要花费更多的注意力。通过使用这个机制,编码器消除了一个负担,这个负担就是不得不把所有的原始句子信息经过神经网络由一个固定长度的向量表达。其实用了这个机制,长度也是固定的,只不过对于现在这个机制,这个向量会针对不同的目标单词有着不同的环境向量。
我自己有一个思考,在整个模型训练完成之后,我们得到的应该是一个权重矩阵C。为什么这么说呢,因为针对每个目标单词,我们都有一行的权重(其中这一行的每一个权重值代表的是输入句子中的每个单词的重要程度)。
对于这个权重矩阵\(C_{i}\)是权重矩阵的一行,表示对于目标单词\(y_{i}\)输入句子每个单词对应的重要程度。
对于\(\alpha_{i.j}\),它表示的是一个单词的重要程度,是\(C_{i}\)中的一个具体单词的重要程度。
现在我自己有一种感觉,就是说,这个权重矩阵,学习的重要程度,从现在我直观感受来说,它是一种两种翻译语言的语法关系。是输入句子一个位置对输出句子中的一个位置的影响程度,这个并没有体现出意思之间的对应的关系。
我们使用的是只有一层的多层感知机来计算\(a(s_{i-1},h_{j})=v_{a}^Ttanh(W_{a}s_{i-1}+U_{a}h_{j}\)
(其实这里并没有搞清楚为啥是一个多层感知机模式。多层感知机其实是一个最简单的神经网络模型,如果看做是一个多层感知机,那么输入是\(s_{i-1}\)和\(h_{j}\),怎么会有两个输入呢?)
在原始论文中,作者说\(U_{a}h_{j}\)并没有依赖于\(i\),那么我们可以提前将这个东西算出来减少计算消耗。(那么这一步提前算出来是怎么实现的呢?)
对Neural Machine Translation by Jointly Learning to Align and Translate论文的详解的更多相关文章
- 神经机器翻译 - NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE
论文:NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE 综述 背景及问题 背景: 翻译: 翻译模型学习条件分布 ...
- [笔记] encoder-decoder NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE
原文地址 :[1409.0473] Neural Machine Translation by Jointly Learning to Align and Translate (arxiv.org) ...
- 课程五(Sequence Models),第三周(Sequence models & Attention mechanism) —— 1.Programming assignments:Neural Machine Translation with Attention
Neural Machine Translation Welcome to your first programming assignment for this week! You will buil ...
- Sequence Models Week 3 Neural Machine Translation
Neural Machine Translation Welcome to your first programming assignment for this week! You will buil ...
- Effective Approaches to Attention-based Neural Machine Translation(Global和Local attention)
这篇论文主要是提出了Global attention 和 Local attention 这个论文有一个译文,不过我没细看 Effective Approaches to Attention-base ...
- On Using Very Large Target Vocabulary for Neural Machine Translation Candidate Sampling Sampled Softmax
[softmax分类器的加速器] https://www.tensorflow.org/api_docs/python/tf/nn/sampled_softmax_loss This is a fas ...
- 【转载 | 翻译】Visualizing A Neural Machine Translation Model(神经机器翻译模型NMT的可视化)
转载并翻译Jay Alammar的一篇博文:Visualizing A Neural Machine Translation Model (Mechanics of Seq2seq Models Wi ...
- Learning Cocos2d-x for WP8(5)——详解Menu菜单
原文:Learning Cocos2d-x for WP8(5)--详解Menu菜单 C#(wp7)兄弟篇Learning Cocos2d-x for XNA(5)——详解Menu菜单 菜单是游戏必不 ...
- Introduction to Neural Machine Translation - part 1
The Noise Channel Model \(p(e)\): the language Model \(p(f|e)\): the translation model where, \(e\): ...
随机推荐
- Akka探索第一个例子by fsharp 1
如何构建一套分布式程序一直是我想知道的问题. Akka就是一套用来开发分布式系统的开发库.当然开发分布式系统只是它的能力之一.除此之外高度抽象的并行运算能力,轻量级的消息系统,容错能力都是该库的特点. ...
- Java之美[从菜鸟到高手演变]之智力题【史上最全】 (转)
原文地址:http://blog.csdn.net/zhangerqing/article/details/8138296 PS:在一次偶然的机会中,发现了这篇文章.希望大家能开动脑经. 智力题,每个 ...
- Visual Studio无法推送提交到Github的解决方法
前言 当出现Visual Studio推送变更失败时,卸载系统中所有Git以及Visual Studio 的Git工具再重装即可 前情概要 今天由于要尝试使用RabbitMQ,所以打算先在本地做些小D ...
- iOS - The identity used to sign the executable is no longer valid
①.首先在xcode中的Build Settings中看有没有设置: ②.账号是不是多个人在用,个人开发者的账号只能绑定一台电脑,当另外一台电脑绑定了话,你的电脑就失效了.你确认下是不是这个原因造成的 ...
- js获取农历日期【转】
var CalendarData=new Array(100); var madd=new Array(12); var tgString="甲乙丙丁戊己庚辛壬癸"; var dz ...
- u-boot分析(十)----堆栈设置|代码拷贝|完成BL1阶段
u-boot分析(十) 上篇博文我们按照210的启动流程,分析到了初始化nand flash,由于接下来的关闭ABB比较简单所以跳过,所以我们今天按照u-boot的启动流程继续进行分析. 今天我们会用 ...
- Sleep 和 Wait 关于锁释放的区别
sleep和wait的区别是一个老生常谈的问题.Sleep 是 Thread类的方法, wait是Object类的方法.但是关键的区别是对锁的操作问题. 当我们调用sleep的时候,线程进入休眠,但是 ...
- Markdown快速上手指南
Markdown快速上手指南 1.Markdown介绍 markdown可以实现快速html文档编辑,格式优没,并且不需要使用html元素. markdown采用普通文本的形式,例如读书笔记等易于使用 ...
- 探讨下在Delphi里面进程之间的数据共享
进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动.它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元.现在小编就和大家来探讨一下在Delphi ...
- struts2表单提交Date数据无法接收
问题:在Struts2环境下,提交含有Date类型数据表单,但是在action中没有接收到:String就可以直接接收到: --网络搜索后,说Struts2可以自己转,但是目前没发现有: 然后在狂搜, ...