前言

前一篇博客简要的介绍了一下传统的attention机制的基本思想,
本篇博客解读使用attention机制做机器翻译的第一篇论文,通过这篇论文看attention的使用方法。
论文:
NEURAL MACHINE TRANSLATION
BY JOINTLY LEARNING TO ALIGN AND TRANSLATE
论文地址:https://arxiv.org/pdf/1409.0473.pdf

论文motivation

这篇论文的motivation,就是在说attention之前的Encoder-Decoder机器翻译模型有一个明显的缺点:传统模型将源句子的所有信息都压缩成一个固定长度的向量,这样做的缺点是当句子长度很长的时候,模型无法利用句子前面部分的有效信息。换句话说,句子长了原来的技术都不好使了。
于是他们就提出了往Encoder-Decoder里面加入Attention机制的想法,加入这种想法以后模型可以同时学习如何进行翻译以及进行对齐。
如何进行翻译,大家都知道是啥意思。
那如何进行对齐是啥意思呢?其实这个就是Attention机制了。
还是上文那个例子:
源句: Tom chase Jerry.
翻译结果: 汤姆追逐杰瑞
我们可以看到,译文结果“汤姆”实际是对齐与“Tom”的,“追逐”对齐与chase。这个对齐,并不是唯一,因为翻译的时候肯定不是一个个对齐就能翻译好的。它其实是更想表达:译文“汤姆” 主要是根据“Tom”得到的,注意这里是“主要” 是一个高权值的思想。
于是这篇论文就是通过这种 对齐 来体现它的attention.

老生常谈

在Encoder-coder 模型框架里面,encoder复制先输入的句子的各个词的词向量,然后把它们压缩成一个句向量ccc。如果encoder和decoder都是使用rnn的话,就可以表示成:
c=q(h1,h2,…,hTx)c=q({h_{1},h_{2},\dots,h_{T_{x}}})c=q(h1​,h2​,…,hTx​​)
其中hi=f(hi−1,xi)h_{i}=f(h_{i-1},x_{i})hi​=f(hi−1​,xi​),它是每个时间步iRNN隐藏层。

x是输入的各个词的词向量
X=(x1,x2,…,xTx)X=(x_{1},x_{2},\dots,x_{T_{x}})X=(x1​,x2​,…,xTx​​).

f,qf,qf,q是非线性激活函数。通常,人们取c=hTxc=h_{T_{x}}c=hTx​​,表示拿RNN的最后一个时间步的隐藏层输出作为句向量。
然后翻译的话就是在目标语言中,找到一个词串,使得下面的条件概率最大:
p(y)=p(y1,y2,…,yT∣c)=p(y1∣c)p(y2∣{y1,c})p(y3∣{y1,y2,c})⋯=∏t=1t=Tp(yt∣{y1,y2,…,yt−1,c})p(y)=p(y_{1},y_{2},\dots,y_{T}|c)=p(y_{1}|c)p(y_{2}|\{y_{1},c \})p(y_{3}|\{y_{1},y_{2},c \})\dots=\prod ^{t=T}_{t=1}p(y_{t}|\{y_{1},y_{2},\dots,y_{t-1},c\})p(y)=p(y1​,y2​,…,yT​∣c)=p(y1​∣c)p(y2​∣{y1​,c})p(y3​∣{y1​,y2​,c})⋯=t=1∏t=T​p(yt​∣{y1​,y2​,…,yt−1​,c})
其中y={y1,y2,y3,…,yT}y=\{y_{1},y_{2},y_{3},\dots,y_{T}\}y={y1​,y2​,y3​,…,yT​}是翻译结果,TTT是翻译结果的长度。
其中使用到的条件概率公式可以宏观的表示为:p(yt∣{y1,y2,…,yt−1,c})=g(yt−1,st,c)p(y_{t}|\{y_{1},y_{2},\dots,y_{t-1},c\})=g(y_{t-1},s_{t},c)p(yt​∣{y1​,y2​,…,yt−1​,c})=g(yt−1​,st​,c)。g是一个势能函数,yt−1y_{t-1}yt−1​是上一步的输出,sts_{t}st​是decoder部分的rnn的隐藏层向量,而ccc就是输入句子的句向量。

以上是老生常谈的东西,使用一些符号来方便下面讲述attention.


核心的东西来啦

注意到在翻译的时候的,对于任意一个时间步i∈{1,2,…,T}i\in \{1,2,\dots,T\}i∈{1,2,…,T},

条件概率p(yi∣{y1,y2,…,yi−1,c})=g(yi−1,si,c)p(y_{i}|\{y_{1},y_{2},\dots,y_{i-1},c\})=g(y_{i-1},s_{i},c)p(yi​∣{y1​,y2​,…,yi−1​,c})=g(yi−1​,si​,c)输入的ccc是固定的。

这样是不好的,于是作者就提出了每个时间步,cic_{i}ci​是可以不同的想法。

把条件概率改写成:
p(yi∣{y1,y2,…,yi−1,c})=g(yi−1,si,ci)p(y_{i}|\{y_{1},y_{2},\dots,y_{i-1},c\})=g(y_{i-1},s_{i},c_{i})p(yi​∣{y1​,y2​,…,yi−1​,c})=g(yi−1​,si​,ci​)
而sis_{i}si​是decoder部分在第i个时间步的隐藏层,cic_{i}ci​是Encoder部分的各个隐藏层的hjh_{j}hj​按某种权值的线性组合。
si=f(si−1,yi−1,ci)s_{i}=f(s_{i-1},y_{i-1},c_{i})si​=f(si−1​,yi−1​,ci​)
也就是说在decoder部分,每一步的隐藏层计算的时候输入有三部分:上一步的输出,上一步的隐藏层,本步的cic_{i}ci​。这个cic_{i}ci​就是attention value.

那么这个cic_{i}ci​是如何来的呢?
既然cic_{i}ci​是encoder里面RNN的各个隐藏层的线性组合,那么必然有
ci=α1h1+α2h2+⋯+αTxhTxc_{i}=\alpha_{1}h_{1}+\alpha_{2}h_{2}+\dots+\alpha_{T_{x}}h_{T_{x}}ci​=α1​h1​+α2​h2​+⋯+αTx​​hTx​​
TxT_{x}Tx​是输入句子的长度。
因此,如何确定其中的权值向量α\alphaα 就是核心了。

论文提出的第i步的cic_{i}ci​与Encoder的第j个隐藏层的权值αi,j\alpha_{i,j}αi,j​的计算方法为:

αi,j=eei,j∑k=1Txeei,k\alpha_{i,j}=\frac{e^{e_{i,j}}}{\sum^{T_{x}}_{k=1} e^{e_{i,k}}}αi,j​=∑k=1Tx​​eei,k​eei,j​​
这是一个归一化势能函数,而
ei,j=a(si−1,hj)=Wa×tanh(Ws×si−1,Wh×hj)e_{i,j}=a(s_{i-1},h_{j})=W_{a} \times tanh(W_{s} \times s_{i-1},W_{h}\times h_{j})ei,j​=a(si−1​,hj​)=Wa​×tanh(Ws​×si−1​,Wh​×hj​)
ei,je_{i,j}ei,j​其实就一个以si−1,hjs_{i-1},h_{j}si−1​,hj​为输入的MLP。注意,这里面的si,hi,αi,js_{i},h_{i},\alpha_{i,j}si​,hi​,αi,j​都是向量。


直观的理解

直观的理解就是,在decoder解码的时候,模型会拿着一个小型的MLP网络去encoder里面“扫描”一波,计算Encoder的各隐藏层向量hjh_{j}hj​中对于本次解码过程中的贡献权值,然后按照这些权值对各个hjh_{j}hj​进行线性组合。

显然对于decoder某个时间步i, 输入的向量中,肯定会有一个hjh_{j}hj​的权值αi,j\alpha_{i,j}αi,j​是最大的。而这个最大 就相当于把输入词xjx_{j}xj​与输出的yiy_{i}yi​对齐起来啦!!!!! 这也就是这篇文章所谓的 对齐

网络怎么训练呢


首先网络的结构还是使用的Encoder-Decoder框架,Encoder使用一个双层的LSTM,Decoder使用的是一个单层的LSTM.Attention的权值使用的是一个小型的MLP。
训练的时候,给定源句子X=x1,x2,x3…xTxX={x_{1},x_{2},x_{3} \dots x_{T_{x}}}X=x1​,x2​,x3​…xTx​​,比如说:X={"Tom","Chase","Jerry"}X=\{"Tom","Chase","Jerry"\}X={"Tom","Chase","Jerry"}。
首先,先从词嵌入向量表lookuplookuplookup表找出Tom,chase,Jerry对应的词向量v(Tom),v(Chase),v(Jerry),v(< GO >)。注意其中的< GO>是一个翻译起始标志,主要是为了产生Decoder的起始隐藏层输入。
然后把这序列长度为4的序列输入到bilstm中,bilstm按照时间步展开后依次计算出h1,h2,h3h_{1},h_{2},h_{3}h1​,h2​,h3​,到了末尾就计算出来< GO>对应时间步的隐藏层 hTx+1h_{T_{x} +1}hTx​+1​。把这个h1+Txh_{1+T_{x}}h1+Tx​​作为s0s_{0}s0​。
OK,现在加入到Decoder了。
那么c1c_{1}c1​怎么算呢?
拿着刚刚得到的s0s_{0}s0​,依次去和h1,h2,h3h_{1},h_{2},h_{3}h1​,h2​,h3​两两匹配输入到那个计算权值的小MLP中,得到相应的打分ei,je_{i,j}ei,j​,再对ei,je_{i,j}ei,j​归一化一下得到权值。即:
e1,1=a(s0,h1)=Wa×tanh(Ws×s0,Wh×h1)e_{1,1}=a(s_{0},h_{1})=W_{a} \times tanh(W_{s} \times s_{0},W_{h}\times h_{1})e1,1​=a(s0​,h1​)=Wa​×tanh(Ws​×s0​,Wh​×h1​)
e1,2=a(s0,h2)=Wa×tanh(Ws×s0,Wh×h2)e_{1,2}=a(s_{0},h_{2})=W_{a} \times tanh(W_{s} \times s_{0},W_{h}\times h_{2})e1,2​=a(s0​,h2​)=Wa​×tanh(Ws​×s0​,Wh​×h2​)
e1,3=a(s0,h3)=Wa×tanh(Ws×s0,Wh×h3)e_{1,3}=a(s_{0},h_{3})=W_{a} \times tanh(W_{s} \times s_{0},W_{h}\times h_{3})e1,3​=a(s0​,h3​)=Wa​×tanh(Ws​×s0​,Wh​×h3​)
再他们归一化一下:
α1,1=e1,1e1,1+e1,2+e1,3\alpha_{1,1}=\frac{e_{1,1}}{e_{1,1}+e_{1,2}+e_{1,3}}α1,1​=e1,1​+e1,2​+e1,3​e1,1​​
α1,2=e1,2e1,1+e1,2+e1,3\alpha_{1,2}=\frac{e_{1,2}}{e_{1,1}+e_{1,2}+e_{1,3}}α1,2​=e1,1​+e1,2​+e1,3​e1,2​​
α1,3=e1,3e1,1+e1,2+e1,3\alpha_{1,3}=\frac{e_{1,3}}{e_{1,1}+e_{1,2}+e_{1,3}}α1,3​=e1,1​+e1,2​+e1,3​e1,3​​
然后在计算attention值:c1c_{1}c1​
c1=α1,1×h1,1+α1,2×h1,2+α1,3×h1,3c_{1}=\alpha_{1,1}\times h_{1,1}+\alpha_{1,2} \times h_{1,2}+\alpha_{1,3} \times h_{1,3}c1​=α1,1​×h1,1​+α1,2​×h1,2​+α1,3​×h1,3​
然后,再计算Decoder的RNN的隐藏s1s_{1}s1​
s1=f(s0,y0,c1)s_{1}=f(s_{0},y_{0},c_{1})s1​=f(s0​,y0​,c1​),其中s0s_{0}s0​是< GO >标签对应的隐藏层向量,y0y_{0}y0​是目标语库中句子的开头< start>对应的词向量。
然后计算词的概率分布p(y1∣c1,y0)=g(s1,y0,c1)p(y_{1}|c_{1},y_{0})=g(s_{1},y_{0},c_{1})p(y1​∣c1​,y0​)=g(s1​,y0​,c1​) ,选择其中最大的概率的那个就是预测翻译的词y^1\hat y_{1}y^​1​。
主要就完成了一轮了,接下来计算c2c_{2}c2​。方法类似,但需要注意的是
s2=f(s1,c2,y1)s_{2}=f(s_{1},c_{2},y_{1})s2​=f(s1​,c2​,y1​),其中的y1y_{1}y1​是标准答案第一个词对应的词向量,并不是预测的y^1\hat y_{1}y^​1​的词向量,这么选的原因是为了加快收敛速度。

这样一直迭代下去后,定义交叉熵损失函数,然后BTPP梯度下降去训练就是了。

网络怎么预测呢

预测方法和训练类似,只是计算sis_{i}si​有所不同:
预测时计算隐藏层sis_{i}si​中输入的词向量是上一次的预测词的向量,不再是标准答案的词的向量。这是因为:我们本来就是不知道标准答案呀。
即:si=f(si−1,y^i−1,ci)s_{i}=f(s_{i-1},\hat y_{i-1},c_{i})si​=f(si−1​,y^​i−1​,ci​)

网络的效果怎么样

翻译效果:

这个图表说明了rnn+attention在翻译长句子的优势,普通的LSTM在处于长度大于30的句子就歇逼了,但是加入attention 当句子50以上也还是很棒的。

对齐效果:

这个图是可视化的方法是:在计算每一步的cic_{i}ci​时,都会计算得到αi,j\alpha_{i,j}αi,j​,这是一个0-1的值,把它乘以255就可以转换为灰度了。
从结果可以看到,翻译结果的“南”和“韩” 都对齐到了“south korean”,而美国则对齐到了“the united state”,还是很正确的。

Attention机制学习(二)使用相关推荐

  1. Attention机制学习记录(四)之Transformer

    前言 注意力(Attention)机制[2]由Bengio团队与2014年提出并在近年广泛的应用在深度学习中的各个领域,例如在计算机视觉方向用于捕捉图像上的感受野,或者NLP中用于定位关键token或 ...

  2. Attention机制学习(一)传统Attention机制

    前言 纵观神经网络的发展历程,从最原始的MLP,到CNN,到RNN,到LSTM,GRU,再到现在的Attention机制,人们不断的在网络里面加入一些先验知识,使得网络不过于"发散" ...

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

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

  4. Attention注意力机制学习(二)------->一些注意力网络整理

    SKNet--SENet孪生兄弟篇(2019) 论文 Selective Kernel Networks https://arxiv.org/abs/1903.06586  2019年 介绍 SKNe ...

  5. [深度学习] 自然语言处理 --- 基于Attention机制的Bi-LSTM文本分类

    Peng Zhou等发表在ACL2016的一篇论文<Attention-Based Bidirectional Long Short-Term Memory Networks for Relat ...

  6. 深度学习视觉领域中的attention机制的汇总解读(self-attention、交叉self-attention、ISSA、通道注意、空间注意、位置注意、Efficient Attention等)

    self-attention来自nlp的研究中,在深度学习视觉领域有不少新的attention版本,为了解各种attention机制.博主汇集了6篇视觉领域中attention相关的论文,分别涉及DA ...

  7. 深度学习——attention机制

    一.序列编码 目前主流的处理序列问题像机器翻译,文档摘要,对话系统,QA等都是encoder和decoder框架, 编码器:从单词序列到句子表示 解码器:从句子表示转化为单词序列分布 1.第一个基本的 ...

  8. Attention注意力机制学习(一)------->SENet

    目录 前言 论文 注意力机制 Squeeze-and-Excitation (SE) 模块 第一步Squeeze(Fsq) 第二步excitation(Fex) SE注意力机制应用于inception ...

  9. 深度学习中的注意力机制(二)

    作者 | 蘑菇先生 来源 | NewBeeNLP 目前深度学习中热点之一就是注意力机制(Attention Mechanisms).Attention源于人类视觉系统,当人类观察外界事物的时候,一般不 ...

最新文章

  1. 【轉】Android编程之SparseArrayE详解
  2. pycharm支持python3.8_PyCharm 2019.2 发布,Python 3.8功能的支持
  3. 从上往下 流式布局_揭秘做好网站结构优化的4步(下)
  4. JVM的堆、栈、方法区
  5. linux下vi的一些简单的操作
  6. [hackinglab][CTF][解密关][2020] hackinglab 解密关 writeup
  7. 8g ubuntu 树莓派4b_树莓派4B安装 Ubuntu 20.04 LTS
  8. 动态规划入门(一)——数字三角形
  9. 无法查看MSN聊天记录 总弹出下载.xml文件的对话框
  10. 好书分享--生命3.0 人工智能时代人类的进化与重生
  11. Smmu硬件寄存器—V2
  12. 解决VS2008 开发windows mobil及智能设备项目生成速度慢的问题
  13. 学校计算机专业春联大全带横批,对联大全带横批_春节对联大全_新年春联合集...
  14. x86架构下的安卓虚拟化
  15. 汉字转化成拼音 汉字转化成拼音
  16. iOS审核用户隐私政策
  17. 按字母A-Z全国城市及县城json
  18. 开水果店准备,开水果店前期准备
  19. 最全的Android/IOS等常用的WebService服务列表(本人整理)--值得收藏 留着说不定你就用到了
  20. 微信小程序跳转页面的不同方法

热门文章

  1. 02.集线器,网桥,交换机
  2. 输出菱形(C语言,萌新向)
  3. 使用 acme.sh 生成免费的泛域名证书
  4. [COGS2652]秘术「天文密葬法」-长链剖分-01分数规划
  5. 全球与中国自行车驱动系统市场战略模式及投资方向建议报告2021年版
  6. libGDX学习之路02:利用Tiled绘制游戏地图
  7. css浮动,清除浮动,溢出属性,定位,设置透明度
  8. 【Web】1326- 深入浅出 Web Audio API
  9. 图形界面 I: 在METATRADER 4终端中使用不同类型的程序来测试界面库 (第五章)
  10. 网站页面上标签页小图标的添加方式