浅谈seq2seq中Attention机制

Seq2Seq中Attention机制详解
本文围绕Seq2Seq中的Attention机制展开。先介绍其概要,指出它能对序列进行注意力分配,依附于encoder - decoder框架,可解决原框架的不足。接着进行计算分析,给出条件概率模型等公式,还介绍不同类型的Attention机制。最后阐述KQV的含义及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(yi∣y1,...,yi−1,x)=g(yi−1,si,ci)(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)
  这里sis_isi是decoder的不同时步 rnn cell 的 hidden state,cic_ici是一个context vector 或者我们可以叫做 attention vector。我们在来看 sis_isi :

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

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

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

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

aaa 有以下三种:

  1. 点积 : eij=si−1hje_{ij} = s_{i−1}h_jeij=si1hj
  2. 乘法: eij=si−1whje_{ij} = s_{i−1}w h_jeij=si1whj
  3. 加法 :eij=vTtanh(w1si−1+w2hj)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的维数,属于超参数。

  我们把 eije_{ij}eij 叫做 匹配度 或者 attention score ,这个匹配度是将 encoder 的每一个rnn cell 的 hth_tht 和 decoder 当前的 rnn cell的 hth_tht 通过 映射 aaa 得到,
在这里插入图片描述


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.youkuaiyun.com/qq_41058526/article/details/80578932

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值