原文连接: http://www.javashuo.com/article/p-rkrvpfrg-nk.html
html
参考:注意力机制(Attention Mechanism)在天然语言处理中的应用
Attention函数的本质能够被描述为一个查询(query)到一系列(键key-值value)对的映射
,以下图。
在计算attention时主要分为三步:web
query和每一个key进行类似度计算获得权重
,经常使用的类似度函数有点积,拼接,感知机等;使用一个softmax函数对这些权重进行归一化
;权重和相应的键值value进行加权求和获得最后的attention
。Attention在NLP中其实我以为能够当作是一种自动加权,它能够把两个你想要联系起来的不一样模块,经过加权的形式进行联系。目前主流的计算公式
有如下几种:
markdown
目前Attention在NLP中已经有普遍的应用。它有一个很大的优势就是能够可视化attention矩阵来告诉你们神经网络在进行任务时关注了哪些部分。不过在NLP中的attention机制和人类的attention机制仍是有所区别,它基本仍是须要计算全部要处理的对象
,并额外用一个矩阵去存储其权重,其实增长了开销。而不是像人类同样能够忽略不想关注的部分,只去处理关注的部分。
网络
也就是编码-解码模型。所谓编码,就是将输入序列转化成一个固定长度的向量;解码,就是将以前生成的固定向量再转化成输出序列。
具体实现的时候,编码器和解码器都不是固定的,可选的有CNN/RNN/BiRNN/GRU/LSTM等等,你能够自由组合。好比说,你在编码时使用BiRNN,解码时使用RNN,或者在编码时使用RNN,解码时使用LSTM等等。app
通常其做用为在给定context vector c和全部已预测的词
去预测
,故t时刻翻译的结果y为如下的联合几率分布
框架
在RNN中(如上图所示),t时刻隐藏状态
为:
svg
而联合条件分布为:
函数
使用传统编码器-解码器的RNN模型先用一些LSTM单元来对输入序列进行学习,编码为固定长度的向量表示;而后再用一些LSTM单元来读取这种向量表示并解码为输出序列。性能
采用这种结构的模型在许多比较难的序列预测问题(如文本翻译)上都取得了最好的结果,所以迅速成为了目前的主流方法。学习
这种结构在不少其余的领域上也取得了不错的结果。然而,它存在的一个问题在于:输入序列不论长短都会被编码成一个固定长度的向量表示,而解码则受限于该固定长度的向量表示。
这个问题限制了模型的性能,尤为是当输入序列比较长时,模型的性能会变得不好(在文本翻译任务上表现为待翻译的原始文本长度过长时翻译质量较差)。
“一个潜在的问题是,采用编码器-解码器结构的神经网络模型须要将输入序列中的必要信息表示为一个固定长度的向量,而当输入序列很长时则难以保留所有的必要信息(由于太多),尤为是当输入序列的长度比训练数据集中的更长时。”
参考博文:深度学习笔记(六):Encoder-Decoder模型和Attention模型
这篇论文中首次将attention用到了nlp领域,论文中提出了一个想法,目前机器翻译的瓶颈在于不管是多长的输入,你们的广泛作法都是将全部输入经过一些方法合并成一个固定长度的向量去表示这个句子,这会形成的问题是,若是句子很长,那么这样的方法去做为decoder的输入,效果并不会很好。
该论文提出的加入attention的模型:
相比于以前的encoder-decoder模型,attention模型最大的区别就在于它不在要求编码器将全部输入信息都编码进一个固定长度的向量之中。相反,此时编码器须要将输入编码成一个向量的序列,而在解码的时候,每一步都会选择性的从向量序列中挑选一个子集进行进一步处理。这样,在产生每个输出的时候,都可以作到充分利用输入序列携带的信息。并且这种方法在翻译任务中取得了很是不错的成果。
此处并无不少特殊,使用双向LSTM,第j个隐藏状态
只能携带第j个单词自己以及以前的一些信息;而若是逆序输入,则
包含第j个单词及以后的一些信息。若是把这两个结合起来,
就包含了第 j 个输入和先后的信息。
1.2.1 context vector c
解码过程与传统encoder-decoder模型相同,只不过context vector c
变为了
其中的
是对每个输入的
encoder后的隐状态进行weighted sum(如上图所示)
的值越高,表示第i个输出在第j个输入上分配的注意力越多,在生成第i个输出的时候受第j个输入的影响也就越大。
:encoder i处隐状态和decoder j-1 处的隐状态的匹配 match,此处的 alignment model a 是和其余神经网络一块儿去训练(即 joint learning),其反映了 的重要性
1.2.2 其他部分
其他部分均与传统相同,y的联合几率分布
以前已经提过,每一个输出都有一个长为Tx的注意力向量,那么将这些向量合起来看,就是一个矩阵。对其进行可视化,获得以下结果
其中x轴表示待翻译的句子中的单词(英语),y轴表示翻译之后的句子中的单词(法语)。能够看到尽管从英语到法语的过程当中,有些单词的顺序发生了变化,可是attention模型仍然很好的找到了合适的位置。换句话说,就是两种语言下的单词“对齐”了。所以,也有人把注意力模型叫作对齐(alignment)模型。并且像比于用语言学实现的硬对齐,这种基于几率的软对齐更加优雅,由于可以更全面的考虑到上下文的语境。
这篇论文的看点:扩展attention的计算方式
,还有就是局部的attention
方法
文中提出了两种注意力机制,global attention和local attention
这和上一篇论文提出的attention的思路是同样的,它都是对源语言对全部词进行处理,不一样的是在计算attention
矩阵值的时候,他提出了几种简单的扩展版本
。在他们最后的实验中general的计算方法效果是最好的。
灵感来自于图像中的soft attention和hard attention,soft attention对于源图片中每一小块都进行权重的求和,计算较为费时,而hard attention则计算图像区域 a 在时刻 t 被选中做为输入decoder的信息的几率,有且仅有1个区域被选中,它不可微分,需更加复杂的处理。
local attention是一种介于soft和hard之间的方式,使用了一我的工经验设定的参数D去选择一个以
为中心,
为窗口的区域,进行对应向量的weighted sum,故不像global attention,local alignment vector
的维数是固定的,不随输入序列长度变化而变化,它的维度固定为2D+1
此处使用了两种方法去选择 :
单调对应(Monotonic alignment)
: 设定
Predictive alignment
: 求和更加的偏好靠近位置
附近的向量
,又在求和时加入了一个高斯函数,该函数u =
,使得
周围的向量获得的权重更大,(s即为通常公式中的x,
为u,
为高斯分布峰值) 3.模型具体实现
将隐状态
与
进行拼接,产生输出
最后t时刻的输出
论文结果中,dot对于global更好,general对于local更好,-m表示Monotonic alignment,-p表示Predictive alignment
所谓Soft,意思是在求注意力分配几率分布的时候,对于输入句子X中任意一个单词都给出个几率,是个几率分布。
既然Soft是给每一个单词都赋予一个单词对齐几率,那么若是不这样作,直接从输入句子里面找到某个特定的单词,而后把目标句子单词和这个单词对齐,而其它输入句子中的单词硬性地认为对齐几率为0,这就是Hard Attention Model的思想。
Hard AM在图像里证实有用,可是估计在文本里面用处不大,由于这种单词一一对齐明显要求过高,若是对不齐对后续处理负面影响很大,因此你在NLP的文献里看不到用Hard AM的,估计你们都试过了,效果很差。
Soft AM要求输入句子每一个单词都要赋予单词对齐几率,Hard AM要求从输入句子中精确地找到一个单词来和输出单词对齐,那么能够放松Hard的条件,先找到Hard AM在输入句子中单词对齐的那个单词大体位置,而后以这个单词做为轴心,向左向右拓展出一个大小为D的窗口,在这个2D+1窗口内的单词内进行相似Soft AM的对齐几率计算便可。
这篇论文就提出了3中在CNN中使用attention的方法,是attention在CNN中较早的探索性工做。
attention机制将不一样cnn通道的句对联系起来
。该论文提出了三种注意力机制
两个句子的向量表示
进行match生成attention矩阵,在卷积以前
,加入attention矩阵,与表示矩阵s一块儿进行训练。
在卷积后
,对于卷积完成的两个矩阵,进行match,match后按照行和列的求和生成两个矩阵各自的权重,再使用权重对其进行
对于1和2的共同使用
本文提出了三种用于卷积神经网络的注意力机制来进行句子对建模,并在三个常见任务上达到了较好的效果,体现了方法的泛化能力。同时也做者也指出,在三个任务上,两层注意力网络并不会明显优于一层注意力网络,多是因为相关数据集较小的缘由。总的来讲,在天然语言处理的相关任务上,卷积神经网络上的注意力机制研究相比长短时记忆网络(LSTM)来讲还相对较少,本文是一个较为不错的实现方式。
参考:一文读懂「Attention is All You Need」| 附代码实现
天然语言处理中的自注意力机制(Self-attention Mechanism)
这篇论文主要亮点在于: