Attention的常见做法:
第一步:S=F(Q,K)
第二步:A=Softmax(S)
第三步:multiply(A,V)
第一步是个相似度的计算,常见的相似度计算有点乘,拼接,感知机。第二步是搞成概率的样子,就是相加为1,第三步是一个点乘就是让每个部分乘上他的权重然后得到最后Attention输出的值。
TensorFlow中两个实现:
tf.nn.softmax(S)
tf.multiply(A, V),#表示两个同维矩阵对应位置处相乘,乘后维度不变
下面说下原理:
1.为什么需要attention?
语音识别或机器翻译领域传统Encoder-Decoder方案遇到性能瓶颈。传统Encoder直接将所有输入(x1, …,x4)编码至固定向量c,再通过decoder进行解码,该思路缺陷显而易见,每个输入没有显示的权值表示,导致每个输入的贡献相当。
图1. 传统Encoder-Decoder框架
基于此缺陷,设计出带attention的Encoder-Decoder框架,如图2。这里面用C1,C2和C3代替了原始的C,Ci是输入的不同组合构成的,也就是说,Decoder不同时刻关注输入的组合是不一样的。例如解码Y1时只需要关注x1和x2,x3和x4的权重可以为0。
图2: 引入attention的Encoder-Decoder框架
2. 什么是attention?
2.1 常规思路理解
图3. 基于attention计算图示
target预测的计算如图3所示,公式如下:
其中si表示Decoder中时刻i的隐状态,计算公式如下 :
其中ci采用对Encoder层的所有隐状态h加权累和,attention思想在此体现。
其中aij是eij的softmax输出,eij是一个对齐模型,表征decoder的i状态和encoder的j状态的相关性,计算公式如下
对齐模型eij的计算方式有多种,不同的计算方式表示不同的attention模型。
进一步,将对齐模型表示成score(ht,hs),decoder层的隐层向量hs和encoder层的隐层向量hs的对齐模型,常见计算方式有点乘dot,权重网络映射general,以及concat映射。
2.2 K-V-Q思路理解
图4. key-value-query图示
将encoder模块的source设计成<key,value>的键值对形式,对于语音识别任务,key和value是相同的,decoder模块的query和key进行逐个计算相似度,生成权重系数,再乘以value就获得最终的attention value,更细致的步骤如图5所示。
阶段一,F(Q,K)计算Query和Key的相似度s;阶段二,进行softmax归一化生成权重attention系数a;阶段三,attention系数同value相乘累加获得最终的Attention value。
图5. Attention机制的另一种理解