Attention入门笔记(一)

Attenetion

       提到attention机制,就得先对他的使用对象进行说明,讨论Attention机制提出的原因和解决的问题。所以我在这里对一些前置知识简单介绍一下。

LSTM和GRU

RNN

       首先说一下循环神经网络(RNN),它现在广泛的运用于各种序列处理的场景下。因为对于DNN来说,它无法感知时间序列上的变化,因此在RNN的设计中,神经元的输出会在下一个时间段直接作用于自身。RNN一般被看作一个在时间上传递的神经网络,深度代表着时间。



LSTM

       类似于DNN,RNN依旧存在梯度消失和梯度爆炸的问题,因此LSTM应运而生。



       如上图所示,LSTM采用了两个传递状态,其中c^t的变化幅度比较小,h^t类似于RNN中的h^t。具体的状态传递如下图:



       其中z^f状态对上个状态进行筛选,选择保留哪些特征。然后,z^i对当前输入选择性筛选记忆,作为选择门控控制。最终,z^o控制哪些特征作为当前状态输出,并对上个阶段的c^o进行放缩。

       所以,简单来说LSTM选择性的选择哪些需要记忆,哪些可以忘记。但是同样,这样也加入了更多的参数,加大硬件负担。因此,我们下面介绍一下参数更少的GRU。

GRU

       GRU参数少的重要原因是它的输入输出和RNN相同,没有增加多余的传递状态。



       图中h’是h^(t-1)’和x^t拼接再通过tanh激活函数缩放到(-1~1)。因此,GRU仅仅用一个门控同时进行遗忘上一轮并记忆本轮。最终表达式如下:



       z规定了对于上一轮特征遗忘的权重。

Attention

       Attention本质就是对于一个序列的每个单词编码一个权重,最终和学习得到的注意力权重线性组合用于下个词的预测。其实就是告诉模型哪些地方是重点,哪些可以略过。

       对于每个语素的注意力权重,通过RNN的训练得到。是Aattention的核心,不同的attention方法主要用不同的方法学习该权重。具体的比如:多层感知机、Bilinear、Dot Product、scaled-dot Product。有兴趣的可以自行深入搜索学习。

self-attention

       self-attention将句子中的每个词都能与句子中任意距离的其他词建立一个敏感的关系。也就是说self-attention是在一个序列内部做attention计算,目的是了解句子内部的依赖关系,捕捉句子结构特征。



Multi-head attention

       Multi-head attention在self-attention的基础上更进一步,通过多个权重矩阵,从多个角度得到权重向量,按列拼接。当然,拼接时要做维度处理。



后续

       除了这些简单介绍外,还有很多行之有效的复杂方法没有提及,比如global attention,local attention,hard attention和hierarchical attention。后续尽量挑时间仔细阅读论文,这一部分在论文笔记里再深入。

参考链接:1.https://www.leiphone.com/category/yanxishe/ZwcjmiJ45aW27ULB.html
2.https://zhuanlan.zhihu.com/p/32085405
3.https://zhuanlan.zhihu.com/p/32481747
4.https://zhuanlan.zhihu.com/p/46313756

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2015-2023 Tritonchen
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

微信