美文网首页
序列建模(六):Attention思想

序列建模(六):Attention思想

作者: emm_simon | 来源:发表于2020-01-30 15:36 被阅读0次

    [参考link]
    [参考link]
    [参考link]
    本篇属于个人理解、意识流瞎bb,不保证正确,各位看官随便看看就好~

    场景 论文 Q、K、V关系 注释
    问答QA Key-Value Memory Network {Q}\neq{K}\neq{V} Q表示Question,是一句话;
    K表示一个关键词;
    V是与该关键词相对应的答案
    机器翻译 NMT_BahdanauAttention {Q}\neq({K} = {V}) Q表示Output Sentence中的word\_y_i,是目标语言的一个词;
    K=V表示Input Sentence中的word\_x_i,是源句语言的一个词
    Transformer_Self-Attention {Q} = {K} = {V} {Q}、({K}={V})表示一个Sentence中的各个word

    -1- Attention机制的本质思想

    在了解过传统Attention机制中对Input Sentence和Output Sentence中各word之间的匹配prob计算、Key-Value Memory Network中对Q、K、V的定义以及Q、K匹配度的计算之后,我们自然而然地就可以对Attention机制做进一步的抽象,得到更易懂的Attention机制的本质思想:


    Attention机制的本质思想.png

    在传统Encoder-Decoder + Attention_Model 的架构中,如果把Output Sentence中的每个word_y看作是query,把Input Sentence中的每个word_x看作是key,Attention_Model计算得到的各个word_y和各个word_x之间的匹配prob,就可以被视作Key-Value Memory Network中Q和K之间的匹配度。(个人理解,不保证正确。。。)

    得到匹配prob/attention_weights/匹配度之后,会有一个加权求和操作:
    在传统Encoder-Decoder + Attention_Model 的架构中,就是在计算对标word\_y_i的每个Context Vector \vec{c_i}的时候,是\vec{c_i}={\sum_{j=1}^{Tx} \alpha_{ij}h_j},其中\alpha_{ij}就是上面说的匹配度,然后就可以把\vec{c_i}传入Decoder计算出word_y了;
    在Key-Value Memory Network中,就是在计算对标每个Question的output向量\vec{o}的时候,是\vec{o}={\sum_{i=1}^N} (p_{h_i} * A · \Phi_V(v_{h_i})),其中p_{h_i}就是上面说的匹配度,然后就可以根据\vec{o}计算出answer了。

    举个机器翻译的例子,在计算Attention的过程中,Key和Value合二为一,指向的是同一个东西,即Input Sentence中每个单词word_x对应的语义编码,也看出这种能够体现本质思想的结构。

    当然,Attention从概念上仍可以被理解为从大量信息中筛选出少量重要信息的思路。筛选重要信息的过程体现在权重系数的计算上,权重越大越聚焦于其对应的Value值上,即权重代表了信息的重要性,而Value是其对应的信息。

    -2- Attention机制的计算步骤拆解

    Attention计算过程.png

    至于Attention机制的具体计算过程主要分为:
    *根据Query和Key计算权重系数(有softmax归一化处理),
    *根据权重系数对Value进行加权求和。
    这样,可以将Attention的计算过程抽象为如图10展示的三个阶段。

    -2.1- 计算Query和Key的匹配度

    在计算Query和某个Key_i的相似度or匹配度的时候,可以选用多种函数来计算,常用的计算方式有:向量点积、向量Cosine相似性、再引入额外的神经网络来求值:


    计算q、k匹配度.png
    -2.2- 对Value加权求和

    将上一步计算得到的Query和各个Key_i的匹配度与对应Value_i进行加权求和:


    对v加权求和.png

    计算得到的Attention本质上是对Value_i的加权求和,向量维度也和Value_i相同。

    通过以上两步的计算,就可以求出对标\vec{q}\vec{Attention}向量了。目前绝大多数的注意力机制的计算方法都可以抽象为上述步骤。

    -3- Self Attention

    有了以上对Attention本质思想的梳理,Self-Attention就很好理解了。Self-Attention不再做Output Sentence的word_y和Input Sentence的word_x之间的匹配度计算,而是对一个Sentence中的各个词做句子内部的相关性计算。Self Attention的计算过程和上述的传统Attention一样,只不过计算对象只选择一个Sentence内部的各个word。

    一个很自然的问题是:通过Self Attention到底学到了哪些规律或者抽取出了哪些特征呢?或者说引入Self Attention有什么好处呢?


    句法特征:有一定距离的短语结构
    语义特征:its的指代对象Law

    上面两张图是transformer论文里,Self Attention在同一个英语句子内单词间产生的联系可视化表示。可以看出,Self Attention可以捕获同一个句子中单词之间的一些句法特征或者语义特征

    可以看出,Self Attention相比RNN或LSTM,更容易捕获句子中长距离的相互依赖的特征。对于RNN或LSTM,需要依次序进行序列计算,考虑到RNN结构的健忘性,相对较远距离的相互依赖的特征难以被模型捕获到。但是Self Attention在计算过程中会直接将句子中任意两个单词的联系通过一个计算步骤直接联系起来,所以远距离依赖特征之间的距离被极大缩短,有利于有效地利用这些特征。

    除此外,Self Attention对于增加计算的并行性也有直接帮助作用。这是为何Self Attention逐渐被广泛使用的主要原因。

    相关文章

      网友评论

          本文标题:序列建模(六):Attention思想

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