浅谈seq2seq中Attention机制

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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Seq2Seq模型是一种用于序列到序列任务的神经网络模型,它由Encoder和Decoder两部分组成。Encoder将输入序列编码为一个固定长度的向量表示,而Decoder则根据这个向量表示生成输出序列。\[1\] 在Seq2Seq模型Attention机制被引入以解决长序列的信息丢失问题。Attention机制允许Decoder在生成每个输出时,根据输入序列的不同部分给予不同的注意力权重,从而更好地捕捉输入序列的相关信息。\[1\] Seq2Seq模型主要有三种实现方式:基于RNN的模型、基于CNN的模型和完全依靠Attention的模型。基于RNN的模型通常使用LSTM结构,并结合Attention机制来处理输入序列。基于CNN的模型则完全使用CNN来构建Seq2Seq模型,如FaceBook的fairseq。而完全依靠Attention的模型,如谷歌的transformer,通过自注意力机制来实现序列到序列的转换。\[2\]\[3\] 总结来说,Seq2Seq模型结合Attention机制可以有效地处理序列到序列任务,而不同的实现方式可以根据具体的应用场景选择合适的模型结构。 #### 引用[.reference_title] - *1* *2* *3* [Seq2Seq模型及Attention机制](https://blog.csdn.net/weixin_38937984/article/details/101111619)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值