NLP中LSTM 的attention 机制的应用讲解

文章转载:

https://www.cnblogs.com/dllearning/p/7834018.html

 

pdf 版的链接 :https://pan.baidu.com/s/1bkAnCNRvmGzg8fLeIdzHJA

 

1.为什么要使用attention

由于encoder-decoder模型在编码和解码阶段始终由一个不变的语义向量C来联系着,编码器要将整个序列的信息压缩进一个固定长度的向量中去。这就造成了 (1)语义向量无法完全表示整个序列的信息,(2)最开始输入的序列容易被后输入的序列给覆盖掉,会丢失许多细节信息。在长序列上表现的尤为明显。

 

 

 

2.怎么实现attention机制

 

 

 

 

 

 

 

 

 

        

相比于之前的encoder-decoder模型,attention模型最大的区别就在于它不在要求编码器将所有输入信息都编码进一个固定长度的向量之中。相反,此时编码器需要将输入编码成一个向量的序列,而在解码的时候,每一步都会选择性的从向量序列中挑选一个子集进行进一步处理。这样,在产生每一个输出的时候,都能够做到充分利用输入序列携带的信息。而且这种方法在翻译任务中取得了非常不错的成果。

下图为seq2seq模型加入了Attention注意力机制 

 

 

 

 

现在定义条件概率:

 

注释 这里的参数ci 语义向量的子集  si 是隐藏层的输出 yi-1是我们的进行上一个单词的输出

上式 s表示解码器 i 时刻的隐藏状态。计算公式为:

 

 

关键问题是语义向量 C 怎么得到?

C 是由编码时的隐藏向量序列(h1,…,hTx)按权重相加得到的。

 

将隐藏向量序列按权重相加,表示在生成第j个输出的时候的注意力分配是不同的。αij的值越高,表示第i个输出在第j个输入上分配的注意力越多,在生成第i个输出的时候受第j个输入的影响也就越大。

这意味着在生成每个单词Yi的时候,原先都是相同的中间语义表示C会替换成根据当前生成单词而不断变化的Ci理解AM模型的关键就是这里,即由固定的中间语义表示C换成了根据当前输出单词来调整成加入注意力模型的变化的Ci

 

 

si−1 先跟每个h分别计算得到一个数值,然后使用softmax函数得到i时刻的输出在Tx个输入隐藏状态中的注意力分配向量。这个分配向量也就是计算ci的权重。

 

 

图4.   分配概率(权值)的计算

图4 显示的是Attention模型在计算αij 的概率分配过程。

对于采用RNN的Decoder来说,如果要生成yi单词,在时刻i,我们是可以知道在生成Yi之前的隐层节点i时刻的输出值Hi的,而我们的目的是要计算生成Yi时的输入句子单词“Tom”、“Chase”、“Jerry”对Yi来说的注意力分配概率分布,那么可以用i时刻的隐层节点状态Hi去一一和输入句子中每个单词对应的RNN隐层节点状态hj进行对比,即通过函数F(hj,Hi)来获得目标单词Yi和每个输入单词对应的对齐可能性,这个F函数在不同论文里可能会采取不同的方法,然后函数F的输出经过Softmax进行归一化就得到了符合概率分布取值区间的注意力分配概率分布数值。图4显示的是当输出单词为“汤姆”时刻对应的输入句子单词的对齐概率。绝大多数AM模型都是采取上述的计算框架来计算注意力分配概率分布信息,区别只是在F的定义上可能有所不同。

 

 

 

 

 

 

 

 

 

 

 

这里面的si 的求解由来参照下图:

Si-1  为前一个隐藏状态的类似h ;yi-1类同上一个单词 ci 就是当前单词与前面的隐藏层的隐含状态的权重系数向量  线性函数f输出;

这里面yi 的求解由来参照下图:

 

Yi-1 上一个单词的输出 si 当前的隐藏层输出 ci 同上  非线性函数g输出;

 

 

 

 

 

 

 

 

 

3.attention机制的类别

Attention机制大的方向可分为 Soft Attention 和 Hard Attention 。

Soft Attention通常是指以上我们描述的这种全连接(如MLP计算Attention 权重),对每一层都可以计算梯度和后向传播的模型;不同于Soft attention那样每一步都对输入序列的所有隐藏层hj(j=1….Tx) 计算权重再加权平均的方法,Hard Attention是一种随机过程,每次以一定概率抽样,以一定概率选择某一个隐藏层 hj*,在估计梯度时也采用蒙特卡罗抽样Monte Carlo sampling的方法。

 

 

图5. Soft Attention 模型

 

 

图6. Hard Attention

 

 

 

 

 

 

 

参考资料:http://blog.csdn.net/u014595019/article/details/52826423

http://blog.csdn.net/wuzqChom/article/details/75792501

http://blog.csdn.net/mpk_no1/article/details/72862348

http://www.deepnlp.org/blog/textsum-seq2seq-attention/

http://blog.csdn.net/malefactor/article/details/50550211

http://blog.csdn.net/xbinworld/article/details/54607525

 

你可能感兴趣的:(python)