Datawhale《深度学习-NLP》Task9- Attention原理

Attention-based Model其实就是一个相似性的度量,当前的输入与目标状态越相似,那么在当前的输入的权重就会越大,说明当前的输出越依赖于当前的输入。严格来说,Attention并算不上是一种新的model,而仅仅是在以往的模型中加入attention的思想,所以Attention-based Model或者Attention Mechanism是比较合理的叫法,而非Attention Model。 
没有attention机制的encoder-decoder结构通常把encoder的最后一个状态作为decoder的输入(可能作为初始化,也可能作为每一时刻的输入),但是encoder的state毕竟是有限的,存储不了太多的信息,对于decoder过程,每一个步骤都和之前的输入都没有关系了,只与这个传入的state有关。attention机制的引入之后,decoder根据时刻的不同,让每一时刻的输入都有所不同。
 

è¿éåå¾çæè¿°

è¿éåå¾çæè¿°

è¿éåå¾çæè¿°

深度解析:

è¿éåå¾çæè¿°

è¿éåå¾çæè¿°

è¿éåå¾çæè¿°

1.首先‘机器学习’经过word embedding之后变成词向量,‘机器学习’就相当于一个矩阵了,每个词都相当于一个向量,上图中的h0,h1,h2,…..这些都是RNN对词向量进行编码的隐状态,这些隐状态是什么呢?有什么作用?结合之前的RNN和LSTM的网络的结构的输入和输出可以知道,从图2 中就可以看出单层的RNN中的hidden_state 和output是一样的。在LSTM中的输出的st包含了hidden_state 和 cell_state, cell_state是决定了哪些信息是保留的,哪些信息是遗忘掉的,其中真正用于循环的状态 s_t 其实是 (c_t, h_t) 组成的 tuple(就是 TensorFlow 里的 LSTMStateTuple,当然,如果你选择不用 tuple 表示 LSTM 的内部状态,也可以把 c_t 和 h_t 拼起来,合起来拼成一个 Tensor,这样的话它的状态就是一个 Tensor 了,这时做别的计算可能会方便一些,这个其实就是TensorFlow 里的 state_is_tuple 这个开关。),而输出y_t 仅仅是 h_t(例如网络后面再接一个全连接层然后用softmax 做分类,这个全连接层的输入仅仅是 h_t,而没有c_t),这时就可以看到区分 RNN 的输出和状态的意义了。

2.Lee 老师里面的h1,h2,h3,h4是RNN隐层的输出向量,RNN隐层的hidden_states和output其实是一样的,所以h1,h2,h3,h4,可以说是不同时间步的编码向量,

3.初始化解码器端的隐含状态(z0,initial_state),将z0与encoder端的h0,h1,h2,h3分别做match计算,得到每一个timestep的 match score,然后利用softmax 将match score 归一化到(0,1),那么我们可以根据归一化的match score 计算出加权向量和,即c0,然后利用c0和z0作为RNN的输入计算得到z1。

3. 模型分类

3.1 Soft/Hard Attention

soft attention:传统attention,可被嵌入到模型中去进行训练并传播梯度

hard attention:不计算所有输出,依据概率对encoder的输出采样,在反向传播时需采用蒙特卡洛进行梯度估计

3.2 Global/Local Attention

global attention:传统attention,对所有encoder输出进行计算

local attention:介于soft和hard之间,会预测一个位置并选取一个窗口进行计算

3.3 Self Attention

传统attention是计算Q和K之间的依赖关系,而self attention则分别计算Q和K自身的依赖关系。具体的详解会在下篇文章给出~

4. 优缺点

优点:

  • 在输出序列与输入序列“顺序”不同的情况下表现较好,如翻译、阅读理解
  • 相比RNN可以编码更长的序列信息

缺点:

  • 对序列顺序不敏感
  • 通常和RNN结合使用,不能并行化

5. TF源码解析

顾秀森:Tensorflow源码解读(一):AttentionSeq2Seq模型​zhuanlan.zhihu.com

 

HAN

NAACL2016论文Hierarchical Attention Network for Document Classification利用分层的注意力机制来构建文本表示向量并用于分类任务,效果很好,作者个人主页http://www.cs.cmu.edu/~zichaoy/。

HAN模型就是分层次的利用注意力机制来构建文本向量表示的方法。

文本由句子构成,句子由词构成,HAN模型对应这个结构分层的来构建文本向量表达;

文本中不同句子对文本的主旨影响程度不同,一个句子中不同的词语对句子主旨的影响程度也不同,因此HAN在词语层面和句子层面分别添加了注意力机制;

分层的注意力机制还有一个好处,可以直观的看出用这个模型构建文本表示时各个句子和单词的重要程度,增强了可解释性;

模型结构:

这篇论文里面使用双向GRU来构建句子表示和文本表示,以句子为例,得到循环神经网络中每个单元的输出后利用注意力机制整合得到句子向量表示(不使用attention时,一般会使用MAX或AVE),过程如下:

按照文中说法,先经过一层MLP得到隐层表示,然后与word level context vector 做点积,各词语得到的结果再经过softmax函数后的结果就是各自的重要程度,即,最后加权和得到句子表示。文本向量的构建与此一致,之后经过全连接层和softmax分类。

上述就是整个HAN的结构了,其中有一点没太理解,的实际意义到底是什么?文中说是word level context vector ,翻译过来就是词语级别的上下文向量0_0,还一个句子里的所有词语共享。文中解释如下图,的内在含义是表示哪个词语是重要的,然后每个词语与它做点积,看看在该向量方向上的乘积大小,貌似好像也说得通。如果是这样,那还有没有其他的用法?抽时间看看文中提到的记忆网络中的用法后再理解一下。

 

 

 

1. https://blog.csdn.net/baidu_36161077/article/details/81066001

2. https://blog.csdn.net/qq_22194315/article/details/85234285

3. https://blog.csdn.net/Torero_lch/article/details/82588758

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值