美文网首页
图解Attention

图解Attention

作者: Jarkata | 来源:发表于2021-05-25 16:12 被阅读0次

    本文为转载,原文链接: https://wmathor.com/index.php/archives/1450/

    关于Attention的公式推导,我在这篇文章讲过了,本篇文章主要以图示的方式进行讲解

    首先我们需要将s_0和所有的h_i(i=1,...,m)计算一个"相关性",比方说计算 s_0h_1之间的相关性计算得 \alpha_1 = align(h_1,s_0)

    计算得到m个相关性\alpha_i之后,将这些值与h_i进行加权平均,即
    c_0=\sum_{i=1}^m \alpha_i h_i=\alpha_1h_1+···\alpha_mh_m

    我们可以直观的感受一下这样做有什么作用,对于那些值比较大的 \alpha_k,最终c_0中也会有一大部分来自于h_kc_0 实际上考虑到了所有时刻的 h,只不过对于某些时刻可能关注的更多,而某些时刻关注的更少,这就是注意力机制。

    之后将s_0,c_0,x'_1作为t=0时刻Decoder的输入,计算得到s_1,然后再计算s_1与所有h_i(i=1,...,m)之间新的相关性\alpha_i

    同样的,将新计算得到的\alpha_ih_i做加权平均,得到新的 context vector c_1

    重复上述步骤,直到 Decoder 结束


    到这里实际上整个 Seq2Seq (with Attention) 就讲完了,但是其中还有一些细节,比方说,align() 函数怎么设计?c_i如何应用到Decoder中?下面一一解释

    (1) align()函数如何设计?

    有两种方法。

    • 在最初的论文,即 Bahdanau 的论文中,\alpha_i的计算公式为:
      \boldsymbol{e}_{t't} = \boldsymbol{v}^\top \tanh(\boldsymbol{W}_s \boldsymbol{s}_{t'-1} + \boldsymbol{W}_h \boldsymbol{h}_t),
      \alpha_{t' t} = \frac{\exp(e_{t' t})}{ \sum_{k=1}^T \exp(e_{t' k}) }
      其中vW_sW_h和编码器与解码其两个循环网络中的各个权重与偏移项以及嵌入层参数等都是需要同时学习的模型参数。

    如下图所示


    • 现在比较主流的,同时也是 Transformer 结构使用的方法(构造Q、K,利用点积)如下所示:


    (2) c_i如何应用到Decoder中?

    见下图:


    That is :
    s_t = tanh(W_{xs}x_t+W_{ss}s_{t-1}+W_{cs}c_{t-1} +b)

    相关文章

      网友评论

          本文标题:图解Attention

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