美文网首页
Seq2Seq中的Attention机制

Seq2Seq中的Attention机制

作者: 一位学有余力的同学 | 来源:发表于2021-07-02 17:14 被阅读0次

    Bahdanau D , Cho K , Bengio Y . Neural Machine Translation by Jointly Learning to Align and Translate[J]. Computer Science, 2014.

    1、什么是Attention机制

    注意力,即重点关注某一局部信息。比如一张大合照,我们肯定是首先关注照片中的人而不是背景的花花草草。再比如在进行句子的情感识别的时候,我们通常需要关注某几个关键词,以及词语间的前后文关系,“快乐”,“悲伤”,“愤怒”,等等。因此:

    • 注意力机制可以决定输入的哪一部分更值得关注;
    • 注意力可以只提取出关键特征

    2、为什么要引入Attention机制?

    根据通用近似定理,前馈网络和循环网络都有很强的能力。但为什么还要引入注意力机制呢?

    • 计算能力的限制:当要记住很多“信息“,模型就要变得更复杂,然而目前计算能力依然是限制神经网络发展的瓶颈。
    • 优化算法的限制:虽然局部连接、权重共享以及pooling等优化操作可以让神经网络变得简单一些,有效缓解模型复杂度和表达能力之间的矛盾;但是,如循环神经网络中的长距离以来问题,信息“记忆”能力并不高。可以借助人脑处理信息过载的方式,例如Attention机制可以提高神经网络处理信息的能力 [1]

    3、Attention的实现原理[2]

    3.1 权重

    实现Attention的原理其实很简单,只需要对输入加上权重就好,如Fig.1所示,这有点像Photoshop中的蒙版,白色的表示模型需要着重关注的对象,黑色的区域可以暂时不需要关注,因为它对我们的目标没有帮助。


    Fig.1 Attention

    以Seq2Seq模型为例,如下图所示。Seq2Seq的Encoder的最后一个状态的输出h_m是Decoder的初始隐藏状态输入s_0。我们计算Decoder的初始隐藏状态s_0与Encoder的每一个状态的输出h_1, h_2,..,h_{m}的相关性,结果记作\alpha _i,命名为权重weight\alpha越大,相关性也就越大,反之相关性越小,记作:
    Weight: \alpha _i=align(h_i,s_0)

    Fig.2 Seq2Seq
    因为有m个隐藏状态,所以共有m\alpha,所有\alpha均为0到1之间的数据,且\alpha_1+\alpha_2+...+\alpha_m=1

    原论文中\alpha是根据如下计算的,具体请参考Fig.3:

    1. h_is_0拼接为一个长向量;
    2. 将拼接后的向量与权值相乘并经过激活函数tanh
    3. 将激活函数的输出与v相乘,得到一个数
    4. 将所有计算得到的\alpha经softmax函数映射到0-1之间且和为1。
    Fig.3 alpha的计算过程

    除此之外,\alpha还有另一种计算方法,如下所示,计算步骤如Fig.4所示:

    1. 分别将h_is_0作线性映射
    2. 将线性映射之后的向量作内积
    3. Softmax归一化


      Fig.4 alpha的计算过程

    3.2 加权平均

    计算得到每一个隐藏层状态的权重\alpha_i后,与每一个状态值相乘再相加,得到新的向量Context vector c_0:
    c_0=\alpha_1h_1+...+\alpha_mh_m

    若没有attention,Decoder的第一个时刻的计算方式为:将Encoder的最后一个状态输出s_0和Decoder的第一个输入{x}'_1拼接。而现在有了attention,将权重与每一个隐藏状态相乘再相加得到了新的向量c_0,新的向量中包含整个时间序列的所有信息,所以就解决了遗忘的问题,将c_0s_0{x}'_1一起运算就得到了Decoder的第一个状态输出s_1,其计算方式如Fig.5所示。

    Fig.5
    和刚刚一样,将s_1与Encoder的所有状态h对比,计算每一个状态所占权重\alpha_i=align(h_i, s_1)虽然它们都是\alpha_1,...,\alpha_m,但与刚刚的\alpha已经不是同一个,因为刚刚的\alpha是和s_0计算得到的,而现在是s_1。也就是说,该步计算的是Encoder的隐藏状态与Decoder的第一个状态s_1的相关性。

    计算完\alpha后我们同样得到了Encoder隐藏状态的加权平均c_1

    Fig.6

    依次重复,我们可以得到加入了attention的Decoder的隐藏状态的输出,如Fig.7所示。


    Fig.7

    综上,在熟悉了如何引入attention机制之后我们来回顾一下attention是如何让模型只关注部分区域的。如Fig.8所示,这是一个Seq2Seq机器翻译模型,Decoder在翻译第一个单词的时候会回顾Encoder的所有inputs,但并不是所有的inputs都对翻译第一个单词有用,如图中所示,线越粗表明该单词对翻译结果的影响越大,可以看出,翻译I'的时候,第一个输入the对结果影响很大,agreementsigned次之,所以我们只需attention这几个单词即可。同理,翻译第二个单词accord同样要回去再看下整句话,发现只有agreement对最终的结果有影响,所以只需attentionagreement即可。

    Fig.8 How attention works

    参考:


    1. 目前主流的attention方法都有哪些

    2. Attention注意力机制

    相关文章

      网友评论

          本文标题:Seq2Seq中的Attention机制

          本文链接:https://www.haomeiwen.com/subject/yfksultx.html