当前位置:   article > 正文

浅谈seq2seq中Attention机制_kqv真实含义

kqv真实含义

attention 机制概要


  Attention mechanism,恩,也就是他的字面意思,我们对序列进行注意力分配,也就是使重要的信息更加的突出,不明显的信息被弱化或者忽略。这个机制具体怎么体现的呢?接下来我们来分析一下attention机制的原理。

  在理解atention之前,最好对encoder-decoder框架有一点了解,因为,目前很多的attention机制依附于这个框架来实现。我们这里讲解的seq2seq中的注意力机制是以rnn单元构成的encoder-decoder框架的翻译模型来进行分析,encoder-decoder我们可以理解为将序列经过encoder之后压缩为一个定长的向量,我们再将这个向量传输给decoder来进行解码。这样子的缺点是:

  1. 当我们的序列很长的时候,这个向量的表示效果会很差。
  2. 是在输入输出的时候长度不确定性,也就是输入的一个词可能对应输出几个词等。而且采用一样的权重,这样效果会很差。

  因此,我们需要一个更好的表示,我们在decoder的每一个rnn cell中,我们取出了encoder所有隐藏层的输出,并同时给予不同的权重,经过映射传给decoder的当前rnn cell,(参看下图)这就是简单的attention机制。并且,Attention本身可以做为一种对齐关系,解释翻译输入/输出句子之间的对齐关系。那么这个权重怎么计算呢?


在这里插入图片描述


计算分析


  和论文一样采用倒序的方式分析,首先我们定义一个条件概率模型:
p ( y i ∣ y 1 , . . . , y i − 1 , x ) = g ( y i − 1 , s i , c i ) (1) \bm{p(y_i|y_1, . . . , y_{i−1}, x) = g(y_{i−1}, s_i, c_i) \tag1} p(yiy1,...,yi1,x)=g(yi1,si,ci)(1)
  这里 s i s_i si是decoder的不同时步 rnn cell 的 hidden state, c i c_i ci是一个context vector 或者我们可以叫做 attention vector。我们在来看 s i s_i si :

s i = f ( s i − 1 , y i − 1 , c i ) (2) \mathbf{s_i = f(s_{i−1}, y_{i−1}, c_i) \tag2} si=f(si1,yi1,ci)(2)
  当前状态的 s i s_i si 由上一个状态的 hidden state ( s i − 1 s_{i-1} si1) 和 当前的context vector 共同决定。我们再来看 c i c_i ci 怎么得到:
c i = ∑ j = 1 T x α i j h j (3) \bm{c_i =∑_{j=1}^{T_x}α_{ij}h_j\tag3} ci=j=1Txαijhj(3)
  其中,i 表示decoder端的第i个词, h j h_j hj表示encoder端的第j个词的隐向量, a i j a_{ij} aij表示encoder端的第j个词与decoder端的第i个词之间的权值, a i j a_{ij} aij的计算公式为:

α i j = e x p ( e i j ) ∑ k = 1 T x e x p ( e i k ) (4) \bm{α_{ij} =\frac{exp (e_{ij} )}{∑_{k=1}^{T_x} exp (e_{ik})}\tag4} αij=k=1Txexp(eik)exp(eij)(4)
根据这里 a i j a_{ij} aij的取值不同,可以分为不同的attention 机制:

  1. 之前我们讨论的attention,对 a i j a_{ij} aij分配一个0到1的值,这就是soft attention;
  2. a i j a_{ij} aij的取值0-1化,这样就得到了hard attention;
  3. 只考虑窗口内的隐藏值,进行softmax,窗口外的权值为0,这样就是local attention了;
  4. 。。。。。。。。。。。。。。。。。。

e i j e_{ij} eij的计算如下:
e i j = a ( s i − 1 , h j ) (5) \bm{e_{ij} = a(s_{i−1}, h_j )\tag5} eij=a(si1,hj)(5)

a a a 有以下三种:

  1. 点积 : e i j = s i − 1 h j e_{ij} = s_{i−1}h_j eij=si1hj
  2. 乘法: e i j = s i − 1 w h j e_{ij} = s_{i−1}w h_j eij=si1whj
  3. 加法 : e i j = v T t a n h ( w 1 s i − 1 + w 2 h j ) e_{ij} = v^Ttanh(w_1s_{i−1}+ w_2h_j) eij=vTtanh(w1si1+w2hj)

  note:第二个W矩阵是训练得到的参数,维度是d2 x d1,d2是s的hidden state输出维数,d1是hi的hidden state维数,其中,W1 = d3xd1,W2 = d3*d2,v = d3x1 ,d1,d2,d3分别为h和s还有v的维数,属于超参数。

  我们把 e i j e_{ij} eij 叫做 匹配度 或者 attention score ,这个匹配度是将 encoder 的每一个rnn cell 的 h t h_t ht 和 decoder 当前的 rnn cell的 h t h_t ht 通过 映射 a a a 得到,
在这里插入图片描述


KQV理解


Attention函数的本质可以被描述为一个查询(query)到一系列(键key-值value)对的映射,如下图:
在这里插入图片描述
首先,解释一下Q,K,V分别代表的含义:

Q:Decoder中RNN cell 的输出h;
K:Encoder中每个 time_step的输出h;
V:K=V;

在计算attention时主要分为三步,如下:

  1. 将query和每个key进行相似度计算得到权重,常用的相似度函数有点积,拼接,感知机等;
  2. 一般是使用一个softmax函数对这些权重进行归一化;
  3. 最后将权重和相应的键值value进行加权求和得到最后的attention vector。目前在NLP研究中,key和value常常都是同一个,即key=value。

在这里插入图片描述

参考文献

https://zhuanlan.zhihu.com/p/47063917
https://arxiv.org/pdf/1409.0473.pdf
https://blog.csdn.net/qq_41058526/article/details/80578932

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/870011
推荐阅读
相关标签
  

闽ICP备14008679号