注意⼒模型(AttentionModel)理解和实现
1. 直观感受和理解注意⼒模型
姹紫嫣红的近义词
蚋在我们视野中的物体只有少部分被我们关注到,在某⼀时刻我们眼睛的焦点只聚焦在某些物体上⾯,⽽不是视野中的全部物体,这是我们⼤脑的⼀个重要功能,能够使得我们有效过滤掉眼睛所获取的⼤量⽆⽤的视觉信息,提⾼我们的视觉识别能⼒;神经⽹络中的注意⼒模型借鉴了我们⼈脑的这⼀功能,让神经⽹络模型对输⼊数据的不同部位的关注点不⼀样,权重不⼀样。
地震最多的国家
上⾯的图⽚出⾃论⽂ , 它提出了⼀个能够根据图⽚中的内容⾃动⽣成描述性标题的神经⽹络模型。上⾯图⽚中左边图⽚是原图,右边是模型注意⼒的关注点,下划线上的⽂字描述了关注点上的物体名字。
另⼀个例⼦如上⾯图⽚所⽰,有⼀个神经⽹络模型能够把适合⼈读写习惯的⽇期格式转换成统⼀的”yyyy-mm-dd“格式,也就是将上图⾏坐标所⽰的输⼊⽇期格式转换成纵坐标所⽰的⽇期格式。⽐如把 “3 May 1979”和“21th of August 2016“分别转换成“1979-05-03”和”2016-08-21“。上⾯图⽚中横向的格⼦的颜⾊深浅程度表⽰当前输出字符对各个输⼊字符的关注程度。⽐如在模型预测⽣成这个输出字符3的时候,对输⼊字符3(⾏坐标的3)是最关注的,也可以理解为⾏坐标的3对该结果输出3的贡献是最⼤的。医院宣传标语
上⾯的分析过程可使⽤输⼊数据的概率分布来表⽰。假设现在是⼀个句⼦翻译模型,输⼊⼀个句⼦为”X1,X2,X3、、、XT“,长度为T;输出为”y1,y2、、、yt“,长度为t。T和t可能不相等。在每⼀次⽣成⼀个结果yi的时候,模型都计算⼀次当前模型对输⼊的句⼦的各个单词的概率分布(注意⼒)()。该概率分布表⽰的是当前的输出值yi对所输⼊句⼦的每个单词的关注程度,或者说是这个句⼦中每⼀个输⼊的单词对当前输出结果yi的贡献程度。
2. 建模和实现
我的老师作文200字
上⾯我们讲了注意⼒模型的直观感受,下⾯我们来讲具体如何建模和实现。
其实上图已经表⽰出了注意⼒模型,下⾯我们给出另外⼀个更加具体的表⽰:
a ,a ,...a t ,1t ,2t ,T
从下往上看,显⽰模型的输⼊值X,然后是双向的Bi-LSTM,再往上是将两个⽅向所产⽣的隐藏状态a1和a2拼接成a,再向上,结合s值计算出context值,然后将context作为另⼀个LSTM模型的输⼊值,最后通过softmax函数计算出y值。上⾯图⽚的长⽅形Attention部分是⼀个⿊盒⼦,下⾯的图⽚是该盒⼦的具体展开。
是Bi-LSTM模型的隐藏状态值,其中T表⽰所输⼊的句⼦的长度,也就是单词的个数。因为每预测/⽣成⼀个y值,都需要计算所输⼊的句⼦中各个单词对该预测值的贡献程度,所以,在上图中,将跟1到T每⼀个时刻的a值拼接,然后通过Den和Softmax函数,得到每⼀个输⼊的单词的权重(0-1之间),最后求加权平均,获取最后的结果,其中t表⽰第t个输出的y值。
3. 具体使⽤
下⾯使⽤具体的数据来讲解注意⼒模型。
我们希望有⼀个模型能够做下⾯所⽰的转换:
将格式不确定的⽇期⽐如"the 29th of August 1958", “03/30/1968”, “24 JUNE 1987"转换成固定格式的⽇期"1958-08-29”,“1968-03-30”, “1987-06-24”,也就是“yyyy-mm-dd”。更过的数据例⼦有:
a ,a <1><2>,a <T >x S <t −1>context t
(‘9 may 1998’, ‘1998-05-09’),
(‘10.09.70’, ‘1970-09-10’),
(‘4/28/90’, ‘1990-04-28’),
大蒜怎么种植(‘thursday january 26 1995’, ‘1995-01-26’),
(‘monday march 7 1983’, ‘1983-03-07’),
(‘sunday may 22 1988’, ‘1988-05-22’),
(‘tuesday july 8 2008’, ‘2008-07-08’),
(‘08 p 1999’, ‘1999-09-08’),
(‘1 jan 1981’, ‘1981-01-01’),
(‘monday may 22 1995’, ‘1995-05-22’)]
在我们的数据集中,最长的输⼊句⼦X不⼤于30,⽽输出值Y的长度为10。并且表⽰Y的只有11种不同的字母。结合上图和数据集,我们下⾯给出各个张量的维度值:
输⼊的句⼦长度为30,Bi-LSTM⼀个⽅向的隐藏状态a的维度为(m,32),所以两个不同⽅向的a1,a2叠加起来之后的维度为
a(m,64),其中m表⽰同时输⼊模型的句⼦条数,相对于batch或者mini batch⽽⾔。上图中上⾯⼀个LSTM的隐藏状态s的维度为(m,64)。concatenate长⽅形中的输出值的维度为(m,30,128),是a和s的在最后⼀个维度拼接的结果。
感谢的作文>创卫工作实施方案当concatenate的输出值经过两个Den函数之后(第⼀个输出节点为10,第⼆个为1,上图只显⽰了⼀个Den),结果的维度由(m,30,128)变为(m,30,10)再变为(m,30,1).
在使⽤求和公式计算加权平均值context的时候,的维度为(m,30,1),⽽的维度为(m,30,64),结果的维度为(m,1,64)。因为和在第⼆个维度进⾏点乘运算,两个向量的点乘的结果为⼀个数字。和的第三维度不⼀样,⼀个是1,⼀个是64,但是点乘运算不是作⽤在给该维度,所以,使⽤了python的⼴播机制。上⾯⼀个的隐藏变量c的维度为(m,64)
通过post-attention LSTM上⾯的softmax之后,再次经过了⼀个Den函数,其输出节点为11,所以,输⼊LSTM数据的维度为(m,1,64),将LSTM的s(m,64)状态值输⼊⼀个Den(输出节点个数为11)中得到y值,使得最后的y的维度为
(m,11)。
下⾯是具体的代码实现,使⽤到了Tensorflow和Keras框架。完整的源码见⽂末:
根据Bi-LSTM的隐藏状态值a和LSTM的s来求解的值。因为s_prev的维度是(m,64),所以我们使⽤RepeatVector函数将其维度变为(m,30,64),然后跟a拼接。代码中的a表⽰Bi-LSTM从1到T时刻所有的中间状态。a <t ,t >′a <t >′a <t ,t >′a <t >′a <t ,t >′a <t >′context t